123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547 |
- ((typeof self !== 'undefined' ? self : this)["webpackJsonp"] = (typeof self !== 'undefined' ? self : this)["webpackJsonp"] || []).push([["chunk-elementUI"],{
- /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/element-ui/lib/theme-chalk/index.css":
- /*!***********************************************************************************************************************************************************!*\
- !*** ./node_modules/css-loader??ref--6-oneOf-3-1!./node_modules/postcss-loader/src??ref--6-oneOf-3-2!./node_modules/element-ui/lib/theme-chalk/index.css ***!
- \***********************************************************************************************************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("var escape = __webpack_require__(/*! ../../../css-loader/lib/url/escape.js */ \"./node_modules/css-loader/lib/url/escape.js\");\nexports = module.exports = __webpack_require__(/*! ../../../css-loader/lib/css-base.js */ \"./node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"@charset \\\"UTF-8\\\";@font-face{font-family:element-icons;src:url(\" + escape(__webpack_require__(/*! ./fonts/element-icons.woff */ \"./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff\")) + \") format(\\\"woff\\\"),url(\" + escape(__webpack_require__(/*! ./fonts/element-icons.ttf */ \"./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf\")) + \") format(\\\"truetype\\\");font-weight:400;font-display:\\\"auto\\\";font-style:normal}[class*=\\\" el-icon-\\\"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:\\\"\\\\E6A0\\\"}.el-icon-ice-cream-square:before{content:\\\"\\\\E6A3\\\"}.el-icon-lollipop:before{content:\\\"\\\\E6A4\\\"}.el-icon-potato-strips:before{content:\\\"\\\\E6A5\\\"}.el-icon-milk-tea:before{content:\\\"\\\\E6A6\\\"}.el-icon-ice-drink:before{content:\\\"\\\\E6A7\\\"}.el-icon-ice-tea:before{content:\\\"\\\\E6A9\\\"}.el-icon-coffee:before{content:\\\"\\\\E6AA\\\"}.el-icon-orange:before{content:\\\"\\\\E6AB\\\"}.el-icon-pear:before{content:\\\"\\\\E6AC\\\"}.el-icon-apple:before{content:\\\"\\\\E6AD\\\"}.el-icon-cherry:before{content:\\\"\\\\E6AE\\\"}.el-icon-watermelon:before{content:\\\"\\\\E6AF\\\"}.el-icon-grape:before{content:\\\"\\\\E6B0\\\"}.el-icon-refrigerator:before{content:\\\"\\\\E6B1\\\"}.el-icon-goblet-square-full:before{content:\\\"\\\\E6B2\\\"}.el-icon-goblet-square:before{content:\\\"\\\\E6B3\\\"}.el-icon-goblet-full:before{content:\\\"\\\\E6B4\\\"}.el-icon-goblet:before{content:\\\"\\\\E6B5\\\"}.el-icon-cold-drink:before{content:\\\"\\\\E6B6\\\"}.el-icon-coffee-cup:before{content:\\\"\\\\E6B8\\\"}.el-icon-water-cup:before{content:\\\"\\\\E6B9\\\"}.el-icon-hot-water:before{content:\\\"\\\\E6BA\\\"}.el-icon-ice-cream:before{content:\\\"\\\\E6BB\\\"}.el-icon-dessert:before{content:\\\"\\\\E6BC\\\"}.el-icon-sugar:before{content:\\\"\\\\E6BD\\\"}.el-icon-tableware:before{content:\\\"\\\\E6BE\\\"}.el-icon-burger:before{content:\\\"\\\\E6BF\\\"}.el-icon-knife-fork:before{content:\\\"\\\\E6C1\\\"}.el-icon-fork-spoon:before{content:\\\"\\\\E6C2\\\"}.el-icon-chicken:before{content:\\\"\\\\E6C3\\\"}.el-icon-food:before{content:\\\"\\\\E6C4\\\"}.el-icon-dish-1:before{content:\\\"\\\\E6C5\\\"}.el-icon-dish:before{content:\\\"\\\\E6C6\\\"}.el-icon-moon-night:before{content:\\\"\\\\E6EE\\\"}.el-icon-moon:before{content:\\\"\\\\E6F0\\\"}.el-icon-cloudy-and-sunny:before{content:\\\"\\\\E6F1\\\"}.el-icon-partly-cloudy:before{content:\\\"\\\\E6F2\\\"}.el-icon-cloudy:before{content:\\\"\\\\E6F3\\\"}.el-icon-sunny:before{content:\\\"\\\\E6F6\\\"}.el-icon-sunset:before{content:\\\"\\\\E6F7\\\"}.el-icon-sunrise-1:before{content:\\\"\\\\E6F8\\\"}.el-icon-sunrise:before{content:\\\"\\\\E6F9\\\"}.el-icon-heavy-rain:before{content:\\\"\\\\E6FA\\\"}.el-icon-lightning:before{content:\\\"\\\\E6FB\\\"}.el-icon-light-rain:before{content:\\\"\\\\E6FC\\\"}.el-icon-wind-power:before{content:\\\"\\\\E6FD\\\"}.el-icon-baseball:before{content:\\\"\\\\E712\\\"}.el-icon-soccer:before{content:\\\"\\\\E713\\\"}.el-icon-football:before{content:\\\"\\\\E715\\\"}.el-icon-basketball:before{content:\\\"\\\\E716\\\"}.el-icon-ship:before{content:\\\"\\\\E73F\\\"}.el-icon-truck:before{content:\\\"\\\\E740\\\"}.el-icon-bicycle:before{content:\\\"\\\\E741\\\"}.el-icon-mobile-phone:before{content:\\\"\\\\E6D3\\\"}.el-icon-service:before{content:\\\"\\\\E6D4\\\"}.el-icon-key:before{content:\\\"\\\\E6E2\\\"}.el-icon-unlock:before{content:\\\"\\\\E6E4\\\"}.el-icon-lock:before{content:\\\"\\\\E6E5\\\"}.el-icon-watch:before{content:\\\"\\\\E6FE\\\"}.el-icon-watch-1:before{content:\\\"\\\\E6FF\\\"}.el-icon-timer:before{content:\\\"\\\\E702\\\"}.el-icon-alarm-clock:before{content:\\\"\\\\E703\\\"}.el-icon-map-location:before{content:\\\"\\\\E704\\\"}.el-icon-delete-location:before{content:\\\"\\\\E705\\\"}.el-icon-add-location:before{content:\\\"\\\\E706\\\"}.el-icon-location-information:before{content:\\\"\\\\E707\\\"}.el-icon-location-outline:before{content:\\\"\\\\E708\\\"}.el-icon-location:before{content:\\\"\\\\E79E\\\"}.el-icon-place:before{content:\\\"\\\\E709\\\"}.el-icon-discover:before{content:\\\"\\\\E70A\\\"}.el-icon-first-aid-kit:before{content:\\\"\\\\E70B\\\"}.el-icon-trophy-1:before{content:\\\"\\\\E70C\\\"}.el-icon-trophy:before{content:\\\"\\\\E70D\\\"}.el-icon-medal:before{content:\\\"\\\\E70E\\\"}.el-icon-medal-1:before{content:\\\"\\\\E70F\\\"}.el-icon-stopwatch:before{content:\\\"\\\\E710\\\"}.el-icon-mic:before{content:\\\"\\\\E711\\\"}.el-icon-copy-document:before{content:\\\"\\\\E718\\\"}.el-icon-full-screen:before{content:\\\"\\\\E719\\\"}.el-icon-switch-button:before{content:\\\"\\\\E71B\\\"}.el-icon-aim:before{content:\\\"\\\\E71C\\\"}.el-icon-crop:before{content:\\\"\\\\E71D\\\"}.el-icon-odometer:before{content:\\\"\\\\E71E\\\"}.el-icon-time:before{content:\\\"\\\\E71F\\\"}.el-icon-bangzhu:before{content:\\\"\\\\E724\\\"}.el-icon-close-notification:before{content:\\\"\\\\E726\\\"}.el-icon-microphone:before{content:\\\"\\\\E727\\\"}.el-icon-turn-off-microphone:before{content:\\\"\\\\E728\\\"}.el-icon-position:before{content:\\\"\\\\E729\\\"}.el-icon-postcard:before{content:\\\"\\\\E72A\\\"}.el-icon-message:before{content:\\\"\\\\E72B\\\"}.el-icon-chat-line-square:before{content:\\\"\\\\E72D\\\"}.el-icon-chat-dot-square:before{content:\\\"\\\\E72E\\\"}.el-icon-chat-dot-round:before{content:\\\"\\\\E72F\\\"}.el-icon-chat-square:before{content:\\\"\\\\E730\\\"}.el-icon-chat-line-round:before{content:\\\"\\\\E731\\\"}.el-icon-chat-round:before{content:\\\"\\\\E732\\\"}.el-icon-set-up:before{content:\\\"\\\\E733\\\"}.el-icon-turn-off:before{content:\\\"\\\\E734\\\"}.el-icon-open:before{content:\\\"\\\\E735\\\"}.el-icon-connection:before{content:\\\"\\\\E736\\\"}.el-icon-link:before{content:\\\"\\\\E737\\\"}.el-icon-cpu:before{content:\\\"\\\\E738\\\"}.el-icon-thumb:before{content:\\\"\\\\E739\\\"}.el-icon-female:before{content:\\\"\\\\E73A\\\"}.el-icon-male:before{content:\\\"\\\\E73B\\\"}.el-icon-guide:before{content:\\\"\\\\E73C\\\"}.el-icon-news:before{content:\\\"\\\\E73E\\\"}.el-icon-price-tag:before{content:\\\"\\\\E744\\\"}.el-icon-discount:before{content:\\\"\\\\E745\\\"}.el-icon-wallet:before{content:\\\"\\\\E747\\\"}.el-icon-coin:before{content:\\\"\\\\E748\\\"}.el-icon-money:before{content:\\\"\\\\E749\\\"}.el-icon-bank-card:before{content:\\\"\\\\E74A\\\"}.el-icon-box:before{content:\\\"\\\\E74B\\\"}.el-icon-present:before{content:\\\"\\\\E74C\\\"}.el-icon-sell:before{content:\\\"\\\\E6D5\\\"}.el-icon-sold-out:before{content:\\\"\\\\E6D6\\\"}.el-icon-shopping-bag-2:before{content:\\\"\\\\E74D\\\"}.el-icon-shopping-bag-1:before{content:\\\"\\\\E74E\\\"}.el-icon-shopping-cart-2:before{content:\\\"\\\\E74F\\\"}.el-icon-shopping-cart-1:before{content:\\\"\\\\E750\\\"}.el-icon-shopping-cart-full:before{content:\\\"\\\\E751\\\"}.el-icon-smoking:before{content:\\\"\\\\E752\\\"}.el-icon-no-smoking:before{content:\\\"\\\\E753\\\"}.el-icon-house:before{content:\\\"\\\\E754\\\"}.el-icon-table-lamp:before{content:\\\"\\\\E755\\\"}.el-icon-school:before{content:\\\"\\\\E756\\\"}.el-icon-office-building:before{content:\\\"\\\\E757\\\"}.el-icon-toilet-paper:before{content:\\\"\\\\E758\\\"}.el-icon-notebook-2:before{content:\\\"\\\\E759\\\"}.el-icon-notebook-1:before{content:\\\"\\\\E75A\\\"}.el-icon-files:before{content:\\\"\\\\E75B\\\"}.el-icon-collection:before{content:\\\"\\\\E75C\\\"}.el-icon-receiving:before{content:\\\"\\\\E75D\\\"}.el-icon-suitcase-1:before{content:\\\"\\\\E760\\\"}.el-icon-suitcase:before{content:\\\"\\\\E761\\\"}.el-icon-film:before{content:\\\"\\\\E763\\\"}.el-icon-collection-tag:before{content:\\\"\\\\E765\\\"}.el-icon-data-analysis:before{content:\\\"\\\\E766\\\"}.el-icon-pie-chart:before{content:\\\"\\\\E767\\\"}.el-icon-data-board:before{content:\\\"\\\\E768\\\"}.el-icon-data-line:before{content:\\\"\\\\E76D\\\"}.el-icon-reading:before{content:\\\"\\\\E769\\\"}.el-icon-magic-stick:before{content:\\\"\\\\E76A\\\"}.el-icon-coordinate:before{content:\\\"\\\\E76B\\\"}.el-icon-mouse:before{content:\\\"\\\\E76C\\\"}.el-icon-brush:before{content:\\\"\\\\E76E\\\"}.el-icon-headset:before{content:\\\"\\\\E76F\\\"}.el-icon-umbrella:before{content:\\\"\\\\E770\\\"}.el-icon-scissors:before{content:\\\"\\\\E771\\\"}.el-icon-mobile:before{content:\\\"\\\\E773\\\"}.el-icon-attract:before{content:\\\"\\\\E774\\\"}.el-icon-monitor:before{content:\\\"\\\\E775\\\"}.el-icon-search:before{content:\\\"\\\\E778\\\"}.el-icon-takeaway-box:before{content:\\\"\\\\E77A\\\"}.el-icon-paperclip:before{content:\\\"\\\\E77D\\\"}.el-icon-printer:before{content:\\\"\\\\E77E\\\"}.el-icon-document-add:before{content:\\\"\\\\E782\\\"}.el-icon-document:before{content:\\\"\\\\E785\\\"}.el-icon-document-checked:before{content:\\\"\\\\E786\\\"}.el-icon-document-copy:before{content:\\\"\\\\E787\\\"}.el-icon-document-delete:before{content:\\\"\\\\E788\\\"}.el-icon-document-remove:before{content:\\\"\\\\E789\\\"}.el-icon-tickets:before{content:\\\"\\\\E78B\\\"}.el-icon-folder-checked:before{content:\\\"\\\\E77F\\\"}.el-icon-folder-delete:before{content:\\\"\\\\E780\\\"}.el-icon-folder-remove:before{content:\\\"\\\\E781\\\"}.el-icon-folder-add:before{content:\\\"\\\\E783\\\"}.el-icon-folder-opened:before{content:\\\"\\\\E784\\\"}.el-icon-folder:before{content:\\\"\\\\E78A\\\"}.el-icon-edit-outline:before{content:\\\"\\\\E764\\\"}.el-icon-edit:before{content:\\\"\\\\E78C\\\"}.el-icon-date:before{content:\\\"\\\\E78E\\\"}.el-icon-c-scale-to-original:before{content:\\\"\\\\E7C6\\\"}.el-icon-view:before{content:\\\"\\\\E6CE\\\"}.el-icon-loading:before{content:\\\"\\\\E6CF\\\"}.el-icon-rank:before{content:\\\"\\\\E6D1\\\"}.el-icon-sort-down:before{content:\\\"\\\\E7C4\\\"}.el-icon-sort-up:before{content:\\\"\\\\E7C5\\\"}.el-icon-sort:before{content:\\\"\\\\E6D2\\\"}.el-icon-finished:before{content:\\\"\\\\E6CD\\\"}.el-icon-refresh-left:before{content:\\\"\\\\E6C7\\\"}.el-icon-refresh-right:before{content:\\\"\\\\E6C8\\\"}.el-icon-refresh:before{content:\\\"\\\\E6D0\\\"}.el-icon-video-play:before{content:\\\"\\\\E7C0\\\"}.el-icon-video-pause:before{content:\\\"\\\\E7C1\\\"}.el-icon-d-arrow-right:before{content:\\\"\\\\E6DC\\\"}.el-icon-d-arrow-left:before{content:\\\"\\\\E6DD\\\"}.el-icon-arrow-up:before{content:\\\"\\\\E6E1\\\"}.el-icon-arrow-down:before{content:\\\"\\\\E6DF\\\"}.el-icon-arrow-right:before{content:\\\"\\\\E6E0\\\"}.el-icon-arrow-left:before{content:\\\"\\\\E6DE\\\"}.el-icon-top-right:before{content:\\\"\\\\E6E7\\\"}.el-icon-top-left:before{content:\\\"\\\\E6E8\\\"}.el-icon-top:before{content:\\\"\\\\E6E6\\\"}.el-icon-bottom:before{content:\\\"\\\\E6EB\\\"}.el-icon-right:before{content:\\\"\\\\E6E9\\\"}.el-icon-back:before{content:\\\"\\\\E6EA\\\"}.el-icon-bottom-right:before{content:\\\"\\\\E6EC\\\"}.el-icon-bottom-left:before{content:\\\"\\\\E6ED\\\"}.el-icon-caret-top:before{content:\\\"\\\\E78F\\\"}.el-icon-caret-bottom:before{content:\\\"\\\\E790\\\"}.el-icon-caret-right:before{content:\\\"\\\\E791\\\"}.el-icon-caret-left:before{content:\\\"\\\\E792\\\"}.el-icon-d-caret:before{content:\\\"\\\\E79A\\\"}.el-icon-share:before{content:\\\"\\\\E793\\\"}.el-icon-menu:before{content:\\\"\\\\E798\\\"}.el-icon-s-grid:before{content:\\\"\\\\E7A6\\\"}.el-icon-s-check:before{content:\\\"\\\\E7A7\\\"}.el-icon-s-data:before{content:\\\"\\\\E7A8\\\"}.el-icon-s-opportunity:before{content:\\\"\\\\E7AA\\\"}.el-icon-s-custom:before{content:\\\"\\\\E7AB\\\"}.el-icon-s-claim:before{content:\\\"\\\\E7AD\\\"}.el-icon-s-finance:before{content:\\\"\\\\E7AE\\\"}.el-icon-s-comment:before{content:\\\"\\\\E7AF\\\"}.el-icon-s-flag:before{content:\\\"\\\\E7B0\\\"}.el-icon-s-marketing:before{content:\\\"\\\\E7B1\\\"}.el-icon-s-shop:before{content:\\\"\\\\E7B4\\\"}.el-icon-s-open:before{content:\\\"\\\\E7B5\\\"}.el-icon-s-management:before{content:\\\"\\\\E7B6\\\"}.el-icon-s-ticket:before{content:\\\"\\\\E7B7\\\"}.el-icon-s-release:before{content:\\\"\\\\E7B8\\\"}.el-icon-s-home:before{content:\\\"\\\\E7B9\\\"}.el-icon-s-promotion:before{content:\\\"\\\\E7BA\\\"}.el-icon-s-operation:before{content:\\\"\\\\E7BB\\\"}.el-icon-s-unfold:before{content:\\\"\\\\E7BC\\\"}.el-icon-s-fold:before{content:\\\"\\\\E7A9\\\"}.el-icon-s-platform:before{content:\\\"\\\\E7BD\\\"}.el-icon-s-order:before{content:\\\"\\\\E7BE\\\"}.el-icon-s-cooperation:before{content:\\\"\\\\E7BF\\\"}.el-icon-bell:before{content:\\\"\\\\E725\\\"}.el-icon-message-solid:before{content:\\\"\\\\E799\\\"}.el-icon-video-camera:before{content:\\\"\\\\E772\\\"}.el-icon-video-camera-solid:before{content:\\\"\\\\E796\\\"}.el-icon-camera:before{content:\\\"\\\\E779\\\"}.el-icon-camera-solid:before{content:\\\"\\\\E79B\\\"}.el-icon-download:before{content:\\\"\\\\E77C\\\"}.el-icon-upload2:before{content:\\\"\\\\E77B\\\"}.el-icon-upload:before{content:\\\"\\\\E7C3\\\"}.el-icon-picture-outline-round:before{content:\\\"\\\\E75F\\\"}.el-icon-picture-outline:before{content:\\\"\\\\E75E\\\"}.el-icon-picture:before{content:\\\"\\\\E79F\\\"}.el-icon-close:before{content:\\\"\\\\E6DB\\\"}.el-icon-check:before{content:\\\"\\\\E6DA\\\"}.el-icon-plus:before{content:\\\"\\\\E6D9\\\"}.el-icon-minus:before{content:\\\"\\\\E6D8\\\"}.el-icon-help:before{content:\\\"\\\\E73D\\\"}.el-icon-s-help:before{content:\\\"\\\\E7B3\\\"}.el-icon-circle-close:before{content:\\\"\\\\E78D\\\"}.el-icon-circle-check:before{content:\\\"\\\\E720\\\"}.el-icon-circle-plus-outline:before{content:\\\"\\\\E723\\\"}.el-icon-remove-outline:before{content:\\\"\\\\E722\\\"}.el-icon-zoom-out:before{content:\\\"\\\\E776\\\"}.el-icon-zoom-in:before{content:\\\"\\\\E777\\\"}.el-icon-error:before{content:\\\"\\\\E79D\\\"}.el-icon-success:before{content:\\\"\\\\E79C\\\"}.el-icon-circle-plus:before{content:\\\"\\\\E7A0\\\"}.el-icon-remove:before{content:\\\"\\\\E7A2\\\"}.el-icon-info:before{content:\\\"\\\\E7A1\\\"}.el-icon-question:before{content:\\\"\\\\E7A4\\\"}.el-icon-warning-outline:before{content:\\\"\\\\E6C9\\\"}.el-icon-warning:before{content:\\\"\\\\E7A3\\\"}.el-icon-goods:before{content:\\\"\\\\E7C2\\\"}.el-icon-s-goods:before{content:\\\"\\\\E7B2\\\"}.el-icon-star-off:before{content:\\\"\\\\E717\\\"}.el-icon-star-on:before{content:\\\"\\\\E797\\\"}.el-icon-more-outline:before{content:\\\"\\\\E6CC\\\"}.el-icon-more:before{content:\\\"\\\\E794\\\"}.el-icon-phone-outline:before{content:\\\"\\\\E6CB\\\"}.el-icon-phone:before{content:\\\"\\\\E795\\\"}.el-icon-user:before{content:\\\"\\\\E6E3\\\"}.el-icon-user-solid:before{content:\\\"\\\\E7A5\\\"}.el-icon-setting:before{content:\\\"\\\\E6CA\\\"}.el-icon-s-tools:before{content:\\\"\\\\E7AC\\\"}.el-icon-delete:before{content:\\\"\\\\E6D7\\\"}.el-icon-delete-solid:before{content:\\\"\\\\E7C9\\\"}.el-icon-eleme:before{content:\\\"\\\\E7C7\\\"}.el-icon-platform-eleme:before{content:\\\"\\\\E7CA\\\"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:\\\"\\\"}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pager li,.el-pagination__editor{-webkit-box-sizing:border-box;text-align:center}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#409EFF}.el-pagination button:disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#C0C4CC;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#409EFF}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#C0C4CC}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#409EFF}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#409EFF;color:#FFF}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#FFF;font-size:13px;min-width:35.5px;height:28px;line-height:28px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#C0C4CC}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#409EFF}.el-pager li.active{color:#409EFF;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;background:#FFF;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-autocomplete-suggestion,.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#409EFF}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#F5F7FA}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:\\\"\\\";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:not(.is-disabled)::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown [disabled]{cursor:not-allowed;color:#bbb}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf5ff;color:#66b1ff}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:\\\"\\\"}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #409EFF;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #409EFF;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #E4E7ED;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf5ff}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#409EFF}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf5ff}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf5ff}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#409EFF}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{line-height:1;vertical-align:middle;display:inline-block}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#FFF;border:1px solid #DCDFE6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#409EFF}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-switch,.el-switch__core{position:relative;vertical-align:middle}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #409EFF;box-shadow:-1px 0 0 0 #409EFF}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-picker-panel,.el-popover,.el-select-dropdown,.el-table-filter,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;line-height:20px;height:20px}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#409EFF}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;display:inline-block;width:40px;height:20px;border:1px solid #DCDFE6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#DCDFE6;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s}.el-switch__core:after{content:\\\"\\\";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#409EFF;background-color:#409EFF}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#409EFF;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#F5F7FA}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:\\\"\\\\E6DA\\\";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#F5F7FA}.el-select-dropdown__item.selected{color:#409EFF;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#409EFF}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-range-editor.is-active,.el-range-editor.is-active:hover,.el-select .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;top:0;color:#FFF;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out, -webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#F5F7FA}.el-table .el-table__cell{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#FFF}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#FFF}.el-table th.el-table__cell>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#409EFF}.el-table th.el-table__cell.required>div::before{display:inline-block;content:\\\"\\\";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px}.el-date-table td,.el-date-table td div,.el-table-filter{-webkit-box-sizing:border-box}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th.el-table__cell,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#409EFF}.el-table .descending .sort-caret.descending{border-top-color:#409EFF}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:#ecf5ff}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#F5F7FA}.el-table__body tr.current-row>td.el-table__cell{background-color:#ecf5ff}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf5ff;color:#66b1ff}.el-table-filter__list-item.is-active{background-color:#409EFF;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#409EFF}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;height:30px;padding:4px 0;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{height:30px;padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#409EFF;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#409EFF}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#409EFF}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#409EFF}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#409EFF;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#409EFF;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#409EFF}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#409EFF}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#409EFF}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#409EFF;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#409EFF}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#409EFF}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#409EFF;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input:-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-moz-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input:-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-moz-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:\\\"\\\";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#409EFF}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#409EFF}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#409EFF}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#409EFF}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:\\\"\\\";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-form-item__label,.el-tabs__item,.el-tabs__nav-wrap.is-scrollable,.el-time-panel__footer,.el-time-range-picker__cell{-webkit-box-sizing:border-box}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#409EFF}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border-radius:4px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover,.el-cascader__dropdown,.el-color-picker__panel,.el-message-box,.el-notification{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:\\\"\\\";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#409EFF}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:\\\"\\\"}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#C0C4CC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#409EFF;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:\\\"\\\"}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:\\\"\\\"}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#409EFF;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1), -webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#409EFF}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:\\\"\\\";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #409EFF inset;box-shadow:0 0 2px 2px #409EFF inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs--card>.el-tabs__header .el-tabs__active-bar,.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#409EFF}.el-tabs__item:hover{color:#409EFF;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-col-offset-0,.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#409EFF;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#409EFF}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-cascader-menu:last-child .el-cascader-node,.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-button-group>.el-button:not(:last-child),.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#409EFF}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#F5F7FA}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#409EFF;color:#fff}.el-tree-node__content:hover,.el-upload-list__item:hover{background-color:#F5F7FA}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#C0C4CC;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out, -webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#C0C4CC}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f7ff}.el-alert,.el-notification,.el-slider__button,.el-slider__stop{background-color:#FFF}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#C0C4CC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#FFF}.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#FFF}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active,.el-upload iframe{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#409EFF}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#409EFF}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:\\\" \\\";border-width:5px}.el-button-group::after,.el-button-group::before,.el-color-dropdown__main-wrapper::after,.el-link.is-underline:hover:after,.el-page-header__left::after,.el-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-transfer-panel .el-transfer-panel__footer::after,.el-upload-cover::after,.el-upload-list--picture-card .el-upload-list__item-actions::after{content:\\\"\\\"}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{display:inline-block;vertical-align:middle}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#409EFF;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;position:absolute;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-button,.el-checkbox,.el-checkbox-button__inner,.el-empty__image img,.el-image-viewer__btn,.el-radio,.el-slider__button,.el-step__icon-inner{-moz-user-select:none;-ms-user-select:none}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #409EFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#409EFF}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-12,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row,.el-upload-dragger,.el-upload-list__item{position:relative}.el-loading-spinner .el-loading-text{color:#409EFF;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#409EFF;stroke-linecap:round}.el-loading-spinner i{color:#409EFF}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{width:0%}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#409EFF;color:#409EFF}.el-upload:focus .el-upload-dragger{border-color:#409EFF}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#409EFF;font-style:normal}.el-upload-dragger:hover{border-color:#409EFF}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #409EFF}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#409EFF}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#409EFF;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#409EFF}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-badge__content,.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__header,.el-message,.el-step__icon{-webkit-box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#409EFF;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{height:100%}.el-progress-bar__innerText{color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#C0C4CC;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#409EFF}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border-radius:4px;border:1px solid #EBEEF5;background-color:#FFF;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body,.el-main{padding:20px}.el-rate{height:20px;line-height:1}.el-carousel__item,.el-carousel__mask{height:100%;position:absolute;width:100%}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#F5F7FA}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#C0C4CC;border-color:#C0C4CC}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#409EFF;border-color:#409EFF}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#FFF;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step.is-horizontal,.el-step__icon-inner{display:inline-block}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#C0C4CC}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#409EFF}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#409EFF}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#C0C4CC}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#C0C4CC;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{top:0;left:0;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out, -webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out, -webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{top:0;left:0;background-color:#FFF;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__header.focusing:focus:not(:hover),.el-tag{color:#409EFF}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-cascader__search-input,.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-cascader,.el-tag{display:inline-block}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:\\\" \\\";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-tag{background-color:#ecf5ff;border-color:#d9ecff;height:32px;padding:0 10px;line-height:30px;font-size:12px;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#409EFF}.el-tag .el-tag__close{color:#409eff}.el-tag .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#409eff;border-color:#409eff;color:#fff}.el-tag--dark.is-hit{border-color:#409EFF}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:#66b1ff}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d8ff;color:#409eff}.el-tag--plain.is-hit{border-color:#409EFF}.el-tag--plain .el-tag__close{color:#409eff}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#409eff}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#C0C4CC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#409EFF}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#C0C4CC;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#409EFF;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#C0C4CC}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#C0C4CC}.el-cascader__search-input:-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::-moz-placeholder{color:#C0C4CC}.el-cascader__search-input::placeholder{color:#C0C4CC}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #409EFF;box-shadow:0 0 3px 2px #409EFF}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top, right top,color-stop(0, red),color-stop(17%, #ff0),color-stop(33%, #0f0),color-stop(50%, #0ff),color-stop(67%, #00f),color-stop(83%, #f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top, left bottom,color-stop(0, red),color-stop(17%, #ff0),color-stop(33%, #0f0),color-stop(50%, #0ff),color-stop(67%, #00f),color-stop(83%, #f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top, right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom, left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top, right top,color-stop(0, rgba(255,255,255,0)),to(#fff));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top, left bottom,color-stop(0, rgba(255,255,255,0)),to(#fff));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#409EFF;border-color:#409EFF}.el-color-dropdown__link-btn{cursor:pointer;color:#409EFF;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#409EFF,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color,.el-input__inner,.el-textarea__inner,.el-transfer-panel{-webkit-box-sizing:border-box}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-input__inner,.el-textarea__inner{background-image:none;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{font-size:12px;color:#999;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;position:absolute;width:100%;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center;font-size:12px}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;border:1px solid #DCDFE6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::-moz-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#409EFF}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner:-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#C0C4CC;text-align:center}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input__inner::-moz-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#409EFF;outline:0}.el-input__suffix{right:5px;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner:-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-timeline-item__node--primary,.el-transfer__button{background-color:#409EFF}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;font-size:0}.el-button-group>.el-button+.el-button,.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-timeline,.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#F5F7FA;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#409EFF}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-container,.el-header{-webkit-box-sizing:border-box}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer,.el-empty,.el-result{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-container.is-vertical{-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column}.el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox;-webkit-box-pack:center}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;cursor:pointer;padding:0;font-size:14px;font-weight:500}.el-link.is-underline:hover:after{position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #409EFF}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#409EFF}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#409EFF}.el-link.el-link--default.is-disabled{color:#C0C4CC}.el-link.el-link--primary{color:#409EFF}.el-link.el-link--primary:hover{color:#66b1ff}.el-link.el-link--primary.is-disabled{color:#a0cfff}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#DCDFE6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;font-weight:500;color:#303133;font-size:14px}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:center;-webkit-box-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#C0C4CC;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-button,.el-checkbox,.el-checkbox-button__inner,.el-empty__image img,.el-radio{-webkit-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff;top:50%}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button,.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-button:focus,.el-button:hover{color:#409EFF;border-color:#c6e2ff;background-color:#ecf5ff}.el-button:active{color:#3a8ee6;border-color:#3a8ee6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#409EFF;color:#409EFF}.el-button.is-active,.el-button.is-plain:active{color:#3a8ee6;border-color:#3a8ee6}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#409EFF;border-color:#409EFF}.el-button--primary:focus,.el-button--primary:hover{background:#66b1ff;border-color:#66b1ff;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#a0cfff;border-color:#a0cfff}.el-button--primary.is-plain{color:#409EFF;background:#ecf5ff;border-color:#b3d8ff}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#409EFF;border-color:#409EFF;color:#FFF}.el-button--primary.is-plain:active{background:#3a8ee6;border-color:#3a8ee6;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8cc5ff;background-color:#ecf5ff;border-color:#d9ecff}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini{font-size:12px;border-radius:3px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#409EFF;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#66b1ff;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3a8ee6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group .el-button--danger:last-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:last-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:last-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:last-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:last-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child),.el-button-group>.el-dropdown>.el-button{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child,.el-button-group .el-button--danger:not(:first-child):not(:last-child),.el-button-group .el-button--info:first-child,.el-button-group .el-button--info:not(:first-child):not(:last-child),.el-button-group .el-button--primary:first-child,.el-button-group .el-button--primary:not(:first-child):not(:last-child),.el-button-group .el-button--success:first-child,.el-button-group .el-button--success:not(:first-child):not(:last-child),.el-button-group .el-button--warning:first-child,.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-right-color:rgba(255,255,255,.5)}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button.is-active,.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#C0C4CC}.el-backtop,.el-calendar-table td.is-today{color:#409EFF}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:-webkit-box;display:-ms-flexbox;display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#DCDFE6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#409EFF}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#DCDFE6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#C0C4CC}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#C0C4CC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#C0C4CC;border-color:#C0C4CC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#409EFF;border-color:#409EFF}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#C0C4CC;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#409EFF}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#409EFF}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #DCDFE6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#409EFF}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:\\\"\\\";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s, -webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#409EFF}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#409EFF;border-color:#409EFF;-webkit-box-shadow:-1px 0 0 0 #8cc5ff;box-shadow:-1px 0 0 0 #8cc5ff}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#409EFF}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#409EFF}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-avatar,.el-cascader-panel,.el-radio,.el-radio--medium.is-bordered .el-radio__label,.el-radio__label{font-size:14px}.el-radio{color:#606266;font-weight:500;line-height:1;cursor:pointer;white-space:nowrap;outline:0;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-cascader-menu,.el-cascader-menu__list,.el-radio__inner{-webkit-box-sizing:border-box}.el-radio.is-bordered.is-checked{border-color:#409EFF}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#F5F7FA;border-color:#E4E7ED}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#F5F7FA}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#C0C4CC}.el-radio__input.is-disabled+span.el-radio__label{color:#C0C4CC;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#409EFF;background:#409EFF}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#409EFF}.el-radio__input.is-focus .el-radio__inner{border-color:#409EFF}.el-radio__inner{border:1px solid #DCDFE6;border-radius:100%;width:14px;height:14px;background-color:#FFF;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#409EFF}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:\\\"\\\";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in, -webkit-transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #409EFF;box-shadow:0 0 2px 2px #409EFF}.el-radio__label{padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#C0C4CC}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#409EFF;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px}.el-drawer,.el-drawer__body>*{-webkit-box-sizing:border-box}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-empty__image img,.el-empty__image svg{vertical-align:top;height:100%;width:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.el-popconfirm__main,.el-skeleton__image{display:-ms-flexbox;-webkit-box-align:center;display:-webkit-box}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:-webkit-gradient(linear,left top, right top,color-stop(25%, #f2f2f2),color-stop(37%, #e6e6e6),color-stop(63%, #f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;-webkit-box-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#DCDDE0;width:22%;height:22%}.el-empty{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#DCDDE0}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909399}.el-empty__bottom,.el-result__title{margin-top:20px}.el-descriptions{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions--mini,.el-descriptions--small{font-size:12px}.el-descriptions__body{color:#606266;background-color:#FFF}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #EBEEF5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon::after{content:':';position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-result{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#67C23A}.el-result .icon-error{fill:#F56C6C}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#E6A23C}\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvcG9zdGNzcy1sb2FkZXIvc3JjL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi90aGVtZS1jaGFsay9pbmRleC5jc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvaW5kZXguY3NzPzE0NWQiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGVzY2FwZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi9jc3MtbG9hZGVyL2xpYi91cmwvZXNjYXBlLmpzXCIpO1xuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzXCIpKGZhbHNlKTtcbi8vIGltcG9ydHNcblxuXG4vLyBtb2R1bGVcbmV4cG9ydHMucHVzaChbbW9kdWxlLmlkLCBcIkBjaGFyc2V0IFxcXCJVVEYtOFxcXCI7QGZvbnQtZmFjZXtmb250LWZhbWlseTplbGVtZW50LWljb25zO3NyYzp1cmwoXCIgKyBlc2NhcGUocmVxdWlyZShcIi4vZm9udHMvZWxlbWVudC1pY29ucy53b2ZmXCIpKSArIFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKSx1cmwoXCIgKyBlc2NhcGUocmVxdWlyZShcIi4vZm9udHMvZWxlbWVudC1pY29ucy50dGZcIikpICsgXCIpIGZvcm1hdChcXFwidHJ1ZXR5cGVcXFwiKTtmb250LXdlaWdodDo0MDA7Zm9udC1kaXNwbGF5OlxcXCJhdXRvXFxcIjtmb250LXN0eWxlOm5vcm1hbH1bY2xhc3MqPVxcXCIgZWwtaWNvbi1cXFwiXSxbY2xhc3NePWVsLWljb24tXXtmb250LWZhbWlseTplbGVtZW50LWljb25zIWltcG9ydGFudDtzcGVhazpub25lO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXZhcmlhbnQ6bm9ybWFsO3RleHQtdHJhbnNmb3JtOm5vbmU7bGluZS1oZWlnaHQ6MTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTtkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0uZWwtaWNvbi1pY2UtY3JlYW0tcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkEwXFxcIn0uZWwtaWNvbi1pY2UtY3JlYW0tc3F1YXJlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZBM1xcXCJ9LmVsLWljb24tbG9sbGlwb3A6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkE0XFxcIn0uZWwtaWNvbi1wb3RhdG8tc3RyaXBzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZBNVxcXCJ9LmVsLWljb24tbWlsay10ZWE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkE2XFxcIn0uZWwtaWNvbi1pY2UtZHJpbms6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkE3XFxcIn0uZWwtaWNvbi1pY2UtdGVhOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZBOVxcXCJ9LmVsLWljb24tY29mZmVlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZBQVxcXCJ9LmVsLWljb24tb3JhbmdlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZBQlxcXCJ9LmVsLWljb24tcGVhcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2QUNcXFwifS5lbC1pY29uLWFwcGxlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZBRFxcXCJ9LmVsLWljb24tY2hlcnJ5OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZBRVxcXCJ9LmVsLWljb24td2F0ZXJtZWxvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2QUZcXFwifS5lbC1pY29uLWdyYXBlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZCMFxcXCJ9LmVsLWljb24tcmVmcmlnZXJhdG9yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZCMVxcXCJ9LmVsLWljb24tZ29ibGV0LXNxdWFyZS1mdWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZCMlxcXCJ9LmVsLWljb24tZ29ibGV0LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2QjNcXFwifS5lbC1pY29uLWdvYmxldC1mdWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZCNFxcXCJ9LmVsLWljb24tZ29ibGV0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZCNVxcXCJ9LmVsLWljb24tY29sZC1kcmluazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2QjZcXFwifS5lbC1pY29uLWNvZmZlZS1jdXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkI4XFxcIn0uZWwtaWNvbi13YXRlci1jdXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkI5XFxcIn0uZWwtaWNvbi1ob3Qtd2F0ZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkJBXFxcIn0uZWwtaWNvbi1pY2UtY3JlYW06YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkJCXFxcIn0uZWwtaWNvbi1kZXNzZXJ0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZCQ1xcXCJ9LmVsLWljb24tc3VnYXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkJEXFxcIn0uZWwtaWNvbi10YWJsZXdhcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkJFXFxcIn0uZWwtaWNvbi1idXJnZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkJGXFxcIn0uZWwtaWNvbi1rbmlmZS1mb3JrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZDMVxcXCJ9LmVsLWljb24tZm9yay1zcG9vbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2QzJcXFwifS5lbC1pY29uLWNoaWNrZW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkMzXFxcIn0uZWwtaWNvbi1mb29kOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZDNFxcXCJ9LmVsLWljb24tZGlzaC0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZDNVxcXCJ9LmVsLWljb24tZGlzaDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2QzZcXFwifS5lbC1pY29uLW1vb24tbmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkVFXFxcIn0uZWwtaWNvbi1tb29uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZGMFxcXCJ9LmVsLWljb24tY2xvdWR5LWFuZC1zdW5ueTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RjFcXFwifS5lbC1pY29uLXBhcnRseS1jbG91ZHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkYyXFxcIn0uZWwtaWNvbi1jbG91ZHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkYzXFxcIn0uZWwtaWNvbi1zdW5ueTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RjZcXFwifS5lbC1pY29uLXN1bnNldDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RjdcXFwifS5lbC1pY29uLXN1bnJpc2UtMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RjhcXFwifS5lbC1pY29uLXN1bnJpc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkY5XFxcIn0uZWwtaWNvbi1oZWF2eS1yYWluOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZGQVxcXCJ9LmVsLWljb24tbGlnaHRuaW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZGQlxcXCJ9LmVsLWljb24tbGlnaHQtcmFpbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RkNcXFwifS5lbC1pY29uLXdpbmQtcG93ZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkZEXFxcIn0uZWwtaWNvbi1iYXNlYmFsbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MTJcXFwifS5lbC1pY29uLXNvY2NlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MTNcXFwifS5lbC1pY29uLWZvb3RiYWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcxNVxcXCJ9LmVsLWljb24tYmFza2V0YmFsbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MTZcXFwifS5lbC1pY29uLXNoaXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzNGXFxcIn0uZWwtaWNvbi10cnVjazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NDBcXFwifS5lbC1pY29uLWJpY3ljbGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzQxXFxcIn0uZWwtaWNvbi1tb2JpbGUtcGhvbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkQzXFxcIn0uZWwtaWNvbi1zZXJ2aWNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZENFxcXCJ9LmVsLWljb24ta2V5OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFMlxcXCJ9LmVsLWljb24tdW5sb2NrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFNFxcXCJ9LmVsLWljb24tbG9jazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RTVcXFwifS5lbC1pY29uLXdhdGNoOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZGRVxcXCJ9LmVsLWljb24td2F0Y2gtMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RkZcXFwifS5lbC1pY29uLXRpbWVyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcwMlxcXCJ9LmVsLWljb24tYWxhcm0tY2xvY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzAzXFxcIn0uZWwtaWNvbi1tYXAtbG9jYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzA0XFxcIn0uZWwtaWNvbi1kZWxldGUtbG9jYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzA1XFxcIn0uZWwtaWNvbi1hZGQtbG9jYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzA2XFxcIn0uZWwtaWNvbi1sb2NhdGlvbi1pbmZvcm1hdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MDdcXFwifS5lbC1pY29uLWxvY2F0aW9uLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzA4XFxcIn0uZWwtaWNvbi1sb2NhdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3OUVcXFwifS5lbC1pY29uLXBsYWNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcwOVxcXCJ9LmVsLWljb24tZGlzY292ZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzBBXFxcIn0uZWwtaWNvbi1maXJzdC1haWQta2l0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcwQlxcXCJ9LmVsLWljb24tdHJvcGh5LTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzBDXFxcIn0uZWwtaWNvbi10cm9waHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzBEXFxcIn0uZWwtaWNvbi1tZWRhbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MEVcXFwifS5lbC1pY29uLW1lZGFsLTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzBGXFxcIn0uZWwtaWNvbi1zdG9wd2F0Y2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzEwXFxcIn0uZWwtaWNvbi1taWM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzExXFxcIn0uZWwtaWNvbi1jb3B5LWRvY3VtZW50OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcxOFxcXCJ9LmVsLWljb24tZnVsbC1zY3JlZW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzE5XFxcIn0uZWwtaWNvbi1zd2l0Y2gtYnV0dG9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcxQlxcXCJ9LmVsLWljb24tYWltOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcxQ1xcXCJ9LmVsLWljb24tY3JvcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MURcXFwifS5lbC1pY29uLW9kb21ldGVyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcxRVxcXCJ9LmVsLWljb24tdGltZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MUZcXFwifS5lbC1pY29uLWJhbmd6aHU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzI0XFxcIn0uZWwtaWNvbi1jbG9zZS1ub3RpZmljYXRpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzI2XFxcIn0uZWwtaWNvbi1taWNyb3Bob25lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcyN1xcXCJ9LmVsLWljb24tdHVybi1vZmYtbWljcm9waG9uZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MjhcXFwifS5lbC1pY29uLXBvc2l0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcyOVxcXCJ9LmVsLWljb24tcG9zdGNhcmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzJBXFxcIn0uZWwtaWNvbi1tZXNzYWdlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcyQlxcXCJ9LmVsLWljb24tY2hhdC1saW5lLXNxdWFyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MkRcXFwifS5lbC1pY29uLWNoYXQtZG90LXNxdWFyZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MkVcXFwifS5lbC1pY29uLWNoYXQtZG90LXJvdW5kOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcyRlxcXCJ9LmVsLWljb24tY2hhdC1zcXVhcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzMwXFxcIn0uZWwtaWNvbi1jaGF0LWxpbmUtcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzMxXFxcIn0uZWwtaWNvbi1jaGF0LXJvdW5kOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTczMlxcXCJ9LmVsLWljb24tc2V0LXVwOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTczM1xcXCJ9LmVsLWljb24tdHVybi1vZmY6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzM0XFxcIn0uZWwtaWNvbi1vcGVuOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTczNVxcXCJ9LmVsLWljb24tY29ubmVjdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MzZcXFwifS5lbC1pY29uLWxpbms6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzM3XFxcIn0uZWwtaWNvbi1jcHU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzM4XFxcIn0uZWwtaWNvbi10aHVtYjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MzlcXFwifS5lbC1pY29uLWZlbWFsZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3M0FcXFwifS5lbC1pY29uLW1hbGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzNCXFxcIn0uZWwtaWNvbi1ndWlkZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3M0NcXFwifS5lbC1pY29uLW5ld3M6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzNFXFxcIn0uZWwtaWNvbi1wcmljZS10YWc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzQ0XFxcIn0uZWwtaWNvbi1kaXNjb3VudDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NDVcXFwifS5lbC1pY29uLXdhbGxldDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NDdcXFwifS5lbC1pY29uLWNvaW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzQ4XFxcIn0uZWwtaWNvbi1tb25leTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NDlcXFwifS5lbC1pY29uLWJhbmstY2FyZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NEFcXFwifS5lbC1pY29uLWJveDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NEJcXFwifS5lbC1pY29uLXByZXNlbnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzRDXFxcIn0uZWwtaWNvbi1zZWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZENVxcXCJ9LmVsLWljb24tc29sZC1vdXQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkQ2XFxcIn0uZWwtaWNvbi1zaG9wcGluZy1iYWctMjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NERcXFwifS5lbC1pY29uLXNob3BwaW5nLWJhZy0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc0RVxcXCJ9LmVsLWljb24tc2hvcHBpbmctY2FydC0yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc0RlxcXCJ9LmVsLWljb24tc2hvcHBpbmctY2FydC0xOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc1MFxcXCJ9LmVsLWljb24tc2hvcHBpbmctY2FydC1mdWxsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc1MVxcXCJ9LmVsLWljb24tc21va2luZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NTJcXFwifS5lbC1pY29uLW5vLXNtb2tpbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzUzXFxcIn0uZWwtaWNvbi1ob3VzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NTRcXFwifS5lbC1pY29uLXRhYmxlLWxhbXA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzU1XFxcIn0uZWwtaWNvbi1zY2hvb2w6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzU2XFxcIn0uZWwtaWNvbi1vZmZpY2UtYnVpbGRpbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzU3XFxcIn0uZWwtaWNvbi10b2lsZXQtcGFwZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzU4XFxcIn0uZWwtaWNvbi1ub3RlYm9vay0yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc1OVxcXCJ9LmVsLWljb24tbm90ZWJvb2stMTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NUFcXFwifS5lbC1pY29uLWZpbGVzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc1QlxcXCJ9LmVsLWljb24tY29sbGVjdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NUNcXFwifS5lbC1pY29uLXJlY2VpdmluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NURcXFwifS5lbC1pY29uLXN1aXRjYXNlLTE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzYwXFxcIn0uZWwtaWNvbi1zdWl0Y2FzZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NjFcXFwifS5lbC1pY29uLWZpbG06YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzYzXFxcIn0uZWwtaWNvbi1jb2xsZWN0aW9uLXRhZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NjVcXFwifS5lbC1pY29uLWRhdGEtYW5hbHlzaXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzY2XFxcIn0uZWwtaWNvbi1waWUtY2hhcnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzY3XFxcIn0uZWwtaWNvbi1kYXRhLWJvYXJkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc2OFxcXCJ9LmVsLWljb24tZGF0YS1saW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc2RFxcXCJ9LmVsLWljb24tcmVhZGluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NjlcXFwifS5lbC1pY29uLW1hZ2ljLXN0aWNrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc2QVxcXCJ9LmVsLWljb24tY29vcmRpbmF0ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NkJcXFwifS5lbC1pY29uLW1vdXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc2Q1xcXCJ9LmVsLWljb24tYnJ1c2g6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzZFXFxcIn0uZWwtaWNvbi1oZWFkc2V0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc2RlxcXCJ9LmVsLWljb24tdW1icmVsbGE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzcwXFxcIn0uZWwtaWNvbi1zY2lzc29yczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NzFcXFwifS5lbC1pY29uLW1vYmlsZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NzNcXFwifS5lbC1pY29uLWF0dHJhY3Q6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzc0XFxcIn0uZWwtaWNvbi1tb25pdG9yOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc3NVxcXCJ9LmVsLWljb24tc2VhcmNoOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc3OFxcXCJ9LmVsLWljb24tdGFrZWF3YXktYm94OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc3QVxcXCJ9LmVsLWljb24tcGFwZXJjbGlwOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc3RFxcXCJ9LmVsLWljb24tcHJpbnRlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3N0VcXFwifS5lbC1pY29uLWRvY3VtZW50LWFkZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3ODJcXFwifS5lbC1pY29uLWRvY3VtZW50OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc4NVxcXCJ9LmVsLWljb24tZG9jdW1lbnQtY2hlY2tlZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3ODZcXFwifS5lbC1pY29uLWRvY3VtZW50LWNvcHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzg3XFxcIn0uZWwtaWNvbi1kb2N1bWVudC1kZWxldGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzg4XFxcIn0uZWwtaWNvbi1kb2N1bWVudC1yZW1vdmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzg5XFxcIn0uZWwtaWNvbi10aWNrZXRzOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc4QlxcXCJ9LmVsLWljb24tZm9sZGVyLWNoZWNrZWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzdGXFxcIn0uZWwtaWNvbi1mb2xkZXItZGVsZXRlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc4MFxcXCJ9LmVsLWljb24tZm9sZGVyLXJlbW92ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3ODFcXFwifS5lbC1pY29uLWZvbGRlci1hZGQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzgzXFxcIn0uZWwtaWNvbi1mb2xkZXItb3BlbmVkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc4NFxcXCJ9LmVsLWljb24tZm9sZGVyOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc4QVxcXCJ9LmVsLWljb24tZWRpdC1vdXRsaW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc2NFxcXCJ9LmVsLWljb24tZWRpdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3OENcXFwifS5lbC1pY29uLWRhdGU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzhFXFxcIn0uZWwtaWNvbi1jLXNjYWxlLXRvLW9yaWdpbmFsOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdDNlxcXCJ9LmVsLWljb24tdmlldzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2Q0VcXFwifS5lbC1pY29uLWxvYWRpbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkNGXFxcIn0uZWwtaWNvbi1yYW5rOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZEMVxcXCJ9LmVsLWljb24tc29ydC1kb3duOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdDNFxcXCJ9LmVsLWljb24tc29ydC11cDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QzVcXFwifS5lbC1pY29uLXNvcnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkQyXFxcIn0uZWwtaWNvbi1maW5pc2hlZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2Q0RcXFwifS5lbC1pY29uLXJlZnJlc2gtbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2QzdcXFwifS5lbC1pY29uLXJlZnJlc2gtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkM4XFxcIn0uZWwtaWNvbi1yZWZyZXNoOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZEMFxcXCJ9LmVsLWljb24tdmlkZW8tcGxheTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QzBcXFwifS5lbC1pY29uLXZpZGVvLXBhdXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdDMVxcXCJ9LmVsLWljb24tZC1hcnJvdy1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RENcXFwifS5lbC1pY29uLWQtYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RERcXFwifS5lbC1pY29uLWFycm93LXVwOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFMVxcXCJ9LmVsLWljb24tYXJyb3ctZG93bjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2REZcXFwifS5lbC1pY29uLWFycm93LXJpZ2h0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFMFxcXCJ9LmVsLWljb24tYXJyb3ctbGVmdDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2REVcXFwifS5lbC1pY29uLXRvcC1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RTdcXFwifS5lbC1pY29uLXRvcC1sZWZ0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFOFxcXCJ9LmVsLWljb24tdG9wOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFNlxcXCJ9LmVsLWljb24tYm90dG9tOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFQlxcXCJ9LmVsLWljb24tcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkU5XFxcIn0uZWwtaWNvbi1iYWNrOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFQVxcXCJ9LmVsLWljb24tYm90dG9tLXJpZ2h0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZFQ1xcXCJ9LmVsLWljb24tYm90dG9tLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkVEXFxcIn0uZWwtaWNvbi1jYXJldC10b3A6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzhGXFxcIn0uZWwtaWNvbi1jYXJldC1ib3R0b206YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzkwXFxcIn0uZWwtaWNvbi1jYXJldC1yaWdodDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3OTFcXFwifS5lbC1pY29uLWNhcmV0LWxlZnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzkyXFxcIn0uZWwtaWNvbi1kLWNhcmV0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc5QVxcXCJ9LmVsLWljb24tc2hhcmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzkzXFxcIn0uZWwtaWNvbi1tZW51OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc5OFxcXCJ9LmVsLWljb24tcy1ncmlkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdBNlxcXCJ9LmVsLWljb24tcy1jaGVjazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QTdcXFwifS5lbC1pY29uLXMtZGF0YTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QThcXFwifS5lbC1pY29uLXMtb3Bwb3J0dW5pdHk6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0FBXFxcIn0uZWwtaWNvbi1zLWN1c3RvbTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QUJcXFwifS5lbC1pY29uLXMtY2xhaW06YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0FEXFxcIn0uZWwtaWNvbi1zLWZpbmFuY2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0FFXFxcIn0uZWwtaWNvbi1zLWNvbW1lbnQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0FGXFxcIn0uZWwtaWNvbi1zLWZsYWc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0IwXFxcIn0uZWwtaWNvbi1zLW1hcmtldGluZzpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QjFcXFwifS5lbC1pY29uLXMtc2hvcDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QjRcXFwifS5lbC1pY29uLXMtb3BlbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QjVcXFwifS5lbC1pY29uLXMtbWFuYWdlbWVudDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QjZcXFwifS5lbC1pY29uLXMtdGlja2V0OmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdCN1xcXCJ9LmVsLWljb24tcy1yZWxlYXNlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdCOFxcXCJ9LmVsLWljb24tcy1ob21lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdCOVxcXCJ9LmVsLWljb24tcy1wcm9tb3Rpb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0JBXFxcIn0uZWwtaWNvbi1zLW9wZXJhdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QkJcXFwifS5lbC1pY29uLXMtdW5mb2xkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdCQ1xcXCJ9LmVsLWljb24tcy1mb2xkOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdBOVxcXCJ9LmVsLWljb24tcy1wbGF0Zm9ybTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QkRcXFwifS5lbC1pY29uLXMtb3JkZXI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0JFXFxcIn0uZWwtaWNvbi1zLWNvb3BlcmF0aW9uOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdCRlxcXCJ9LmVsLWljb24tYmVsbDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MjVcXFwifS5lbC1pY29uLW1lc3NhZ2Utc29saWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzk5XFxcIn0uZWwtaWNvbi12aWRlby1jYW1lcmE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzcyXFxcIn0uZWwtaWNvbi12aWRlby1jYW1lcmEtc29saWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzk2XFxcIn0uZWwtaWNvbi1jYW1lcmE6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzc5XFxcIn0uZWwtaWNvbi1jYW1lcmEtc29saWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzlCXFxcIn0uZWwtaWNvbi1kb3dubG9hZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3N0NcXFwifS5lbC1pY29uLXVwbG9hZDI6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzdCXFxcIn0uZWwtaWNvbi11cGxvYWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0MzXFxcIn0uZWwtaWNvbi1waWN0dXJlLW91dGxpbmUtcm91bmQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzVGXFxcIn0uZWwtaWNvbi1waWN0dXJlLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzVFXFxcIn0uZWwtaWNvbi1waWN0dXJlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc5RlxcXCJ9LmVsLWljb24tY2xvc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkRCXFxcIn0uZWwtaWNvbi1jaGVjazpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2REFcXFwifS5lbC1pY29uLXBsdXM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkQ5XFxcIn0uZWwtaWNvbi1taW51czpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RDhcXFwifS5lbC1pY29uLWhlbHA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzNEXFxcIn0uZWwtaWNvbi1zLWhlbHA6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0IzXFxcIn0uZWwtaWNvbi1jaXJjbGUtY2xvc2U6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzhEXFxcIn0uZWwtaWNvbi1jaXJjbGUtY2hlY2s6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzIwXFxcIn0uZWwtaWNvbi1jaXJjbGUtcGx1cy1vdXRsaW5lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTcyM1xcXCJ9LmVsLWljb24tcmVtb3ZlLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzIyXFxcIn0uZWwtaWNvbi16b29tLW91dDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3NzZcXFwifS5lbC1pY29uLXpvb20taW46YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzc3XFxcIn0uZWwtaWNvbi1lcnJvcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3OURcXFwifS5lbC1pY29uLXN1Y2Nlc3M6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzlDXFxcIn0uZWwtaWNvbi1jaXJjbGUtcGx1czpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QTBcXFwifS5lbC1pY29uLXJlbW92ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QTJcXFwifS5lbC1pY29uLWluZm86YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0ExXFxcIn0uZWwtaWNvbi1xdWVzdGlvbjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QTRcXFwifS5lbC1pY29uLXdhcm5pbmctb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2QzlcXFwifS5lbC1pY29uLXdhcm5pbmc6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0EzXFxcIn0uZWwtaWNvbi1nb29kczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QzJcXFwifS5lbC1pY29uLXMtZ29vZHM6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0IyXFxcIn0uZWwtaWNvbi1zdGFyLW9mZjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3MTdcXFwifS5lbC1pY29uLXN0YXItb246YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNzk3XFxcIn0uZWwtaWNvbi1tb3JlLW91dGxpbmU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFNkNDXFxcIn0uZWwtaWNvbi1tb3JlOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc5NFxcXCJ9LmVsLWljb24tcGhvbmUtb3V0bGluZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2Q0JcXFwifS5lbC1pY29uLXBob25lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTc5NVxcXCJ9LmVsLWljb24tdXNlcjpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RTNcXFwifS5lbC1pY29uLXVzZXItc29saWQ6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0E1XFxcIn0uZWwtaWNvbi1zZXR0aW5nOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTZDQVxcXCJ9LmVsLWljb24tcy10b29sczpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QUNcXFwifS5lbC1pY29uLWRlbGV0ZTpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU2RDdcXFwifS5lbC1pY29uLWRlbGV0ZS1zb2xpZDpiZWZvcmV7Y29udGVudDpcXFwiXFxcXEU3QzlcXFwifS5lbC1pY29uLWVsZW1lOmJlZm9yZXtjb250ZW50OlxcXCJcXFxcRTdDN1xcXCJ9LmVsLWljb24tcGxhdGZvcm0tZWxlbWU6YmVmb3Jle2NvbnRlbnQ6XFxcIlxcXFxFN0NBXFxcIn0uZWwtaWNvbi1sb2FkaW5ney13ZWJraXQtYW5pbWF0aW9uOnJvdGF0aW5nIDJzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246cm90YXRpbmcgMnMgbGluZWFyIGluZmluaXRlfS5lbC1pY29uLS1yaWdodHttYXJnaW4tbGVmdDo1cHh9LmVsLWljb24tLWxlZnR7bWFyZ2luLXJpZ2h0OjVweH1ALXdlYmtpdC1rZXlmcmFtZXMgcm90YXRpbmd7MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWigwKTt0cmFuc2Zvcm06cm90YXRlWigwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlWigzNjBkZWcpfX1Aa2V5ZnJhbWVzIHJvdGF0aW5nezAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMCk7dHJhbnNmb3JtOnJvdGF0ZVooMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDM2MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZVooMzYwZGVnKX19LmVsLXBhZ2luYXRpb257d2hpdGUtc3BhY2U6bm93cmFwO3BhZGRpbmc6MnB4IDVweDtjb2xvcjojMzAzMTMzO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtcGFnaW5hdGlvbjo6YWZ0ZXIsLmVsLXBhZ2luYXRpb246OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6XFxcIlxcXCJ9LmVsLXBhZ2luYXRpb246OmFmdGVye2NsZWFyOmJvdGh9LmVsLXBhZ2luYXRpb24gYnV0dG9uLC5lbC1wYWdpbmF0aW9uIHNwYW46bm90KFtjbGFzcyo9c3VmZml4XSl7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjEzcHg7bWluLXdpZHRoOjM1LjVweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4O3ZlcnRpY2FsLWFsaWduOnRvcDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXBhZ2VyIGxpLC5lbC1wYWdpbmF0aW9uX19lZGl0b3J7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXBhZ2luYXRpb24gLmVsLWlucHV0X19pbm5lcnt0ZXh0LWFsaWduOmNlbnRlcjstbW96LWFwcGVhcmFuY2U6dGV4dGZpZWxkO2xpbmUtaGVpZ2h0Om5vcm1hbH0uZWwtcGFnaW5hdGlvbiAuZWwtaW5wdXRfX3N1ZmZpeHtyaWdodDowOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC1wYWdpbmF0aW9uIC5lbC1zZWxlY3QgLmVsLWlucHV0e3dpZHRoOjEwMHB4O21hcmdpbjowIDVweH0uZWwtcGFnaW5hdGlvbiAuZWwtc2VsZWN0IC5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctcmlnaHQ6MjVweDtib3JkZXItcmFkaXVzOjNweH0uZWwtcGFnaW5hdGlvbiBidXR0b257Ym9yZGVyOm5vbmU7cGFkZGluZzowIDZweDtiYWNrZ3JvdW5kOjAgMH0uZWwtcGFnaW5hdGlvbiBidXR0b246Zm9jdXN7b3V0bGluZTowfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbjpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1wYWdpbmF0aW9uIGJ1dHRvbjpkaXNhYmxlZHtjb2xvcjojQzBDNENDO2JhY2tncm91bmQtY29sb3I6I0ZGRjtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXBhZ2luYXRpb24gLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uIC5idG4tcHJldntiYWNrZ3JvdW5kOmNlbnRlciBjZW50ZXIgbm8tcmVwZWF0ICNGRkY7YmFja2dyb3VuZC1zaXplOjE2cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjA7Y29sb3I6IzMwMzEzM30uZWwtcGFnaW5hdGlvbiAuYnRuLW5leHQgLmVsLWljb24sLmVsLXBhZ2luYXRpb24gLmJ0bi1wcmV2IC5lbC1pY29ue2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwfS5lbC1wYWdpbmF0aW9uIC5idG4tcHJldntwYWRkaW5nLXJpZ2h0OjEycHh9LmVsLXBhZ2luYXRpb24gLmJ0bi1uZXh0e3BhZGRpbmctbGVmdDoxMnB4fS5lbC1wYWdpbmF0aW9uIC5lbC1wYWdlciBsaS5kaXNhYmxlZHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcGFnZXIgbGksLmVsLXBhZ2VyIGxpLmJ0bi1xdWlja25leHQ6aG92ZXIsLmVsLXBhZ2VyIGxpLmJ0bi1xdWlja3ByZXY6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmVsLXBhZ2luYXRpb24tLXNtYWxsIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnZXIgbGksLmVsLXBhZ2luYXRpb24tLXNtYWxsIC5lbC1wYWdlciBsaS5idG4tcXVpY2tuZXh0LC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnZXIgbGkuYnRuLXF1aWNrcHJldiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpOmxhc3QtY2hpbGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIycHg7aGVpZ2h0OjIycHg7bWluLXdpZHRoOjIycHh9LmVsLXBhZ2luYXRpb24tLXNtYWxsIC5hcnJvdy5kaXNhYmxlZHt2aXNpYmlsaXR5OmhpZGRlbn0uZWwtcGFnaW5hdGlvbi0tc21hbGwgLm1vcmU6OmJlZm9yZSwuZWwtcGFnaW5hdGlvbi0tc21hbGwgbGkubW9yZTo6YmVmb3Jle2xpbmUtaGVpZ2h0OjI0cHh9LmVsLXBhZ2luYXRpb24tLXNtYWxsIGJ1dHRvbiwuZWwtcGFnaW5hdGlvbi0tc21hbGwgc3Bhbjpub3QoW2NsYXNzKj1zdWZmaXhdKXtoZWlnaHQ6MjJweDtsaW5lLWhlaWdodDoyMnB4fS5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnaW5hdGlvbl9fZWRpdG9yLC5lbC1wYWdpbmF0aW9uLS1zbWFsbCAuZWwtcGFnaW5hdGlvbl9fZWRpdG9yLmVsLWlucHV0IC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjIycHh9LmVsLXBhZ2luYXRpb25fX3NpemVze21hcmdpbjowIDEwcHggMCAwO2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojNjA2MjY2fS5lbC1wYWdpbmF0aW9uX19zaXplcyAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntmb250LXNpemU6MTNweDtwYWRkaW5nLWxlZnQ6OHB4fS5lbC1wYWdpbmF0aW9uX19zaXplcyAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpob3Zlcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtcGFnaW5hdGlvbl9fdG90YWx7bWFyZ2luLXJpZ2h0OjEwcHg7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MDYyNjZ9LmVsLXBhZ2luYXRpb25fX2p1bXB7bWFyZ2luLWxlZnQ6MjRweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzYwNjI2Nn0uZWwtcGFnaW5hdGlvbl9fanVtcCAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmc6MCAzcHh9LmVsLXBhZ2luYXRpb25fX3JpZ2h0d3JhcHBlcntmbG9hdDpyaWdodH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9ye2xpbmUtaGVpZ2h0OjE4cHg7cGFkZGluZzowIDJweDtoZWlnaHQ6MjhweDttYXJnaW46MCAycHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6M3B4fS5lbC1wYWdlciwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldntwYWRkaW5nOjB9LmVsLXBhZ2luYXRpb25fX2VkaXRvci5lbC1pbnB1dHt3aWR0aDo1MHB4fS5lbC1wYWdpbmF0aW9uX19lZGl0b3IuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MjhweH0uZWwtcGFnaW5hdGlvbl9fZWRpdG9yIC5lbC1pbnB1dF9faW5uZXI6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sLmVsLXBhZ2luYXRpb25fX2VkaXRvciAuZWwtaW5wdXRfX2lubmVyOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmVsLXBhZ2VyIGxpe21hcmdpbjowIDVweDtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjU7Y29sb3I6IzYwNjI2NjttaW4td2lkdGg6MzBweDtib3JkZXItcmFkaXVzOjJweH0uZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dC5kaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tbmV4dDpkaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldi5kaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5idG4tcHJldjpkaXNhYmxlZCwuZWwtcGFnaW5hdGlvbi5pcy1iYWNrZ3JvdW5kIC5lbC1wYWdlciBsaS5kaXNhYmxlZHtjb2xvcjojQzBDNENDfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQgLmVsLXBhZ2VyIGxpOm5vdCguZGlzYWJsZWQpOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXBhZ2luYXRpb24uaXMtYmFja2dyb3VuZCAuZWwtcGFnZXIgbGk6bm90KC5kaXNhYmxlZCkuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtjb2xvcjojRkZGfS5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1uZXh0LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmJ0bi1wcmV2LC5lbC1wYWdpbmF0aW9uLmlzLWJhY2tncm91bmQuZWwtcGFnaW5hdGlvbi0tc21hbGwgLmVsLXBhZ2VyIGxpe21hcmdpbjowIDNweDttaW4td2lkdGg6MjJweH0uZWwtcGFnZXIsLmVsLXBhZ2VyIGxpe3ZlcnRpY2FsLWFsaWduOnRvcDttYXJnaW46MDtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtcGFnZXJ7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO2xpc3Qtc3R5bGU6bm9uZTtmb250LXNpemU6MH0uZWwtcGFnZXIgLm1vcmU6OmJlZm9yZXtsaW5lLWhlaWdodDozMHB4fS5lbC1wYWdlciBsaXtwYWRkaW5nOjAgNHB4O2JhY2tncm91bmQ6I0ZGRjtmb250LXNpemU6MTNweDttaW4td2lkdGg6MzUuNXB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1wYWdlciBsaS5idG4tcXVpY2tuZXh0LC5lbC1wYWdlciBsaS5idG4tcXVpY2twcmV2e2xpbmUtaGVpZ2h0OjI4cHg7Y29sb3I6IzMwMzEzM30uZWwtcGFnZXIgbGkuYnRuLXF1aWNrbmV4dC5kaXNhYmxlZCwuZWwtcGFnZXIgbGkuYnRuLXF1aWNrcHJldi5kaXNhYmxlZHtjb2xvcjojQzBDNENDfS5lbC1wYWdlciBsaS5hY3RpdmUrbGl7Ym9yZGVyLWxlZnQ6MH0uZWwtcGFnZXIgbGk6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtcGFnZXIgbGkuYWN0aXZle2NvbG9yOiM0MDlFRkY7Y3Vyc29yOmRlZmF1bHR9QC13ZWJraXQta2V5ZnJhbWVzIHYtbW9kYWwtaW57MCV7b3BhY2l0eTowfX1ALXdlYmtpdC1rZXlmcmFtZXMgdi1tb2RhbC1vdXR7MTAwJXtvcGFjaXR5OjB9fS5lbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjAgYXV0byA1MHB4O2JhY2tncm91bmQ6I0ZGRjtib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjMpO2JveC1zaGFkb3c6MCAxcHggM3B4IHJnYmEoMCwwLDAsLjMpOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDo1MCV9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uLC5lbC1kcm9wZG93bi1tZW51LC5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudSAuZWwtbWVudXstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1kaWFsb2cuaXMtZnVsbHNjcmVlbnt3aWR0aDoxMDAlO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b30uZWwtZGlhbG9nX193cmFwcGVye3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO292ZXJmbG93OmF1dG87bWFyZ2luOjB9LmVsLWRpYWxvZ19faGVhZGVye3BhZGRpbmc6MjBweCAyMHB4IDEwcHh9LmVsLWRpYWxvZ19faGVhZGVyYnRue3Bvc2l0aW9uOmFic29sdXRlO3RvcDoyMHB4O3JpZ2h0OjIwcHg7cGFkZGluZzowO2JhY2tncm91bmQ6MCAwO2JvcmRlcjpub25lO291dGxpbmU6MDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTZweH0uZWwtZGlhbG9nX19oZWFkZXJidG4gLmVsLWRpYWxvZ19fY2xvc2V7Y29sb3I6IzkwOTM5OX0uZWwtZGlhbG9nX19oZWFkZXJidG46Zm9jdXMgLmVsLWRpYWxvZ19fY2xvc2UsLmVsLWRpYWxvZ19faGVhZGVyYnRuOmhvdmVyIC5lbC1kaWFsb2dfX2Nsb3Nle2NvbG9yOiM0MDlFRkZ9LmVsLWRpYWxvZ19fdGl0bGV7bGluZS1oZWlnaHQ6MjRweDtmb250LXNpemU6MThweDtjb2xvcjojMzAzMTMzfS5lbC1kaWFsb2dfX2JvZHl7cGFkZGluZzozMHB4IDIwcHg7Y29sb3I6IzYwNjI2Njtmb250LXNpemU6MTRweDt3b3JkLWJyZWFrOmJyZWFrLWFsbH0uZWwtZGlhbG9nX19mb290ZXJ7cGFkZGluZzoxMHB4IDIwcHggMjBweDt0ZXh0LWFsaWduOnJpZ2h0Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGlhbG9nLS1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLWRpYWxvZy0tY2VudGVyIC5lbC1kaWFsb2dfX2JvZHl7dGV4dC1hbGlnbjppbml0aWFsO3BhZGRpbmc6MjVweCAyNXB4IDMwcHh9LmVsLWRpYWxvZy0tY2VudGVyIC5lbC1kaWFsb2dfX2Zvb3Rlcnt0ZXh0LWFsaWduOmluaGVyaXR9LmRpYWxvZy1mYWRlLWVudGVyLWFjdGl2ZXstd2Via2l0LWFuaW1hdGlvbjpkaWFsb2ctZmFkZS1pbiAuM3M7YW5pbWF0aW9uOmRpYWxvZy1mYWRlLWluIC4zc30uZGlhbG9nLWZhZGUtbGVhdmUtYWN0aXZley13ZWJraXQtYW5pbWF0aW9uOmRpYWxvZy1mYWRlLW91dCAuM3M7YW5pbWF0aW9uOmRpYWxvZy1mYWRlLW91dCAuM3N9QC13ZWJraXQta2V5ZnJhbWVzIGRpYWxvZy1mYWRlLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfX1Aa2V5ZnJhbWVzIGRpYWxvZy1mYWRlLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfX1ALXdlYmtpdC1rZXlmcmFtZXMgZGlhbG9nLWZhZGUtb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIGRpYWxvZy1mYWRlLW91dHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH19LmVsLWF1dG9jb21wbGV0ZXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb257bWFyZ2luOjVweCAwOy13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkZ9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX193cmFwe21heC1oZWlnaHQ6MjgwcHg7cGFkZGluZzoxMHB4IDA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdHttYXJnaW46MDtwYWRkaW5nOjB9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpe3BhZGRpbmc6MCAyMHB4O21hcmdpbjowO2xpbmUtaGVpZ2h0OjM0cHg7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzYwNjI2Njtmb250LXNpemU6MTRweDtsaXN0LXN0eWxlOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaS5oaWdobGlnaHRlZCwuZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24gbGk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbiBsaS5kaXZpZGVye21hcmdpbi10b3A6NnB4O2JvcmRlci10b3A6MXB4IHNvbGlkICMwMDB9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGxpLmRpdmlkZXI6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOi02cHh9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uLmlzLWxvYWRpbmcgbGl7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjEwMHB4O2xpbmUtaGVpZ2h0OjEwMHB4O2ZvbnQtc2l6ZToyMHB4O2NvbG9yOiM5OTl9LmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uLmlzLWxvYWRpbmcgbGk6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6XFxcIlxcXCI7aGVpZ2h0OjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbi5pcy1sb2FkaW5nIGxpOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb24uaXMtbG9hZGluZyAuZWwtaWNvbi1sb2FkaW5ne3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtZHJvcGRvd257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzYwNjI2Njtmb250LXNpemU6MTRweH0uZWwtZHJvcGRvd24gLmVsLWJ1dHRvbi1ncm91cHtkaXNwbGF5OmJsb2NrfS5lbC1kcm9wZG93biAuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b257ZmxvYXQ6bm9uZX0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duX19jYXJldC1idXR0b257cGFkZGluZy1sZWZ0OjVweDtwYWRkaW5nLXJpZ2h0OjVweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItbGVmdDpub25lfS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbjo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDoxcHg7dG9wOjVweDtib3R0b206NXB4O2xlZnQ6MDtiYWNrZ3JvdW5kOnJnYmEoMjU1LDI1NSwyNTUsLjUpfS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbi5lbC1idXR0b24tLWRlZmF1bHQ6OmJlZm9yZXtiYWNrZ3JvdW5kOnJnYmEoMjIwLDIyMywyMzAsLjUpfS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbjpob3Zlcjpub3QoLmlzLWRpc2FibGVkKTo6YmVmb3Jle3RvcDowO2JvdHRvbTowfS5lbC1kcm9wZG93biAuZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbiAuZWwtZHJvcGRvd25fX2ljb257cGFkZGluZy1sZWZ0OjB9LmVsLWRyb3Bkb3duX19pY29ue2ZvbnQtc2l6ZToxMnB4O21hcmdpbjowIDNweH0uZWwtZHJvcGRvd24gLmVsLWRyb3Bkb3duLXNlbGZkZWZpbmU6Zm9jdXM6YWN0aXZlLC5lbC1kcm9wZG93biAuZWwtZHJvcGRvd24tc2VsZmRlZmluZTpmb2N1czpub3QoLmZvY3VzaW5nKXtvdXRsaW5lLXdpZHRoOjB9LmVsLWRyb3Bkb3duIFtkaXNhYmxlZF17Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOiNiYmJ9LmVsLWRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3otaW5kZXg6MTA7cGFkZGluZzoxMHB4IDA7bWFyZ2luOjVweCAwO2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3JkZXI6MXB4IHNvbGlkICNFQkVFRjU7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKX0uZWwtZHJvcGRvd24tbWVudV9faXRlbXtsaXN0LXN0eWxlOm5vbmU7bGluZS1oZWlnaHQ6MzZweDtwYWRkaW5nOjAgMjBweDttYXJnaW46MDtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2O2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0uZWwtZHJvcGRvd24tbWVudV9faXRlbTpmb2N1cywuZWwtZHJvcGRvd24tbWVudV9faXRlbTpub3QoLmlzLWRpc2FibGVkKTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmY7Y29sb3I6IzY2YjFmZn0uZWwtZHJvcGRvd24tbWVudV9faXRlbSBpe21hcmdpbi1yaWdodDo1cHh9LmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWR7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDo2cHg7Ym9yZGVyLXRvcDoxcHggc29saWQgI0VCRUVGNX0uZWwtZHJvcGRvd24tbWVudV9faXRlbS0tZGl2aWRlZDpiZWZvcmV7Y29udGVudDonJztoZWlnaHQ6NnB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjAgLTIwcHg7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1kcm9wZG93bi1tZW51X19pdGVtLmlzLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0O2NvbG9yOiNiYmI7cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtZHJvcGRvd24tbWVudS0tbWVkaXVte3BhZGRpbmc6NnB4IDB9LmVsLWRyb3Bkb3duLW1lbnUtLW1lZGl1bSAuZWwtZHJvcGRvd24tbWVudV9faXRlbXtsaW5lLWhlaWdodDozMHB4O3BhZGRpbmc6MCAxN3B4O2ZvbnQtc2l6ZToxNHB4fS5lbC1kcm9wZG93bi1tZW51LS1tZWRpdW0gLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0uZWwtZHJvcGRvd24tbWVudV9faXRlbS0tZGl2aWRlZHttYXJnaW4tdG9wOjZweH0uZWwtZHJvcGRvd24tbWVudS0tbWVkaXVtIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2hlaWdodDo2cHg7bWFyZ2luOjAgLTE3cHh9LmVsLWRyb3Bkb3duLW1lbnUtLXNtYWxse3BhZGRpbmc6NnB4IDB9LmVsLWRyb3Bkb3duLW1lbnUtLXNtYWxsIC5lbC1kcm9wZG93bi1tZW51X19pdGVte2xpbmUtaGVpZ2h0OjI3cHg7cGFkZGluZzowIDE1cHg7Zm9udC1zaXplOjEzcHh9LmVsLWRyb3Bkb3duLW1lbnUtLXNtYWxsIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWR7bWFyZ2luLXRvcDo0cHh9LmVsLWRyb3Bkb3duLW1lbnUtLXNtYWxsIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWQ6YmVmb3Jle2hlaWdodDo0cHg7bWFyZ2luOjAgLTE1cHh9LmVsLWRyb3Bkb3duLW1lbnUtLW1pbml7cGFkZGluZzozcHggMH0uZWwtZHJvcGRvd24tbWVudS0tbWluaSAuZWwtZHJvcGRvd24tbWVudV9faXRlbXtsaW5lLWhlaWdodDoyNHB4O3BhZGRpbmc6MCAxMHB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1kcm9wZG93bi1tZW51LS1taW5pIC5lbC1kcm9wZG93bi1tZW51X19pdGVtLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0tLWRpdmlkZWR7bWFyZ2luLXRvcDozcHh9LmVsLWRyb3Bkb3duLW1lbnUtLW1pbmkgLmVsLWRyb3Bkb3duLW1lbnVfX2l0ZW0uZWwtZHJvcGRvd24tbWVudV9faXRlbS0tZGl2aWRlZDpiZWZvcmV7aGVpZ2h0OjNweDttYXJnaW46MCAtMTBweH0uZWwtbWVudXtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNlNmU2ZTY7bGlzdC1zdHlsZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbjowO3BhZGRpbmctbGVmdDowO2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtOm5vdCguaXMtZGlzYWJsZWQpOmZvY3VzLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1tZW51LWl0ZW06bm90KC5pcy1kaXNhYmxlZCk6aG92ZXIsLmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnUgLmVsLXN1Ym1lbnVfX3RpdGxlOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2ZmZn0uZWwtbWVudTo6YWZ0ZXIsLmVsLW1lbnU6OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6XFxcIlxcXCJ9LmVsLW1lbnU6OmFmdGVye2NsZWFyOmJvdGh9LmVsLW1lbnUuZWwtbWVudS0taG9yaXpvbnRhbHtib3JkZXItYm90dG9tOnNvbGlkIDFweCAjZTZlNmU2fS5lbC1tZW51LS1ob3Jpem9udGFse2JvcmRlci1yaWdodDpub25lfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1tZW51LWl0ZW17ZmxvYXQ6bGVmdDtoZWlnaHQ6NjBweDtsaW5lLWhlaWdodDo2MHB4O21hcmdpbjowO2JvcmRlci1ib3R0b206MnB4IHNvbGlkIHRyYW5zcGFyZW50O2NvbG9yOiM5MDkzOTl9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLW1lbnUtaXRlbSBhLC5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1tZW51LWl0ZW0gYTpob3Zlcntjb2xvcjppbmhlcml0fS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51e2Zsb2F0OmxlZnR9LmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnU6Zm9jdXMsLmVsLW1lbnUtLWhvcml6b250YWw+LmVsLXN1Ym1lbnU6aG92ZXJ7b3V0bGluZTowfS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51OmZvY3VzIC5lbC1zdWJtZW51X190aXRsZSwuZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudTpob3ZlciAuZWwtc3VibWVudV9fdGl0bGV7Y29sb3I6IzMwMzEzM30uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudS5pcy1hY3RpdmUgLmVsLXN1Ym1lbnVfX3RpdGxle2JvcmRlci1ib3R0b206MnB4IHNvbGlkICM0MDlFRkY7Y29sb3I6IzMwMzEzM30uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtc3VibWVudSAuZWwtc3VibWVudV9fdGl0bGV7aGVpZ2h0OjYwcHg7bGluZS1oZWlnaHQ6NjBweDtib3JkZXItYm90dG9tOjJweCBzb2xpZCB0cmFuc3BhcmVudDtjb2xvcjojOTA5Mzk5fS5lbC1tZW51LS1ob3Jpem9udGFsPi5lbC1zdWJtZW51IC5lbC1zdWJtZW51X19pY29uLWFycm93e3Bvc2l0aW9uOnN0YXRpYzt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luLWxlZnQ6OHB4O21hcmdpbi10b3A6LTNweH0uZWwtbWVudS0taG9yaXpvbnRhbCAuZWwtbWVudSAuZWwtbWVudS1pdGVtLC5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1tZW51IC5lbC1zdWJtZW51X190aXRsZXtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7ZmxvYXQ6bm9uZTtoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxMHB4O2NvbG9yOiM5MDkzOTl9LmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUgLmVsLW1lbnUtaXRlbS5pcy1hY3RpdmUsLmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUgLmVsLXN1Ym1lbnUuaXMtYWN0aXZlPi5lbC1zdWJtZW51X190aXRsZXtjb2xvcjojMzAzMTMzfS5lbC1tZW51LS1ob3Jpem9udGFsIC5lbC1tZW51LWl0ZW06bm90KC5pcy1kaXNhYmxlZCk6Zm9jdXMsLmVsLW1lbnUtLWhvcml6b250YWwgLmVsLW1lbnUtaXRlbTpub3QoLmlzLWRpc2FibGVkKTpob3ZlcntvdXRsaW5lOjA7Y29sb3I6IzMwMzEzM30uZWwtbWVudS0taG9yaXpvbnRhbD4uZWwtbWVudS1pdGVtLmlzLWFjdGl2ZXtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjNDA5RUZGO2NvbG9yOiMzMDMxMzN9LmVsLW1lbnUtLWNvbGxhcHNle3dpZHRoOjY0cHh9LmVsLW1lbnUtLWNvbGxhcHNlPi5lbC1tZW51LWl0ZW0gW2NsYXNzXj1lbC1pY29uLV0sLmVsLW1lbnUtLWNvbGxhcHNlPi5lbC1zdWJtZW51Pi5lbC1zdWJtZW51X190aXRsZSBbY2xhc3NePWVsLWljb24tXXttYXJnaW46MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MjRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSAuZWwtc3VibWVudV9faWNvbi1hcnJvdywuZWwtbWVudS0tY29sbGFwc2U+LmVsLXN1Ym1lbnU+LmVsLXN1Ym1lbnVfX3RpdGxlIC5lbC1zdWJtZW51X19pY29uLWFycm93e2Rpc3BsYXk6bm9uZX0uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbSBzcGFuLC5lbC1tZW51LS1jb2xsYXBzZT4uZWwtc3VibWVudT4uZWwtc3VibWVudV9fdGl0bGUgc3BhbntoZWlnaHQ6MDt3aWR0aDowO292ZXJmbG93OmhpZGRlbjt2aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtbWVudS0tY29sbGFwc2U+LmVsLW1lbnUtaXRlbS5pcy1hY3RpdmUgaXtjb2xvcjppbmhlcml0fS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtbWVudSAuZWwtc3VibWVudXttaW4td2lkdGg6MjAwcHh9LmVsLW1lbnUtLWNvbGxhcHNlIC5lbC1zdWJtZW51e3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1tZW51LS1jb2xsYXBzZSAuZWwtc3VibWVudSAuZWwtbWVudXtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDo1cHg7dG9wOjA7bGVmdDoxMDAlO3otaW5kZXg6MTA7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci1yYWRpdXM6MnB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLW1lbnUtLWNvbGxhcHNlIC5lbC1zdWJtZW51LmlzLW9wZW5lZD4uZWwtc3VibWVudV9fdGl0bGUgLmVsLXN1Ym1lbnVfX2ljb24tYXJyb3d7LXdlYmtpdC10cmFuc2Zvcm06bm9uZTt0cmFuc2Zvcm06bm9uZX0uZWwtbWVudS0tcG9wdXB7ei1pbmRleDoxMDA7bWluLXdpZHRoOjIwMHB4O2JvcmRlcjpub25lO3BhZGRpbmc6NXB4IDA7Ym9yZGVyLXJhZGl1czoycHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKX0uZWwtbWVudS0tcG9wdXAtYm90dG9tLXN0YXJ0e21hcmdpbi10b3A6NXB4fS5lbC1tZW51LS1wb3B1cC1yaWdodC1zdGFydHttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OjVweH0uZWwtbWVudS1pdGVte2hlaWdodDo1NnB4O2xpbmUtaGVpZ2h0OjU2cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzMwMzEzMztwYWRkaW5nOjAgMjBweDtsaXN0LXN0eWxlOm5vbmU7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuM3MsYmFja2dyb3VuZC1jb2xvciAuM3MsY29sb3IgLjNzO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4zcyxiYWNrZ3JvdW5kLWNvbG9yIC4zcyxjb2xvciAuM3M7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtbWVudS1pdGVtICp7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1tZW51LWl0ZW0gaXtjb2xvcjojOTA5Mzk5fS5lbC1tZW51LWl0ZW06Zm9jdXMsLmVsLW1lbnUtaXRlbTpob3ZlcntvdXRsaW5lOjA7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC1tZW51LWl0ZW0uaXMtZGlzYWJsZWR7b3BhY2l0eTouMjU7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQ6MCAwIWltcG9ydGFudH0uZWwtbWVudS1pdGVtIFtjbGFzc149ZWwtaWNvbi1de21hcmdpbi1yaWdodDo1cHg7d2lkdGg6MjRweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MThweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLW1lbnUtaXRlbS5pcy1hY3RpdmV7Y29sb3I6IzQwOUVGRn0uZWwtbWVudS1pdGVtLmlzLWFjdGl2ZSBpe2NvbG9yOmluaGVyaXR9LmVsLXN1Ym1lbnV7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmctbGVmdDowfS5lbC1zdWJtZW51X190aXRsZXtoZWlnaHQ6NTZweDtsaW5lLWhlaWdodDo1NnB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMzMDMxMzM7cGFkZGluZzowIDIwcHg7bGlzdC1zdHlsZTpub25lO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjNzLGJhY2tncm91bmQtY29sb3IgLjNzLGNvbG9yIC4zczt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuM3MsYmFja2dyb3VuZC1jb2xvciAuM3MsY29sb3IgLjNzOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXN1Ym1lbnVfX3RpdGxlICp7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1zdWJtZW51X190aXRsZSBpe2NvbG9yOiM5MDkzOTl9LmVsLXN1Ym1lbnVfX3RpdGxlOmZvY3VzLC5lbC1zdWJtZW51X190aXRsZTpob3ZlcntvdXRsaW5lOjA7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC1zdWJtZW51X190aXRsZS5pcy1kaXNhYmxlZHtvcGFjaXR5Oi4yNTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fS5lbC1zdWJtZW51X190aXRsZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXN1Ym1lbnUgLmVsLW1lbnV7Ym9yZGVyOm5vbmV9LmVsLXN1Ym1lbnUgLmVsLW1lbnUtaXRlbXtoZWlnaHQ6NTBweDtsaW5lLWhlaWdodDo1MHB4O3BhZGRpbmc6MCA0NXB4O21pbi13aWR0aDoyMDBweH0uZWwtc3VibWVudV9faWNvbi1hcnJvd3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3JpZ2h0OjIwcHg7bWFyZ2luLXRvcDotN3B4Oy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcywgLXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcywtd2Via2l0LXRyYW5zZm9ybSAuM3M7Zm9udC1zaXplOjEycHh9LmVsLXN1Ym1lbnUuaXMtYWN0aXZlIC5lbC1zdWJtZW51X190aXRsZXtib3JkZXItYm90dG9tLWNvbG9yOiM0MDlFRkZ9LmVsLXN1Ym1lbnUuaXMtb3BlbmVkPi5lbC1zdWJtZW51X190aXRsZSAuZWwtc3VibWVudV9faWNvbi1hcnJvd3std2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZVooMTgwZGVnKX0uZWwtc3VibWVudS5pcy1kaXNhYmxlZCAuZWwtbWVudS1pdGVtLC5lbC1zdWJtZW51LmlzLWRpc2FibGVkIC5lbC1zdWJtZW51X190aXRsZXtvcGFjaXR5Oi4yNTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZDowIDAhaW1wb3J0YW50fS5lbC1zdWJtZW51IFtjbGFzc149ZWwtaWNvbi1de3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tcmlnaHQ6NXB4O3dpZHRoOjI0cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE4cHh9LmVsLW1lbnUtaXRlbS1ncm91cD51bHtwYWRkaW5nOjB9LmVsLW1lbnUtaXRlbS1ncm91cF9fdGl0bGV7cGFkZGluZzo3cHggMCA3cHggMjBweDtsaW5lLWhlaWdodDpub3JtYWw7Zm9udC1zaXplOjEycHg7Y29sb3I6IzkwOTM5OX0uZWwtcmFkaW8tYnV0dG9uX19pbm5lciwuZWwtcmFkaW8tZ3JvdXB7bGluZS1oZWlnaHQ6MTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2t9Lmhvcml6b250YWwtY29sbGFwc2UtdHJhbnNpdGlvbiAuZWwtc3VibWVudV9fdGl0bGUgLmVsLXN1Ym1lbnVfX2ljb24tYXJyb3d7LXdlYmtpdC10cmFuc2l0aW9uOi4yczt0cmFuc2l0aW9uOi4ycztvcGFjaXR5OjB9LmVsLXJhZGlvLWdyb3Vwe2ZvbnQtc2l6ZTowfS5lbC1yYWRpby1idXR0b257cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3V0bGluZTowfS5lbC1yYWRpby1idXR0b25fX2lubmVye3doaXRlLXNwYWNlOm5vd3JhcDtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2ZvbnQtd2VpZ2h0OjUwMDtib3JkZXItbGVmdDowO2NvbG9yOiM2MDYyNjY7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6MDttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTtwYWRkaW5nOjEycHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjB9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzoxMnB4IDIwcHh9LmVsLXJhZGlvLWJ1dHRvbl9faW5uZXI6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtcmFkaW8tYnV0dG9uX19pbm5lciBbY2xhc3MqPWVsLWljb24tXXtsaW5lLWhlaWdodDouOX0uZWwtcmFkaW8tYnV0dG9uX19pbm5lciBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtcmFkaW8tYnV0dG9uOmZpcnN0LWNoaWxkIC5lbC1yYWRpby1idXR0b25fX2lubmVye2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50O2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9LmVsLXJhZGlvLWJ1dHRvbl9fb3JpZy1yYWRpb3tvcGFjaXR5OjA7b3V0bGluZTowO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmVsLXN3aXRjaCwuZWwtc3dpdGNoX19jb3Jle3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvOmNoZWNrZWQrLmVsLXJhZGlvLWJ1dHRvbl9faW5uZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7LXdlYmtpdC1ib3gtc2hhZG93Oi0xcHggMCAwIDAgIzQwOUVGRjtib3gtc2hhZG93Oi0xcHggMCAwIDAgIzQwOUVGRn0uZWwtcmFkaW8tYnV0dG9uX19vcmlnLXJhZGlvOmRpc2FibGVkKy5lbC1yYWRpby1idXR0b25fX2lubmVye2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLWNvbG9yOiNFQkVFRjU7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5lbC1yYWRpby1idXR0b25fX29yaWctcmFkaW86ZGlzYWJsZWQ6Y2hlY2tlZCsuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkN9LmVsLXJhZGlvLWJ1dHRvbjpsYXN0LWNoaWxkIC5lbC1yYWRpby1idXR0b25fX2lubmVye2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmVsLXJhZGlvLWJ1dHRvbjpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkIC5lbC1yYWRpby1idXR0b25fX2lubmVye2JvcmRlci1yYWRpdXM6NHB4fS5lbC1yYWRpby1idXR0b24tLW1lZGl1bSAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntwYWRkaW5nOjEwcHggMjBweDtmb250LXNpemU6MTRweDtib3JkZXItcmFkaXVzOjB9LmVsLXJhZGlvLWJ1dHRvbi0tbWVkaXVtIC5lbC1yYWRpby1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6MTBweCAyMHB4fS5lbC1yYWRpby1idXR0b24tLXNtYWxsIC5lbC1yYWRpby1idXR0b25fX2lubmVye3BhZGRpbmc6OXB4IDE1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1yYWRpby1idXR0b24tLXNtYWxsIC5lbC1yYWRpby1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6OXB4IDE1cHh9LmVsLXJhZGlvLWJ1dHRvbi0tbWluaSAuZWwtcmFkaW8tYnV0dG9uX19pbm5lcntwYWRkaW5nOjdweCAxNXB4O2ZvbnQtc2l6ZToxMnB4O2JvcmRlci1yYWRpdXM6MH0uZWwtcmFkaW8tYnV0dG9uLS1taW5pIC5lbC1yYWRpby1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6N3B4IDE1cHh9LmVsLXJhZGlvLWJ1dHRvbjpmb2N1czpub3QoLmlzLWZvY3VzKTpub3QoOmFjdGl2ZSk6bm90KC5pcy1kaXNhYmxlZCl7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggMnB4ICM0MDlFRkY7Ym94LXNoYWRvdzowIDAgMnB4IDJweCAjNDA5RUZGfS5lbC1waWNrZXItcGFuZWwsLmVsLXBvcG92ZXIsLmVsLXNlbGVjdC1kcm9wZG93biwuZWwtdGFibGUtZmlsdGVyLC5lbC10aW1lLXBhbmVsey13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLXN3aXRjaHtkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjIwcHg7aGVpZ2h0OjIwcHh9LmVsLXN3aXRjaC5pcy1kaXNhYmxlZCAuZWwtc3dpdGNoX19jb3JlLC5lbC1zd2l0Y2guaXMtZGlzYWJsZWQgLmVsLXN3aXRjaF9fbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zd2l0Y2hfX2xhYmVsey13ZWJraXQtdHJhbnNpdGlvbjouMnM7dHJhbnNpdGlvbjouMnM7aGVpZ2h0OjIwcHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjb2xvcjojMzAzMTMzfS5lbC1zd2l0Y2hfX2xhYmVsLmlzLWFjdGl2ZXtjb2xvcjojNDA5RUZGfS5lbC1zd2l0Y2hfX2xhYmVsLS1sZWZ0e21hcmdpbi1yaWdodDoxMHB4fS5lbC1zd2l0Y2hfX2xhYmVsLS1yaWdodHttYXJnaW4tbGVmdDoxMHB4fS5lbC1zd2l0Y2hfX2xhYmVsICp7bGluZS1oZWlnaHQ6MTtmb250LXNpemU6MTRweDtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtc3dpdGNoX19pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDowO2hlaWdodDowO29wYWNpdHk6MDttYXJnaW46MH0uZWwtc3dpdGNoX19jb3Jle21hcmdpbjowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjQwcHg7aGVpZ2h0OjIwcHg7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O291dGxpbmU6MDtib3JkZXItcmFkaXVzOjEwcHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JhY2tncm91bmQ6I0RDREZFNjtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4zcyxiYWNrZ3JvdW5kLWNvbG9yIC4zczt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuM3MsYmFja2dyb3VuZC1jb2xvciAuM3N9LmVsLXN3aXRjaF9fY29yZTphZnRlcntjb250ZW50OlxcXCJcXFwiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxcHg7bGVmdDoxcHg7Ym9yZGVyLXJhZGl1czoxMDAlOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjNzO3RyYW5zaXRpb246YWxsIC4zczt3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtc3dpdGNoLmlzLWNoZWNrZWQgLmVsLXN3aXRjaF9fY29yZXtib3JkZXItY29sb3I6IzQwOUVGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkZ9LmVsLXN3aXRjaC5pcy1jaGVja2VkIC5lbC1zd2l0Y2hfX2NvcmU6OmFmdGVye2xlZnQ6MTAwJTttYXJnaW4tbGVmdDotMTdweH0uZWwtc3dpdGNoLmlzLWRpc2FibGVke29wYWNpdHk6LjZ9LmVsLXN3aXRjaC0td2lkZSAuZWwtc3dpdGNoX19sYWJlbC5lbC1zd2l0Y2hfX2xhYmVsLS1sZWZ0IHNwYW57bGVmdDoxMHB4fS5lbC1zd2l0Y2gtLXdpZGUgLmVsLXN3aXRjaF9fbGFiZWwuZWwtc3dpdGNoX19sYWJlbC0tcmlnaHQgc3BhbntyaWdodDoxMHB4fS5lbC1zd2l0Y2ggLmxhYmVsLWZhZGUtZW50ZXIsLmVsLXN3aXRjaCAubGFiZWwtZmFkZS1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowfS5lbC1zZWxlY3QtZHJvcGRvd257cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAxO2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmFkaXVzOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjVweCAwfS5lbC1zZWxlY3QtZHJvcGRvd24uaXMtbXVsdGlwbGUgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbXtwYWRkaW5nLXJpZ2h0OjQwcHh9LmVsLXNlbGVjdC1kcm9wZG93bi5pcy1tdWx0aXBsZSAuZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLnNlbGVjdGVke2NvbG9yOiM0MDlFRkY7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1zZWxlY3QtZHJvcGRvd24uaXMtbXVsdGlwbGUgLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZC5ob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkF9LmVsLXNlbGVjdC1kcm9wZG93bi5pcy1tdWx0aXBsZSAuZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLnNlbGVjdGVkOjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O2ZvbnQtZmFtaWx5OmVsZW1lbnQtaWNvbnM7Y29udGVudDpcXFwiXFxcXEU2REFcXFwiO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZX0uZWwtc2VsZWN0LWRyb3Bkb3duIC5lbC1zY3JvbGxiYXIuaXMtZW1wdHkgLmVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdHtwYWRkaW5nOjB9LmVsLXNlbGVjdC1kcm9wZG93bl9fZW1wdHl7cGFkZGluZzoxMHB4IDA7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6Izk5OTtmb250LXNpemU6MTRweH0uZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwe21heC1oZWlnaHQ6Mjc0cHh9LmVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdHtsaXN0LXN0eWxlOm5vbmU7cGFkZGluZzo2cHggMDttYXJnaW46MDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbXtmb250LXNpemU6MTRweDtwYWRkaW5nOjAgMjBweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Y29sb3I6IzYwNjI2NjtoZWlnaHQ6MzRweDtsaW5lLWhlaWdodDozNHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcn0uZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uaXMtZGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW0uaG92ZXIsLmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkF9LmVsLXNlbGVjdC1kcm9wZG93bl9faXRlbS5zZWxlY3RlZHtjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtc2VsZWN0LWdyb3Vwe21hcmdpbjowO3BhZGRpbmc6MH0uZWwtc2VsZWN0LWdyb3VwX193cmFwe3Bvc2l0aW9uOnJlbGF0aXZlO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9LmVsLXNlbGVjdC1ncm91cF9fd3JhcDpub3QoOmxhc3Qtb2YtdHlwZSl7cGFkZGluZy1ib3R0b206MjRweH0uZWwtc2VsZWN0LWdyb3VwX193cmFwOm5vdCg6bGFzdC1vZi10eXBlKTo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2xlZnQ6MjBweDtyaWdodDoyMHB4O2JvdHRvbToxMnB4O2hlaWdodDoxcHg7YmFja2dyb3VuZDojRTRFN0VEfS5lbC1zZWxlY3QtZ3JvdXBfX3RpdGxle3BhZGRpbmctbGVmdDoyMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTk7bGluZS1oZWlnaHQ6MzBweH0uZWwtc2VsZWN0LWdyb3VwIC5lbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW17cGFkZGluZy1sZWZ0OjIwcHh9LmVsLXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtc2VsZWN0IC5lbC1zZWxlY3RfX3RhZ3M+c3BhbntkaXNwbGF5OmNvbnRlbnRzfS5lbC1zZWxlY3Q6aG92ZXIgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtc2VsZWN0IC5lbC1pbnB1dF9faW5uZXJ7Y3Vyc29yOnBvaW50ZXI7cGFkZGluZy1yaWdodDozNXB4fS5lbC1zZWxlY3QgLmVsLWlucHV0X19pbm5lcjpmb2N1c3tib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtc2VsZWN0IC5lbC1pbnB1dCAuZWwtc2VsZWN0X19jYXJldHtjb2xvcjojQzBDNENDO2ZvbnQtc2l6ZToxNHB4Oy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcywgLXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcywtd2Via2l0LXRyYW5zZm9ybSAuM3M7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWigxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyk7Y3Vyc29yOnBvaW50ZXJ9LmVsLXNlbGVjdCAuZWwtaW5wdXQgLmVsLXNlbGVjdF9fY2FyZXQuaXMtcmV2ZXJzZXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDApO3RyYW5zZm9ybTpyb3RhdGVaKDApfS5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1zZWxlY3RfX2NhcmV0LmlzLXNob3ctY2xvc2V7Zm9udC1zaXplOjE0cHg7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWigxODBkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDE4MGRlZyk7Ym9yZGVyLXJhZGl1czoxMDAlO2NvbG9yOiNDMEM0Q0M7LXdlYmtpdC10cmFuc2l0aW9uOmNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjpjb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC1zZWxlY3QgLmVsLWlucHV0IC5lbC1zZWxlY3RfX2NhcmV0LmlzLXNob3ctY2xvc2U6aG92ZXJ7Y29sb3I6IzkwOTM5OX0uZWwtc2VsZWN0IC5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2VsZWN0IC5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojRTRFN0VEfS5lbC1yYW5nZS1lZGl0b3IuaXMtYWN0aXZlLC5lbC1yYW5nZS1lZGl0b3IuaXMtYWN0aXZlOmhvdmVyLC5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXNlbGVjdD4uZWwtaW5wdXR7ZGlzcGxheTpibG9ja30uZWwtc2VsZWN0X19pbnB1dHtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowO21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzY2Njtmb250LXNpemU6MTRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7aGVpZ2h0OjI4cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtc2VsZWN0X19pbnB1dC5pcy1taW5pe2hlaWdodDoxNHB4fS5lbC1zZWxlY3RfX2Nsb3Nle2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7ei1pbmRleDoxMDAwO3JpZ2h0OjI1cHg7Y29sb3I6I0MwQzRDQztsaW5lLWhlaWdodDoxOHB4O2ZvbnQtc2l6ZToxNHB4fS5lbC1zZWxlY3RfX2Nsb3NlOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLXNlbGVjdF9fdGFnc3twb3NpdGlvbjphYnNvbHV0ZTtsaW5lLWhlaWdodDpub3JtYWw7d2hpdGUtc3BhY2U6bm9ybWFsO3otaW5kZXg6MTt0b3A6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXB9LmVsLXNlbGVjdF9fdGFncy10ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1zZWxlY3QgLmVsLXRhZ3std2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O21hcmdpbjoycHggMCAycHggNnB4O2JhY2tncm91bmQtY29sb3I6I2YwZjJmNTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O21heC13aWR0aDoxMDAlOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1zZWxlY3QgLmVsLXRhZ19fY2xvc2UuZWwtaWNvbi1jbG9zZXtiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0M7dG9wOjA7Y29sb3I6I0ZGRjstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjB9LmVsLXNlbGVjdCAuZWwtdGFnX19jbG9zZS5lbC1pY29uLWNsb3NlOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtdGFibGUsLmVsLXRhYmxlX19leHBhbmRlZC1jZWxse2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtc2VsZWN0IC5lbC10YWdfX2Nsb3NlLmVsLWljb24tY2xvc2U6OmJlZm9yZXtkaXNwbGF5OmJsb2NrOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC41cHgpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwuNXB4KX0uZWwtdGFibGV7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2fS5lbC10YWJsZV9fZW1wdHktYmxvY2t7bWluLWhlaWdodDo2MHB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEwMCU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC10YWJsZV9fZW1wdHktdGV4dHtsaW5lLWhlaWdodDo2MHB4O3dpZHRoOjUwJTtjb2xvcjojOTA5Mzk5fS5lbC10YWJsZV9fZXhwYW5kLWNvbHVtbiAuY2VsbHtwYWRkaW5nOjA7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRhYmxlX19leHBhbmQtaWNvbntwb3NpdGlvbjpyZWxhdGl2ZTtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjY2O2ZvbnQtc2l6ZToxMnB4Oy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dCwtd2Via2l0LXRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXQ7aGVpZ2h0OjIwcHh9LmVsLXRhYmxlX19leHBhbmQtaWNvbi0tZXhwYW5kZWR7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtdGFibGVfX2V4cGFuZC1pY29uPi5lbC1pY29ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7bWFyZ2luLWxlZnQ6LTVweDttYXJnaW4tdG9wOi01cHh9LmVsLXRhYmxlX19leHBhbmRlZC1jZWxsW2NsYXNzKj1jZWxsXXtwYWRkaW5nOjIwcHggNTBweH0uZWwtdGFibGVfX2V4cGFuZGVkLWNlbGw6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmVsLXRhYmxlX19wbGFjZWhvbGRlcntkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoyMHB4fS5lbC10YWJsZV9fYXBwZW5kLXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVufS5lbC10YWJsZS0tZml0e2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MH0uZWwtdGFibGUtLWZpdCAuZWwtdGFibGVfX2NlbGwuZ3V0dGVye2JvcmRlci1yaWdodC13aWR0aDoxcHh9LmVsLXRhYmxlLS1zY3JvbGxhYmxlLXggLmVsLXRhYmxlX19ib2R5LXdyYXBwZXJ7b3ZlcmZsb3cteDphdXRvfS5lbC10YWJsZS0tc2Nyb2xsYWJsZS15IC5lbC10YWJsZV9fYm9keS13cmFwcGVye292ZXJmbG93LXk6YXV0b30uZWwtdGFibGUgdGhlYWR7Y29sb3I6IzkwOTM5OTtmb250LXdlaWdodDo1MDB9LmVsLXRhYmxlIHRoZWFkLmlzLWdyb3VwIHRoLmVsLXRhYmxlX19jZWxse2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtdGFibGUgLmVsLXRhYmxlX19jZWxse3BhZGRpbmc6MTJweCAwO21pbi13aWR0aDowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnR9LmVsLXRhYmxlIC5lbC10YWJsZV9fY2VsbC5pcy1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXRhYmxlIC5lbC10YWJsZV9fY2VsbC5pcy1yaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5lbC10YWJsZSAuZWwtdGFibGVfX2NlbGwuZ3V0dGVye3dpZHRoOjE1cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO3BhZGRpbmc6MH0uZWwtdGFibGUgLmVsLXRhYmxlX19jZWxsLmlzLWhpZGRlbj4qe3Zpc2liaWxpdHk6aGlkZGVufS5lbC10YWJsZS0tbWVkaXVtIC5lbC10YWJsZV9fY2VsbHtwYWRkaW5nOjEwcHggMH0uZWwtdGFibGUtLXNtYWxse2ZvbnQtc2l6ZToxMnB4fS5lbC10YWJsZS0tc21hbGwgLmVsLXRhYmxlX19jZWxse3BhZGRpbmc6OHB4IDB9LmVsLXRhYmxlLS1taW5pe2ZvbnQtc2l6ZToxMnB4fS5lbC10YWJsZS0tbWluaSAuZWwtdGFibGVfX2NlbGx7cGFkZGluZzo2cHggMH0uZWwtdGFibGUgdHJ7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC10YWJsZSB0ciBpbnB1dFt0eXBlPWNoZWNrYm94XXttYXJnaW46MH0uZWwtdGFibGUgdGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxsLmlzLWxlYWZ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUgdGguZWwtdGFibGVfX2NlbGwuaXMtc29ydGFibGV7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYmxlIHRoLmVsLXRhYmxlX19jZWxse292ZXJmbG93OmhpZGRlbjstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbD4uY2VsbHtkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweDt3aWR0aDoxMDAlfS5lbC10YWJsZSB0aC5lbC10YWJsZV9fY2VsbD4uY2VsbC5oaWdobGlnaHR7Y29sb3I6IzQwOUVGRn0uZWwtdGFibGUgdGguZWwtdGFibGVfX2NlbGwucmVxdWlyZWQ+ZGl2OjpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDpcXFwiXFxcIjt3aWR0aDo4cHg7aGVpZ2h0OjhweDtib3JkZXItcmFkaXVzOjUwJTtiYWNrZ3JvdW5kOiNmZjRkNTE7bWFyZ2luLXJpZ2h0OjVweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXRhYmxlIHRkLmVsLXRhYmxlX19jZWxsIGRpdnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRhYmxlIHRkLmVsLXRhYmxlX19jZWxsLmd1dHRlcnt3aWR0aDowfS5lbC10YWJsZSAuY2VsbHstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstYWxsO2xpbmUtaGVpZ2h0OjIzcHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fS5lbC1kYXRlLXRhYmxlIHRkLC5lbC1kYXRlLXRhYmxlIHRkIGRpdiwuZWwtdGFibGUtZmlsdGVyey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94fS5lbC10YWJsZSAuY2VsbC5lbC10b29sdGlwe3doaXRlLXNwYWNlOm5vd3JhcDttaW4td2lkdGg6NTBweH0uZWwtdGFibGUtLWJvcmRlciwuZWwtdGFibGUtLWdyb3Vwe2JvcmRlcjoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWJvcmRlcjo6YWZ0ZXIsLmVsLXRhYmxlLS1ncm91cDo6YWZ0ZXIsLmVsLXRhYmxlOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNFQkVFRjU7ei1pbmRleDoxfS5lbC10YWJsZS0tYm9yZGVyOjphZnRlciwuZWwtdGFibGUtLWdyb3VwOjphZnRlcnt0b3A6MDtyaWdodDowO3dpZHRoOjFweDtoZWlnaHQ6MTAwJX0uZWwtdGFibGU6OmJlZm9yZXtsZWZ0OjA7Ym90dG9tOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MXB4fS5lbC10YWJsZS0tYm9yZGVye2JvcmRlci1yaWdodDpub25lO2JvcmRlci1ib3R0b206bm9uZX0uZWwtdGFibGUtLWJvcmRlci5lbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmV7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC10YWJsZS0tYm9yZGVyIC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGVfX2JvZHktd3JhcHBlciAuZWwtdGFibGUtLWJvcmRlci5pcy1zY3JvbGxpbmctbGVmdH4uZWwtdGFibGVfX2ZpeGVke2JvcmRlci1yaWdodDoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWJvcmRlciAuZWwtdGFibGVfX2NlbGw6Zmlyc3QtY2hpbGQgLmNlbGx7cGFkZGluZy1sZWZ0OjEwcHh9LmVsLXRhYmxlLS1ib3JkZXIgdGguZWwtdGFibGVfX2NlbGwuZ3V0dGVyOmxhc3Qtb2YtdHlwZXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1ib3R0b20td2lkdGg6MXB4fS5lbC10YWJsZS0tYm9yZGVyIHRoLmVsLXRhYmxlX19jZWxsLC5lbC10YWJsZV9fZml4ZWQtcmlnaHQtcGF0Y2h7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGUtLWhpZGRlbnt2aXNpYmlsaXR5OmhpZGRlbn0uZWwtdGFibGVfX2ZpeGVkLC5lbC10YWJsZV9fZml4ZWQtcmlnaHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO292ZXJmbG93LXg6aGlkZGVuO292ZXJmbG93LXk6aGlkZGVuOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMTBweCByZ2JhKDAsMCwwLC4xMik7Ym94LXNoYWRvdzowIDAgMTBweCByZ2JhKDAsMCwwLC4xMil9LmVsLXRhYmxlX19maXhlZC1yaWdodDo6YmVmb3JlLC5lbC10YWJsZV9fZml4ZWQ6OmJlZm9yZXtjb250ZW50OicnO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDt3aWR0aDoxMDAlO2hlaWdodDoxcHg7YmFja2dyb3VuZC1jb2xvcjojRUJFRUY1O3otaW5kZXg6NH0uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0LXBhdGNoe3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMXB4O3JpZ2h0OjA7YmFja2dyb3VuZC1jb2xvcjojRkZGfS5lbC10YWJsZV9fZml4ZWQtcmlnaHR7dG9wOjA7bGVmdDphdXRvO3JpZ2h0OjB9LmVsLXRhYmxlX19maXhlZC1yaWdodCAuZWwtdGFibGVfX2ZpeGVkLWJvZHktd3JhcHBlciwuZWwtdGFibGVfX2ZpeGVkLXJpZ2h0IC5lbC10YWJsZV9fZml4ZWQtZm9vdGVyLXdyYXBwZXIsLmVsLXRhYmxlX19maXhlZC1yaWdodCAuZWwtdGFibGVfX2ZpeGVkLWhlYWRlci13cmFwcGVye2xlZnQ6YXV0bztyaWdodDowfS5lbC10YWJsZV9fZml4ZWQtaGVhZGVyLXdyYXBwZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3otaW5kZXg6M30uZWwtdGFibGVfX2ZpeGVkLWZvb3Rlci13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtib3R0b206MDt6LWluZGV4OjN9LmVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlciB0Ym9keSB0ZC5lbC10YWJsZV9fY2VsbHtib3JkZXItdG9wOjFweCBzb2xpZCAjRUJFRUY1O2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtjb2xvcjojNjA2MjY2fS5lbC10YWJsZV9fZml4ZWQtYm9keS13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MzdweDtvdmVyZmxvdzpoaWRkZW47ei1pbmRleDozfS5lbC10YWJsZV9fYm9keS13cmFwcGVyLC5lbC10YWJsZV9fZm9vdGVyLXdyYXBwZXIsLmVsLXRhYmxlX19oZWFkZXItd3JhcHBlcnt3aWR0aDoxMDAlfS5lbC10YWJsZV9fZm9vdGVyLXdyYXBwZXJ7bWFyZ2luLXRvcDotMXB4fS5lbC10YWJsZV9fZm9vdGVyLXdyYXBwZXIgdGQuZWwtdGFibGVfX2NlbGx7Ym9yZGVyLXRvcDoxcHggc29saWQgI0VCRUVGNX0uZWwtdGFibGVfX2JvZHksLmVsLXRhYmxlX19mb290ZXIsLmVsLXRhYmxlX19oZWFkZXJ7dGFibGUtbGF5b3V0OmZpeGVkO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZX0uZWwtdGFibGVfX2Zvb3Rlci13cmFwcGVyLC5lbC10YWJsZV9faGVhZGVyLXdyYXBwZXJ7b3ZlcmZsb3c6aGlkZGVufS5lbC10YWJsZV9fZm9vdGVyLXdyYXBwZXIgdGJvZHkgdGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19oZWFkZXItd3JhcHBlciB0Ym9keSB0ZC5lbC10YWJsZV9fY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y29sb3I6IzYwNjI2Nn0uZWwtdGFibGVfX2JvZHktd3JhcHBlcntvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYmxlX19ib2R5LXdyYXBwZXIuaXMtc2Nyb2xsaW5nLWxlZnR+LmVsLXRhYmxlX19maXhlZCwuZWwtdGFibGVfX2JvZHktd3JhcHBlci5pcy1zY3JvbGxpbmctbm9uZX4uZWwtdGFibGVfX2ZpeGVkLC5lbC10YWJsZV9fYm9keS13cmFwcGVyLmlzLXNjcm9sbGluZy1ub25lfi5lbC10YWJsZV9fZml4ZWQtcmlnaHQsLmVsLXRhYmxlX19ib2R5LXdyYXBwZXIuaXMtc2Nyb2xsaW5nLXJpZ2h0fi5lbC10YWJsZV9fZml4ZWQtcmlnaHR7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lfS5lbC10YWJsZV9fYm9keS13cmFwcGVyIC5lbC10YWJsZS0tYm9yZGVyLmlzLXNjcm9sbGluZy1yaWdodH4uZWwtdGFibGVfX2ZpeGVkLXJpZ2h0e2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRUJFRUY1fS5lbC10YWJsZSAuY2FyZXQtd3JhcHBlcntkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDozNHB4O3dpZHRoOjI0cHg7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmluaXRpYWw7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYmxlIC5zb3J0LWNhcmV0e3dpZHRoOjA7aGVpZ2h0OjA7Ym9yZGVyOjVweCBzb2xpZCB0cmFuc3BhcmVudDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjdweH0uZWwtdGFibGUgLnNvcnQtY2FyZXQuYXNjZW5kaW5ne2JvcmRlci1ib3R0b20tY29sb3I6I0MwQzRDQzt0b3A6NXB4fS5lbC10YWJsZSAuc29ydC1jYXJldC5kZXNjZW5kaW5ne2JvcmRlci10b3AtY29sb3I6I0MwQzRDQztib3R0b206N3B4fS5lbC10YWJsZSAuYXNjZW5kaW5nIC5zb3J0LWNhcmV0LmFzY2VuZGluZ3tib3JkZXItYm90dG9tLWNvbG9yOiM0MDlFRkZ9LmVsLXRhYmxlIC5kZXNjZW5kaW5nIC5zb3J0LWNhcmV0LmRlc2NlbmRpbmd7Ym9yZGVyLXRvcC1jb2xvcjojNDA5RUZGfS5lbC10YWJsZSAuaGlkZGVuLWNvbHVtbnN7dmlzaWJpbGl0eTpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uZWwtdGFibGUtLXN0cmlwZWQgLmVsLXRhYmxlX19ib2R5IHRyLmVsLXRhYmxlX19yb3ctLXN0cmlwZWQgdGQuZWwtdGFibGVfX2NlbGx7YmFja2dyb3VuZDojRkFGQUZBfS5lbC10YWJsZS0tc3RyaXBlZCAuZWwtdGFibGVfX2JvZHkgdHIuZWwtdGFibGVfX3Jvdy0tc3RyaXBlZC5jdXJyZW50LXJvdyB0ZC5lbC10YWJsZV9fY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5jdXJyZW50LXJvdz50ZC5lbC10YWJsZV9fY2VsbCwuZWwtdGFibGVfX2JvZHkgdHIuaG92ZXItcm93LmVsLXRhYmxlX19yb3ctLXN0cmlwZWQuY3VycmVudC1yb3c+dGQuZWwtdGFibGVfX2NlbGwsLmVsLXRhYmxlX19ib2R5IHRyLmhvdmVyLXJvdy5lbC10YWJsZV9fcm93LS1zdHJpcGVkPnRkLmVsLXRhYmxlX19jZWxsLC5lbC10YWJsZV9fYm9keSB0ci5ob3Zlci1yb3c+dGQuZWwtdGFibGVfX2NlbGx7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC10YWJsZV9fYm9keSB0ci5jdXJyZW50LXJvdz50ZC5lbC10YWJsZV9fY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmZ9LmVsLXRhYmxlX19jb2x1bW4tcmVzaXplLXByb3h5e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MjAwcHg7dG9wOjA7Ym90dG9tOjA7d2lkdGg6MDtib3JkZXItbGVmdDoxcHggc29saWQgI0VCRUVGNTt6LWluZGV4OjEwfS5lbC10YWJsZV9fY29sdW1uLWZpbHRlci10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjM0cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRhYmxlX19jb2x1bW4tZmlsdGVyLXRyaWdnZXIgaXtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxMnB4Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC43NSk7dHJhbnNmb3JtOnNjYWxlKC43NSl9LmVsLXRhYmxlLS1lbmFibGUtcm93LXRyYW5zaXRpb24gLmVsLXRhYmxlX19ib2R5IHRkLmVsLXRhYmxlX19jZWxsey13ZWJraXQtdHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgZWFzZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjI1cyBlYXNlfS5lbC10YWJsZS0tZW5hYmxlLXJvdy1ob3ZlciAuZWwtdGFibGVfX2JvZHkgdHI6aG92ZXI+dGQuZWwtdGFibGVfX2NlbGx7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC10YWJsZS0tZmx1aWQtaGVpZ2h0IC5lbC10YWJsZV9fZml4ZWQsLmVsLXRhYmxlLS1mbHVpZC1oZWlnaHQgLmVsLXRhYmxlX19maXhlZC1yaWdodHtib3R0b206MDtvdmVyZmxvdzpoaWRkZW59LmVsLXRhYmxlIFtjbGFzcyo9ZWwtdGFibGVfX3Jvdy0tbGV2ZWxdIC5lbC10YWJsZV9fZXhwYW5kLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MjBweDtsaW5lLWhlaWdodDoyMHB4O2hlaWdodDoyMHB4O3RleHQtYWxpZ246Y2VudGVyO21hcmdpbi1yaWdodDozcHh9LmVsLXRhYmxlLWNvbHVtbi0tc2VsZWN0aW9uIC5jZWxse3BhZGRpbmctbGVmdDoxNHB4O3BhZGRpbmctcmlnaHQ6MTRweH0uZWwtdGFibGUtZmlsdGVye2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjJweCAwfS5lbC10YWJsZS1maWx0ZXJfX2xpc3R7cGFkZGluZzo1cHggMDttYXJnaW46MDtsaXN0LXN0eWxlOm5vbmU7bWluLXdpZHRoOjEwMHB4fS5lbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbXtsaW5lLWhlaWdodDozNnB4O3BhZGRpbmc6MCAxMHB4O2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxNHB4fS5lbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmY7Y29sb3I6IzY2YjFmZn0uZWwtdGFibGUtZmlsdGVyX19saXN0LWl0ZW0uaXMtYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtjb2xvcjojRkZGfS5lbC10YWJsZS1maWx0ZXJfX2NvbnRlbnR7bWluLXdpZHRoOjEwMHB4fS5lbC10YWJsZS1maWx0ZXJfX2JvdHRvbXtib3JkZXItdG9wOjFweCBzb2xpZCAjRUJFRUY1O3BhZGRpbmc6OHB4fS5lbC10YWJsZS1maWx0ZXJfX2JvdHRvbSBidXR0b257YmFja2dyb3VuZDowIDA7Ym9yZGVyOm5vbmU7Y29sb3I6IzYwNjI2NjtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MTNweDtwYWRkaW5nOjAgM3B4fS5lbC1kYXRlLXRhYmxlIHRkLmluLXJhbmdlIGRpdiwuZWwtZGF0ZS10YWJsZSB0ZC5pbi1yYW5nZSBkaXY6aG92ZXIsLmVsLWRhdGUtdGFibGUuaXMtd2Vlay1tb2RlIC5lbC1kYXRlLXRhYmxlX19yb3cuY3VycmVudCBkaXYsLmVsLWRhdGUtdGFibGUuaXMtd2Vlay1tb2RlIC5lbC1kYXRlLXRhYmxlX19yb3c6aG92ZXIgZGl2e2JhY2tncm91bmQtY29sb3I6I0YyRjZGQ30uZWwtdGFibGUtZmlsdGVyX19ib3R0b20gYnV0dG9uOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9tIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOjB9LmVsLXRhYmxlLWZpbHRlcl9fYm90dG9tIGJ1dHRvbi5pcy1kaXNhYmxlZHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtdGFibGUtZmlsdGVyX193cmFwe21heC1oZWlnaHQ6MjgwcHh9LmVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXB7cGFkZGluZzoxMHB4fS5lbC10YWJsZS1maWx0ZXJfX2NoZWNrYm94LWdyb3VwIGxhYmVsLmVsLWNoZWNrYm94e2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXJpZ2h0OjVweDttYXJnaW4tYm90dG9tOjhweDttYXJnaW4tbGVmdDo1cHh9LmVsLXRhYmxlLWZpbHRlcl9fY2hlY2tib3gtZ3JvdXAgLmVsLWNoZWNrYm94Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5lbC1kYXRlLXRhYmxle2ZvbnQtc2l6ZToxMnB4Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdzpob3ZlciB0ZC5hdmFpbGFibGU6aG92ZXJ7Y29sb3I6IzYwNjI2Nn0uZWwtZGF0ZS10YWJsZS5pcy13ZWVrLW1vZGUgLmVsLWRhdGUtdGFibGVfX3Jvdzpob3ZlciB0ZDpmaXJzdC1jaGlsZCBkaXZ7bWFyZ2luLWxlZnQ6NXB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTVweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUuaXMtd2Vlay1tb2RlIC5lbC1kYXRlLXRhYmxlX19yb3c6aG92ZXIgdGQ6bGFzdC1jaGlsZCBkaXZ7bWFyZ2luLXJpZ2h0OjVweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czoxNXB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGR7d2lkdGg6MzJweDtoZWlnaHQ6MzBweDtwYWRkaW5nOjRweCAwOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtZGF0ZS10YWJsZSB0ZCBkaXZ7aGVpZ2h0OjMwcHg7cGFkZGluZzozcHggMDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWRhdGUtdGFibGUgdGQgc3Bhbnt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjAgYXV0bztsaW5lLWhlaWdodDoyNHB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7Ym9yZGVyLXJhZGl1czo1MCV9LmVsLWRhdGUtdGFibGUgdGQubmV4dC1tb250aCwuZWwtZGF0ZS10YWJsZSB0ZC5wcmV2LW1vbnRoe2NvbG9yOiNDMEM0Q0N9LmVsLWRhdGUtdGFibGUgdGQudG9kYXl7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRhdGUtdGFibGUgdGQudG9kYXkgc3Bhbntjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtZGF0ZS10YWJsZSB0ZC50b2RheS5lbmQtZGF0ZSBzcGFuLC5lbC1kYXRlLXRhYmxlIHRkLnRvZGF5LnN0YXJ0LWRhdGUgc3Bhbntjb2xvcjojRkZGfS5lbC1kYXRlLXRhYmxlIHRkLmF2YWlsYWJsZTpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1kYXRlLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgc3Bhbntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtZGF0ZS10YWJsZSB0ZC5lbmQtZGF0ZSBkaXYsLmVsLWRhdGUtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7Y29sb3I6I0ZGRn0uZWwtZGF0ZS10YWJsZSB0ZC5lbmQtZGF0ZSBzcGFuLC5lbC1kYXRlLXRhYmxlIHRkLnN0YXJ0LWRhdGUgc3BhbntiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkZ9LmVsLWRhdGUtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7bWFyZ2luLWxlZnQ6NXB4O2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MTVweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGQuZW5kLWRhdGUgZGl2e21hcmdpbi1yaWdodDo1cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MTVweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czoxNXB4fS5lbC1kYXRlLXRhYmxlIHRkLmRpc2FibGVkIGRpdntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7b3BhY2l0eToxO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojQzBDNENDfS5lbC1kYXRlLXRhYmxlIHRkLnNlbGVjdGVkIGRpdnttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OjVweDtiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkM7Ym9yZGVyLXJhZGl1czoxNXB4fS5lbC1kYXRlLXRhYmxlIHRkLnNlbGVjdGVkIGRpdjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkN9LmVsLWRhdGUtdGFibGUgdGQuc2VsZWN0ZWQgc3BhbntiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Y29sb3I6I0ZGRjtib3JkZXItcmFkaXVzOjE1cHh9LmVsLWRhdGUtdGFibGUgdGQud2Vla3tmb250LXNpemU6ODAlO2NvbG9yOiM2MDYyNjZ9LmVsLWRhdGUtdGFibGUgdGh7cGFkZGluZzo1cHg7Y29sb3I6IzYwNjI2Njtmb250LXdlaWdodDo0MDA7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxcHggI0VCRUVGNX0uZWwtbW9udGgtdGFibGV7Zm9udC1zaXplOjEycHg7bWFyZ2luOi0xcHg7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS5lbC1tb250aC10YWJsZSB0ZHt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjhweCAwO2N1cnNvcjpwb2ludGVyfS5lbC1tb250aC10YWJsZSB0ZCBkaXZ7aGVpZ2h0OjQ4cHg7cGFkZGluZzo2cHggMDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLW1vbnRoLXRhYmxlIHRkLnRvZGF5IC5jZWxse2NvbG9yOiM0MDlFRkY7Zm9udC13ZWlnaHQ6NzAwfS5lbC1tb250aC10YWJsZSB0ZC50b2RheS5lbmQtZGF0ZSAuY2VsbCwuZWwtbW9udGgtdGFibGUgdGQudG9kYXkuc3RhcnQtZGF0ZSAuY2VsbHtjb2xvcjojRkZGfS5lbC1tb250aC10YWJsZSB0ZC5kaXNhYmxlZCAuY2VsbHtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOiNDMEM0Q0N9LmVsLW1vbnRoLXRhYmxlIHRkLmRpc2FibGVkIC5jZWxsOmhvdmVye2NvbG9yOiNDMEM0Q0N9LmVsLW1vbnRoLXRhYmxlIHRkIC5jZWxse3dpZHRoOjYwcHg7aGVpZ2h0OjM2cHg7ZGlzcGxheTpibG9jaztsaW5lLWhlaWdodDozNnB4O2NvbG9yOiM2MDYyNjY7bWFyZ2luOjAgYXV0bztib3JkZXItcmFkaXVzOjE4cHh9LmVsLW1vbnRoLXRhYmxlIHRkIC5jZWxsOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLW1vbnRoLXRhYmxlIHRkLmluLXJhbmdlIGRpdiwuZWwtbW9udGgtdGFibGUgdGQuaW4tcmFuZ2UgZGl2OmhvdmVye2JhY2tncm91bmQtY29sb3I6I0YyRjZGQ30uZWwtbW9udGgtdGFibGUgdGQuZW5kLWRhdGUgZGl2LC5lbC1tb250aC10YWJsZSB0ZC5zdGFydC1kYXRlIGRpdntjb2xvcjojRkZGfS5lbC1tb250aC10YWJsZSB0ZC5lbmQtZGF0ZSAuY2VsbCwuZWwtbW9udGgtdGFibGUgdGQuc3RhcnQtZGF0ZSAuY2VsbHtjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtbW9udGgtdGFibGUgdGQuc3RhcnQtZGF0ZSBkaXZ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czoyNHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MjRweH0uZWwtbW9udGgtdGFibGUgdGQuZW5kLWRhdGUgZGl2e2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjI0cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MjRweH0uZWwtbW9udGgtdGFibGUgdGQuY3VycmVudDpub3QoLmRpc2FibGVkKSAuY2VsbHtjb2xvcjojNDA5RUZGfS5lbC15ZWFyLXRhYmxle2ZvbnQtc2l6ZToxMnB4O21hcmdpbjotMXB4O2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0uZWwteWVhci10YWJsZSAuZWwtaWNvbntjb2xvcjojMzAzMTMzfS5lbC15ZWFyLXRhYmxlIHRke3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MjBweCAzcHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXllYXItdGFibGUgdGQudG9kYXkgLmNlbGx7Y29sb3I6IzQwOUVGRjtmb250LXdlaWdodDo3MDB9LmVsLXllYXItdGFibGUgdGQuZGlzYWJsZWQgLmNlbGx7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjojQzBDNENDfS5lbC15ZWFyLXRhYmxlIHRkLmRpc2FibGVkIC5jZWxsOmhvdmVye2NvbG9yOiNDMEM0Q0N9LmVsLXllYXItdGFibGUgdGQgLmNlbGx7d2lkdGg6NDhweDtoZWlnaHQ6MzJweDtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0OjMycHg7Y29sb3I6IzYwNjI2NjttYXJnaW46MCBhdXRvfS5lbC15ZWFyLXRhYmxlIHRkIC5jZWxsOmhvdmVyLC5lbC15ZWFyLXRhYmxlIHRkLmN1cnJlbnQ6bm90KC5kaXNhYmxlZCkgLmNlbGx7Y29sb3I6IzQwOUVGRn0uZWwtZGF0ZS1yYW5nZS1waWNrZXJ7d2lkdGg6NjQ2cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyLmhhcy1zaWRlYmFye3dpZHRoOjc1NnB4fS5lbC1kYXRlLXJhbmdlLXBpY2tlciB0YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJX0uZWwtZGF0ZS1yYW5nZS1waWNrZXIgLmVsLXBpY2tlci1wYW5lbF9fYm9keXttaW4td2lkdGg6NTEzcHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyIC5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7bWFyZ2luOjB9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7aGVpZ2h0OjI4cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXIgW2NsYXNzKj1hcnJvdy1sZWZ0XXtmbG9hdDpsZWZ0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIFtjbGFzcyo9YXJyb3ctcmlnaHRde2Zsb2F0OnJpZ2h0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9faGVhZGVyIGRpdntmb250LXNpemU6MTZweDtmb250LXdlaWdodDo1MDA7bWFyZ2luLXJpZ2h0OjUwcHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50e2Zsb2F0OmxlZnQ7d2lkdGg6NTAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjE2cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX19jb250ZW50LmlzLWxlZnR7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZTRlNGU0fS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCAuZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlciBkaXZ7bWFyZ2luLWxlZnQ6NTBweDttYXJnaW4tcmlnaHQ6NTBweH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvcnMtd3JhcHstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTp0YWJsZS1jZWxsfS5lbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9ycy13cmFwLmlzLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlNGU0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6OHB4IDVweCA1cHg7ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtaGVhZGVyPi5lbC1pY29uLWFycm93LXJpZ2h0e2ZvbnQtc2l6ZToyMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OnRhYmxlLWNlbGw7Y29sb3I6IzMwMzEzM30uZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MCA1cHh9LmVsLWRhdGUtcmFuZ2UtcGlja2VyX190aW1lLXBpY2tlci13cmFwIC5lbC1waWNrZXItcGFuZWx7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEzcHg7cmlnaHQ6MDt6LWluZGV4OjE7YmFja2dyb3VuZDojRkZGfS5lbC1kYXRlLXBpY2tlcnt3aWR0aDozMjJweH0uZWwtZGF0ZS1waWNrZXIuaGFzLXNpZGViYXIuaGFzLXRpbWV7d2lkdGg6NDM0cHh9LmVsLWRhdGUtcGlja2VyLmhhcy1zaWRlYmFye3dpZHRoOjQzOHB4fS5lbC1kYXRlLXBpY2tlci5oYXMtdGltZSAuZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRhdGUtcGlja2VyIC5lbC1waWNrZXItcGFuZWxfX2NvbnRlbnR7d2lkdGg6MjkycHh9LmVsLWRhdGUtcGlja2VyIHRhYmxle3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlfS5lbC1kYXRlLXBpY2tlcl9fZWRpdG9yLXdyYXB7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTp0YWJsZS1jZWxsO3BhZGRpbmc6MCA1cHh9LmVsLWRhdGUtcGlja2VyX190aW1lLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZTRlNGU0O2ZvbnQtc2l6ZToxMnB4O3BhZGRpbmc6OHB4IDVweCA1cHg7ZGlzcGxheTp0YWJsZTt3aWR0aDoxMDAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlcnttYXJnaW46MTJweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlci0tYm9yZGVyZWR7bWFyZ2luLWJvdHRvbTowO3BhZGRpbmctYm90dG9tOjEycHg7Ym9yZGVyLWJvdHRvbTpzb2xpZCAxcHggI0VCRUVGNX0uZWwtZGF0ZS1waWNrZXJfX2hlYWRlci0tYm9yZGVyZWQrLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHttYXJnaW4tdG9wOjB9LmVsLWRhdGUtcGlja2VyX19oZWFkZXItbGFiZWx7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmc6MCA1cHg7bGluZS1oZWlnaHQ6MjJweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtjb2xvcjojNjA2MjY2fS5lbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsLmFjdGl2ZSwuZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbDpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1kYXRlLXBpY2tlcl9fcHJldi1idG57ZmxvYXQ6bGVmdH0uZWwtZGF0ZS1waWNrZXJfX25leHQtYnRue2Zsb2F0OnJpZ2h0fS5lbC1kYXRlLXBpY2tlcl9fdGltZS13cmFwe3BhZGRpbmc6MTBweDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtZGF0ZS1waWNrZXJfX3RpbWUtbGFiZWx7ZmxvYXQ6bGVmdDtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDozMHB4O21hcmdpbi1sZWZ0OjEwcHh9LnRpbWUtc2VsZWN0e21hcmdpbjo1cHggMDttaW4td2lkdGg6MH0udGltZS1zZWxlY3QgLmVsLXBpY2tlci1wYW5lbF9fY29udGVudHttYXgtaGVpZ2h0OjIwMHB4O21hcmdpbjowfS50aW1lLXNlbGVjdC1pdGVte3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MjBweH0udGltZS1zZWxlY3QtaXRlbS5zZWxlY3RlZDpub3QoLmRpc2FibGVkKXtjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0udGltZS1zZWxlY3QtaXRlbS5kaXNhYmxlZHtjb2xvcjojRTRFN0VEO2N1cnNvcjpub3QtYWxsb3dlZH0udGltZS1zZWxlY3QtaXRlbTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfS5lbC1kYXRlLWVkaXRvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9jazt0ZXh0LWFsaWduOmxlZnR9LmVsLWRhdGUtZWRpdG9yLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci5lbC1pbnB1dF9faW5uZXJ7d2lkdGg6MjIwcHh9LmVsLWRhdGUtZWRpdG9yLS1tb250aHJhbmdlLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci0tbW9udGhyYW5nZS5lbC1pbnB1dF9faW5uZXJ7d2lkdGg6MzAwcHh9LmVsLWRhdGUtZWRpdG9yLS1kYXRlcmFuZ2UuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLS1kYXRlcmFuZ2UuZWwtaW5wdXRfX2lubmVyLC5lbC1kYXRlLWVkaXRvci0tdGltZXJhbmdlLmVsLWlucHV0LC5lbC1kYXRlLWVkaXRvci0tdGltZXJhbmdlLmVsLWlucHV0X19pbm5lcnt3aWR0aDozNTBweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGV0aW1lcmFuZ2UuZWwtaW5wdXQsLmVsLWRhdGUtZWRpdG9yLS1kYXRldGltZXJhbmdlLmVsLWlucHV0X19pbm5lcnt3aWR0aDo0MDBweH0uZWwtZGF0ZS1lZGl0b3ItLWRhdGVzIC5lbC1pbnB1dF9faW5uZXJ7dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLWRhdGUtZWRpdG9yIC5lbC1pY29uLWNpcmNsZS1jbG9zZXtjdXJzb3I6cG9pbnRlcn0uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlX19pY29ue2ZvbnQtc2l6ZToxNHB4O21hcmdpbi1sZWZ0Oi01cHg7Y29sb3I6I0MwQzRDQztmbG9hdDpsZWZ0O2xpbmUtaGVpZ2h0OjMycHh9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1pbnB1dHstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7Ym9yZGVyOm5vbmU7b3V0bGluZTowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDozOSU7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2Nn0uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLWlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLWlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLWlucHV0OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWRhdGUtZWRpdG9yIC5lbC1yYW5nZS1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlLXNlcGFyYXRvcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTtwYWRkaW5nOjAgNXB4O21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1zaXplOjE0cHg7d2lkdGg6NSU7Y29sb3I6IzMwMzEzM30uZWwtZGF0ZS1lZGl0b3IgLmVsLXJhbmdlX19jbG9zZS1pY29ue2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNDMEM0Q0M7d2lkdGg6MjVweDtkaXNwbGF5OmlubGluZS1ibG9jaztmbG9hdDpyaWdodDtsaW5lLWhlaWdodDozMnB4fS5lbC1yYW5nZS1lZGl0b3IuZWwtaW5wdXRfX2lubmVye2Rpc3BsYXk6LXdlYmtpdC1pbmxpbmUtYm94O2Rpc3BsYXk6LW1zLWlubGluZS1mbGV4Ym94O2Rpc3BsYXk6aW5saW5lLWZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzozcHggMTBweH0uZWwtcmFuZ2UtZWRpdG9yIC5lbC1yYW5nZS1pbnB1dHtsaW5lLWhlaWdodDoxfS5lbC1yYW5nZS1lZGl0b3ItLW1lZGl1bS5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjM2cHh9LmVsLXJhbmdlLWVkaXRvci0tbWVkaXVtIC5lbC1yYW5nZS1zZXBhcmF0b3J7bGluZS1oZWlnaHQ6MjhweDtmb250LXNpemU6MTRweH0uZWwtcmFuZ2UtZWRpdG9yLS1tZWRpdW0gLmVsLXJhbmdlLWlucHV0e2ZvbnQtc2l6ZToxNHB4fS5lbC1yYW5nZS1lZGl0b3ItLW1lZGl1bSAuZWwtcmFuZ2VfX2Nsb3NlLWljb24sLmVsLXJhbmdlLWVkaXRvci0tbWVkaXVtIC5lbC1yYW5nZV9faWNvbntsaW5lLWhlaWdodDoyOHB4fS5lbC1yYW5nZS1lZGl0b3ItLXNtYWxsLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MzJweH0uZWwtcmFuZ2UtZWRpdG9yLS1zbWFsbCAuZWwtcmFuZ2Utc2VwYXJhdG9ye2xpbmUtaGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEzcHh9LmVsLXJhbmdlLWVkaXRvci0tc21hbGwgLmVsLXJhbmdlLWlucHV0e2ZvbnQtc2l6ZToxM3B4fS5lbC1yYW5nZS1lZGl0b3ItLXNtYWxsIC5lbC1yYW5nZV9fY2xvc2UtaWNvbiwuZWwtcmFuZ2UtZWRpdG9yLS1zbWFsbCAuZWwtcmFuZ2VfX2ljb257bGluZS1oZWlnaHQ6MjRweH0uZWwtcmFuZ2UtZWRpdG9yLS1taW5pLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MjhweH0uZWwtcmFuZ2UtZWRpdG9yLS1taW5pIC5lbC1yYW5nZS1zZXBhcmF0b3J7bGluZS1oZWlnaHQ6MjBweDtmb250LXNpemU6MTJweH0uZWwtcmFuZ2UtZWRpdG9yLS1taW5pIC5lbC1yYW5nZS1pbnB1dHtmb250LXNpemU6MTJweH0uZWwtcmFuZ2UtZWRpdG9yLS1taW5pIC5lbC1yYW5nZV9fY2xvc2UtaWNvbiwuZWwtcmFuZ2UtZWRpdG9yLS1taW5pIC5lbC1yYW5nZV9faWNvbntsaW5lLWhlaWdodDoyMHB4fS5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2JvcmRlci1jb2xvcjojRTRFN0VEO2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1yYW5nZS1lZGl0b3IuaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZDpob3Zlcntib3JkZXItY29sb3I6I0U0RTdFRH0uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkIGlucHV0e2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkIGlucHV0Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkIGlucHV0OjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkIGlucHV0OjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLXJhbmdlLWVkaXRvci5pcy1kaXNhYmxlZCBpbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtcmFuZ2UtZWRpdG9yLmlzLWRpc2FibGVkIC5lbC1yYW5nZS1zZXBhcmF0b3J7Y29sb3I6I0MwQzRDQ30uZWwtcGlja2VyLXBhbmVse2NvbG9yOiM2MDYyNjY7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEOy13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7YmFja2dyb3VuZDojRkZGO2JvcmRlci1yYWRpdXM6NHB4O2xpbmUtaGVpZ2h0OjMwcHg7bWFyZ2luOjVweCAwfS5lbC1waWNrZXItcGFuZWxfX2JvZHktd3JhcHBlcjo6YWZ0ZXIsLmVsLXBpY2tlci1wYW5lbF9fYm9keTo6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIjtkaXNwbGF5OnRhYmxlO2NsZWFyOmJvdGh9LmVsLXBpY2tlci1wYW5lbF9fY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MTVweH0uZWwtcGlja2VyLXBhbmVsX19mb290ZXJ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U0ZTRlNDtwYWRkaW5nOjRweDt0ZXh0LWFsaWduOnJpZ2h0O2JhY2tncm91bmQtY29sb3I6I0ZGRjtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MH0uZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dHtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7Ym9yZGVyOjA7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtsaW5lLWhlaWdodDoyOHB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7cGFkZGluZy1sZWZ0OjEycHg7dGV4dC1hbGlnbjpsZWZ0O291dGxpbmU6MDtjdXJzb3I6cG9pbnRlcn0uZWwtcGlja2VyLXBhbmVsX19zaG9ydGN1dDpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNlNmYxZmU7Y29sb3I6IzQwOUVGRn0uZWwtcGlja2VyLXBhbmVsX19idG57Ym9yZGVyOjFweCBzb2xpZCAjZGNkY2RjO2NvbG9yOiMzMzM7bGluZS1oZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjAgMjBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweH0uZWwtcGlja2VyLXBhbmVsX19idG5bZGlzYWJsZWRde2NvbG9yOiNjY2M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1waWNrZXItcGFuZWxfX2ljb24tYnRue2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMzMDMxMzM7Ym9yZGVyOjA7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO21hcmdpbi10b3A6OHB4fS5lbC1waWNrZXItcGFuZWxfX2ljb24tYnRuOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4uaXMtZGlzYWJsZWR7Y29sb3I6I2JiYn0uZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0bi5pcy1kaXNhYmxlZDpob3ZlcntjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXBpY2tlci1wYW5lbF9fbGluay1idG57dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1waWNrZXItcGFuZWwgW3Nsb3Q9c2lkZWJhcl0sLmVsLXBpY2tlci1wYW5lbF9fc2lkZWJhcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDt3aWR0aDoxMTBweDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNlNGU0ZTQ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmctdG9wOjZweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7b3ZlcmZsb3c6YXV0b30uZWwtcGlja2VyLXBhbmVsIFtzbG90PXNpZGViYXJdKy5lbC1waWNrZXItcGFuZWxfX2JvZHksLmVsLXBpY2tlci1wYW5lbF9fc2lkZWJhcisuZWwtcGlja2VyLXBhbmVsX19ib2R5e21hcmdpbi1sZWZ0OjExMHB4fS5lbC10aW1lLXNwaW5uZXIuaGFzLXNlY29uZHMgLmVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlcnt3aWR0aDozMy4zJX0uZWwtdGltZS1zcGlubmVyX193cmFwcGVye21heC1oZWlnaHQ6MTkwcHg7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo1MCU7dmVydGljYWwtYWxpZ246dG9wO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10aW1lLXNwaW5uZXJfX3dyYXBwZXIgLmVsLXNjcm9sbGJhcl9fd3JhcDpub3QoLmVsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHQpe3BhZGRpbmctYm90dG9tOjE1cHh9LmVsLXRpbWUtc3Bpbm5lcl9faW5wdXQuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lciwuZWwtdGltZS1zcGlubmVyX19saXN0e3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdGltZS1zcGlubmVyX193cmFwcGVyLmlzLWFycm93ey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LWFsaWduOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW59LmVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlci5pcy1hcnJvdyAuZWwtdGltZS1zcGlubmVyX19saXN0ey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTMycHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0zMnB4KX0uZWwtdGltZS1zcGlubmVyX193cmFwcGVyLmlzLWFycm93IC5lbC10aW1lLXNwaW5uZXJfX2l0ZW06aG92ZXI6bm90KC5kaXNhYmxlZCk6bm90KC5hY3RpdmUpe2JhY2tncm91bmQ6I0ZGRjtjdXJzb3I6ZGVmYXVsdH0uZWwtdGltZS1zcGlubmVyX19hcnJvd3tmb250LXNpemU6MTJweDtjb2xvcjojOTA5Mzk5O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt3aWR0aDoxMDAlO3otaW5kZXg6MTt0ZXh0LWFsaWduOmNlbnRlcjtoZWlnaHQ6MzBweDtsaW5lLWhlaWdodDozMHB4O2N1cnNvcjpwb2ludGVyfS5lbC10aW1lLXNwaW5uZXJfX2Fycm93OmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cuZWwtaWNvbi1hcnJvdy11cHt0b3A6MTBweH0uZWwtdGltZS1zcGlubmVyX19hcnJvdy5lbC1pY29uLWFycm93LWRvd257Ym90dG9tOjEwcHh9LmVsLXRpbWUtc3Bpbm5lcl9faW5wdXQuZWwtaW5wdXR7d2lkdGg6NzAlfS5lbC10aW1lLXNwaW5uZXJfX2xpc3R7bWFyZ2luOjA7bGlzdC1zdHlsZTpub25lfS5lbC10aW1lLXNwaW5uZXJfX2xpc3Q6OmFmdGVyLC5lbC10aW1lLXNwaW5uZXJfX2xpc3Q6OmJlZm9yZXtjb250ZW50OicnO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtoZWlnaHQ6ODBweH0uZWwtdGltZS1zcGlubmVyX19pdGVte2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IzYwNjI2Nn0uZWwtdGltZS1zcGlubmVyX19pdGVtOmhvdmVyOm5vdCguZGlzYWJsZWQpOm5vdCguYWN0aXZlKXtiYWNrZ3JvdW5kOiNGNUY3RkE7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRpbWUtc3Bpbm5lcl9faXRlbS5hY3RpdmU6bm90KC5kaXNhYmxlZCl7Y29sb3I6IzMwMzEzMztmb250LXdlaWdodDo3MDB9LmVsLXRpbWUtc3Bpbm5lcl9faXRlbS5kaXNhYmxlZHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtdGltZS1wYW5lbHttYXJnaW46NXB4IDA7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEO2JhY2tncm91bmQtY29sb3I6I0ZGRjstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JvcmRlci1yYWRpdXM6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjE4MHB4O2xlZnQ6MDt6LWluZGV4OjEwMDA7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lOy13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5lbC10aW1lLXBhbmVsX19jb250ZW50e2ZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlO292ZXJmbG93OmhpZGRlbn0uZWwtdGltZS1wYW5lbF9fY29udGVudDo6YWZ0ZXIsLmVsLXRpbWUtcGFuZWxfX2NvbnRlbnQ6OmJlZm9yZXtjb250ZW50OlxcXCJcXFwiO3RvcDo1MCU7cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLXRvcDotMTVweDtoZWlnaHQ6MzJweDt6LWluZGV4Oi0xO2xlZnQ6MDtyaWdodDowOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nLXRvcDo2cHg7dGV4dC1hbGlnbjpsZWZ0O2JvcmRlci10b3A6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0U0RTdFRH0uZWwtZm9ybS1pdGVtX19sYWJlbCwuZWwtdGFic19faXRlbSwuZWwtdGFic19fbmF2LXdyYXAuaXMtc2Nyb2xsYWJsZSwuZWwtdGltZS1wYW5lbF9fZm9vdGVyLC5lbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbHstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdGltZS1wYW5lbF9fY29udGVudDo6YWZ0ZXJ7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6MTIlO21hcmdpbi1yaWdodDoxMiV9LmVsLXRpbWUtcGFuZWxfX2NvbnRlbnQ6OmJlZm9yZXtwYWRkaW5nLWxlZnQ6NTAlO21hcmdpbi1yaWdodDoxMiU7bWFyZ2luLWxlZnQ6MTIlfS5lbC10aW1lLXBhbmVsX19jb250ZW50Lmhhcy1zZWNvbmRzOjphZnRlcntsZWZ0OmNhbGMoMTAwJSAvIDMgKiAyKX0uZWwtdGltZS1wYW5lbF9fY29udGVudC5oYXMtc2Vjb25kczo6YmVmb3Jle3BhZGRpbmctbGVmdDpjYWxjKDEwMCUgLyAzKX0uZWwtdGltZS1wYW5lbF9fZm9vdGVye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzo0cHg7aGVpZ2h0OjM2cHg7bGluZS1oZWlnaHQ6MjVweDt0ZXh0LWFsaWduOnJpZ2h0Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdGltZS1wYW5lbF9fYnRue2JvcmRlcjpub25lO2xpbmUtaGVpZ2h0OjI4cHg7cGFkZGluZzowIDVweDttYXJnaW46MCA1cHg7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdXRsaW5lOjA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzMwMzEzM30uZWwtdGltZS1wYW5lbF9fYnRuLmNvbmZpcm17Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOiM0MDlFRkZ9LmVsLXRpbWUtcmFuZ2UtcGlja2Vye3dpZHRoOjM1NHB4O292ZXJmbG93OnZpc2libGV9LmVsLXRpbWUtcmFuZ2UtcGlja2VyX19jb250ZW50e3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MTBweH0uZWwtdGltZS1yYW5nZS1waWNrZXJfX2NlbGx7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6NHB4IDdweCA3cHg7d2lkdGg6NTAlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC10aW1lLXJhbmdlLXBpY2tlcl9faGVhZGVye21hcmdpbi1ib3R0b206NXB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxNHB4fS5lbC10aW1lLXJhbmdlLXBpY2tlcl9fYm9keXtib3JkZXItcmFkaXVzOjJweDtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUR9LmVsLXBvcG92ZXJ7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDojRkZGO21pbi13aWR0aDoxNTBweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNFQkVFRjU7cGFkZGluZzoxMnB4O3otaW5kZXg6MjAwMDtjb2xvcjojNjA2MjY2O2xpbmUtaGVpZ2h0OjEuNDt0ZXh0LWFsaWduOmp1c3RpZnk7Zm9udC1zaXplOjE0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTtib3gtc2hhZG93OjAgMnB4IDEycHggMCByZ2JhKDAsMCwwLC4xKTt3b3JkLWJyZWFrOmJyZWFrLWFsbH0uZWwtY2FyZC5pcy1hbHdheXMtc2hhZG93LC5lbC1jYXJkLmlzLWhvdmVyLXNoYWRvdzpmb2N1cywuZWwtY2FyZC5pcy1ob3Zlci1zaGFkb3c6aG92ZXIsLmVsLWNhc2NhZGVyX19kcm9wZG93biwuZWwtY29sb3ItcGlja2VyX19wYW5lbCwuZWwtbWVzc2FnZS1ib3gsLmVsLW5vdGlmaWNhdGlvbnstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1wb3BvdmVyLS1wbGFpbntwYWRkaW5nOjE4cHggMjBweH0uZWwtcG9wb3Zlcl9fdGl0bGV7Y29sb3I6IzMwMzEzMztmb250LXNpemU6MTZweDtsaW5lLWhlaWdodDoxO21hcmdpbi1ib3R0b206MTJweH0uZWwtcG9wb3Zlcjpmb2N1cywuZWwtcG9wb3Zlcjpmb2N1czphY3RpdmUsLmVsLXBvcG92ZXJfX3JlZmVyZW5jZTpmb2N1czpob3ZlciwuZWwtcG9wb3Zlcl9fcmVmZXJlbmNlOmZvY3VzOm5vdCguZm9jdXNpbmcpe291dGxpbmUtd2lkdGg6MH0udi1tb2RhbC1lbnRlcnstd2Via2l0LWFuaW1hdGlvbjp2LW1vZGFsLWluIC4ycyBlYXNlO2FuaW1hdGlvbjp2LW1vZGFsLWluIC4ycyBlYXNlfS52LW1vZGFsLWxlYXZley13ZWJraXQtYW5pbWF0aW9uOnYtbW9kYWwtb3V0IC4ycyBlYXNlIGZvcndhcmRzO2FuaW1hdGlvbjp2LW1vZGFsLW91dCAuMnMgZWFzZSBmb3J3YXJkc31Aa2V5ZnJhbWVzIHYtbW9kYWwtaW57MCV7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHYtbW9kYWwtb3V0ezEwMCV7b3BhY2l0eTowfX0udi1tb2RhbHtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvcGFjaXR5Oi41O2JhY2tncm91bmQ6IzAwMH0uZWwtcG9wdXAtcGFyZW50LS1oaWRkZW57b3ZlcmZsb3c6aGlkZGVufS5lbC1tZXNzYWdlLWJveHtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDo0MjBweDtwYWRkaW5nLWJvdHRvbToxMHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2ZvbnQtc2l6ZToxOHB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7dGV4dC1hbGlnbjpsZWZ0O292ZXJmbG93OmhpZGRlbjstd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufS5lbC1tZXNzYWdlLWJveF9fd3JhcHBlcntwb3NpdGlvbjpmaXhlZDt0b3A6MDtib3R0b206MDtsZWZ0OjA7cmlnaHQ6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtbWVzc2FnZS1ib3hfX3dyYXBwZXI6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjEwMCU7d2lkdGg6MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLW1lc3NhZ2UtYm94X19oZWFkZXJ7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzoxNXB4IDE1cHggMTBweH0uZWwtbWVzc2FnZS1ib3hfX3RpdGxle3BhZGRpbmctbGVmdDowO21hcmdpbi1ib3R0b206MDtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxO2NvbG9yOiMzMDMxMzN9LmVsLW1lc3NhZ2UtYm94X19oZWFkZXJidG57cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MTVweDtwYWRkaW5nOjA7Ym9yZGVyOm5vbmU7b3V0bGluZTowO2JhY2tncm91bmQ6MCAwO2ZvbnQtc2l6ZToxNnB4O2N1cnNvcjpwb2ludGVyfS5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0X19pbm5lciwuZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dF9faW5uZXI6Zm9jdXMsLmVsLWZvcm0taXRlbS5pcy1lcnJvciAuZWwtdGV4dGFyZWFfX2lubmVyLC5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLXRleHRhcmVhX19pbm5lcjpmb2N1cywuZWwtbWVzc2FnZS1ib3hfX2lucHV0IGlucHV0LmludmFsaWQsLmVsLW1lc3NhZ2UtYm94X19pbnB1dCBpbnB1dC5pbnZhbGlkOmZvY3Vze2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC1tZXNzYWdlLWJveF9faGVhZGVyYnRuIC5lbC1tZXNzYWdlLWJveF9fY2xvc2V7Y29sb3I6IzkwOTM5OX0uZWwtbWVzc2FnZS1ib3hfX2hlYWRlcmJ0bjpmb2N1cyAuZWwtbWVzc2FnZS1ib3hfX2Nsb3NlLC5lbC1tZXNzYWdlLWJveF9faGVhZGVyYnRuOmhvdmVyIC5lbC1tZXNzYWdlLWJveF9fY2xvc2V7Y29sb3I6IzQwOUVGRn0uZWwtbWVzc2FnZS1ib3hfX2NvbnRlbnR7cGFkZGluZzoxMHB4IDE1cHg7Y29sb3I6IzYwNjI2Njtmb250LXNpemU6MTRweH0uZWwtbWVzc2FnZS1ib3hfX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtbWVzc2FnZS1ib3hfX2lucHV0e3BhZGRpbmctdG9wOjE1cHh9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXN7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2ZvbnQtc2l6ZToyNHB4IWltcG9ydGFudH0uZWwtbWVzc2FnZS1ib3hfX3N0YXR1czo6YmVmb3Jle3BhZGRpbmctbGVmdDoxcHh9LmVsLW1lc3NhZ2UtYm94X19zdGF0dXMrLmVsLW1lc3NhZ2UtYm94X19tZXNzYWdle3BhZGRpbmctbGVmdDozNnB4O3BhZGRpbmctcmlnaHQ6MTJweH0uZWwtbWVzc2FnZS1ib3hfX3N0YXR1cy5lbC1pY29uLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtbWVzc2FnZS1ib3hfX3N0YXR1cy5lbC1pY29uLWluZm97Y29sb3I6IzkwOTM5OX0uZWwtbWVzc2FnZS1ib3hfX3N0YXR1cy5lbC1pY29uLXdhcm5pbmd7Y29sb3I6I0U2QTIzQ30uZWwtbWVzc2FnZS1ib3hfX3N0YXR1cy5lbC1pY29uLWVycm9ye2NvbG9yOiNGNTZDNkN9LmVsLW1lc3NhZ2UtYm94X19tZXNzYWdle21hcmdpbjowfS5lbC1tZXNzYWdlLWJveF9fbWVzc2FnZSBwe21hcmdpbjowO2xpbmUtaGVpZ2h0OjI0cHh9LmVsLW1lc3NhZ2UtYm94X19lcnJvcm1zZ3tjb2xvcjojRjU2QzZDO2ZvbnQtc2l6ZToxMnB4O21pbi1oZWlnaHQ6MThweDttYXJnaW4tdG9wOjJweH0uZWwtbWVzc2FnZS1ib3hfX2J0bnN7cGFkZGluZzo1cHggMTVweCAwO3RleHQtYWxpZ246cmlnaHR9LmVsLW1lc3NhZ2UtYm94X19idG5zIGJ1dHRvbjpudGgtY2hpbGQoMil7bWFyZ2luLWxlZnQ6MTBweH0uZWwtbWVzc2FnZS1ib3hfX2J0bnMtcmV2ZXJzZXstd2Via2l0LWJveC1vcmllbnQ6aG9yaXpvbnRhbDstd2Via2l0LWJveC1kaXJlY3Rpb246cmV2ZXJzZTstbXMtZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9LmVsLW1lc3NhZ2UtYm94LS1jZW50ZXJ7cGFkZGluZy1ib3R0b206MzBweH0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX2hlYWRlcntwYWRkaW5nLXRvcDozMHB4fS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fdGl0bGV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fc3RhdHVze3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDphdXRvO3BhZGRpbmctcmlnaHQ6NXB4O3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTFweCl9LmVsLW1lc3NhZ2UtYm94LS1jZW50ZXIgLmVsLW1lc3NhZ2UtYm94X19tZXNzYWdle21hcmdpbi1sZWZ0OjB9LmVsLW1lc3NhZ2UtYm94LS1jZW50ZXIgLmVsLW1lc3NhZ2UtYm94X19idG5zLC5lbC1tZXNzYWdlLWJveC0tY2VudGVyIC5lbC1tZXNzYWdlLWJveF9fY29udGVudHt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtbWVzc2FnZS1ib3gtLWNlbnRlciAuZWwtbWVzc2FnZS1ib3hfX2NvbnRlbnR7cGFkZGluZy1sZWZ0OjI3cHg7cGFkZGluZy1yaWdodDoyN3B4fS5tc2dib3gtZmFkZS1lbnRlci1hY3RpdmV7LXdlYmtpdC1hbmltYXRpb246bXNnYm94LWZhZGUtaW4gLjNzO2FuaW1hdGlvbjptc2dib3gtZmFkZS1pbiAuM3N9Lm1zZ2JveC1mYWRlLWxlYXZlLWFjdGl2ZXstd2Via2l0LWFuaW1hdGlvbjptc2dib3gtZmFkZS1vdXQgLjNzO2FuaW1hdGlvbjptc2dib3gtZmFkZS1vdXQgLjNzfUAtd2Via2l0LWtleWZyYW1lcyBtc2dib3gtZmFkZS1pbnswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX19QGtleWZyYW1lcyBtc2dib3gtZmFkZS1pbnswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX19QC13ZWJraXQta2V5ZnJhbWVzIG1zZ2JveC1mYWRlLW91dHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLC0yMHB4LDApO29wYWNpdHk6MH19QGtleWZyYW1lcyBtc2dib3gtZmFkZS1vdXR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9fS5lbC1icmVhZGNydW1ie2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjF9LmVsLWJyZWFkY3J1bWI6OmFmdGVyLC5lbC1icmVhZGNydW1iOjpiZWZvcmV7ZGlzcGxheTp0YWJsZTtjb250ZW50OlxcXCJcXFwifS5lbC1icmVhZGNydW1iOjphZnRlcntjbGVhcjpib3RofS5lbC1icmVhZGNydW1iX19zZXBhcmF0b3J7bWFyZ2luOjAgOXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojQzBDNENDfS5lbC1icmVhZGNydW1iX19zZXBhcmF0b3JbY2xhc3MqPWljb25de21hcmdpbjowIDZweDtmb250LXdlaWdodDo0MDB9LmVsLWJyZWFkY3J1bWJfX2l0ZW17ZmxvYXQ6bGVmdH0uZWwtYnJlYWRjcnVtYl9faW5uZXJ7Y29sb3I6IzYwNjI2Nn0uZWwtYnJlYWRjcnVtYl9faW5uZXIgYSwuZWwtYnJlYWRjcnVtYl9faW5uZXIuaXMtbGlua3tmb250LXdlaWdodDo3MDA7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC10cmFuc2l0aW9uOmNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjpjb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO2NvbG9yOiMzMDMxMzN9LmVsLWJyZWFkY3J1bWJfX2lubmVyIGE6aG92ZXIsLmVsLWJyZWFkY3J1bWJfX2lubmVyLmlzLWxpbms6aG92ZXJ7Y29sb3I6IzQwOUVGRjtjdXJzb3I6cG9pbnRlcn0uZWwtYnJlYWRjcnVtYl9faXRlbTpsYXN0LWNoaWxkIC5lbC1icmVhZGNydW1iX19pbm5lciwuZWwtYnJlYWRjcnVtYl9faXRlbTpsYXN0LWNoaWxkIC5lbC1icmVhZGNydW1iX19pbm5lciBhLC5lbC1icmVhZGNydW1iX19pdGVtOmxhc3QtY2hpbGQgLmVsLWJyZWFkY3J1bWJfX2lubmVyIGE6aG92ZXIsLmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9faW5uZXI6aG92ZXJ7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiM2MDYyNjY7Y3Vyc29yOnRleHR9LmVsLWJyZWFkY3J1bWJfX2l0ZW06bGFzdC1jaGlsZCAuZWwtYnJlYWRjcnVtYl9fc2VwYXJhdG9ye2Rpc3BsYXk6bm9uZX0uZWwtZm9ybS0tbGFiZWwtbGVmdCAuZWwtZm9ybS1pdGVtX19sYWJlbHt0ZXh0LWFsaWduOmxlZnR9LmVsLWZvcm0tLWxhYmVsLXRvcCAuZWwtZm9ybS1pdGVtX19sYWJlbHtmbG9hdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgMCAxMHB4fS5lbC1mb3JtLS1pbmxpbmUgLmVsLWZvcm0taXRlbXtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6MTBweDt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWZvcm0tLWlubGluZSAuZWwtZm9ybS1pdGVtX19sYWJlbHtmbG9hdDpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1mb3JtLS1pbmxpbmUgLmVsLWZvcm0taXRlbV9fY29udGVudHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmVsLWZvcm0tLWlubGluZS5lbC1mb3JtLS1sYWJlbC10b3AgLmVsLWZvcm0taXRlbV9fY29udGVudHtkaXNwbGF5OmJsb2NrfS5lbC1mb3JtLWl0ZW17bWFyZ2luLWJvdHRvbToyMnB4fS5lbC1mb3JtLWl0ZW06OmFmdGVyLC5lbC1mb3JtLWl0ZW06OmJlZm9yZXtkaXNwbGF5OnRhYmxlO2NvbnRlbnQ6XFxcIlxcXCJ9LmVsLWZvcm0taXRlbTo6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtZm9ybS1pdGVtIC5lbC1mb3JtLWl0ZW17bWFyZ2luLWJvdHRvbTowfS5lbC1mb3JtLWl0ZW0tLW1pbmkuZWwtZm9ybS1pdGVtLC5lbC1mb3JtLWl0ZW0tLXNtYWxsLmVsLWZvcm0taXRlbXttYXJnaW4tYm90dG9tOjE4cHh9LmVsLWZvcm0taXRlbSAuZWwtaW5wdXRfX3ZhbGlkYXRlSWNvbntkaXNwbGF5Om5vbmV9LmVsLWZvcm0taXRlbS0tbWVkaXVtIC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQsLmVsLWZvcm0taXRlbS0tbWVkaXVtIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2xpbmUtaGVpZ2h0OjM2cHh9LmVsLWZvcm0taXRlbS0tc21hbGwgLmVsLWZvcm0taXRlbV9fY29udGVudCwuZWwtZm9ybS1pdGVtLS1zbWFsbCAuZWwtZm9ybS1pdGVtX19sYWJlbHtsaW5lLWhlaWdodDozMnB4fS5lbC1mb3JtLWl0ZW0tLXNtYWxsIC5lbC1mb3JtLWl0ZW1fX2Vycm9ye3BhZGRpbmctdG9wOjJweH0uZWwtZm9ybS1pdGVtLS1taW5pIC5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQsLmVsLWZvcm0taXRlbS0tbWluaSAuZWwtZm9ybS1pdGVtX19sYWJlbHtsaW5lLWhlaWdodDoyOHB4fS5lbC1mb3JtLWl0ZW0tLW1pbmkgLmVsLWZvcm0taXRlbV9fZXJyb3J7cGFkZGluZy10b3A6MXB4fS5lbC1mb3JtLWl0ZW1fX2xhYmVsLXdyYXB7ZmxvYXQ6bGVmdH0uZWwtZm9ybS1pdGVtX19sYWJlbC13cmFwIC5lbC1mb3JtLWl0ZW1fX2xhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Zsb2F0Om5vbmV9LmVsLWZvcm0taXRlbV9fbGFiZWx7dGV4dC1hbGlnbjpyaWdodDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2O2xpbmUtaGVpZ2h0OjQwcHg7cGFkZGluZzowIDEycHggMCAwOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZm9ybS1pdGVtX19jb250ZW50e2xpbmUtaGVpZ2h0OjQwcHg7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHh9LmVsLWZvcm0taXRlbV9fY29udGVudDo6YWZ0ZXIsLmVsLWZvcm0taXRlbV9fY29udGVudDo6YmVmb3Jle2Rpc3BsYXk6dGFibGU7Y29udGVudDpcXFwiXFxcIn0uZWwtZm9ybS1pdGVtX19jb250ZW50OjphZnRlcntjbGVhcjpib3RofS5lbC1mb3JtLWl0ZW1fX2NvbnRlbnQgLmVsLWlucHV0LWdyb3Vwe3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtZm9ybS1pdGVtX19lcnJvcntjb2xvcjojRjU2QzZDO2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjE7cGFkZGluZy10b3A6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO2xlZnQ6MH0uZWwtZm9ybS1pdGVtX19lcnJvci0taW5saW5le3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDphdXRvO2xlZnQ6YXV0bztkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tbGVmdDoxMHB4fS5lbC1mb3JtLWl0ZW0uaXMtcmVxdWlyZWQ6bm90KC5pcy1uby1hc3RlcmlzaykgLmVsLWZvcm0taXRlbV9fbGFiZWwtd3JhcD4uZWwtZm9ybS1pdGVtX19sYWJlbDpiZWZvcmUsLmVsLWZvcm0taXRlbS5pcy1yZXF1aXJlZDpub3QoLmlzLW5vLWFzdGVyaXNrKT4uZWwtZm9ybS1pdGVtX19sYWJlbDpiZWZvcmV7Y29udGVudDonKic7Y29sb3I6I0Y1NkM2QzttYXJnaW4tcmlnaHQ6NHB4fS5lbC1mb3JtLWl0ZW0uaXMtZXJyb3IgLmVsLWlucHV0LWdyb3VwX19hcHBlbmQgLmVsLWlucHV0X19pbm5lciwuZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uZWwtZm9ybS1pdGVtLmlzLWVycm9yIC5lbC1pbnB1dF9fdmFsaWRhdGVJY29ue2NvbG9yOiNGNTZDNkN9LmVsLWZvcm0taXRlbS0tZmVlZGJhY2sgLmVsLWlucHV0X192YWxpZGF0ZUljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXRhYnNfX2hlYWRlcntwYWRkaW5nOjA7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luOjAgMCAxNXB4fS5lbC10YWJzX19hY3RpdmUtYmFye3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtoZWlnaHQ6MnB4O2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjt6LWluZGV4OjE7LXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKSwgLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7bGlzdC1zdHlsZTpub25lfS5lbC10YWJzX19uZXctdGFie2Zsb2F0OnJpZ2h0O2JvcmRlcjoxcHggc29saWQgI2QzZGNlNjtoZWlnaHQ6MThweDt3aWR0aDoxOHB4O2xpbmUtaGVpZ2h0OjE4cHg7bWFyZ2luOjEycHggMCA5cHggMTBweDtib3JkZXItcmFkaXVzOjNweDt0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTJweDtjb2xvcjojZDNkY2U2O2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjE1czt0cmFuc2l0aW9uOmFsbCAuMTVzfS5lbC10YWJzX19uZXctdGFiIC5lbC1pY29uLXBsdXN7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjgsLjgpO3RyYW5zZm9ybTpzY2FsZSguOCwuOCl9LmVsLXRhYnNfX25ldy10YWI6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtdGFic19fbmF2LXdyYXB7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi1ib3R0b206LTFweDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdGFic19fbmF2LXdyYXA6OmFmdGVye2NvbnRlbnQ6XFxcIlxcXCI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO2JvdHRvbTowO3dpZHRoOjEwMCU7aGVpZ2h0OjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNFNEU3RUQ7ei1pbmRleDoxfS5lbC10YWJzX19uYXYtd3JhcC5pcy1zY3JvbGxhYmxle3BhZGRpbmc6MCAyMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdGFic19fbmF2LXNjcm9sbHtvdmVyZmxvdzpoaWRkZW59LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzX19uYXYtcHJldntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjtsaW5lLWhlaWdodDo0NHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM5MDkzOTl9LmVsLXRhYnNfX25hdi1uZXh0e3JpZ2h0OjB9LmVsLXRhYnNfX25hdi1wcmV2e2xlZnQ6MH0uZWwtdGFic19fbmF2e3doaXRlLXNwYWNlOm5vd3JhcDtwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MsIC13ZWJraXQtdHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MsLXdlYmtpdC10cmFuc2Zvcm0gLjNzO2Zsb2F0OmxlZnQ7ei1pbmRleDoyfS5lbC10YWJzX19uYXYuaXMtc3RyZXRjaHttaW4td2lkdGg6MTAwJTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS5lbC10YWJzX19uYXYuaXMtc3RyZXRjaD4qey13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdGFic19faXRlbXtwYWRkaW5nOjAgMjBweDtoZWlnaHQ6NDBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGluZS1oZWlnaHQ6NDBweDtkaXNwbGF5OmlubGluZS1ibG9jaztsaXN0LXN0eWxlOm5vbmU7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOiMzMDMxMzM7cG9zaXRpb246cmVsYXRpdmV9LmVsLXRhYnNfX2l0ZW06Zm9jdXMsLmVsLXRhYnNfX2l0ZW06Zm9jdXM6YWN0aXZle291dGxpbmU6MH0uZWwtdGFic19faXRlbTpmb2N1cy5pcy1hY3RpdmUuaXMtZm9jdXM6bm90KDphY3RpdmUpey13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4IDJweCAjNDA5RUZGIGluc2V0O2JveC1zaGFkb3c6MCAwIDJweCAycHggIzQwOUVGRiBpbnNldDtib3JkZXItcmFkaXVzOjNweH0uZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZXtib3JkZXItcmFkaXVzOjUwJTt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTttYXJnaW4tbGVmdDo1cHh9LmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2U6YmVmb3Jley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC45KTt0cmFuc2Zvcm06c2NhbGUoLjkpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2FjdGl2ZS1iYXIsLmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19fYWN0aXZlLWJhci5pcy1sZWZ0LC5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19hY3RpdmUtYmFyLmlzLXJpZ2h0e2Rpc3BsYXk6bm9uZX0uZWwtdGFic19faXRlbSAuZWwtaWNvbi1jbG9zZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0M7Y29sb3I6I0ZGRn0uZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Y29sb3I6IzQwOUVGRn0uZWwtdGFic19faXRlbTpob3Zlcntjb2xvcjojNDA5RUZGO2N1cnNvcjpwb2ludGVyfS5lbC10YWJzX19pdGVtLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOmRlZmF1bHR9LmVsLXRhYnNfX2NvbnRlbnR7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXJ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0U0RTdFRH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19uYXYtd3JhcDo6YWZ0ZXJ7Y29udGVudDpub25lfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX25hdntib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0gLmVsLWljb24tY2xvc2V7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjEycHg7d2lkdGg6MDtoZWlnaHQ6MTRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MTVweDtvdmVyZmxvdzpoaWRkZW47dG9wOi0xcHg7cmlnaHQ6LTJweDstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MTAwJSA1MCU7dHJhbnNmb3JtLW9yaWdpbjoxMDAlIDUwJX0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVte2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRTRFN0VEOy13ZWJraXQtdHJhbnNpdGlvbjpjb2xvciAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpLHBhZGRpbmcgLjNzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTt0cmFuc2l0aW9uOmNvbG9yIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSkscGFkZGluZyAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6bm9uZX0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWNsb3NhYmxlOmhvdmVye3BhZGRpbmctbGVmdDoxM3B4O3BhZGRpbmctcmlnaHQ6MTNweH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWNsb3NhYmxlOmhvdmVyIC5lbC1pY29uLWNsb3Nle3dpZHRoOjE0cHh9LmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Ym9yZGVyLWJvdHRvbS1jb2xvcjojRkZGfS5lbC10YWJzLS1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW0uaXMtYWN0aXZlLmlzLWNsb3NhYmxle3BhZGRpbmctbGVmdDoyMHB4O3BhZGRpbmctcmlnaHQ6MjBweH0uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWFjdGl2ZS5pcy1jbG9zYWJsZSAuZWwtaWNvbi1jbG9zZXt3aWR0aDoxNHB4fS5lbC10YWJzLS1ib3JkZXItY2FyZHtiYWNrZ3JvdW5kOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2Oy13ZWJraXQtYm94LXNoYWRvdzowIDJweCA0cHggMCByZ2JhKDAsMCwwLC4xMiksMCAwIDZweCAwIHJnYmEoMCwwLDAsLjA0KTtib3gtc2hhZG93OjAgMnB4IDRweCAwIHJnYmEoMCwwLDAsLjEyKSwwIDAgNnB4IDAgcmdiYSgwLDAsMCwuMDQpfS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19fY29udGVudHtwYWRkaW5nOjE1cHh9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXJ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFNEU3RUQ7bWFyZ2luOjB9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX25hdi13cmFwOjphZnRlcntjb250ZW50Om5vbmV9LmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW17LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDttYXJnaW4tdG9wOi0xcHg7Y29sb3I6IzkwOTM5OX0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbSsuZWwtdGFic19faXRlbSwuZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpmaXJzdC1jaGlsZHttYXJnaW4tbGVmdDotMXB4fS5lbC1jb2wtb2Zmc2V0LTAsLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmlzLXNjcm9sbGFibGUgLmVsLXRhYnNfX2l0ZW06Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6MH0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbS5pcy1hY3RpdmV7Y29sb3I6IzQwOUVGRjtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNEQ0RGRTY7Ym9yZGVyLWxlZnQtY29sb3I6I0RDREZFNn0uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpub3QoLmlzLWRpc2FibGVkKTpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtLmlzLWRpc2FibGVke2NvbG9yOiNDMEM0Q0N9LmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFic19faXRlbS5pcy1ib3R0b206bnRoLWNoaWxkKDIpLC5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnNfX2l0ZW0uaXMtdG9wOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcCAuZWwtdGFic19faXRlbS5pcy10b3A6bnRoLWNoaWxkKDIpe3BhZGRpbmctbGVmdDowfS5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnNfX2l0ZW0uaXMtYm90dG9tOmxhc3QtY2hpbGQsLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFic19faXRlbS5pcy10b3A6bGFzdC1jaGlsZCwuZWwtdGFicy0tdG9wIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AgLmVsLXRhYnNfX2l0ZW0uaXMtdG9wOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDowfS5lbC1jYXNjYWRlci1tZW51Omxhc3QtY2hpbGQgLmVsLWNhc2NhZGVyLW5vZGUsLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFicy0tbGVmdD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmxhc3QtY2hpbGQsLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFicy0tcmlnaHQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS1ib3R0b20uZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS1ib3R0b20uZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmxhc3QtY2hpbGQsLmVsLXRhYnMtLXRvcCAuZWwtdGFicy0tbGVmdD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmxhc3QtY2hpbGQsLmVsLXRhYnMtLXRvcCAuZWwtdGFicy0tcmlnaHQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AuZWwtdGFicy0tYm9yZGVyLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpsYXN0LWNoaWxkLC5lbC10YWJzLS10b3AuZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOmxhc3QtY2hpbGR7cGFkZGluZy1yaWdodDoyMHB4fS5lbC10YWJzLS1ib3R0b20gLmVsLXRhYnMtLWxlZnQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLWJvdHRvbSAuZWwtdGFicy0tcmlnaHQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWNhcmQ+LmVsLXRhYnNfX2hlYWRlciAuZWwtdGFic19faXRlbTpudGgtY2hpbGQoMiksLmVsLXRhYnMtLXRvcCAuZWwtdGFicy0tbGVmdD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wIC5lbC10YWJzLS1yaWdodD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKSwuZWwtdGFicy0tdG9wLmVsLXRhYnMtLWJvcmRlci1jYXJkPi5lbC10YWJzX19oZWFkZXIgLmVsLXRhYnNfX2l0ZW06bnRoLWNoaWxkKDIpLC5lbC10YWJzLS10b3AuZWwtdGFicy0tY2FyZD4uZWwtdGFic19faGVhZGVyIC5lbC10YWJzX19pdGVtOm50aC1jaGlsZCgyKXtwYWRkaW5nLWxlZnQ6MjBweH0uZWwtdGFicy0tYm90dG9tIC5lbC10YWJzX19oZWFkZXIuaXMtYm90dG9te21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjEwcHh9LmVsLXRhYnMtLWJvdHRvbS5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faGVhZGVyLmlzLWJvdHRvbXtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXRvcDoxcHggc29saWQgI0RDREZFNn0uZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19uYXYtd3JhcC5pcy1ib3R0b217bWFyZ2luLXRvcDotMXB4O21hcmdpbi1ib3R0b206MH0uZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbTpub3QoLmlzLWFjdGl2ZSl7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudH0uZWwtdGFicy0tYm90dG9tLmVsLXRhYnMtLWJvcmRlci1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWJvdHRvbXttYXJnaW46MCAtMXB4IC0xcHh9LmVsLXRhYnMtLWxlZnQsLmVsLXRhYnMtLXJpZ2h0e292ZXJmbG93OmhpZGRlbn0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19faGVhZGVyLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2hlYWRlci5pcy1yaWdodCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXNjcm9sbCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19oZWFkZXIuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX2hlYWRlci5pcy1yaWdodCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi1zY3JvbGwsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHR7aGVpZ2h0OjEwMCV9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fYWN0aXZlLWJhci5pcy1yaWdodCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtcmlnaHR7dG9wOjA7Ym90dG9tOmF1dG87d2lkdGg6MnB4O2hlaWdodDphdXRvfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodHttYXJnaW4tYm90dG9tOjB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtcHJldiwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LXByZXYsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1wcmV2e2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7d2lkdGg6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcn0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQgaSwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LXByZXYgaSwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0IGksLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldiBpLC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQgaSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2IGksLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodD4uZWwtdGFic19fbmF2LW5leHQgaSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldiBpey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooOTBkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDkwZGVnKX0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LXByZXYsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtcHJldiwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1wcmV2LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1wcmV2e2xlZnQ6YXV0bzt0b3A6MH0uZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdD4uZWwtdGFic19fbmF2LW5leHQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0Pi5lbC10YWJzX19uYXYtbmV4dCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ+LmVsLXRhYnNfX25hdi1uZXh0LC5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ+LmVsLXRhYnNfX25hdi1uZXh0e3JpZ2h0OmF1dG87Ym90dG9tOjB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2FjdGl2ZS1iYXIuaXMtbGVmdCwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtbGVmdDo6YWZ0ZXJ7cmlnaHQ6MDtsZWZ0OmF1dG99LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQuaXMtc2Nyb2xsYWJsZSwuZWwtdGFicy0tbGVmdCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQuaXMtc2Nyb2xsYWJsZSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQuaXMtc2Nyb2xsYWJsZSwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0LmlzLXNjcm9sbGFibGV7cGFkZGluZzozMHB4IDB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi13cmFwLmlzLWxlZnQ6OmFmdGVyLC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodDo6YWZ0ZXIsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0OjphZnRlciwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi13cmFwLmlzLXJpZ2h0OjphZnRlcntoZWlnaHQ6MTAwJTt3aWR0aDoycHg7Ym90dG9tOmF1dG87dG9wOjB9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX25hdi5pcy1sZWZ0LC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYuaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYuaXMtbGVmdCwuZWwtdGFicy0tcmlnaHQgLmVsLXRhYnNfX25hdi5pcy1yaWdodHtmbG9hdDpub25lfS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19pdGVtLmlzLWxlZnQsLmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19pdGVtLmlzLWxlZnQsLmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0e2Rpc3BsYXk6YmxvY2t9LmVsLXRhYnMtLWxlZnQgLmVsLXRhYnNfX2hlYWRlci5pcy1sZWZ0e2Zsb2F0OmxlZnQ7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1yaWdodDoxMHB4fS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpub3QoOmxhc3QtY2hpbGQpLC5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1sZWZ0e21hcmdpbi1yaWdodDotMXB4fS5lbC10YWJzLS1sZWZ0IC5lbC10YWJzX19pdGVtLmlzLWxlZnR7dGV4dC1hbGlnbjpyaWdodH0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLWxlZnR7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNFNEU3RUQ7dGV4dC1hbGlnbjpsZWZ0fS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmV7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci1yaWdodC1jb2xvcjojZmZmO2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLWJvdHRvbTpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmU6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1sZWZ0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmU6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19fbmF2e2JvcmRlci1yYWRpdXM6NHB4IDAgMCA0cHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmlnaHQ6bm9uZX0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19uZXctdGFie2Zsb2F0Om5vbmV9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2hlYWRlci5pcy1sZWZ0e2JvcmRlci1yaWdodDoxcHggc29saWQgI2RmZTRlZH0uZWwtdGFicy0tbGVmdC5lbC10YWJzLS1ib3JkZXItY2FyZCAuZWwtdGFic19faXRlbS5pcy1sZWZ0e2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7bWFyZ2luOi0xcHggMCAtMXB4IC0xcHh9LmVsLXRhYnMtLWxlZnQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtbGVmdC5pcy1hY3RpdmV7Ym9yZGVyLWNvbG9yOiNkMWRiZTUgdHJhbnNwYXJlbnR9LmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19oZWFkZXIuaXMtcmlnaHR7ZmxvYXQ6cmlnaHQ7bWFyZ2luLWJvdHRvbTowO21hcmdpbi1sZWZ0OjEwcHh9LmVsLXRhYnMtLXJpZ2h0IC5lbC10YWJzX19uYXYtd3JhcC5pcy1yaWdodHttYXJnaW4tbGVmdDotMXB4fS5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fbmF2LXdyYXAuaXMtcmlnaHQ6OmFmdGVye2xlZnQ6MDtyaWdodDphdXRvfS5lbC10YWJzLS1yaWdodCAuZWwtdGFic19fYWN0aXZlLWJhci5pcy1yaWdodHtsZWZ0OjB9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHR7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlci10b3A6MXB4IHNvbGlkICNFNEU3RUR9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLXRvcDpub25lfS5lbC10YWJzLS1yaWdodC5lbC10YWJzLS1jYXJkIC5lbC10YWJzX19pdGVtLmlzLXJpZ2h0LmlzLWFjdGl2ZXtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWxlZnQtY29sb3I6I2ZmZjtib3JkZXItcmlnaHQ6bm9uZTtib3JkZXItYm90dG9tOm5vbmV9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQuaXMtYWN0aXZlOmZpcnN0LWNoaWxke2JvcmRlci10b3A6bm9uZX0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tY2FyZCAuZWwtdGFic19faXRlbS5pcy1yaWdodC5pcy1hY3RpdmU6bGFzdC1jaGlsZHtib3JkZXItYm90dG9tOm5vbmV9LmVsLXRhYnMtLXJpZ2h0LmVsLXRhYnMtLWNhcmQgLmVsLXRhYnNfX25hdntib3JkZXItcmFkaXVzOjAgNHB4IDRweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFNEU3RUQ7Ym9yZGVyLWxlZnQ6bm9uZX0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2hlYWRlci5pcy1yaWdodHtib3JkZXItbGVmdDoxcHggc29saWQgI2RmZTRlZH0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHR7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDttYXJnaW46LTFweCAtMXB4IC0xcHggMH0uZWwtdGFicy0tcmlnaHQuZWwtdGFicy0tYm9yZGVyLWNhcmQgLmVsLXRhYnNfX2l0ZW0uaXMtcmlnaHQuaXMtYWN0aXZle2JvcmRlci1jb2xvcjojZDFkYmU1IHRyYW5zcGFyZW50fS5zbGlkZUluTGVmdC10cmFuc2l0aW9uLC5zbGlkZUluUmlnaHQtdHJhbnNpdGlvbntkaXNwbGF5OmlubGluZS1ibG9ja30uc2xpZGVJblJpZ2h0LWVudGVyey13ZWJraXQtYW5pbWF0aW9uOnNsaWRlSW5SaWdodC1lbnRlciAuM3M7YW5pbWF0aW9uOnNsaWRlSW5SaWdodC1lbnRlciAuM3N9LnNsaWRlSW5SaWdodC1sZWF2ZXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MDstd2Via2l0LWFuaW1hdGlvbjpzbGlkZUluUmlnaHQtbGVhdmUgLjNzO2FuaW1hdGlvbjpzbGlkZUluUmlnaHQtbGVhdmUgLjNzfS5zbGlkZUluTGVmdC1lbnRlcnstd2Via2l0LWFuaW1hdGlvbjpzbGlkZUluTGVmdC1lbnRlciAuM3M7YW5pbWF0aW9uOnNsaWRlSW5MZWZ0LWVudGVyIC4zc30uc2xpZGVJbkxlZnQtbGVhdmV7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3JpZ2h0OjA7LXdlYmtpdC1hbmltYXRpb246c2xpZGVJbkxlZnQtbGVhdmUgLjNzO2FuaW1hdGlvbjpzbGlkZUluTGVmdC1sZWF2ZSAuM3N9QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlSW5SaWdodC1lbnRlcnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpfXRve29wYWNpdHk6MTstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9fUBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0LWVudGVyezAle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9dG97b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlSW5SaWdodC1sZWF2ZXswJXstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCk7b3BhY2l0eToxfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDEwMCUpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzbGlkZUluUmlnaHQtbGVhdmV7MCV7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgxMDAlKTtvcGFjaXR5OjB9fUAtd2Via2l0LWtleWZyYW1lcyBzbGlkZUluTGVmdC1lbnRlcnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QGtleWZyYW1lcyBzbGlkZUluTGVmdC1lbnRlcnswJXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSl9dG97b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKX19QC13ZWJraXQta2V5ZnJhbWVzIHNsaWRlSW5MZWZ0LWxlYXZlezAley13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgwKTtvcGFjaXR5OjF9MTAwJXstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46MCAwO3RyYW5zZm9ybS1vcmlnaW46MCAwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc2xpZGVJbkxlZnQtbGVhdmV7MCV7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKDApO3RyYW5zZm9ybTp0cmFuc2xhdGVYKDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjowIDA7dHJhbnNmb3JtLW9yaWdpbjowIDA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO29wYWNpdHk6MH19LmVsLXRyZWV7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOmRlZmF1bHQ7YmFja2dyb3VuZDojRkZGO2NvbG9yOiM2MDYyNjZ9LmVsLXRyZWVfX2VtcHR5LWJsb2Nre3Bvc2l0aW9uOnJlbGF0aXZlO21pbi1oZWlnaHQ6NjBweDt0ZXh0LWFsaWduOmNlbnRlcjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC10cmVlX19lbXB0eS10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NTAlO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO2NvbG9yOiM5MDkzOTk7Zm9udC1zaXplOjE0cHh9LmVsLXRyZWVfX2Ryb3AtaW5kaWNhdG9ye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2hlaWdodDoxcHg7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGfS5lbC10cmVlLW5vZGV7d2hpdGUtc3BhY2U6bm93cmFwO291dGxpbmU6MH0uZWwtdHJlZS1ub2RlOmZvY3VzPi5lbC10cmVlLW5vZGVfX2NvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC10cmVlLW5vZGUuaXMtZHJvcC1pbm5lcj4uZWwtdHJlZS1ub2RlX19jb250ZW50IC5lbC10cmVlLW5vZGVfX2xhYmVse2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtjb2xvcjojZmZmfS5lbC10cmVlLW5vZGVfX2NvbnRlbnQ6aG92ZXIsLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQX0uZWwtdHJlZS1ub2RlX19jb250ZW50e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjI2cHg7Y3Vyc29yOnBvaW50ZXJ9LmVsLXRyZWUtbm9kZV9fY29udGVudD4uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbntwYWRkaW5nOjZweH0uZWwtdHJlZS1ub2RlX19jb250ZW50PmxhYmVsLmVsLWNoZWNrYm94e21hcmdpbi1yaWdodDo4cHh9LmVsLXRyZWUuaXMtZHJhZ2dpbmcgLmVsLXRyZWUtbm9kZV9fY29udGVudHtjdXJzb3I6bW92ZX0uZWwtdHJlZS5pcy1kcmFnZ2luZyAuZWwtdHJlZS1ub2RlX19jb250ZW50ICp7cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtdHJlZS5pcy1kcmFnZ2luZy5pcy1kcm9wLW5vdC1hbGxvdyAuZWwtdHJlZS1ub2RlX19jb250ZW50e2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbntjdXJzb3I6cG9pbnRlcjtjb2xvcjojQzBDNENDO2ZvbnQtc2l6ZToxMnB4Oy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgwKTt0cmFuc2Zvcm06cm90YXRlKDApOy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLWluLW91dCwgLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlLWluLW91dCwtd2Via2l0LXRyYW5zZm9ybSAuM3MgZWFzZS1pbi1vdXR9LmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb24uZXhwYW5kZWR7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtdHJlZS1ub2RlX19leHBhbmQtaWNvbi5pcy1sZWFme2NvbG9yOnRyYW5zcGFyZW50O2N1cnNvcjpkZWZhdWx0fS5lbC10cmVlLW5vZGVfX2xhYmVse2ZvbnQtc2l6ZToxNHB4fS5lbC10cmVlLW5vZGVfX2xvYWRpbmctaWNvbnttYXJnaW4tcmlnaHQ6OHB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNDMEM0Q0N9LmVsLXRyZWUtbm9kZT4uZWwtdHJlZS1ub2RlX19jaGlsZHJlbntvdmVyZmxvdzpoaWRkZW47YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtdHJlZS1ub2RlLmlzLWV4cGFuZGVkPi5lbC10cmVlLW5vZGVfX2NoaWxkcmVue2Rpc3BsYXk6YmxvY2t9LmVsLXRyZWUtLWhpZ2hsaWdodC1jdXJyZW50IC5lbC10cmVlLW5vZGUuaXMtY3VycmVudD4uZWwtdHJlZS1ub2RlX19jb250ZW50e2JhY2tncm91bmQtY29sb3I6I2YwZjdmZn0uZWwtYWxlcnQsLmVsLW5vdGlmaWNhdGlvbiwuZWwtc2xpZGVyX19idXR0b24sLmVsLXNsaWRlcl9fc3RvcHtiYWNrZ3JvdW5kLWNvbG9yOiNGRkZ9LmVsLWFsZXJ0e3dpZHRoOjEwMCU7cGFkZGluZzo4cHggMTZweDttYXJnaW46MDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7cG9zaXRpb246cmVsYXRpdmU7b3ZlcmZsb3c6aGlkZGVuO29wYWNpdHk6MTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4yczt0cmFuc2l0aW9uOm9wYWNpdHkgLjJzfS5lbC1hbGVydC5pcy1saWdodCAuZWwtYWxlcnRfX2Nsb3NlYnRue2NvbG9yOiNDMEM0Q0N9LmVsLWFsZXJ0LmlzLWRhcmsgLmVsLWFsZXJ0X19jbG9zZWJ0biwuZWwtYWxlcnQuaXMtZGFyayAuZWwtYWxlcnRfX2Rlc2NyaXB0aW9ue2NvbG9yOiNGRkZ9LmVsLWFsZXJ0LmlzLWNlbnRlcnstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1hbGVydC0tc3VjY2Vzcy5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmMGY5ZWI7Y29sb3I6IzY3QzIzQX0uZWwtYWxlcnQtLXN1Y2Nlc3MuaXMtbGlnaHQgLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojNjdDMjNBfS5lbC1hbGVydC0tc3VjY2Vzcy5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6IzY3QzIzQTtjb2xvcjojRkZGfS5lbC1hbGVydC0taW5mby5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjU7Y29sb3I6IzkwOTM5OX0uZWwtYWxlcnQtLWluZm8uaXMtZGFya3tiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTk7Y29sb3I6I0ZGRn0uZWwtYWxlcnQtLWluZm8gLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojOTA5Mzk5fS5lbC1hbGVydC0td2FybmluZy5pcy1saWdodHtiYWNrZ3JvdW5kLWNvbG9yOiNmZGY2ZWM7Y29sb3I6I0U2QTIzQ30uZWwtYWxlcnQtLXdhcm5pbmcuaXMtbGlnaHQgLmVsLWFsZXJ0X19kZXNjcmlwdGlvbntjb2xvcjojRTZBMjNDfS5lbC1hbGVydC0td2FybmluZy5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6I0U2QTIzQztjb2xvcjojRkZGfS5lbC1hbGVydC0tZXJyb3IuaXMtbGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZmVmMGYwO2NvbG9yOiNGNTZDNkN9LmVsLWFsZXJ0LS1lcnJvci5pcy1saWdodCAuZWwtYWxlcnRfX2Rlc2NyaXB0aW9ue2NvbG9yOiNGNTZDNkN9LmVsLWFsZXJ0LS1lcnJvci5pcy1kYXJre2JhY2tncm91bmQtY29sb3I6I0Y1NkM2Qztjb2xvcjojRkZGfS5lbC1hbGVydF9fY29udGVudHtkaXNwbGF5OnRhYmxlLWNlbGw7cGFkZGluZzowIDhweH0uZWwtYWxlcnRfX2ljb257Zm9udC1zaXplOjE2cHg7d2lkdGg6MTZweH0uZWwtYWxlcnRfX2ljb24uaXMtYmlne2ZvbnQtc2l6ZToyOHB4O3dpZHRoOjI4cHh9LmVsLWFsZXJ0X190aXRsZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOHB4fS5lbC1hbGVydF9fdGl0bGUuaXMtYm9sZHtmb250LXdlaWdodDo3MDB9LmVsLWFsZXJ0IC5lbC1hbGVydF9fZGVzY3JpcHRpb257Zm9udC1zaXplOjEycHg7bWFyZ2luOjVweCAwIDB9LmVsLWFsZXJ0X19jbG9zZWJ0bntmb250LXNpemU6MTJweDtvcGFjaXR5OjE7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEycHg7cmlnaHQ6MTVweDtjdXJzb3I6cG9pbnRlcn0uZWwtYWxlcnQtZmFkZS1lbnRlciwuZWwtYWxlcnQtZmFkZS1sZWF2ZS1hY3RpdmUsLmVsLWxvYWRpbmctZmFkZS1lbnRlciwuZWwtbG9hZGluZy1mYWRlLWxlYXZlLWFjdGl2ZSwuZWwtbm90aWZpY2F0aW9uLWZhZGUtbGVhdmUtYWN0aXZlLC5lbC11cGxvYWQgaWZyYW1le29wYWNpdHk6MH0uZWwtYWxlcnRfX2Nsb3NlYnRuLmlzLWN1c3RvbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtc2l6ZToxM3B4O3RvcDo5cHh9LmVsLW5vdGlmaWNhdGlvbntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O3dpZHRoOjMzMHB4O3BhZGRpbmc6MTRweCAyNnB4IDE0cHggMTNweDtib3JkZXItcmFkaXVzOjhweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O3Bvc2l0aW9uOmZpeGVkOy13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzLGxlZnQgLjNzLHJpZ2h0IC4zcyx0b3AgLjRzLGJvdHRvbSAuM3MsLXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246b3BhY2l0eSAuM3MsbGVmdCAuM3MscmlnaHQgLjNzLHRvcCAuNHMsYm90dG9tIC4zcywtd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyx0cmFuc2Zvcm0gLjNzLGxlZnQgLjNzLHJpZ2h0IC4zcyx0b3AgLjRzLGJvdHRvbSAuM3M7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyx0cmFuc2Zvcm0gLjNzLGxlZnQgLjNzLHJpZ2h0IC4zcyx0b3AgLjRzLGJvdHRvbSAuM3MsLXdlYmtpdC10cmFuc2Zvcm0gLjNzO292ZXJmbG93OmhpZGRlbn0uZWwtbm90aWZpY2F0aW9uLnJpZ2h0e3JpZ2h0OjE2cHh9LmVsLW5vdGlmaWNhdGlvbi5sZWZ0e2xlZnQ6MTZweH0uZWwtbm90aWZpY2F0aW9uX19ncm91cHttYXJnaW4tbGVmdDoxM3B4O21hcmdpbi1yaWdodDo4cHh9LmVsLW5vdGlmaWNhdGlvbl9fdGl0bGV7Zm9udC13ZWlnaHQ6NzAwO2ZvbnQtc2l6ZToxNnB4O2NvbG9yOiMzMDMxMzM7bWFyZ2luOjB9LmVsLW5vdGlmaWNhdGlvbl9fY29udGVudHtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMXB4O21hcmdpbjo2cHggMCAwO2NvbG9yOiM2MDYyNjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5lbC1ub3RpZmljYXRpb25fX2NvbnRlbnQgcHttYXJnaW46MH0uZWwtbm90aWZpY2F0aW9uX19pY29ue2hlaWdodDoyNHB4O3dpZHRoOjI0cHg7Zm9udC1zaXplOjI0cHh9LmVsLW5vdGlmaWNhdGlvbl9fY2xvc2VCdG57cG9zaXRpb246YWJzb2x1dGU7dG9wOjE4cHg7cmlnaHQ6MTVweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxNnB4fS5lbC1ub3RpZmljYXRpb25fX2Nsb3NlQnRuOmhvdmVye2NvbG9yOiM2MDYyNjZ9LmVsLW5vdGlmaWNhdGlvbiAuZWwtaWNvbi1zdWNjZXNze2NvbG9yOiM2N0MyM0F9LmVsLW5vdGlmaWNhdGlvbiAuZWwtaWNvbi1lcnJvcntjb2xvcjojRjU2QzZDfS5lbC1ub3RpZmljYXRpb24gLmVsLWljb24taW5mb3tjb2xvcjojOTA5Mzk5fS5lbC1ub3RpZmljYXRpb24gLmVsLWljb24td2FybmluZ3tjb2xvcjojRTZBMjNDfS5lbC1ub3RpZmljYXRpb24tZmFkZS1lbnRlci5yaWdodHtyaWdodDowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9LmVsLW5vdGlmaWNhdGlvbi1mYWRlLWVudGVyLmxlZnR7bGVmdDowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xMDAlKX0uZWwtaW5wdXQtbnVtYmVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjE4MHB4O2xpbmUtaGVpZ2h0OjM4cHh9LmVsLWlucHV0LW51bWJlciAuZWwtaW5wdXR7ZGlzcGxheTpibG9ja30uZWwtaW5wdXQtbnVtYmVyIC5lbC1pbnB1dF9faW5uZXJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7cGFkZGluZy1sZWZ0OjUwcHg7cGFkZGluZy1yaWdodDo1MHB4O3RleHQtYWxpZ246Y2VudGVyfS5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTt0b3A6MXB4O3dpZHRoOjQwcHg7aGVpZ2h0OmF1dG87dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZDojRjVGN0ZBO2NvbG9yOiM2MDYyNjY7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOjEzcHh9LmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2U6aG92ZXIsLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2U6aG92ZXJ7Y29sb3I6IzQwOUVGRn0uZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZTpob3Zlcjpub3QoLmlzLWRpc2FibGVkKX4uZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpub3QoLmlzLWRpc2FibGVkKSwuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZTpob3Zlcjpub3QoLmlzLWRpc2FibGVkKX4uZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcjpub3QoLmlzLWRpc2FibGVkKXtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZS5pcy1kaXNhYmxlZCwuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZS5pcy1kaXNhYmxlZHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXtyaWdodDoxcHg7Ym9yZGVyLXJhZGl1czowIDRweCA0cHggMDtib3JkZXItbGVmdDoxcHggc29saWQgI0RDREZFNn0uZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZXtsZWZ0OjFweDtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4O2JvcmRlci1yaWdodDoxcHggc29saWQgI0RDREZFNn0uZWwtaW5wdXQtbnVtYmVyLmlzLWRpc2FibGVkIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXIuaXMtZGlzYWJsZWQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7Ym9yZGVyLWNvbG9yOiNFNEU3RUQ7Y29sb3I6I0U0RTdFRH0uZWwtaW5wdXQtbnVtYmVyLmlzLWRpc2FibGVkIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlOmhvdmVyLC5lbC1pbnB1dC1udW1iZXIuaXMtZGlzYWJsZWQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2U6aG92ZXJ7Y29sb3I6I0U0RTdFRDtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWlucHV0LW51bWJlci0tbWVkaXVte3dpZHRoOjIwMHB4O2xpbmUtaGVpZ2h0OjM0cHh9LmVsLWlucHV0LW51bWJlci0tbWVkaXVtIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXItLW1lZGl1bSAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZXt3aWR0aDozNnB4O2ZvbnQtc2l6ZToxNHB4fS5lbC1pbnB1dC1udW1iZXItLW1lZGl1bSAuZWwtaW5wdXRfX2lubmVye3BhZGRpbmctbGVmdDo0M3B4O3BhZGRpbmctcmlnaHQ6NDNweH0uZWwtaW5wdXQtbnVtYmVyLS1zbWFsbHt3aWR0aDoxMzBweDtsaW5lLWhlaWdodDozMHB4fS5lbC1pbnB1dC1udW1iZXItLXNtYWxsIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXItLXNtYWxsIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3dpZHRoOjMycHg7Zm9udC1zaXplOjEzcHh9LmVsLWlucHV0LW51bWJlci0tc21hbGwgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2UgW2NsYXNzKj1lbC1pY29uXSwuZWwtaW5wdXQtbnVtYmVyLS1zbWFsbCAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZSBbY2xhc3MqPWVsLWljb25dey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC45KTt0cmFuc2Zvcm06c2NhbGUoLjkpfS5lbC1pbnB1dC1udW1iZXItLXNtYWxsIC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1sZWZ0OjM5cHg7cGFkZGluZy1yaWdodDozOXB4fS5lbC1pbnB1dC1udW1iZXItLW1pbml7d2lkdGg6MTMwcHg7bGluZS1oZWlnaHQ6MjZweH0uZWwtaW5wdXQtbnVtYmVyLS1taW5pIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1pbnB1dC1udW1iZXItLW1pbmkgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7d2lkdGg6MjhweDtmb250LXNpemU6MTJweH0uZWwtaW5wdXQtbnVtYmVyLS1taW5pIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlIFtjbGFzcyo9ZWwtaWNvbl0sLmVsLWlucHV0LW51bWJlci0tbWluaSAuZWwtaW5wdXQtbnVtYmVyX19pbmNyZWFzZSBbY2xhc3MqPWVsLWljb25dey13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC1pbnB1dC1udW1iZXItLW1pbmkgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6MzVweDtwYWRkaW5nLXJpZ2h0OjM1cHh9LmVsLWlucHV0LW51bWJlci5pcy13aXRob3V0LWNvbnRyb2xzIC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1sZWZ0OjE1cHg7cGFkZGluZy1yaWdodDoxNXB4fS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0X19pbm5lcntwYWRkaW5nLWxlZnQ6MTVweDtwYWRkaW5nLXJpZ2h0OjUwcHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle2hlaWdodDphdXRvO2xpbmUtaGVpZ2h0OjE5cHh9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSBbY2xhc3MqPWVsLWljb25dLC5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHQgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2UgW2NsYXNzKj1lbC1pY29uXXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguOCk7dHJhbnNmb3JtOnNjYWxlKC44KX0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0IC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle2JvcmRlci1yYWRpdXM6MCA0cHggMCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNEQ0RGRTZ9LmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodCAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZXtyaWdodDoxcHg7Ym90dG9tOjFweDt0b3A6YXV0bztsZWZ0OmF1dG87Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNEQ0RGRTY7Ym9yZGVyLXJhZGl1czowIDAgNHB4fS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPW1lZGl1bV0gW2NsYXNzKj1kZWNyZWFzZV0sLmVsLWlucHV0LW51bWJlci5pcy1jb250cm9scy1yaWdodFtjbGFzcyo9bWVkaXVtXSBbY2xhc3MqPWluY3JlYXNlXXtsaW5lLWhlaWdodDoxN3B4fS5lbC1pbnB1dC1udW1iZXIuaXMtY29udHJvbHMtcmlnaHRbY2xhc3MqPXNtYWxsXSBbY2xhc3MqPWRlY3JlYXNlXSwuZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0W2NsYXNzKj1zbWFsbF0gW2NsYXNzKj1pbmNyZWFzZV17bGluZS1oZWlnaHQ6MTVweH0uZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0W2NsYXNzKj1taW5pXSBbY2xhc3MqPWRlY3JlYXNlXSwuZWwtaW5wdXQtbnVtYmVyLmlzLWNvbnRyb2xzLXJpZ2h0W2NsYXNzKj1taW5pXSBbY2xhc3MqPWluY3JlYXNlXXtsaW5lLWhlaWdodDoxM3B4fS5lbC10b29sdGlwOmZvY3VzOmhvdmVyLC5lbC10b29sdGlwOmZvY3VzOm5vdCguZm9jdXNpbmcpe291dGxpbmUtd2lkdGg6MH0uZWwtdG9vbHRpcF9fcG9wcGVye3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MTBweDt6LWluZGV4OjIwMDA7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS4yO21pbi13aWR0aDoxMHB4O3dvcmQtd3JhcDpicmVhay13b3JkfS5lbC10b29sdGlwX19wb3BwZXIgLnBvcHBlcl9fYXJyb3csLmVsLXRvb2x0aXBfX3BvcHBlciAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpibG9jazt3aWR0aDowO2hlaWdodDowO2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItc3R5bGU6c29saWR9LmVsLXRvb2x0aXBfX3BvcHBlciAucG9wcGVyX19hcnJvd3tib3JkZXItd2lkdGg6NnB4fS5lbC10b29sdGlwX19wb3BwZXIgLnBvcHBlcl9fYXJyb3c6OmFmdGVye2NvbnRlbnQ6XFxcIiBcXFwiO2JvcmRlci13aWR0aDo1cHh9LmVsLWJ1dHRvbi1ncm91cDo6YWZ0ZXIsLmVsLWJ1dHRvbi1ncm91cDo6YmVmb3JlLC5lbC1jb2xvci1kcm9wZG93bl9fbWFpbi13cmFwcGVyOjphZnRlciwuZWwtbGluay5pcy11bmRlcmxpbmU6aG92ZXI6YWZ0ZXIsLmVsLXBhZ2UtaGVhZGVyX19sZWZ0OjphZnRlciwuZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcjo6YWZ0ZXIsLmVsLXJvdzo6YWZ0ZXIsLmVsLXJvdzo6YmVmb3JlLC5lbC1zbGlkZXI6OmFmdGVyLC5lbC1zbGlkZXI6OmJlZm9yZSwuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcjo6YWZ0ZXIsLmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9fZm9vdGVyOjphZnRlciwuZWwtdXBsb2FkLWNvdmVyOjphZnRlciwuZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uczo6YWZ0ZXJ7Y29udGVudDpcXFwiXFxcIn0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj10b3Bde21hcmdpbi1ib3R0b206MTJweH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj10b3BdIC5wb3BwZXJfX2Fycm93e2JvdHRvbTotNnB4O2JvcmRlci10b3AtY29sb3I6IzMwMzEzMztib3JkZXItYm90dG9tLXdpZHRoOjB9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym90dG9tOjFweDttYXJnaW4tbGVmdDotNXB4O2JvcmRlci10b3AtY29sb3I6IzMwMzEzMztib3JkZXItYm90dG9tLXdpZHRoOjB9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49Ym90dG9tXXttYXJnaW4tdG9wOjEycHh9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49Ym90dG9tXSAucG9wcGVyX19hcnJvd3t0b3A6LTZweDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XXttYXJnaW4tbGVmdDoxMnB4fS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvd3tsZWZ0Oi02cHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiMzMDMxMzM7Ym9yZGVyLWxlZnQtd2lkdGg6MH0uZWwtdG9vbHRpcF9fcG9wcGVyW3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvdHRvbTotNXB4O2xlZnQ6MXB4O2JvcmRlci1yaWdodC1jb2xvcjojMzAzMTMzO2JvcmRlci1sZWZ0LXdpZHRoOjB9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49bGVmdF17bWFyZ2luLXJpZ2h0OjEycHh9LmVsLXRvb2x0aXBfX3BvcHBlclt4LXBsYWNlbWVudF49bGVmdF0gLnBvcHBlcl9fYXJyb3d7cmlnaHQ6LTZweDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXJbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93OjphZnRlcntyaWdodDoxcHg7Ym90dG9tOi01cHg7bWFyZ2luLWxlZnQ6LTVweDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItbGVmdC1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtZGFya3tiYWNrZ3JvdW5kOiMzMDMxMzM7Y29sb3I6I0ZGRn0uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0e2JhY2tncm91bmQ6I0ZGRjtib3JkZXI6MXB4IHNvbGlkICMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvd3tib3JkZXItdG9wLWNvbG9yOiMzMDMxMzN9LmVsLXRvb2x0aXBfX3BvcHBlci5pcy1saWdodFt4LXBsYWNlbWVudF49dG9wXSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym9yZGVyLXRvcC1jb2xvcjojRkZGfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvcmRlci1ib3R0b20tY29sb3I6I0ZGRn0uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvd3tib3JkZXItbGVmdC1jb2xvcjojMzAzMTMzfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePWxlZnRdIC5wb3BwZXJfX2Fycm93OjphZnRlcntib3JkZXItbGVmdC1jb2xvcjojRkZGfS5lbC10b29sdGlwX19wb3BwZXIuaXMtbGlnaHRbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvd3tib3JkZXItcmlnaHQtY29sb3I6IzMwMzEzM30uZWwtdG9vbHRpcF9fcG9wcGVyLmlzLWxpZ2h0W3gtcGxhY2VtZW50Xj1yaWdodF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvcmRlci1yaWdodC1jb2xvcjojRkZGfS5lbC1zbGlkZXI6OmFmdGVyLC5lbC1zbGlkZXI6OmJlZm9yZXtkaXNwbGF5OnRhYmxlfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyIC5lbC10b29sdGlwLC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXNsaWRlcjo6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtc2xpZGVyX19ydW53YXl7d2lkdGg6MTAwJTtoZWlnaHQ6NnB4O21hcmdpbjoxNnB4IDA7YmFja2dyb3VuZC1jb2xvcjojRTRFN0VEO2JvcmRlci1yYWRpdXM6M3B4O3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc2xpZGVyX19ydW53YXkuc2hvdy1pbnB1dHttYXJnaW4tcmlnaHQ6MTYwcHg7d2lkdGg6YXV0b30uZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHR9LmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2JhcntiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0N9LmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbntib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXIuZHJhZ2dpbmcsLmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLmhvdmVyLC5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcjpob3ZlcntjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXNsaWRlcl9fcnVud2F5LmRpc2FibGVkIC5lbC1zbGlkZXJfX2J1dHRvbi5kcmFnZ2luZywuZWwtc2xpZGVyX19ydW53YXkuZGlzYWJsZWQgLmVsLXNsaWRlcl9fYnV0dG9uLmhvdmVyLC5lbC1zbGlkZXJfX3J1bndheS5kaXNhYmxlZCAuZWwtc2xpZGVyX19idXR0b246aG92ZXJ7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSk7dHJhbnNmb3JtOnNjYWxlKDEpO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtc2xpZGVyX19pbnB1dHtmbG9hdDpyaWdodDttYXJnaW4tdG9wOjNweDt3aWR0aDoxMzBweH0uZWwtc2xpZGVyX19pbnB1dC5lbC1pbnB1dC1udW1iZXItLW1pbml7bWFyZ2luLXRvcDo1cHh9LmVsLXNsaWRlcl9faW5wdXQuZWwtaW5wdXQtbnVtYmVyLS1tZWRpdW17bWFyZ2luLXRvcDowfS5lbC1zbGlkZXJfX2lucHV0LmVsLWlucHV0LW51bWJlci0tbGFyZ2V7bWFyZ2luLXRvcDotMnB4fS5lbC1zbGlkZXJfX2JhcntoZWlnaHQ6NnB4O2JhY2tncm91bmQtY29sb3I6IzQwOUVGRjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjNweDtwb3NpdGlvbjphYnNvbHV0ZX0uZWwtc2xpZGVyX19idXR0b24td3JhcHBlcntoZWlnaHQ6MzZweDt3aWR0aDozNnB4O3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTAwMTt0b3A6LTE1cHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTtsaW5lLWhlaWdodDpub3JtYWx9LmVsLWJ1dHRvbiwuZWwtY2hlY2tib3gsLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIsLmVsLWVtcHR5X19pbWFnZSBpbWcsLmVsLWltYWdlLXZpZXdlcl9fYnRuLC5lbC1yYWRpbywuZWwtc2xpZGVyX19idXR0b24sLmVsLXN0ZXBfX2ljb24taW5uZXJ7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lfS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyOjphZnRlcntoZWlnaHQ6MTAwJX0uZWwtc2xpZGVyX19idXR0b24td3JhcHBlci5ob3ZlciwuZWwtc2xpZGVyX19idXR0b24td3JhcHBlcjpob3ZlcntjdXJzb3I6LXdlYmtpdC1ncmFiO2N1cnNvcjpncmFifS5lbC1zbGlkZXJfX2J1dHRvbi13cmFwcGVyLmRyYWdnaW5ne2N1cnNvcjotd2Via2l0LWdyYWJiaW5nO2N1cnNvcjpncmFiYmluZ30uZWwtc2xpZGVyX19idXR0b257d2lkdGg6MTZweDtoZWlnaHQ6MTZweDtib3JkZXI6MnB4IHNvbGlkICM0MDlFRkY7Ym9yZGVyLXJhZGl1czo1MCU7LXdlYmtpdC10cmFuc2l0aW9uOi4yczt0cmFuc2l0aW9uOi4yczstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5nLC5lbC1zbGlkZXJfX2J1dHRvbi5ob3ZlciwuZWwtc2xpZGVyX19idXR0b246aG92ZXJ7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4yKTt0cmFuc2Zvcm06c2NhbGUoMS4yKX0uZWwtc2xpZGVyX19idXR0b24uaG92ZXIsLmVsLXNsaWRlcl9fYnV0dG9uOmhvdmVye2N1cnNvcjotd2Via2l0LWdyYWI7Y3Vyc29yOmdyYWJ9LmVsLXNsaWRlcl9fYnV0dG9uLmRyYWdnaW5ne2N1cnNvcjotd2Via2l0LWdyYWJiaW5nO2N1cnNvcjpncmFiYmluZ30uZWwtc2xpZGVyX19zdG9we3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDo2cHg7d2lkdGg6NnB4O2JvcmRlci1yYWRpdXM6MTAwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpfS5lbC1zbGlkZXJfX21hcmtze3RvcDowO2xlZnQ6MTJweDt3aWR0aDoxOHB4O2hlaWdodDoxMDAlfS5lbC1zbGlkZXJfX21hcmtzLXRleHR7cG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtNTAlKTtmb250LXNpemU6MTRweDtjb2xvcjojOTA5Mzk5O21hcmdpbi10b3A6MTVweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2Fse3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fcnVud2F5e3dpZHRoOjZweDtoZWlnaHQ6MTAwJTttYXJnaW46MCAxNnB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fYmFye3dpZHRoOjZweDtoZWlnaHQ6YXV0bztib3JkZXItcmFkaXVzOjAgMCAzcHggM3B4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwgLmVsLXNsaWRlcl9fYnV0dG9uLXdyYXBwZXJ7dG9wOmF1dG87bGVmdDotMTVweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKDUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoNTAlKX0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1zbGlkZXJfX3N0b3B7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSg1MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDUwJSl9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXR7cGFkZGluZy1ib3R0b206NThweH0uZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dHtvdmVyZmxvdzp2aXNpYmxlO2Zsb2F0Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjIycHg7d2lkdGg6MzZweDttYXJnaW4tdG9wOjE1cHh9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0X19pbm5lcnt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nLWxlZnQ6NXB4O3BhZGRpbmctcmlnaHQ6NXB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3RvcDozMnB4O21hcmdpbi10b3A6LTFweDtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7bGluZS1oZWlnaHQ6MjBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSl9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbC5lbC1zbGlkZXItLXdpdGgtaW5wdXQgLmVsLXNsaWRlcl9faW5wdXQgLmVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2V7d2lkdGg6MThweDtyaWdodDoxOHB4O2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle3dpZHRoOjE5cHg7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NHB4fS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0IC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlfi5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0OmhvdmVyIC5lbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlLC5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0OmhvdmVyIC5lbC1pbnB1dC1udW1iZXJfX2luY3JlYXNle2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC1zbGlkZXIuaXMtdmVydGljYWwuZWwtc2xpZGVyLS13aXRoLWlucHV0IC5lbC1zbGlkZXJfX2lucHV0OmFjdGl2ZSAuZWwtaW5wdXQtbnVtYmVyX19kZWNyZWFzZSwuZWwtc2xpZGVyLmlzLXZlcnRpY2FsLmVsLXNsaWRlci0td2l0aC1pbnB1dCAuZWwtc2xpZGVyX19pbnB1dDphY3RpdmUgLmVsLWlucHV0LW51bWJlcl9faW5jcmVhc2V7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtc2xpZGVyX19tYXJrcy10ZXh0e21hcmdpbi10b3A6MDtsZWZ0OjE1cHg7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSg1MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDUwJSl9LmVsLWxvYWRpbmctcGFyZW50LS1yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZSFpbXBvcnRhbnR9LmVsLWxvYWRpbmctcGFyZW50LS1oaWRkZW57b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH0uZWwtbG9hZGluZy1tYXNre3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MjAwMDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsLjkpO21hcmdpbjowO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zczt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzfS5lbC1sb2FkaW5nLW1hc2suaXMtZnVsbHNjcmVlbntwb3NpdGlvbjpmaXhlZH0uZWwtbG9hZGluZy1tYXNrLmlzLWZ1bGxzY3JlZW4gLmVsLWxvYWRpbmctc3Bpbm5lcnttYXJnaW4tdG9wOi0yNXB4fS5lbC1sb2FkaW5nLW1hc2suaXMtZnVsbHNjcmVlbiAuZWwtbG9hZGluZy1zcGlubmVyIC5jaXJjdWxhcntoZWlnaHQ6NTBweDt3aWR0aDo1MHB4fS5lbC1sb2FkaW5nLXNwaW5uZXJ7dG9wOjUwJTttYXJnaW4tdG9wOi0yMXB4O3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGV9LmVsLWNvbC1wdWxsLTAsLmVsLWNvbC1wdWxsLTEsLmVsLWNvbC1wdWxsLTEwLC5lbC1jb2wtcHVsbC0xMSwuZWwtY29sLXB1bGwtMTIsLmVsLWNvbC1wdWxsLTEzLC5lbC1jb2wtcHVsbC0xNCwuZWwtY29sLXB1bGwtMTUsLmVsLWNvbC1wdWxsLTE2LC5lbC1jb2wtcHVsbC0xNywuZWwtY29sLXB1bGwtMTgsLmVsLWNvbC1wdWxsLTE5LC5lbC1jb2wtcHVsbC0yLC5lbC1jb2wtcHVsbC0yMCwuZWwtY29sLXB1bGwtMjEsLmVsLWNvbC1wdWxsLTIyLC5lbC1jb2wtcHVsbC0yMywuZWwtY29sLXB1bGwtMjQsLmVsLWNvbC1wdWxsLTMsLmVsLWNvbC1wdWxsLTQsLmVsLWNvbC1wdWxsLTUsLmVsLWNvbC1wdWxsLTYsLmVsLWNvbC1wdWxsLTcsLmVsLWNvbC1wdWxsLTgsLmVsLWNvbC1wdWxsLTksLmVsLWNvbC1wdXNoLTAsLmVsLWNvbC1wdXNoLTEsLmVsLWNvbC1wdXNoLTEwLC5lbC1jb2wtcHVzaC0xMSwuZWwtY29sLXB1c2gtMTIsLmVsLWNvbC1wdXNoLTEzLC5lbC1jb2wtcHVzaC0xNCwuZWwtY29sLXB1c2gtMTUsLmVsLWNvbC1wdXNoLTE2LC5lbC1jb2wtcHVzaC0xNywuZWwtY29sLXB1c2gtMTgsLmVsLWNvbC1wdXNoLTE5LC5lbC1jb2wtcHVzaC0yLC5lbC1jb2wtcHVzaC0yMCwuZWwtY29sLXB1c2gtMjEsLmVsLWNvbC1wdXNoLTIyLC5lbC1jb2wtcHVzaC0yMywuZWwtY29sLXB1c2gtMjQsLmVsLWNvbC1wdXNoLTMsLmVsLWNvbC1wdXNoLTQsLmVsLWNvbC1wdXNoLTUsLmVsLWNvbC1wdXNoLTYsLmVsLWNvbC1wdXNoLTcsLmVsLWNvbC1wdXNoLTgsLmVsLWNvbC1wdXNoLTksLmVsLXJvdywuZWwtdXBsb2FkLWRyYWdnZXIsLmVsLXVwbG9hZC1saXN0X19pdGVte3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1sb2FkaW5nLXNwaW5uZXIgLmVsLWxvYWRpbmctdGV4dHtjb2xvcjojNDA5RUZGO21hcmdpbjozcHggMDtmb250LXNpemU6MTRweH0uZWwtbG9hZGluZy1zcGlubmVyIC5jaXJjdWxhcntoZWlnaHQ6NDJweDt3aWR0aDo0MnB4Oy13ZWJraXQtYW5pbWF0aW9uOmxvYWRpbmctcm90YXRlIDJzIGxpbmVhciBpbmZpbml0ZTthbmltYXRpb246bG9hZGluZy1yb3RhdGUgMnMgbGluZWFyIGluZmluaXRlfS5lbC1sb2FkaW5nLXNwaW5uZXIgLnBhdGh7LXdlYmtpdC1hbmltYXRpb246bG9hZGluZy1kYXNoIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7YW5pbWF0aW9uOmxvYWRpbmctZGFzaCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO3N0cm9rZS1kYXNoYXJyYXk6OTAsMTUwO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlOiM0MDlFRkY7c3Ryb2tlLWxpbmVjYXA6cm91bmR9LmVsLWxvYWRpbmctc3Bpbm5lciBpe2NvbG9yOiM0MDlFRkZ9QC13ZWJraXQta2V5ZnJhbWVzIGxvYWRpbmctcm90YXRlezEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM2MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1Aa2V5ZnJhbWVzIGxvYWRpbmctcm90YXRlezEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDM2MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpfX1ALXdlYmtpdC1rZXlmcmFtZXMgbG9hZGluZy1kYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTQwcHh9MTAwJXtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDotMTIwcHh9fUBrZXlmcmFtZXMgbG9hZGluZy1kYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwyMDA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTQwcHh9MTAwJXtzdHJva2UtZGFzaGFycmF5OjkwLDE1MDtzdHJva2UtZGFzaG9mZnNldDotMTIwcHh9fS5lbC1yb3d7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1yb3c6OmFmdGVyLC5lbC1yb3c6OmJlZm9yZXtkaXNwbGF5OnRhYmxlfS5lbC1yb3c6OmFmdGVye2NsZWFyOmJvdGh9LmVsLXJvdy0tZmxleHtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4fS5lbC1jb2wtMCwuZWwtcm93LS1mbGV4OmFmdGVyLC5lbC1yb3ctLWZsZXg6YmVmb3Jle2Rpc3BsYXk6bm9uZX0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktY2VudGVyey13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmVsLXJvdy0tZmxleC5pcy1qdXN0aWZ5LWVuZHstd2Via2l0LWJveC1wYWNrOmVuZDstbXMtZmxleC1wYWNrOmVuZDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmVsLXJvdy0tZmxleC5pcy1qdXN0aWZ5LXNwYWNlLWJldHdlZW57LXdlYmtpdC1ib3gtcGFjazpqdXN0aWZ5Oy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0uZWwtcm93LS1mbGV4LmlzLWp1c3RpZnktc3BhY2UtYXJvdW5key1tcy1mbGV4LXBhY2s6ZGlzdHJpYnV0ZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5lbC1yb3ctLWZsZXguaXMtYWxpZ24tdG9wey13ZWJraXQtYm94LWFsaWduOnN0YXJ0Oy1tcy1mbGV4LWFsaWduOnN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmVsLXJvdy0tZmxleC5pcy1hbGlnbi1taWRkbGV7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLXJvdy0tZmxleC5pcy1hbGlnbi1ib3R0b217LXdlYmtpdC1ib3gtYWxpZ246ZW5kOy1tcy1mbGV4LWFsaWduOmVuZDthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2xhc3MqPWVsLWNvbC1de2Zsb2F0OmxlZnQ7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94fS5lbC1jb2wtMHt3aWR0aDowJX0uZWwtY29sLXB1bGwtMHtyaWdodDowfS5lbC1jb2wtcHVzaC0we2xlZnQ6MH0uZWwtY29sLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLXB1bGwtMXtyaWdodDo0LjE2NjY3JX0uZWwtY29sLXB1c2gtMXtsZWZ0OjQuMTY2NjclfS5lbC1jb2wtMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wtcHVsbC0ye3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wtcHVzaC0ye2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC0ze3dpZHRoOjEyLjUlfS5lbC1jb2wtb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC1wdWxsLTN7cmlnaHQ6MTIuNSV9LmVsLWNvbC1wdXNoLTN7bGVmdDoxMi41JX0uZWwtY29sLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wtb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wtcHVsbC00e3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLXB1c2gtNHtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wtb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wtcHVsbC01e3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLXB1c2gtNXtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLTZ7d2lkdGg6MjUlfS5lbC1jb2wtb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wtcHVsbC02e3JpZ2h0OjI1JX0uZWwtY29sLXB1c2gtNntsZWZ0OjI1JX0uZWwtY29sLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wtb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wtcHVsbC03e3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLXB1c2gtN3tsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wtb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtcHVsbC04e3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLXB1c2gtOHtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLXB1bGwtOXtyaWdodDozNy41JX0uZWwtY29sLXB1c2gtOXtsZWZ0OjM3LjUlfS5lbC1jb2wtMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wtb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXB1bGwtMTB7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wtcHVzaC0xMHtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC1wdWxsLTExe3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLXB1c2gtMTF7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC0xMnt3aWR0aDo1MCV9LmVsLWNvbC1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wtcHVsbC0xMntyaWdodDo1MCV9LmVsLWNvbC1wdXNoLTEye2xlZnQ6NTAlfS5lbC1jb2wtMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wtb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXB1bGwtMTN7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wtcHVzaC0xM3tsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC1wdWxsLTE0e3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLXB1c2gtMTR7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLXB1bGwtMTV7cmlnaHQ6NjIuNSV9LmVsLWNvbC1wdXNoLTE1e2xlZnQ6NjIuNSV9LmVsLWNvbC0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wtcHVsbC0xNntyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC1wdXNoLTE2e2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wtMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wtb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXB1bGwtMTd7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wtcHVzaC0xN3tsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLTE4e3dpZHRoOjc1JX0uZWwtY29sLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC1wdWxsLTE4e3JpZ2h0Ojc1JX0uZWwtY29sLXB1c2gtMTh7bGVmdDo3NSV9LmVsLWNvbC0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wtcHVsbC0xOXtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC1wdXNoLTE5e2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wtMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wtb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXB1bGwtMjB7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wtcHVzaC0yMHtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wtb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wtcHVsbC0yMXtyaWdodDo4Ny41JX0uZWwtY29sLXB1c2gtMjF7bGVmdDo4Ny41JX0uZWwtY29sLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC1wdWxsLTIye3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLXB1c2gtMjJ7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wtcHVsbC0yM3tyaWdodDo5NS44MzMzMyV9LmVsLWNvbC1wdXNoLTIze2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wtMjR7d2lkdGg6MTAwJX0uZWwtY29sLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wtcHVsbC0yNHtyaWdodDoxMDAlfS5lbC1jb2wtcHVzaC0yNHtsZWZ0OjEwMCV9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2N3B4KXsuZWwtY29sLXhzLTB7ZGlzcGxheTpub25lO3dpZHRoOjAlfS5lbC1jb2wteHMtb2Zmc2V0LTB7bWFyZ2luLWxlZnQ6MH0uZWwtY29sLXhzLXB1bGwtMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDowfS5lbC1jb2wteHMtcHVzaC0we3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MH0uZWwtY29sLXhzLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLXhzLXB1bGwtMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0LjE2NjY3JX0uZWwtY29sLXhzLXB1c2gtMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQuMTY2NjclfS5lbC1jb2wteHMtMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wteHMtcHVsbC0ye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wteHMtcHVzaC0ye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC14cy0ze3dpZHRoOjEyLjUlfS5lbC1jb2wteHMtb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC14cy1wdWxsLTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTIuNSV9LmVsLWNvbC14cy1wdXNoLTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMi41JX0uZWwtY29sLXhzLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wteHMtcHVsbC00e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLXhzLXB1c2gtNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXhzLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wteHMtcHVsbC01e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLXhzLXB1c2gtNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXhzLTZ7d2lkdGg6MjUlfS5lbC1jb2wteHMtb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wteHMtcHVsbC02e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI1JX0uZWwtY29sLXhzLXB1c2gtNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI1JX0uZWwtY29sLXhzLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wteHMtcHVsbC03e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLXhzLXB1c2gtN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXhzLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wteHMtcHVsbC04e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLXhzLXB1c2gtOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXhzLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC14cy1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLXhzLXB1bGwtOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozNy41JX0uZWwtY29sLXhzLXB1c2gtOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjM3LjUlfS5lbC1jb2wteHMtMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXhzLXB1bGwtMTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wteHMtcHVzaC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXhzLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC14cy1wdWxsLTExe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLXhzLXB1c2gtMTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC14cy0xMnt3aWR0aDo1MCV9LmVsLWNvbC14cy1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wteHMtcHVsbC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1MCV9LmVsLWNvbC14cy1wdXNoLTEye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlfS5lbC1jb2wteHMtMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wteHMtb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXhzLXB1bGwtMTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wteHMtcHVzaC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXhzLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLXhzLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC14cy1wdWxsLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLXhzLXB1c2gtMTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC14cy0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLXhzLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLXhzLXB1bGwtMTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjIuNSV9LmVsLWNvbC14cy1wdXNoLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjIuNSV9LmVsLWNvbC14cy0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wteHMtcHVsbC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC14cy1wdXNoLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wteHMtMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXhzLXB1bGwtMTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wteHMtcHVzaC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXhzLTE4e3dpZHRoOjc1JX0uZWwtY29sLXhzLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC14cy1wdWxsLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc1JX0uZWwtY29sLXhzLXB1c2gtMTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3NSV9LmVsLWNvbC14cy0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC14cy1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wteHMtcHVsbC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC14cy1wdXNoLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wteHMtMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wteHMtb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXhzLXB1bGwtMjB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wteHMtcHVzaC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXhzLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wteHMtb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wteHMtcHVsbC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4Ny41JX0uZWwtY29sLXhzLXB1c2gtMjF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4Ny41JX0uZWwtY29sLXhzLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLXhzLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC14cy1wdWxsLTIye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLXhzLXB1c2gtMjJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC14cy0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC14cy1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wteHMtcHVsbC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5NS44MzMzMyV9LmVsLWNvbC14cy1wdXNoLTIze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wteHMtMjR7d2lkdGg6MTAwJX0uZWwtY29sLXhzLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wteHMtcHVsbC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMDAlfS5lbC1jb2wteHMtcHVzaC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEwMCV9fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDo3NjhweCl7LmVsLWNvbC1zbS0we2Rpc3BsYXk6bm9uZTt3aWR0aDowJX0uZWwtY29sLXNtLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC1zbS1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLXNtLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC1zbS0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC1zbS1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC1zbS1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLXNtLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLXNtLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLXNtLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wtc20tM3t3aWR0aDoxMi41JX0uZWwtY29sLXNtLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wtc20tcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wtc20tcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC1zbS00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLXNtLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXNtLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC1zbS1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC1zbS01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLXNtLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXNtLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC1zbS1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC1zbS02e3dpZHRoOjI1JX0uZWwtY29sLXNtLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLXNtLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC1zbS1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC1zbS03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLXNtLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXNtLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC1zbS1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1zbS04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLXNtLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXNtLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC1zbS1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC1zbS05e3dpZHRoOjM3LjUlfS5lbC1jb2wtc20tb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC1zbS1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC1zbS1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLXNtLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC1zbS1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLXNtLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC1zbS0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wtc20tcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC1zbS1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wtc20tMTJ7d2lkdGg6NTAlfS5lbC1jb2wtc20tb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLXNtLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wtc20tcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLXNtLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLXNtLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1zbS1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLXNtLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1zbS0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC1zbS1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wtc20tcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC1zbS1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wtc20tMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC1zbS1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC1zbS1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wtc20tcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wtc20tMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXNtLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wtc20tcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLXNtLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC1zbS1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLXNtLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC1zbS0xOHt3aWR0aDo3NSV9LmVsLWNvbC1zbS1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wtc20tcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC1zbS1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wtc20tMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wtc20tb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXNtLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wtc20tcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLXNtLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLXNtLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC1zbS1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLXNtLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC1zbS0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLXNtLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLXNtLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC1zbS1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC1zbS0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC1zbS1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wtc20tcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC1zbS1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wtc20tMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wtc20tb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXNtLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wtc20tcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLXNtLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC1zbS1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLXNtLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLXNtLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6OTkycHgpey5lbC1jb2wtbWQtMHtkaXNwbGF5Om5vbmU7d2lkdGg6MCV9LmVsLWNvbC1tZC1vZmZzZXQtMHttYXJnaW4tbGVmdDowfS5lbC1jb2wtbWQtcHVsbC0we3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjB9LmVsLWNvbC1tZC1wdXNoLTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDowfS5lbC1jb2wtbWQtMXt3aWR0aDo0LjE2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xe21hcmdpbi1sZWZ0OjQuMTY2NjclfS5lbC1jb2wtbWQtcHVsbC0xe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQuMTY2NjclfS5lbC1jb2wtbWQtcHVzaC0xe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NC4xNjY2NyV9LmVsLWNvbC1tZC0ye3dpZHRoOjguMzMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTJ7bWFyZ2luLWxlZnQ6OC4zMzMzMyV9LmVsLWNvbC1tZC1wdWxsLTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OC4zMzMzMyV9LmVsLWNvbC1tZC1wdXNoLTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4LjMzMzMzJX0uZWwtY29sLW1kLTN7d2lkdGg6MTIuNSV9LmVsLWNvbC1tZC1vZmZzZXQtM3ttYXJnaW4tbGVmdDoxMi41JX0uZWwtY29sLW1kLXB1bGwtM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMi41JX0uZWwtY29sLW1kLXB1c2gtM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEyLjUlfS5lbC1jb2wtbWQtNHt3aWR0aDoxNi42NjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtNHttYXJnaW4tbGVmdDoxNi42NjY2NyV9LmVsLWNvbC1tZC1wdWxsLTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTYuNjY2NjclfS5lbC1jb2wtbWQtcHVzaC00e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTYuNjY2NjclfS5lbC1jb2wtbWQtNXt3aWR0aDoyMC44MzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtNXttYXJnaW4tbGVmdDoyMC44MzMzMyV9LmVsLWNvbC1tZC1wdWxsLTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjAuODMzMzMlfS5lbC1jb2wtbWQtcHVzaC01e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjAuODMzMzMlfS5lbC1jb2wtbWQtNnt3aWR0aDoyNSV9LmVsLWNvbC1tZC1vZmZzZXQtNnttYXJnaW4tbGVmdDoyNSV9LmVsLWNvbC1tZC1wdWxsLTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjUlfS5lbC1jb2wtbWQtcHVzaC02e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjUlfS5lbC1jb2wtbWQtN3t3aWR0aDoyOS4xNjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtN3ttYXJnaW4tbGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1tZC1wdWxsLTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MjkuMTY2NjclfS5lbC1jb2wtbWQtcHVzaC03e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MjkuMTY2NjclfS5lbC1jb2wtbWQtOHt3aWR0aDozMy4zMzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtOHttYXJnaW4tbGVmdDozMy4zMzMzMyV9LmVsLWNvbC1tZC1wdWxsLTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzMuMzMzMzMlfS5lbC1jb2wtbWQtcHVzaC04e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzMuMzMzMzMlfS5lbC1jb2wtbWQtOXt3aWR0aDozNy41JX0uZWwtY29sLW1kLW9mZnNldC05e21hcmdpbi1sZWZ0OjM3LjUlfS5lbC1jb2wtbWQtcHVsbC05e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjM3LjUlfS5lbC1jb2wtbWQtcHVzaC05e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MzcuNSV9LmVsLWNvbC1tZC0xMHt3aWR0aDo0MS42NjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtMTB7bWFyZ2luLWxlZnQ6NDEuNjY2NjclfS5lbC1jb2wtbWQtcHVsbC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0MS42NjY2NyV9LmVsLWNvbC1tZC1wdXNoLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDEuNjY2NjclfS5lbC1jb2wtbWQtMTF7d2lkdGg6NDUuODMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLW1kLXB1bGwtMTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDUuODMzMzMlfS5lbC1jb2wtbWQtcHVzaC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQ1LjgzMzMzJX0uZWwtY29sLW1kLTEye3dpZHRoOjUwJX0uZWwtY29sLW1kLW9mZnNldC0xMnttYXJnaW4tbGVmdDo1MCV9LmVsLWNvbC1tZC1wdWxsLTEye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjUwJX0uZWwtY29sLW1kLXB1c2gtMTJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1MCV9LmVsLWNvbC1tZC0xM3t3aWR0aDo1NC4xNjY2NyV9LmVsLWNvbC1tZC1vZmZzZXQtMTN7bWFyZ2luLWxlZnQ6NTQuMTY2NjclfS5lbC1jb2wtbWQtcHVsbC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1NC4xNjY2NyV9LmVsLWNvbC1tZC1wdXNoLTEze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTQuMTY2NjclfS5lbC1jb2wtbWQtMTR7d2lkdGg6NTguMzMzMzMlfS5lbC1jb2wtbWQtb2Zmc2V0LTE0e21hcmdpbi1sZWZ0OjU4LjMzMzMzJX0uZWwtY29sLW1kLXB1bGwtMTR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTguMzMzMzMlfS5lbC1jb2wtbWQtcHVzaC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU4LjMzMzMzJX0uZWwtY29sLW1kLTE1e3dpZHRoOjYyLjUlfS5lbC1jb2wtbWQtb2Zmc2V0LTE1e21hcmdpbi1sZWZ0OjYyLjUlfS5lbC1jb2wtbWQtcHVsbC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Mi41JX0uZWwtY29sLW1kLXB1c2gtMTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Mi41JX0uZWwtY29sLW1kLTE2e3dpZHRoOjY2LjY2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xNnttYXJnaW4tbGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1tZC1wdWxsLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjY2LjY2NjY3JX0uZWwtY29sLW1kLXB1c2gtMTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo2Ni42NjY2NyV9LmVsLWNvbC1tZC0xN3t3aWR0aDo3MC44MzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMTd7bWFyZ2luLWxlZnQ6NzAuODMzMzMlfS5lbC1jb2wtbWQtcHVsbC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3MC44MzMzMyV9LmVsLWNvbC1tZC1wdXNoLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzAuODMzMzMlfS5lbC1jb2wtbWQtMTh7d2lkdGg6NzUlfS5lbC1jb2wtbWQtb2Zmc2V0LTE4e21hcmdpbi1sZWZ0Ojc1JX0uZWwtY29sLW1kLXB1bGwtMTh7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzUlfS5lbC1jb2wtbWQtcHVzaC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc1JX0uZWwtY29sLW1kLTE5e3dpZHRoOjc5LjE2NjY3JX0uZWwtY29sLW1kLW9mZnNldC0xOXttYXJnaW4tbGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1tZC1wdWxsLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc5LjE2NjY3JX0uZWwtY29sLW1kLXB1c2gtMTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3OS4xNjY2NyV9LmVsLWNvbC1tZC0yMHt3aWR0aDo4My4zMzMzMyV9LmVsLWNvbC1tZC1vZmZzZXQtMjB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtbWQtcHVsbC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4My4zMzMzMyV9LmVsLWNvbC1tZC1wdXNoLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODMuMzMzMzMlfS5lbC1jb2wtbWQtMjF7d2lkdGg6ODcuNSV9LmVsLWNvbC1tZC1vZmZzZXQtMjF7bWFyZ2luLWxlZnQ6ODcuNSV9LmVsLWNvbC1tZC1wdWxsLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojg3LjUlfS5lbC1jb2wtbWQtcHVzaC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojg3LjUlfS5lbC1jb2wtbWQtMjJ7d2lkdGg6OTEuNjY2NjclfS5lbC1jb2wtbWQtb2Zmc2V0LTIye21hcmdpbi1sZWZ0OjkxLjY2NjY3JX0uZWwtY29sLW1kLXB1bGwtMjJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTEuNjY2NjclfS5lbC1jb2wtbWQtcHVzaC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjkxLjY2NjY3JX0uZWwtY29sLW1kLTIze3dpZHRoOjk1LjgzMzMzJX0uZWwtY29sLW1kLW9mZnNldC0yM3ttYXJnaW4tbGVmdDo5NS44MzMzMyV9LmVsLWNvbC1tZC1wdWxsLTIze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojk1LjgzMzMzJX0uZWwtY29sLW1kLXB1c2gtMjN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5NS44MzMzMyV9LmVsLWNvbC1tZC0yNHt3aWR0aDoxMDAlfS5lbC1jb2wtbWQtb2Zmc2V0LTI0e21hcmdpbi1sZWZ0OjEwMCV9LmVsLWNvbC1tZC1wdWxsLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEwMCV9LmVsLWNvbC1tZC1wdXNoLTI0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTAwJX19QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOjEyMDBweCl7LmVsLWNvbC1sZy0we2Rpc3BsYXk6bm9uZTt3aWR0aDowJX0uZWwtY29sLWxnLW9mZnNldC0we21hcmdpbi1sZWZ0OjB9LmVsLWNvbC1sZy1wdWxsLTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MH0uZWwtY29sLWxnLXB1c2gtMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjB9LmVsLWNvbC1sZy0xe3dpZHRoOjQuMTY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTF7bWFyZ2luLWxlZnQ6NC4xNjY2NyV9LmVsLWNvbC1sZy1wdWxsLTF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NC4xNjY2NyV9LmVsLWNvbC1sZy1wdXNoLTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0LjE2NjY3JX0uZWwtY29sLWxnLTJ7d2lkdGg6OC4zMzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMnttYXJnaW4tbGVmdDo4LjMzMzMzJX0uZWwtY29sLWxnLXB1bGwtMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4LjMzMzMzJX0uZWwtY29sLWxnLXB1c2gtMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjguMzMzMzMlfS5lbC1jb2wtbGctM3t3aWR0aDoxMi41JX0uZWwtY29sLWxnLW9mZnNldC0ze21hcmdpbi1sZWZ0OjEyLjUlfS5lbC1jb2wtbGctcHVsbC0ze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjEyLjUlfS5lbC1jb2wtbGctcHVzaC0ze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MTIuNSV9LmVsLWNvbC1sZy00e3dpZHRoOjE2LjY2NjY3JX0uZWwtY29sLWxnLW9mZnNldC00e21hcmdpbi1sZWZ0OjE2LjY2NjY3JX0uZWwtY29sLWxnLXB1bGwtNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxNi42NjY2NyV9LmVsLWNvbC1sZy1wdXNoLTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxNi42NjY2NyV9LmVsLWNvbC1sZy01e3dpZHRoOjIwLjgzMzMzJX0uZWwtY29sLWxnLW9mZnNldC01e21hcmdpbi1sZWZ0OjIwLjgzMzMzJX0uZWwtY29sLWxnLXB1bGwtNXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyMC44MzMzMyV9LmVsLWNvbC1sZy1wdXNoLTV7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyMC44MzMzMyV9LmVsLWNvbC1sZy02e3dpZHRoOjI1JX0uZWwtY29sLWxnLW9mZnNldC02e21hcmdpbi1sZWZ0OjI1JX0uZWwtY29sLWxnLXB1bGwtNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyNSV9LmVsLWNvbC1sZy1wdXNoLTZ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyNSV9LmVsLWNvbC1sZy03e3dpZHRoOjI5LjE2NjY3JX0uZWwtY29sLWxnLW9mZnNldC03e21hcmdpbi1sZWZ0OjI5LjE2NjY3JX0uZWwtY29sLWxnLXB1bGwtN3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoyOS4xNjY2NyV9LmVsLWNvbC1sZy1wdXNoLTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoyOS4xNjY2NyV9LmVsLWNvbC1sZy04e3dpZHRoOjMzLjMzMzMzJX0uZWwtY29sLWxnLW9mZnNldC04e21hcmdpbi1sZWZ0OjMzLjMzMzMzJX0uZWwtY29sLWxnLXB1bGwtOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozMy4zMzMzMyV9LmVsLWNvbC1sZy1wdXNoLTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozMy4zMzMzMyV9LmVsLWNvbC1sZy05e3dpZHRoOjM3LjUlfS5lbC1jb2wtbGctb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6MzcuNSV9LmVsLWNvbC1sZy1wdWxsLTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MzcuNSV9LmVsLWNvbC1sZy1wdXNoLTl7cG9zaXRpb246cmVsYXRpdmU7bGVmdDozNy41JX0uZWwtY29sLWxnLTEwe3dpZHRoOjQxLjY2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0xMHttYXJnaW4tbGVmdDo0MS42NjY2NyV9LmVsLWNvbC1sZy1wdWxsLTEwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQxLjY2NjY3JX0uZWwtY29sLWxnLXB1c2gtMTB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0MS42NjY2NyV9LmVsLWNvbC1sZy0xMXt3aWR0aDo0NS44MzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMTF7bWFyZ2luLWxlZnQ6NDUuODMzMzMlfS5lbC1jb2wtbGctcHVsbC0xMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0NS44MzMzMyV9LmVsLWNvbC1sZy1wdXNoLTExe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NDUuODMzMzMlfS5lbC1jb2wtbGctMTJ7d2lkdGg6NTAlfS5lbC1jb2wtbGctb2Zmc2V0LTEye21hcmdpbi1sZWZ0OjUwJX0uZWwtY29sLWxnLXB1bGwtMTJ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTAlfS5lbC1jb2wtbGctcHVzaC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjUwJX0uZWwtY29sLWxnLTEze3dpZHRoOjU0LjE2NjY3JX0uZWwtY29sLWxnLW9mZnNldC0xM3ttYXJnaW4tbGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1sZy1wdWxsLTEze3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU0LjE2NjY3JX0uZWwtY29sLWxnLXB1c2gtMTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1NC4xNjY2NyV9LmVsLWNvbC1sZy0xNHt3aWR0aDo1OC4zMzMzMyV9LmVsLWNvbC1sZy1vZmZzZXQtMTR7bWFyZ2luLWxlZnQ6NTguMzMzMzMlfS5lbC1jb2wtbGctcHVsbC0xNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1OC4zMzMzMyV9LmVsLWNvbC1sZy1wdXNoLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTguMzMzMzMlfS5lbC1jb2wtbGctMTV7d2lkdGg6NjIuNSV9LmVsLWNvbC1sZy1vZmZzZXQtMTV7bWFyZ2luLWxlZnQ6NjIuNSV9LmVsLWNvbC1sZy1wdWxsLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjYyLjUlfS5lbC1jb2wtbGctcHVzaC0xNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjYyLjUlfS5lbC1jb2wtbGctMTZ7d2lkdGg6NjYuNjY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTE2e21hcmdpbi1sZWZ0OjY2LjY2NjY3JX0uZWwtY29sLWxnLXB1bGwtMTZ7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjYuNjY2NjclfS5lbC1jb2wtbGctcHVzaC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjY2LjY2NjY3JX0uZWwtY29sLWxnLTE3e3dpZHRoOjcwLjgzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0xN3ttYXJnaW4tbGVmdDo3MC44MzMzMyV9LmVsLWNvbC1sZy1wdWxsLTE3e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjcwLjgzMzMzJX0uZWwtY29sLWxnLXB1c2gtMTd7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3MC44MzMzMyV9LmVsLWNvbC1sZy0xOHt3aWR0aDo3NSV9LmVsLWNvbC1sZy1vZmZzZXQtMTh7bWFyZ2luLWxlZnQ6NzUlfS5lbC1jb2wtbGctcHVsbC0xOHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3NSV9LmVsLWNvbC1sZy1wdXNoLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzUlfS5lbC1jb2wtbGctMTl7d2lkdGg6NzkuMTY2NjclfS5lbC1jb2wtbGctb2Zmc2V0LTE5e21hcmdpbi1sZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLWxnLXB1bGwtMTl7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzkuMTY2NjclfS5lbC1jb2wtbGctcHVzaC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojc5LjE2NjY3JX0uZWwtY29sLWxnLTIwe3dpZHRoOjgzLjMzMzMzJX0uZWwtY29sLWxnLW9mZnNldC0yMHttYXJnaW4tbGVmdDo4My4zMzMzMyV9LmVsLWNvbC1sZy1wdWxsLTIwe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjgzLjMzMzMzJX0uZWwtY29sLWxnLXB1c2gtMjB7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4My4zMzMzMyV9LmVsLWNvbC1sZy0yMXt3aWR0aDo4Ny41JX0uZWwtY29sLWxnLW9mZnNldC0yMXttYXJnaW4tbGVmdDo4Ny41JX0uZWwtY29sLWxnLXB1bGwtMjF7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODcuNSV9LmVsLWNvbC1sZy1wdXNoLTIxe3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6ODcuNSV9LmVsLWNvbC1sZy0yMnt3aWR0aDo5MS42NjY2NyV9LmVsLWNvbC1sZy1vZmZzZXQtMjJ7bWFyZ2luLWxlZnQ6OTEuNjY2NjclfS5lbC1jb2wtbGctcHVsbC0yMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5MS42NjY2NyV9LmVsLWNvbC1sZy1wdXNoLTIye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTEuNjY2NjclfS5lbC1jb2wtbGctMjN7d2lkdGg6OTUuODMzMzMlfS5lbC1jb2wtbGctb2Zmc2V0LTIze21hcmdpbi1sZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLWxnLXB1bGwtMjN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6OTUuODMzMzMlfS5lbC1jb2wtbGctcHVzaC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0Ojk1LjgzMzMzJX0uZWwtY29sLWxnLTI0e3dpZHRoOjEwMCV9LmVsLWNvbC1sZy1vZmZzZXQtMjR7bWFyZ2luLWxlZnQ6MTAwJX0uZWwtY29sLWxnLXB1bGwtMjR7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTAwJX0uZWwtY29sLWxnLXB1c2gtMjR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMDAlfX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6MTkyMHB4KXsuZWwtY29sLXhsLTB7ZGlzcGxheTpub25lO3dpZHRoOjAlfS5lbC1jb2wteGwtb2Zmc2V0LTB7bWFyZ2luLWxlZnQ6MH0uZWwtY29sLXhsLXB1bGwtMHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDowfS5lbC1jb2wteGwtcHVzaC0we3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6MH0uZWwtY29sLXhsLTF7d2lkdGg6NC4xNjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMXttYXJnaW4tbGVmdDo0LjE2NjY3JX0uZWwtY29sLXhsLXB1bGwtMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo0LjE2NjY3JX0uZWwtY29sLXhsLXB1c2gtMXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQuMTY2NjclfS5lbC1jb2wteGwtMnt3aWR0aDo4LjMzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0ye21hcmdpbi1sZWZ0OjguMzMzMzMlfS5lbC1jb2wteGwtcHVsbC0ye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjguMzMzMzMlfS5lbC1jb2wteGwtcHVzaC0ye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OC4zMzMzMyV9LmVsLWNvbC14bC0ze3dpZHRoOjEyLjUlfS5lbC1jb2wteGwtb2Zmc2V0LTN7bWFyZ2luLWxlZnQ6MTIuNSV9LmVsLWNvbC14bC1wdWxsLTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6MTIuNSV9LmVsLWNvbC14bC1wdXNoLTN7cG9zaXRpb246cmVsYXRpdmU7bGVmdDoxMi41JX0uZWwtY29sLXhsLTR7d2lkdGg6MTYuNjY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTR7bWFyZ2luLWxlZnQ6MTYuNjY2NjclfS5lbC1jb2wteGwtcHVsbC00e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjE2LjY2NjY3JX0uZWwtY29sLXhsLXB1c2gtNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjE2LjY2NjY3JX0uZWwtY29sLXhsLTV7d2lkdGg6MjAuODMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6MjAuODMzMzMlfS5lbC1jb2wteGwtcHVsbC01e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjIwLjgzMzMzJX0uZWwtY29sLXhsLXB1c2gtNXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjIwLjgzMzMzJX0uZWwtY29sLXhsLTZ7d2lkdGg6MjUlfS5lbC1jb2wteGwtb2Zmc2V0LTZ7bWFyZ2luLWxlZnQ6MjUlfS5lbC1jb2wteGwtcHVsbC02e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI1JX0uZWwtY29sLXhsLXB1c2gtNntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI1JX0uZWwtY29sLXhsLTd7d2lkdGg6MjkuMTY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTd7bWFyZ2luLWxlZnQ6MjkuMTY2NjclfS5lbC1jb2wteGwtcHVsbC03e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjI5LjE2NjY3JX0uZWwtY29sLXhsLXB1c2gtN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjI5LjE2NjY3JX0uZWwtY29sLXhsLTh7d2lkdGg6MzMuMzMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTh7bWFyZ2luLWxlZnQ6MzMuMzMzMzMlfS5lbC1jb2wteGwtcHVsbC04e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjMzLjMzMzMzJX0uZWwtY29sLXhsLXB1c2gtOHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjMzLjMzMzMzJX0uZWwtY29sLXhsLTl7d2lkdGg6MzcuNSV9LmVsLWNvbC14bC1vZmZzZXQtOXttYXJnaW4tbGVmdDozNy41JX0uZWwtY29sLXhsLXB1bGwtOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDozNy41JX0uZWwtY29sLXhsLXB1c2gtOXtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjM3LjUlfS5lbC1jb2wteGwtMTB7d2lkdGg6NDEuNjY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXhsLXB1bGwtMTB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NDEuNjY2NjclfS5lbC1jb2wteGwtcHVzaC0xMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjQxLjY2NjY3JX0uZWwtY29sLXhsLTExe3dpZHRoOjQ1LjgzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0xMXttYXJnaW4tbGVmdDo0NS44MzMzMyV9LmVsLWNvbC14bC1wdWxsLTExe3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjQ1LjgzMzMzJX0uZWwtY29sLXhsLXB1c2gtMTF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo0NS44MzMzMyV9LmVsLWNvbC14bC0xMnt3aWR0aDo1MCV9LmVsLWNvbC14bC1vZmZzZXQtMTJ7bWFyZ2luLWxlZnQ6NTAlfS5lbC1jb2wteGwtcHVsbC0xMntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo1MCV9LmVsLWNvbC14bC1wdXNoLTEye3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NTAlfS5lbC1jb2wteGwtMTN7d2lkdGg6NTQuMTY2NjclfS5lbC1jb2wteGwtb2Zmc2V0LTEze21hcmdpbi1sZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXhsLXB1bGwtMTN7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NTQuMTY2NjclfS5lbC1jb2wteGwtcHVzaC0xM3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjU0LjE2NjY3JX0uZWwtY29sLXhsLTE0e3dpZHRoOjU4LjMzMzMzJX0uZWwtY29sLXhsLW9mZnNldC0xNHttYXJnaW4tbGVmdDo1OC4zMzMzMyV9LmVsLWNvbC14bC1wdWxsLTE0e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjU4LjMzMzMzJX0uZWwtY29sLXhsLXB1c2gtMTR7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo1OC4zMzMzMyV9LmVsLWNvbC14bC0xNXt3aWR0aDo2Mi41JX0uZWwtY29sLXhsLW9mZnNldC0xNXttYXJnaW4tbGVmdDo2Mi41JX0uZWwtY29sLXhsLXB1bGwtMTV7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NjIuNSV9LmVsLWNvbC14bC1wdXNoLTE1e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjIuNSV9LmVsLWNvbC14bC0xNnt3aWR0aDo2Ni42NjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMTZ7bWFyZ2luLWxlZnQ6NjYuNjY2NjclfS5lbC1jb2wteGwtcHVsbC0xNntwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo2Ni42NjY2NyV9LmVsLWNvbC14bC1wdXNoLTE2e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NjYuNjY2NjclfS5lbC1jb2wteGwtMTd7d2lkdGg6NzAuODMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTE3e21hcmdpbi1sZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXhsLXB1bGwtMTd7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6NzAuODMzMzMlfS5lbC1jb2wteGwtcHVzaC0xN3twb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjcwLjgzMzMzJX0uZWwtY29sLXhsLTE4e3dpZHRoOjc1JX0uZWwtY29sLXhsLW9mZnNldC0xOHttYXJnaW4tbGVmdDo3NSV9LmVsLWNvbC14bC1wdWxsLTE4e3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0Ojc1JX0uZWwtY29sLXhsLXB1c2gtMTh7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo3NSV9LmVsLWNvbC14bC0xOXt3aWR0aDo3OS4xNjY2NyV9LmVsLWNvbC14bC1vZmZzZXQtMTl7bWFyZ2luLWxlZnQ6NzkuMTY2NjclfS5lbC1jb2wteGwtcHVsbC0xOXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo3OS4xNjY2NyV9LmVsLWNvbC14bC1wdXNoLTE5e3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6NzkuMTY2NjclfS5lbC1jb2wteGwtMjB7d2lkdGg6ODMuMzMzMzMlfS5lbC1jb2wteGwtb2Zmc2V0LTIwe21hcmdpbi1sZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXhsLXB1bGwtMjB7cG9zaXRpb246cmVsYXRpdmU7cmlnaHQ6ODMuMzMzMzMlfS5lbC1jb2wteGwtcHVzaC0yMHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjgzLjMzMzMzJX0uZWwtY29sLXhsLTIxe3dpZHRoOjg3LjUlfS5lbC1jb2wteGwtb2Zmc2V0LTIxe21hcmdpbi1sZWZ0Ojg3LjUlfS5lbC1jb2wteGwtcHVsbC0yMXtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo4Ny41JX0uZWwtY29sLXhsLXB1c2gtMjF7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo4Ny41JX0uZWwtY29sLXhsLTIye3dpZHRoOjkxLjY2NjY3JX0uZWwtY29sLXhsLW9mZnNldC0yMnttYXJnaW4tbGVmdDo5MS42NjY2NyV9LmVsLWNvbC14bC1wdWxsLTIye3Bvc2l0aW9uOnJlbGF0aXZlO3JpZ2h0OjkxLjY2NjY3JX0uZWwtY29sLXhsLXB1c2gtMjJ7cG9zaXRpb246cmVsYXRpdmU7bGVmdDo5MS42NjY2NyV9LmVsLWNvbC14bC0yM3t3aWR0aDo5NS44MzMzMyV9LmVsLWNvbC14bC1vZmZzZXQtMjN7bWFyZ2luLWxlZnQ6OTUuODMzMzMlfS5lbC1jb2wteGwtcHVsbC0yM3twb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDo5NS44MzMzMyV9LmVsLWNvbC14bC1wdXNoLTIze3Bvc2l0aW9uOnJlbGF0aXZlO2xlZnQ6OTUuODMzMzMlfS5lbC1jb2wteGwtMjR7d2lkdGg6MTAwJX0uZWwtY29sLXhsLW9mZnNldC0yNHttYXJnaW4tbGVmdDoxMDAlfS5lbC1jb2wteGwtcHVsbC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtyaWdodDoxMDAlfS5lbC1jb2wteGwtcHVzaC0yNHtwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjEwMCV9fUAtd2Via2l0LWtleWZyYW1lcyBwcm9ncmVzc3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0xMDAle2JhY2tncm91bmQtcG9zaXRpb246MzJweCAwfX0uZWwtdXBsb2Fke2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246Y2VudGVyO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0uZWwtdXBsb2FkX19pbnB1dHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZF9fdGlwe2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2MDYyNjY7bWFyZ2luLXRvcDo3cHh9LmVsLXVwbG9hZCBpZnJhbWV7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMTt0b3A6MDtsZWZ0OjA7ZmlsdGVyOmFscGhhKG9wYWNpdHk9MCl9LmVsLXVwbG9hZC0tcGljdHVyZS1jYXJke2JhY2tncm91bmQtY29sb3I6I2ZiZmRmZjtib3JkZXI6MXB4IGRhc2hlZCAjYzBjY2RhO2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxNDhweDtoZWlnaHQ6MTQ4cHg7Y3Vyc29yOnBvaW50ZXI7bGluZS1oZWlnaHQ6MTQ2cHg7dmVydGljYWwtYWxpZ246dG9wfS5lbC11cGxvYWQtLXBpY3R1cmUtY2FyZCBpe2ZvbnQtc2l6ZToyOHB4O2NvbG9yOiM4YzkzOWR9LmVsLXVwbG9hZC0tcGljdHVyZS1jYXJkOmhvdmVyLC5lbC11cGxvYWQ6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7Y29sb3I6IzQwOUVGRn0uZWwtdXBsb2FkOmZvY3VzIC5lbC11cGxvYWQtZHJhZ2dlcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtdXBsb2FkLWRyYWdnZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoxcHggZGFzaGVkICNkOWQ5ZDk7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjM2MHB4O2hlaWdodDoxODBweDt0ZXh0LWFsaWduOmNlbnRlcjtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW59LmVsLXVwbG9hZC1kcmFnZ2VyIC5lbC1pY29uLXVwbG9hZHtmb250LXNpemU6NjdweDtjb2xvcjojQzBDNENDO21hcmdpbjo0MHB4IDAgMTZweDtsaW5lLWhlaWdodDo1MHB4fS5lbC11cGxvYWQtZHJhZ2dlcisuZWwtdXBsb2FkX190aXB7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXVwbG9hZC1kcmFnZ2Vyfi5lbC11cGxvYWRfX2ZpbGVze2JvcmRlci10b3A6MXB4IHNvbGlkICNEQ0RGRTY7bWFyZ2luLXRvcDo3cHg7cGFkZGluZy10b3A6NXB4fS5lbC11cGxvYWQtZHJhZ2dlciAuZWwtdXBsb2FkX190ZXh0e2NvbG9yOiM2MDYyNjY7Zm9udC1zaXplOjE0cHg7dGV4dC1hbGlnbjpjZW50ZXJ9LmVsLXVwbG9hZC1kcmFnZ2VyIC5lbC11cGxvYWRfX3RleHQgZW17Y29sb3I6IzQwOUVGRjtmb250LXN0eWxlOm5vcm1hbH0uZWwtdXBsb2FkLWRyYWdnZXI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXVwbG9hZC1kcmFnZ2VyLmlzLWRyYWdvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgzMiwxNTksMjU1LC4wNik7Ym9yZGVyOjJweCBkYXNoZWQgIzQwOUVGRn0uZWwtdXBsb2FkLWxpc3R7bWFyZ2luOjA7cGFkZGluZzowO2xpc3Qtc3R5bGU6bm9uZX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW17LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuNXMgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpO3RyYW5zaXRpb246YWxsIC41cyBjdWJpYy1iZXppZXIoLjU1LDAsLjEsMSk7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzYwNjI2NjtsaW5lLWhlaWdodDoxLjg7bWFyZ2luLXRvcDo1cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2JvcmRlci1yYWRpdXM6NHB4O3dpZHRoOjEwMCV9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1wcm9ncmVzc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MjBweDt3aWR0aDoxMDAlfS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtcHJvZ3Jlc3NfX3RleHR7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6LTEzcHh9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1wcm9ncmVzcy1iYXJ7bWFyZ2luLXJpZ2h0OjA7cGFkZGluZy1yaWdodDowfS5lbC11cGxvYWQtbGlzdF9faXRlbTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjEwcHh9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLXVwbG9hZC1zdWNjZXNze2NvbG9yOiM2N0MyM0F9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNsb3Nle2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NXB4O3JpZ2h0OjVweDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi43NTtjb2xvcjojNjA2MjY2fS5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jbG9zZTpob3ZlcntvcGFjaXR5OjF9LmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNsb3NlLXRpcHtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjVweDtyaWdodDo1cHg7Zm9udC1zaXplOjEycHg7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eToxO2NvbG9yOiM0MDlFRkZ9LmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC1pY29uLWNsb3Nle2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzcyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZTpmb2N1cywuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzcyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZTpob3Zlcntjb2xvcjojNDA5RUZGO2N1cnNvcjpwb2ludGVyfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOmZvY3VzOm5vdCg6aG92ZXIpIC5lbC1pY29uLWNsb3NlLXRpcHtkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzczphY3RpdmUsLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6bm90KC5mb2N1c2luZyk6Zm9jdXN7b3V0bGluZS13aWR0aDowfS5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOmFjdGl2ZSAuZWwtaWNvbi1jbG9zZS10aXAsLmVsLXVwbG9hZC1saXN0X19pdGVtLmlzLXN1Y2Nlc3M6Zm9jdXMgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbCwuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2Vzczpob3ZlciAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsLC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzOm5vdCguZm9jdXNpbmcpOmZvY3VzIC5lbC1pY29uLWNsb3NlLXRpcHtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0LmlzLWRpc2FibGVkIC5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVse2Rpc3BsYXk6YmxvY2t9LmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWV7Y29sb3I6IzYwNjI2NjtkaXNwbGF5OmJsb2NrO21hcmdpbi1yaWdodDo0MHB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6NHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7LXdlYmtpdC10cmFuc2l0aW9uOmNvbG9yIC4zczt0cmFuc2l0aW9uOmNvbG9yIC4zczt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXVwbG9hZC1saXN0X19pdGVtLW5hbWUgW2NsYXNzXj1lbC1pY29uXXtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6N3B4O2NvbG9yOiM5MDkzOTk7bGluZS1oZWlnaHQ6aW5oZXJpdH0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVse3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDt0b3A6MDtsaW5lLWhlaWdodDppbmhlcml0O2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3RfX2l0ZW0tZGVsZXRle3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjEwcHg7dG9wOjA7Zm9udC1zaXplOjEycHg7Y29sb3I6IzYwNjI2NjtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0X19pdGVtLWRlbGV0ZTpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJke21hcmdpbjowO2Rpc3BsYXk6aW5saW5lO3ZlcnRpY2FsLWFsaWduOnRvcH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW17b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNjMGNjZGE7Ym9yZGVyLXJhZGl1czo2cHg7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjE0OHB4O2hlaWdodDoxNDhweDttYXJnaW46MCA4cHggOHB4IDA7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtIC5lbC1pY29uLWNoZWNrLC5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jaXJjbGUtY2hlY2t7Y29sb3I6I0ZGRn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2xvc2UsLmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7ZGlzcGxheTpub25lfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbTpob3ZlciAuZWwtcHJvZ3Jlc3NfX3RleHR7ZGlzcGxheTpibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZXtkaXNwbGF5Om5vbmV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLXRodW1ibmFpbHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE1cHg7dG9wOi02cHg7d2lkdGg6NDBweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kOiMxM2NlNjY7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDFwYyAxcHggcmdiYSgwLDAsMCwuMik7Ym94LXNoYWRvdzowIDAgMXBjIDFweCByZ2JhKDAsMCwwLC4yKX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tc3RhdHVzLWxhYmVsIGl7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDoxMXB4Oy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uc3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2xlZnQ6MDt0b3A6MDtjdXJzb3I6ZGVmYXVsdDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojZmZmO29wYWNpdHk6MDtmb250LXNpemU6MjBweDtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsLjUpOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zczt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZS1jYXJkIC5lbC11cGxvYWQtbGlzdF9faXRlbS1hY3Rpb25zOjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLWFjdGlvbnMgc3BhbntkaXNwbGF5Om5vbmU7Y3Vyc29yOnBvaW50ZXJ9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLWFjdGlvbnMgc3BhbitzcGFue21hcmdpbi1sZWZ0OjE1cHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLWFjdGlvbnMgLmVsLXVwbG9hZC1saXN0X19pdGVtLWRlbGV0ZXtwb3NpdGlvbjpzdGF0aWM7Zm9udC1zaXplOmluaGVyaXQ7Y29sb3I6aW5oZXJpdH0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uczpob3ZlcntvcGFjaXR5OjF9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXVwbG9hZC1saXN0X19pdGVtLWFjdGlvbnM6aG92ZXIgc3BhbntkaXNwbGF5OmlubGluZS1ibG9ja30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUtY2FyZCAuZWwtcHJvZ3Jlc3N7dG9wOjUwJTtsZWZ0OjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7Ym90dG9tOmF1dG87d2lkdGg6MTI2cHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlLWNhcmQgLmVsLXByb2dyZXNzIC5lbC1wcm9ncmVzc19fdGV4dHt0b3A6NTAlfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW17b3ZlcmZsb3c6aGlkZGVuO3otaW5kZXg6MDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjYzBjY2RhO2JvcmRlci1yYWRpdXM6NnB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW4tdG9wOjEwcHg7cGFkZGluZzoxMHB4IDEwcHggMTBweCA5MHB4O2hlaWdodDo5MnB4fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0gLmVsLWljb24tY2hlY2ssLmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbSAuZWwtaWNvbi1jaXJjbGUtY2hlY2t7Y29sb3I6I0ZGRn0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtOmhvdmVyIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7YmFja2dyb3VuZDowIDA7LXdlYmtpdC1ib3gtc2hhZG93Om5vbmU7Ym94LXNoYWRvdzpub25lO3RvcDotMnB4O3JpZ2h0Oi0xMnB4fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW06aG92ZXIgLmVsLXByb2dyZXNzX190ZXh0e2Rpc3BsYXk6YmxvY2t9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS5pcy1zdWNjZXNzIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1le2xpbmUtaGVpZ2h0OjcwcHg7bWFyZ2luLXRvcDowfS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0uaXMtc3VjY2VzcyAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZSBpe2Rpc3BsYXk6bm9uZX0uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLXRodW1ibmFpbHt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6NzBweDtoZWlnaHQ6NzBweDtmbG9hdDpsZWZ0O3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MTttYXJnaW4tbGVmdDotODBweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkZ9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS1uYW1le2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDoyMHB4fS5lbC11cGxvYWQtbGlzdC0tcGljdHVyZSAuZWwtdXBsb2FkLWxpc3RfX2l0ZW0tbmFtZSBpe2ZvbnQtc2l6ZTo3MHB4O2xpbmUtaGVpZ2h0OjE7cG9zaXRpb246YWJzb2x1dGU7bGVmdDo5cHg7dG9wOjEwcHh9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE3cHg7dG9wOi03cHg7d2lkdGg6NDZweDtoZWlnaHQ6MjZweDtiYWNrZ3JvdW5kOiMxM2NlNjY7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTstd2Via2l0LWJveC1zaGFkb3c6MCAxcHggMXB4ICNjY2M7Ym94LXNoYWRvdzowIDFweCAxcHggI2NjY30uZWwtdXBsb2FkLWxpc3QtLXBpY3R1cmUgLmVsLXVwbG9hZC1saXN0X19pdGVtLXN0YXR1cy1sYWJlbCBpe2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6MTJweDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyl9LmVsLXVwbG9hZC1saXN0LS1waWN0dXJlIC5lbC1wcm9ncmVzc3twb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTdweH0uZWwtdXBsb2FkLWNvdmVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDt0b3A6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjEwO2N1cnNvcjpkZWZhdWx0fS5lbC11cGxvYWQtY292ZXI6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtdXBsb2FkLWNvdmVyIGltZ3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmVsLXVwbG9hZC1jb3Zlcl9fbGFiZWx7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTE1cHg7dG9wOi02cHg7d2lkdGg6NDBweDtoZWlnaHQ6MjRweDtiYWNrZ3JvdW5kOiMxM2NlNjY7dGV4dC1hbGlnbjpjZW50ZXI7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTstd2Via2l0LWJveC1zaGFkb3c6MCAwIDFwYyAxcHggcmdiYSgwLDAsMCwuMik7Ym94LXNoYWRvdzowIDAgMXBjIDFweCByZ2JhKDAsMCwwLC4yKX0uZWwtdXBsb2FkLWNvdmVyX19sYWJlbCBpe2ZvbnQtc2l6ZToxMnB4O21hcmdpbi10b3A6MTFweDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKTt0cmFuc2Zvcm06cm90YXRlKC00NWRlZyk7Y29sb3I6I2ZmZn0uZWwtdXBsb2FkLWNvdmVyX19wcm9ncmVzc3tkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246c3RhdGljO3dpZHRoOjI0M3B4fS5lbC11cGxvYWQtY292ZXJfX3Byb2dyZXNzKy5lbC11cGxvYWRfX2lubmVye29wYWNpdHk6MH0uZWwtdXBsb2FkLWNvdmVyX19jb250ZW50e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0e3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6cmdiYSgwLDAsMCwuNzIpO3RleHQtYWxpZ246Y2VudGVyfS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0IC5idG57ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29sb3I6I0ZGRjtmb250LXNpemU6MTRweDtjdXJzb3I6cG9pbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksb3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSwtd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTttYXJnaW4tdG9wOjYwcHh9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0biBzcGFue29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMTVzIGxpbmVhcjt0cmFuc2l0aW9uOm9wYWNpdHkgLjE1cyBsaW5lYXJ9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0bjpub3QoOmZpcnN0LWNoaWxkKXttYXJnaW4tbGVmdDozNXB4fS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0IC5idG46aG92ZXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMTNweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTEzcHgpfS5lbC11cGxvYWQtY292ZXJfX2ludGVyYWN0IC5idG46aG92ZXIgc3BhbntvcGFjaXR5OjF9LmVsLXVwbG9hZC1jb3Zlcl9faW50ZXJhY3QgLmJ0biBpe2NvbG9yOiNGRkY7ZGlzcGxheTpibG9jaztmb250LXNpemU6MjRweDtsaW5lLWhlaWdodDppbmhlcml0O21hcmdpbjowIGF1dG8gNXB4fS5lbC11cGxvYWQtY292ZXJfX3RpdGxle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7aGVpZ2h0OjM2cHg7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7Zm9udC13ZWlnaHQ6NDAwO3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjAgMTBweDttYXJnaW46MDtsaW5lLWhlaWdodDozNnB4O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMzMDMxMzN9LmVsLXVwbG9hZC1jb3ZlcisuZWwtdXBsb2FkX19pbm5lcntvcGFjaXR5OjA7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxfS5lbC1wcm9ncmVzc3twb3NpdGlvbjpyZWxhdGl2ZTtsaW5lLWhlaWdodDoxfS5lbC1wcm9ncmVzc19fdGV4dHtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTttYXJnaW4tbGVmdDoxMHB4O2xpbmUtaGVpZ2h0OjF9LmVsLXByb2dyZXNzX190ZXh0IGl7dmVydGljYWwtYWxpZ246bWlkZGxlO2Rpc3BsYXk6YmxvY2t9LmVsLXByb2dyZXNzLS1jaXJjbGUsLmVsLXByb2dyZXNzLS1kYXNoYm9hcmR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXByb2dyZXNzLS1jaXJjbGUgLmVsLXByb2dyZXNzX190ZXh0LC5lbC1wcm9ncmVzcy0tZGFzaGJvYXJkIC5lbC1wcm9ncmVzc19fdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6MDt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwtNTAlKX0uZWwtcHJvZ3Jlc3MtLWNpcmNsZSAuZWwtcHJvZ3Jlc3NfX3RleHQgaSwuZWwtcHJvZ3Jlc3MtLWRhc2hib2FyZCAuZWwtcHJvZ3Jlc3NfX3RleHQgaXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXByb2dyZXNzLS13aXRob3V0LXRleHQgLmVsLXByb2dyZXNzX190ZXh0e2Rpc3BsYXk6bm9uZX0uZWwtcHJvZ3Jlc3MtLXdpdGhvdXQtdGV4dCAuZWwtcHJvZ3Jlc3MtYmFye3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tcmlnaHQ6MDtkaXNwbGF5OmJsb2NrfS5lbC1wcm9ncmVzcy1iYXIsLmVsLXByb2dyZXNzLWJhcl9faW5uZXI6OmFmdGVyLC5lbC1wcm9ncmVzcy1iYXJfX2lubmVyVGV4dCwuZWwtc3Bpbm5lcntkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLXByb2dyZXNzLS10ZXh0LWluc2lkZSAuZWwtcHJvZ3Jlc3MtYmFye3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tcmlnaHQ6MH0uZWwtcHJvZ3Jlc3MuaXMtc3VjY2VzcyAuZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiM2N0MyM0F9LmVsLXByb2dyZXNzLmlzLXN1Y2Nlc3MgLmVsLXByb2dyZXNzX190ZXh0e2NvbG9yOiM2N0MyM0F9LmVsLXByb2dyZXNzLmlzLXdhcm5pbmcgLmVsLXByb2dyZXNzLWJhcl9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojRTZBMjNDfS5lbC1iYWRnZV9fY29udGVudCwuZWwtcHJvZ3Jlc3MuaXMtZXhjZXB0aW9uIC5lbC1wcm9ncmVzcy1iYXJfX2lubmVye2JhY2tncm91bmQtY29sb3I6I0Y1NkM2Q30uZWwtcHJvZ3Jlc3MuaXMtd2FybmluZyAuZWwtcHJvZ3Jlc3NfX3RleHR7Y29sb3I6I0U2QTIzQ30uZWwtcHJvZ3Jlc3MuaXMtZXhjZXB0aW9uIC5lbC1wcm9ncmVzc19fdGV4dHtjb2xvcjojRjU2QzZDfS5lbC1wcm9ncmVzcy1iYXJ7cGFkZGluZy1yaWdodDo1MHB4O3dpZHRoOjEwMCU7bWFyZ2luLXJpZ2h0Oi01NXB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY2FyZF9faGVhZGVyLC5lbC1tZXNzYWdlLC5lbC1zdGVwX19pY29uey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94fS5lbC1wcm9ncmVzcy1iYXJfX291dGVye2hlaWdodDo2cHg7Ym9yZGVyLXJhZGl1czoxMDBweDtiYWNrZ3JvdW5kLWNvbG9yOiNFQkVFRjU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcntwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjA7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO3RleHQtYWxpZ246cmlnaHQ7Ym9yZGVyLXJhZGl1czoxMDBweDtsaW5lLWhlaWdodDoxO3doaXRlLXNwYWNlOm5vd3JhcDstd2Via2l0LXRyYW5zaXRpb246d2lkdGggLjZzIGVhc2U7dHJhbnNpdGlvbjp3aWR0aCAuNnMgZWFzZX0uZWwtcHJvZ3Jlc3MtYmFyX19pbm5lcjo6YWZ0ZXJ7aGVpZ2h0OjEwMCV9LmVsLXByb2dyZXNzLWJhcl9faW5uZXJUZXh0e2NvbG9yOiNGRkY7Zm9udC1zaXplOjEycHg7bWFyZ2luOjAgNXB4fUBrZXlmcmFtZXMgcHJvZ3Jlc3N7MCV7YmFja2dyb3VuZC1wb3NpdGlvbjowIDB9MTAwJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjMycHggMH19LmVsLXRpbWUtc3Bpbm5lcnt3aWR0aDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcH0uZWwtc3Bpbm5lci1pbm5lcnstd2Via2l0LWFuaW1hdGlvbjpyb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO2FuaW1hdGlvbjpyb3RhdGUgMnMgbGluZWFyIGluZmluaXRlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHh9LmVsLXNwaW5uZXItaW5uZXIgLnBhdGh7c3Ryb2tlOiNlY2VjZWM7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7LXdlYmtpdC1hbmltYXRpb246ZGFzaCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlO2FuaW1hdGlvbjpkYXNoIDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGV9QC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0ZXsxMDAley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgzNjBkZWcpO3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19QGtleWZyYW1lcyByb3RhdGV7MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDM2MGRlZyl9fUAtd2Via2l0LWtleWZyYW1lcyBkYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1fTEwMCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNH19QGtleWZyYW1lcyBkYXNoezAle3N0cm9rZS1kYXNoYXJyYXk6MSwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6MH01MCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTM1fTEwMCV7c3Ryb2tlLWRhc2hhcnJheTo5MCwxNTA7c3Ryb2tlLWRhc2hvZmZzZXQ6LTEyNH19LmVsLW1lc3NhZ2V7bWluLXdpZHRoOjM4MHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjRweDtib3JkZXItd2lkdGg6MXB4O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6I0VCRUVGNTtwb3NpdGlvbjpmaXhlZDtsZWZ0OjUwJTt0b3A6MjBweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO2JhY2tncm91bmQtY29sb3I6I2VkZjJmYzstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MsdG9wIC40cywtd2Via2l0LXRyYW5zZm9ybSAuNHM7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyx0b3AgLjRzLC13ZWJraXQtdHJhbnNmb3JtIC40czt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzLHRyYW5zZm9ybSAuNHMsdG9wIC40czt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzLHRyYW5zZm9ybSAuNHMsdG9wIC40cywtd2Via2l0LXRyYW5zZm9ybSAuNHM7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MTVweCAxNXB4IDE1cHggMjBweDtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5lbC1tZXNzYWdlLmlzLWNlbnRlcnstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1tZXNzYWdlLmlzLWNsb3NhYmxlIC5lbC1tZXNzYWdlX19jb250ZW50e3BhZGRpbmctcmlnaHQ6MTZweH0uZWwtbWVzc2FnZSBwe21hcmdpbjowfS5lbC1tZXNzYWdlLS1pbmZvIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiM5MDkzOTl9LmVsLW1lc3NhZ2UtLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZjBmOWViO2JvcmRlci1jb2xvcjojZTFmM2Q4fS5lbC1tZXNzYWdlLS1zdWNjZXNzIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiM2N0MyM0F9LmVsLW1lc3NhZ2UtLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmRmNmVjO2JvcmRlci1jb2xvcjojZmFlY2Q4fS5lbC1tZXNzYWdlLS13YXJuaW5nIC5lbC1tZXNzYWdlX19jb250ZW50e2NvbG9yOiNFNkEyM0N9LmVsLW1lc3NhZ2UtLWVycm9ye2JhY2tncm91bmQtY29sb3I6I2ZlZjBmMDtib3JkZXItY29sb3I6I2ZkZTJlMn0uZWwtbWVzc2FnZS0tZXJyb3IgLmVsLW1lc3NhZ2VfX2NvbnRlbnR7Y29sb3I6I0Y1NkM2Q30uZWwtbWVzc2FnZV9faWNvbnttYXJnaW4tcmlnaHQ6MTBweH0uZWwtbWVzc2FnZV9fY29udGVudHtwYWRkaW5nOjA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MX0uZWwtbWVzc2FnZV9fY29udGVudDpmb2N1c3tvdXRsaW5lLXdpZHRoOjB9LmVsLW1lc3NhZ2VfX2Nsb3NlQnRue3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7cmlnaHQ6MTVweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2N1cnNvcjpwb2ludGVyO2NvbG9yOiNDMEM0Q0M7Zm9udC1zaXplOjE2cHh9LmVsLW1lc3NhZ2VfX2Nsb3NlQnRuOmZvY3Vze291dGxpbmUtd2lkdGg6MH0uZWwtbWVzc2FnZV9fY2xvc2VCdG46aG92ZXJ7Y29sb3I6IzkwOTM5OX0uZWwtbWVzc2FnZSAuZWwtaWNvbi1zdWNjZXNze2NvbG9yOiM2N0MyM0F9LmVsLW1lc3NhZ2UgLmVsLWljb24tZXJyb3J7Y29sb3I6I0Y1NkM2Q30uZWwtbWVzc2FnZSAuZWwtaWNvbi1pbmZve2NvbG9yOiM5MDkzOTl9LmVsLW1lc3NhZ2UgLmVsLWljb24td2FybmluZ3tjb2xvcjojRTZBMjNDfS5lbC1tZXNzYWdlLWZhZGUtZW50ZXIsLmVsLW1lc3NhZ2UtZmFkZS1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTEwMCUpfS5lbC1iYWRnZXtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLWJhZGdlX19jb250ZW50e2JvcmRlci1yYWRpdXM6MTBweDtjb2xvcjojRkZGO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZToxMnB4O2hlaWdodDoxOHB4O2xpbmUtaGVpZ2h0OjE4cHg7cGFkZGluZzowIDZweDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Ym9yZGVyOjFweCBzb2xpZCAjRkZGfS5lbC1iYWRnZV9fY29udGVudC5pcy1maXhlZHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDoxMHB4Oy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKDEwMCUpfS5lbC1yYXRlX19pY29uLC5lbC1yYXRlX19pdGVte3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1iYWRnZV9fY29udGVudC5pcy1maXhlZC5pcy1kb3R7cmlnaHQ6NXB4fS5lbC1iYWRnZV9fY29udGVudC5pcy1kb3R7aGVpZ2h0OjhweDt3aWR0aDo4cHg7cGFkZGluZzowO3JpZ2h0OjA7Ym9yZGVyLXJhZGl1czo1MCV9LmVsLWJhZGdlX19jb250ZW50LS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtYmFkZ2VfX2NvbnRlbnQtLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojNjdDMjNBfS5lbC1iYWRnZV9fY29udGVudC0td2FybmluZ3tiYWNrZ3JvdW5kLWNvbG9yOiNFNkEyM0N9LmVsLWJhZGdlX19jb250ZW50LS1pbmZve2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtYmFkZ2VfX2NvbnRlbnQtLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNGNTZDNkN9LmVsLWNhcmR7Ym9yZGVyLXJhZGl1czo0cHg7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2JhY2tncm91bmQtY29sb3I6I0ZGRjtvdmVyZmxvdzpoaWRkZW47Y29sb3I6IzMwMzEzMzstd2Via2l0LXRyYW5zaXRpb246LjNzO3RyYW5zaXRpb246LjNzfS5lbC1jYXJkLmlzLWFsd2F5cy1zaGFkb3csLmVsLWNhcmQuaXMtaG92ZXItc2hhZG93OmZvY3VzLC5lbC1jYXJkLmlzLWhvdmVyLXNoYWRvdzpob3Zlcnstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1jYXJkX19oZWFkZXJ7cGFkZGluZzoxOHB4IDIwcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhcmRfX2JvZHksLmVsLW1haW57cGFkZGluZzoyMHB4fS5lbC1yYXRle2hlaWdodDoyMHB4O2xpbmUtaGVpZ2h0OjF9LmVsLWNhcm91c2VsX19pdGVtLC5lbC1jYXJvdXNlbF9fbWFza3toZWlnaHQ6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlfS5lbC1yYXRlOmFjdGl2ZSwuZWwtcmF0ZTpmb2N1c3tvdXRsaW5lLXdpZHRoOjB9LmVsLXJhdGVfX2l0ZW17Zm9udC1zaXplOjA7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1yYXRlX19pY29ue2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1yaWdodDo2cHg7Y29sb3I6I0MwQzRDQzstd2Via2l0LXRyYW5zaXRpb246LjNzO3RyYW5zaXRpb246LjNzfS5lbC1yYXRlX19kZWNpbWFsLC5lbC1yYXRlX19pY29uIC5wYXRoMntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjB9LmVsLXJhdGVfX2ljb24uaG92ZXJ7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMS4xNSk7dHJhbnNmb3JtOnNjYWxlKDEuMTUpfS5lbC1yYXRlX19kZWNpbWFse2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbn0uZWwtc3RlcC5pcy12ZXJ0aWNhbCwuZWwtc3RlcHN7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94fS5lbC1yYXRlX190ZXh0e2ZvbnQtc2l6ZToxNHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtc3RlcHN7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0uZWwtc3RlcHMtLXNpbXBsZXtwYWRkaW5nOjEzcHggOCU7Ym9yZGVyLXJhZGl1czo0cHg7YmFja2dyb3VuZDojRjVGN0ZBfS5lbC1zdGVwcy0taG9yaXpvbnRhbHt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXN0ZXBzLS12ZXJ0aWNhbHtoZWlnaHQ6MTAwJTstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1ib3gtZGlyZWN0aW9uOm5vcm1hbDstbXMtZmxleC1mbG93OmNvbHVtbjtmbGV4LWZsb3c6Y29sdW1ufS5lbC1zdGVwe3Bvc2l0aW9uOnJlbGF0aXZlOy1tcy1mbGV4LW5lZ2F0aXZlOjE7ZmxleC1zaHJpbms6MX0uZWwtc3RlcDpsYXN0LW9mLXR5cGUgLmVsLXN0ZXBfX2xpbmV7ZGlzcGxheTpub25lfS5lbC1zdGVwOmxhc3Qtb2YtdHlwZS5pcy1mbGV4ey1tcy1mbGV4LXByZWZlcnJlZC1zaXplOmF1dG8haW1wb3J0YW50O2ZsZXgtYmFzaXM6YXV0byFpbXBvcnRhbnQ7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowOy13ZWJraXQtYm94LWZsZXg6MDstbXMtZmxleC1wb3NpdGl2ZTowO2ZsZXgtZ3JvdzowfS5lbC1zdGVwOmxhc3Qtb2YtdHlwZSAuZWwtc3RlcF9fZGVzY3JpcHRpb24sLmVsLXN0ZXA6bGFzdC1vZi10eXBlIC5lbC1zdGVwX19tYWlue3BhZGRpbmctcmlnaHQ6MH0uZWwtc3RlcF9faGVhZHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS5lbC1zdGVwX19oZWFkLmlzLXByb2Nlc3N7Y29sb3I6IzMwMzEzMztib3JkZXItY29sb3I6IzMwMzEzM30uZWwtc3RlcF9faGVhZC5pcy13YWl0e2NvbG9yOiNDMEM0Q0M7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLXN0ZXBfX2hlYWQuaXMtc3VjY2Vzc3tjb2xvcjojNjdDMjNBO2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC1zdGVwX19oZWFkLmlzLWVycm9ye2NvbG9yOiNGNTZDNkM7Ym9yZGVyLWNvbG9yOiNGNTZDNkN9LmVsLXN0ZXBfX2hlYWQuaXMtZmluaXNoe2NvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXN0ZXBfX2ljb257cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxO2Rpc3BsYXk6LXdlYmtpdC1pbmxpbmUtYm94O2Rpc3BsYXk6LW1zLWlubGluZS1mbGV4Ym94O2Rpc3BsYXk6aW5saW5lLWZsZXg7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoyNHB4O2hlaWdodDoyNHB4O2ZvbnQtc2l6ZToxNHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kOiNGRkY7LXdlYmtpdC10cmFuc2l0aW9uOi4xNXMgZWFzZS1vdXQ7dHJhbnNpdGlvbjouMTVzIGVhc2Utb3V0fS5lbC1zdGVwLmlzLWhvcml6b250YWwsLmVsLXN0ZXBfX2ljb24taW5uZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLXN0ZXBfX2ljb24uaXMtdGV4dHtib3JkZXItcmFkaXVzOjUwJTtib3JkZXI6MnB4IHNvbGlkO2JvcmRlci1jb2xvcjppbmhlcml0fS5lbC1zdGVwX19pY29uLmlzLWljb257d2lkdGg6NDBweH0uZWwtc3RlcF9faWNvbi1pbm5lcnstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7Y29sb3I6aW5oZXJpdH0uZWwtc3RlcF9faWNvbi1pbm5lcltjbGFzcyo9ZWwtaWNvbl06bm90KC5pcy1zdGF0dXMpe2ZvbnQtc2l6ZToyNXB4O2ZvbnQtd2VpZ2h0OjQwMH0uZWwtc3RlcF9faWNvbi1pbm5lci5pcy1zdGF0dXN7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgxcHgpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKDFweCl9LmVsLXN0ZXBfX2xpbmV7cG9zaXRpb246YWJzb2x1dGU7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjojQzBDNENDfS5lbC1zdGVwX19saW5lLWlubmVye2Rpc3BsYXk6YmxvY2s7Ym9yZGVyLXdpZHRoOjFweDtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOmluaGVyaXQ7LXdlYmtpdC10cmFuc2l0aW9uOi4xNXMgZWFzZS1vdXQ7dHJhbnNpdGlvbjouMTVzIGVhc2Utb3V0Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDowO2hlaWdodDowfS5lbC1zdGVwX19tYWlue3doaXRlLXNwYWNlOm5vcm1hbDt0ZXh0LWFsaWduOmxlZnR9LmVsLXN0ZXBfX3RpdGxle2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjM4cHh9LmVsLXN0ZXBfX3RpdGxlLmlzLXByb2Nlc3N7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMzMDMxMzN9LmVsLXN0ZXBfX3RpdGxlLmlzLXdhaXR7Y29sb3I6I0MwQzRDQ30uZWwtc3RlcF9fdGl0bGUuaXMtc3VjY2Vzc3tjb2xvcjojNjdDMjNBfS5lbC1zdGVwX190aXRsZS5pcy1lcnJvcntjb2xvcjojRjU2QzZDfS5lbC1zdGVwX190aXRsZS5pcy1maW5pc2h7Y29sb3I6IzQwOUVGRn0uZWwtc3RlcF9fZGVzY3JpcHRpb257cGFkZGluZy1yaWdodDoxMCU7bWFyZ2luLXRvcDotNXB4O2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjIwcHg7Zm9udC13ZWlnaHQ6NDAwfS5lbC1zdGVwX19kZXNjcmlwdGlvbi5pcy1wcm9jZXNze2NvbG9yOiMzMDMxMzN9LmVsLXN0ZXBfX2Rlc2NyaXB0aW9uLmlzLXdhaXR7Y29sb3I6I0MwQzRDQ30uZWwtc3RlcF9fZGVzY3JpcHRpb24uaXMtc3VjY2Vzc3tjb2xvcjojNjdDMjNBfS5lbC1zdGVwX19kZXNjcmlwdGlvbi5pcy1lcnJvcntjb2xvcjojRjU2QzZDfS5lbC1zdGVwX19kZXNjcmlwdGlvbi5pcy1maW5pc2h7Y29sb3I6IzQwOUVGRn0uZWwtc3RlcC5pcy1ob3Jpem9udGFsIC5lbC1zdGVwX19saW5le2hlaWdodDoycHg7dG9wOjExcHg7bGVmdDowO3JpZ2h0OjB9LmVsLXN0ZXAuaXMtdmVydGljYWx7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9faGVhZHstd2Via2l0LWJveC1mbGV4OjA7LW1zLWZsZXgtcG9zaXRpdmU6MDtmbGV4LWdyb3c6MDt3aWR0aDoyNHB4fS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX19tYWlue3BhZGRpbmctbGVmdDoxMHB4Oy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleC1wb3NpdGl2ZToxO2ZsZXgtZ3JvdzoxfS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX190aXRsZXtsaW5lLWhlaWdodDoyNHB4O3BhZGRpbmctYm90dG9tOjhweH0uZWwtc3RlcC5pcy12ZXJ0aWNhbCAuZWwtc3RlcF9fbGluZXt3aWR0aDoycHg7dG9wOjA7Ym90dG9tOjA7bGVmdDoxMXB4fS5lbC1zdGVwLmlzLXZlcnRpY2FsIC5lbC1zdGVwX19pY29uLmlzLWljb257d2lkdGg6MjRweH0uZWwtc3RlcC5pcy1jZW50ZXIgLmVsLXN0ZXBfX2hlYWQsLmVsLXN0ZXAuaXMtY2VudGVyIC5lbC1zdGVwX19tYWlue3RleHQtYWxpZ246Y2VudGVyfS5lbC1zdGVwLmlzLWNlbnRlciAuZWwtc3RlcF9fZGVzY3JpcHRpb257cGFkZGluZy1sZWZ0OjIwJTtwYWRkaW5nLXJpZ2h0OjIwJX0uZWwtc3RlcC5pcy1jZW50ZXIgLmVsLXN0ZXBfX2xpbmV7bGVmdDo1MCU7cmlnaHQ6LTUwJX0uZWwtc3RlcC5pcy1zaW1wbGV7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2hlYWR7d2lkdGg6YXV0bztmb250LXNpemU6MDtwYWRkaW5nLXJpZ2h0OjEwcHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29ue2JhY2tncm91bmQ6MCAwO3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHg7Zm9udC1zaXplOjEycHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29uLWlubmVyW2NsYXNzKj1lbC1pY29uXTpub3QoLmlzLXN0YXR1cyl7Zm9udC1zaXplOjE4cHh9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19pY29uLWlubmVyLmlzLXN0YXR1c3std2Via2l0LXRyYW5zZm9ybTpzY2FsZSguOCkgdHJhbnNsYXRlWSgxcHgpO3RyYW5zZm9ybTpzY2FsZSguOCkgdHJhbnNsYXRlWSgxcHgpfS5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9fbWFpbntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOnN0cmV0Y2g7LW1zLWZsZXgtYWxpZ246c3RyZXRjaDthbGlnbi1pdGVtczpzdHJldGNoOy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleC1wb3NpdGl2ZToxO2ZsZXgtZ3JvdzoxfS5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9fdGl0bGV7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MjBweH0uZWwtc3RlcC5pcy1zaW1wbGU6bm90KDpsYXN0LW9mLXR5cGUpIC5lbC1zdGVwX190aXRsZXttYXgtd2lkdGg6NTAlO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9fYXJyb3d7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4LXBvc2l0aXZlOjE7ZmxleC1ncm93OjE7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9fYXJyb3c6OmFmdGVyLC5lbC1zdGVwLmlzLXNpbXBsZSAuZWwtc3RlcF9fYXJyb3c6OmJlZm9yZXtjb250ZW50OicnO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2hlaWdodDoxNXB4O3dpZHRoOjFweDtiYWNrZ3JvdW5kOiNDMEM0Q0N9LmVsLXN0ZXAuaXMtc2ltcGxlIC5lbC1zdGVwX19hcnJvdzo6YmVmb3Jley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpIHRyYW5zbGF0ZVkoLTRweCk7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpIHRyYW5zbGF0ZVkoLTRweCk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjAgMDt0cmFuc2Zvcm0tb3JpZ2luOjAgMH0uZWwtc3RlcC5pcy1zaW1wbGUgLmVsLXN0ZXBfX2Fycm93OjphZnRlcnstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHRyYW5zbGF0ZVkoNHB4KTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSB0cmFuc2xhdGVZKDRweCk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJTt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMTAwJX0uZWwtc3RlcC5pcy1zaW1wbGU6bGFzdC1vZi10eXBlIC5lbC1zdGVwX19hcnJvd3tkaXNwbGF5Om5vbmV9LmVsLWNhcm91c2Vse3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1jYXJvdXNlbC0taG9yaXpvbnRhbHtvdmVyZmxvdy14OmhpZGRlbn0uZWwtY2Fyb3VzZWwtLXZlcnRpY2Fse292ZXJmbG93LXk6aGlkZGVufS5lbC1jYXJvdXNlbF9fY29udGFpbmVye3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDozMDBweH0uZWwtY2Fyb3VzZWxfX2Fycm93e2JvcmRlcjpub25lO291dGxpbmU6MDtwYWRkaW5nOjA7bWFyZ2luOjA7aGVpZ2h0OjM2cHg7d2lkdGg6MzZweDtjdXJzb3I6cG9pbnRlcjstd2Via2l0LXRyYW5zaXRpb246LjNzO3RyYW5zaXRpb246LjNzO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6cmdiYSgzMSw0NSw2MSwuMTEpO2NvbG9yOiNGRkY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt6LWluZGV4OjEwOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEycHh9LmVsLWNhcm91c2VsX19hcnJvdy0tbGVmdHtsZWZ0OjE2cHh9LmVsLWNhcm91c2VsX19hcnJvdy0tcmlnaHR7cmlnaHQ6MTZweH0uZWwtY2Fyb3VzZWxfX2Fycm93OmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgzMSw0NSw2MSwuMjMpfS5lbC1jYXJvdXNlbF9fYXJyb3cgaXtjdXJzb3I6cG9pbnRlcn0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnN7cG9zaXRpb246YWJzb2x1dGU7bGlzdC1zdHlsZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDt6LWluZGV4OjJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1ob3Jpem9udGFse2JvdHRvbTowO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS12ZXJ0aWNhbHtyaWdodDowO3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGV7Ym90dG9tOjI2cHg7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246c3RhdGljOy13ZWJraXQtdHJhbnNmb3JtOm5vbmU7dHJhbnNmb3JtOm5vbmV9LmVsLWNhcm91c2VsX19pbmRpY2F0b3JzLS1vdXRzaWRlIC5lbC1jYXJvdXNlbF9faW5kaWNhdG9yOmhvdmVyIGJ1dHRvbntvcGFjaXR5Oi42NH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGUgYnV0dG9ue2JhY2tncm91bmQtY29sb3I6I0MwQzRDQztvcGFjaXR5Oi4yNH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVsc3tsZWZ0OjA7cmlnaHQ6MDstd2Via2l0LXRyYW5zZm9ybTpub25lO3RyYW5zZm9ybTpub25lO3RleHQtYWxpZ246Y2VudGVyfS5lbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tbGFiZWxzIC5lbC1jYXJvdXNlbF9fYnV0dG9ue2hlaWdodDphdXRvO3dpZHRoOmF1dG87cGFkZGluZzoycHggMThweDtmb250LXNpemU6MTJweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLWxhYmVscyAuZWwtY2Fyb3VzZWxfX2luZGljYXRvcntwYWRkaW5nOjZweCA0cHh9LmVsLWNhcm91c2VsX19pbmRpY2F0b3J7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcn0uZWwtY2Fyb3VzZWxfX2luZGljYXRvcjpob3ZlciBidXR0b257b3BhY2l0eTouNzJ9LmVsLWNhcm91c2VsX19pbmRpY2F0b3ItLWhvcml6b250YWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzoxMnB4IDRweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvci0tdmVydGljYWx7cGFkZGluZzo0cHggMTJweH0uZWwtY2Fyb3VzZWxfX2luZGljYXRvci0tdmVydGljYWwgLmVsLWNhcm91c2VsX19idXR0b257d2lkdGg6MnB4O2hlaWdodDoxNXB4fS5lbC1jYXJvdXNlbF9faW5kaWNhdG9yLmlzLWFjdGl2ZSBidXR0b257b3BhY2l0eToxfS5lbC1jYXJvdXNlbF9fYnV0dG9ue2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNDg7d2lkdGg6MzBweDtoZWlnaHQ6MnB4O2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3JkZXI6bm9uZTtvdXRsaW5lOjA7cGFkZGluZzowO21hcmdpbjowO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdHJhbnNpdGlvbjouM3M7dHJhbnNpdGlvbjouM3N9LmNhcm91c2VsLWFycm93LWxlZnQtZW50ZXIsLmNhcm91c2VsLWFycm93LWxlZnQtbGVhdmUtYWN0aXZley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgtMTBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgtMTBweCk7b3BhY2l0eTowfS5jYXJvdXNlbC1hcnJvdy1yaWdodC1lbnRlciwuY2Fyb3VzZWwtYXJyb3ctcmlnaHQtbGVhdmUtYWN0aXZley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSkgdHJhbnNsYXRlWCgxMHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKSB0cmFuc2xhdGVYKDEwcHgpO29wYWNpdHk6MH0uZWwtY2Fyb3VzZWxfX2l0ZW17dG9wOjA7bGVmdDowO2Rpc3BsYXk6aW5saW5lLWJsb2NrO292ZXJmbG93OmhpZGRlbjt6LWluZGV4OjB9LmVsLWNhcm91c2VsX19pdGVtLmlzLWFjdGl2ZXt6LWluZGV4OjJ9LmVsLWNhcm91c2VsX19pdGVtLmlzLWFuaW1hdGluZ3std2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZS1pbi1vdXQsIC13ZWJraXQtdHJhbnNmb3JtIC40cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZS1pbi1vdXQsLXdlYmtpdC10cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0fS5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZHt3aWR0aDo1MCU7LXdlYmtpdC10cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC40cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC40cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNHMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0LCAtd2Via2l0LXRyYW5zZm9ybSAuNHMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2UtaW4tb3V0LC13ZWJraXQtdHJhbnNmb3JtIC40cyBlYXNlLWluLW91dH0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQuaXMtaW4tc3RhZ2V7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxfS5lbC1jYXJvdXNlbF9faXRlbS0tY2FyZC5pcy1pbi1zdGFnZS5pcy1ob3ZlciAuZWwtY2Fyb3VzZWxfX21hc2ssLmVsLWNhcm91c2VsX19pdGVtLS1jYXJkLmlzLWluLXN0YWdlOmhvdmVyIC5lbC1jYXJvdXNlbF9fbWFza3tvcGFjaXR5Oi4xMn0uZWwtY2Fyb3VzZWxfX2l0ZW0tLWNhcmQuaXMtYWN0aXZle3otaW5kZXg6Mn0uZWwtY2Fyb3VzZWxfX21hc2t7dG9wOjA7bGVmdDowO2JhY2tncm91bmQtY29sb3I6I0ZGRjtvcGFjaXR5Oi4yNDstd2Via2l0LXRyYW5zaXRpb246LjJzO3RyYW5zaXRpb246LjJzfS5mYWRlLWluLWxpbmVhci1lbnRlci1hY3RpdmUsLmZhZGUtaW4tbGluZWFyLWxlYXZlLWFjdGl2ZXstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuMnMgbGluZWFyO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgbGluZWFyfS5mYWRlLWluLWxpbmVhci1lbnRlciwuZmFkZS1pbi1saW5lYXItbGVhdmUsLmZhZGUtaW4tbGluZWFyLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLWZhZGUtaW4tbGluZWFyLWVudGVyLWFjdGl2ZSwuZWwtZmFkZS1pbi1saW5lYXItbGVhdmUtYWN0aXZley13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBsaW5lYXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBsaW5lYXJ9LmVsLWZhZGUtaW4tbGluZWFyLWVudGVyLC5lbC1mYWRlLWluLWxpbmVhci1sZWF2ZSwuZWwtZmFkZS1pbi1saW5lYXItbGVhdmUtYWN0aXZle29wYWNpdHk6MH0uZWwtZmFkZS1pbi1lbnRlci1hY3RpdmUsLmVsLWZhZGUtaW4tbGVhdmUtYWN0aXZley13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNTUsMCwuMSwxKTt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpfS5lbC1mYWRlLWluLWVudGVyLC5lbC1mYWRlLWluLWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjB9LmVsLXpvb20taW4tY2VudGVyLWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi1jZW50ZXItbGVhdmUtYWN0aXZley13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjNzIGN1YmljLWJlemllciguNTUsMCwuMSwxKTt0cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC41NSwwLC4xLDEpfS5lbC16b29tLWluLWNlbnRlci1lbnRlciwuZWwtem9vbS1pbi1jZW50ZXItbGVhdmUtYWN0aXZle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZVgoMCk7dHJhbnNmb3JtOnNjYWxlWCgwKX0uZWwtem9vbS1pbi10b3AtZW50ZXItYWN0aXZlLC5lbC16b29tLWluLXRvcC1sZWF2ZS1hY3RpdmV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWSgxKTt0cmFuc2Zvcm06c2NhbGVZKDEpOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246b3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSwtd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciB0b3A7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgdG9wfS5lbC16b29tLWluLXRvcC1lbnRlciwuZWwtem9vbS1pbi10b3AtbGVhdmUtYWN0aXZle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZVkoMCk7dHJhbnNmb3JtOnNjYWxlWSgwKX0uZWwtem9vbS1pbi1ib3R0b20tZW50ZXItYWN0aXZlLC5lbC16b29tLWluLWJvdHRvbS1sZWF2ZS1hY3RpdmV7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlWSgxKTt0cmFuc2Zvcm06c2NhbGVZKDEpOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246b3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSwtd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLG9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOmNlbnRlciBib3R0b207dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgYm90dG9tfS5lbC16b29tLWluLWJvdHRvbS1lbnRlciwuZWwtem9vbS1pbi1ib3R0b20tbGVhdmUtYWN0aXZle29wYWNpdHk6MDstd2Via2l0LXRyYW5zZm9ybTpzY2FsZVkoMCk7dHJhbnNmb3JtOnNjYWxlWSgwKX0uZWwtem9vbS1pbi1sZWZ0LWVudGVyLWFjdGl2ZSwuZWwtem9vbS1pbi1sZWZ0LWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjE7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoMSwxKTt0cmFuc2Zvcm06c2NhbGUoMSwxKTstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSwtd2Via2l0LXRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksLXdlYmtpdC10cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjMsMSwuMzIsMSksb3BhY2l0eSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgY3ViaWMtYmV6aWVyKC4yMywxLC4zMiwxKSxvcGFjaXR5IC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpLC13ZWJraXQtdHJhbnNmb3JtIC4zcyBjdWJpYy1iZXppZXIoLjIzLDEsLjMyLDEpOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjp0b3AgbGVmdDt0cmFuc2Zvcm0tb3JpZ2luOnRvcCBsZWZ0fS5lbC16b29tLWluLWxlZnQtZW50ZXIsLmVsLXpvb20taW4tbGVmdC1sZWF2ZS1hY3RpdmV7b3BhY2l0eTowOy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC40NSwuNDUpO3RyYW5zZm9ybTpzY2FsZSguNDUsLjQ1KX0uY29sbGFwc2UtdHJhbnNpdGlvbnstd2Via2l0LXRyYW5zaXRpb246LjNzIGhlaWdodCBlYXNlLWluLW91dCwuM3MgcGFkZGluZy10b3AgZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctYm90dG9tIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246LjNzIGhlaWdodCBlYXNlLWluLW91dCwuM3MgcGFkZGluZy10b3AgZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctYm90dG9tIGVhc2UtaW4tb3V0fS5ob3Jpem9udGFsLWNvbGxhcHNlLXRyYW5zaXRpb257LXdlYmtpdC10cmFuc2l0aW9uOi4zcyB3aWR0aCBlYXNlLWluLW91dCwuM3MgcGFkZGluZy1sZWZ0IGVhc2UtaW4tb3V0LC4zcyBwYWRkaW5nLXJpZ2h0IGVhc2UtaW4tb3V0O3RyYW5zaXRpb246LjNzIHdpZHRoIGVhc2UtaW4tb3V0LC4zcyBwYWRkaW5nLWxlZnQgZWFzZS1pbi1vdXQsLjNzIHBhZGRpbmctcmlnaHQgZWFzZS1pbi1vdXR9LmVsLWxpc3QtZW50ZXItYWN0aXZlLC5lbC1saXN0LWxlYXZlLWFjdGl2ZXstd2Via2l0LXRyYW5zaXRpb246YWxsIDFzO3RyYW5zaXRpb246YWxsIDFzfS5lbC1saXN0LWVudGVyLC5lbC1saXN0LWxlYXZlLWFjdGl2ZXtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtMzBweCk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTMwcHgpfS5lbC1vcGFjaXR5LXRyYW5zaXRpb257LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguNTUsMCwuMSwxKTt0cmFuc2l0aW9uOm9wYWNpdHkgLjNzIGN1YmljLWJlemllciguNTUsMCwuMSwxKX0uZWwtY29sbGFwc2V7Ym9yZGVyLXRvcDoxcHggc29saWQgI0VCRUVGNTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1fS5lbC1jb2xsYXBzZS1pdGVtLmlzLWRpc2FibGVkIC5lbC1jb2xsYXBzZS1pdGVtX19oZWFkZXJ7Y29sb3I6I2JiYjtjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlcntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDo0OHB4O2xpbmUtaGVpZ2h0OjQ4cHg7YmFja2dyb3VuZC1jb2xvcjojRkZGO2NvbG9yOiMzMDMxMzM7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI0VCRUVGNTtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo1MDA7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlci1ib3R0b20tY29sb3IgLjNzO3RyYW5zaXRpb246Ym9yZGVyLWJvdHRvbS1jb2xvciAuM3M7b3V0bGluZTowfS5lbC1jb2xsYXBzZS1pdGVtX19oZWFkZXIuZm9jdXNpbmc6Zm9jdXM6bm90KDpob3ZlciksLmVsLXRhZ3tjb2xvcjojNDA5RUZGfS5lbC1jb2xsYXBzZS1pdGVtX19hcnJvd3ttYXJnaW46MCA4cHggMCBhdXRvOy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuM3M7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcywgLXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcywtd2Via2l0LXRyYW5zZm9ybSAuM3M7Zm9udC13ZWlnaHQ6MzAwfS5lbC1jb2xsYXBzZS1pdGVtX19hcnJvdy5pcy1hY3RpdmV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDkwZGVnKTt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0uZWwtY29sbGFwc2UtaXRlbV9faGVhZGVyLmlzLWFjdGl2ZXtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1jb2xsYXBzZS1pdGVtX193cmFwe3dpbGwtY2hhbmdlOmhlaWdodDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7b3ZlcmZsb3c6aGlkZGVuOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1fS5lbC1jYXNjYWRlcl9fc2VhcmNoLWlucHV0LC5lbC1jYXNjYWRlcl9fdGFncywuZWwtdGFney13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94fS5lbC1jb2xsYXBzZS1pdGVtX19jb250ZW50e3BhZGRpbmctYm90dG9tOjI1cHg7Zm9udC1zaXplOjEzcHg7Y29sb3I6IzMwMzEzMztsaW5lLWhlaWdodDoxLjc2OTIzMDc2OTIzMDc2OX0uZWwtY29sbGFwc2UtaXRlbTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206LTFweH0uZWwtcG9wcGVyIC5wb3BwZXJfX2Fycm93LC5lbC1wb3BwZXIgLnBvcHBlcl9fYXJyb3c6OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7d2lkdGg6MDtoZWlnaHQ6MDtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXN0eWxlOnNvbGlkfS5lbC1jYXNjYWRlciwuZWwtdGFne2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5lbC1wb3BwZXIgLnBvcHBlcl9fYXJyb3d7Ym9yZGVyLXdpZHRoOjZweDstd2Via2l0LWZpbHRlcjpkcm9wLXNoYWRvdygwIDJweCAxMnB4IHJnYmEoMCwgMCwgMCwgLjAzKSk7ZmlsdGVyOmRyb3Atc2hhZG93KDAgMnB4IDEycHggcmdiYSgwLCAwLCAwLCAuMDMpKX0uZWwtcG9wcGVyIC5wb3BwZXJfX2Fycm93OjphZnRlcntjb250ZW50OlxcXCIgXFxcIjtib3JkZXItd2lkdGg6NnB4fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF17bWFyZ2luLWJvdHRvbToxMnB4fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3d7Ym90dG9tOi02cHg7bGVmdDo1MCU7bWFyZ2luLXJpZ2h0OjNweDtib3JkZXItdG9wLWNvbG9yOiNFQkVFRjU7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXRvcF0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye2JvdHRvbToxcHg7bWFyZ2luLWxlZnQ6LTZweDtib3JkZXItdG9wLWNvbG9yOiNGRkY7Ym9yZGVyLWJvdHRvbS13aWR0aDowfS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV17bWFyZ2luLXRvcDoxMnB4fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3d7dG9wOi02cHg7bGVmdDo1MCU7bWFyZ2luLXJpZ2h0OjNweDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojRUJFRUY1fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePWJvdHRvbV0gLnBvcHBlcl9fYXJyb3c6OmFmdGVye3RvcDoxcHg7bWFyZ2luLWxlZnQ6LTZweDtib3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojRkZGfS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XXttYXJnaW4tbGVmdDoxMnB4fS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvd3t0b3A6NTAlO2xlZnQ6LTZweDttYXJnaW4tYm90dG9tOjNweDtib3JkZXItcmlnaHQtY29sb3I6I0VCRUVGNTtib3JkZXItbGVmdC13aWR0aDowfS5lbC1wb3BwZXJbeC1wbGFjZW1lbnRePXJpZ2h0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7Ym90dG9tOi02cHg7bGVmdDoxcHg7Ym9yZGVyLXJpZ2h0LWNvbG9yOiNGRkY7Ym9yZGVyLWxlZnQtd2lkdGg6MH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XXttYXJnaW4tcmlnaHQ6MTJweH0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvd3t0b3A6NTAlO3JpZ2h0Oi02cHg7bWFyZ2luLWJvdHRvbTozcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6I0VCRUVGNX0uZWwtcG9wcGVyW3gtcGxhY2VtZW50Xj1sZWZ0XSAucG9wcGVyX19hcnJvdzo6YWZ0ZXJ7cmlnaHQ6MXB4O2JvdHRvbTotNnB4O21hcmdpbi1sZWZ0Oi02cHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtY29sb3I6I0ZGRn0uZWwtdGFne2JhY2tncm91bmQtY29sb3I6I2VjZjVmZjtib3JkZXItY29sb3I6I2Q5ZWNmZjtoZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTBweDtsaW5lLWhlaWdodDozMHB4O2ZvbnQtc2l6ZToxMnB4O2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLXRhZy5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXRhZyAuZWwtdGFnX19jbG9zZXtjb2xvcjojNDA5ZWZmfS5lbC10YWcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLXRhZy5lbC10YWctLWluZm97YmFja2dyb3VuZC1jb2xvcjojZjRmNGY1O2JvcmRlci1jb2xvcjojZTllOWViO2NvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLWluZm8uaXMtaGl0e2JvcmRlci1jb2xvcjojOTA5Mzk5fS5lbC10YWcuZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLWluZm8gLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTl9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3N7YmFja2dyb3VuZC1jb2xvcjojZjBmOWViO2JvcmRlci1jb2xvcjojZTFmM2Q4O2NvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3MuaXMtaGl0e2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC10YWcuZWwtdGFnLS1zdWNjZXNzIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXN1Y2Nlc3MgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM2N2MyM2F9LmVsLXRhZy5lbC10YWctLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmRmNmVjO2JvcmRlci1jb2xvcjojZmFlY2Q4O2NvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLXdhcm5pbmcuaXMtaGl0e2JvcmRlci1jb2xvcjojRTZBMjNDfS5lbC10YWcuZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2N9LmVsLXRhZy5lbC10YWctLWRhbmdlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZWYwZjA7Ym9yZGVyLWNvbG9yOiNmZGUyZTI7Y29sb3I6I2Y1NmM2Y30uZWwtdGFnLmVsLXRhZy0tZGFuZ2VyLmlzLWhpdHtib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtdGFnLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNmNTZjNmN9LmVsLXRhZy5lbC10YWctLWRhbmdlciAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2Y1NmM2Y30uZWwtdGFnIC5lbC1pY29uLWNsb3Nle2JvcmRlci1yYWRpdXM6NTAlO3RleHQtYWxpZ246Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZToxMnB4O2hlaWdodDoxNnB4O3dpZHRoOjE2cHg7bGluZS1oZWlnaHQ6MTZweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dG9wOi0xcHg7cmlnaHQ6LTVweH0uZWwtdGFnIC5lbC1pY29uLWNsb3NlOjpiZWZvcmV7ZGlzcGxheTpibG9ja30uZWwtdGFnLS1kYXJre2JhY2tncm91bmQtY29sb3I6IzQwOWVmZjtib3JkZXItY29sb3I6IzQwOWVmZjtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuaXMtaGl0e2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC10YWctLWRhcmsgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2ZmZn0uZWwtdGFnLS1kYXJrIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNjZiMWZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1pbmZve2JhY2tncm91bmQtY29sb3I6IzkwOTM5OTtib3JkZXItY29sb3I6IzkwOTM5OTtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1pbmZvLmlzLWhpdHtib3JkZXItY29sb3I6IzkwOTM5OX0uZWwtdGFnLS1kYXJrLmVsLXRhZy0taW5mbyAuZWwtdGFnX19jbG9zZXtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojYTZhOWFkfS5lbC10YWctLWRhcmsuZWwtdGFnLS1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzY3YzIzYTtib3JkZXItY29sb3I6IzY3YzIzYTtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1zdWNjZXNzLmlzLWhpdHtib3JkZXItY29sb3I6IzY3QzIzQX0uZWwtdGFnLS1kYXJrLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZXtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1zdWNjZXNzIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojODVjZTYxfS5lbC10YWctLWRhcmsuZWwtdGFnLS13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2U2YTIzYztib3JkZXItY29sb3I6I2U2YTIzYztjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS13YXJuaW5nLmlzLWhpdHtib3JkZXItY29sb3I6I0U2QTIzQ30uZWwtdGFnLS1kYXJrLmVsLXRhZy0td2FybmluZyAuZWwtdGFnX19jbG9zZXtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS13YXJuaW5nIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojZWJiNTYzfS5lbC10YWctLWRhcmsuZWwtdGFnLS1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZjU2YzZjO2JvcmRlci1jb2xvcjojZjU2YzZjO2NvbG9yOiNmZmZ9LmVsLXRhZy0tZGFyay5lbC10YWctLWRhbmdlci5pcy1oaXR7Ym9yZGVyLWNvbG9yOiNGNTZDNkN9LmVsLXRhZy0tZGFyay5lbC10YWctLWRhbmdlciAuZWwtdGFnX19jbG9zZXtjb2xvcjojZmZmfS5lbC10YWctLWRhcmsuZWwtdGFnLS1kYW5nZXIgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNmNzg5ODl9LmVsLXRhZy0tcGxhaW57YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojYjNkOGZmO2NvbG9yOiM0MDllZmZ9LmVsLXRhZy0tcGxhaW4uaXMtaGl0e2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC10YWctLXBsYWluIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM0MDllZmZ9LmVsLXRhZy0tcGxhaW4gLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDllZmZ9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1pbmZve2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItY29sb3I6I2QzZDRkNjtjb2xvcjojOTA5Mzk5fS5lbC10YWctLXBsYWluLmVsLXRhZy0taW5mby5pcy1oaXR7Ym9yZGVyLWNvbG9yOiM5MDkzOTl9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiM5MDkzOTl9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1pbmZvIC5lbC10YWdfX2Nsb3NlOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojOTA5Mzk5fS5lbC10YWctLXBsYWluLmVsLXRhZy0tc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiNjMmU3YjA7Y29sb3I6IzY3YzIzYX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXN1Y2Nlc3MuaXMtaGl0e2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC10YWctLXBsYWluLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZXtjb2xvcjojNjdjMjNhfS5lbC10YWctLXBsYWluLmVsLXRhZy0tc3VjY2VzcyAuZWwtdGFnX19jbG9zZTpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzY3YzIzYX0uZWwtdGFnLS1wbGFpbi5lbC10YWctLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZjVkYWIxO2NvbG9yOiNlNmEyM2N9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS13YXJuaW5nLmlzLWhpdHtib3JkZXItY29sb3I6I0U2QTIzQ30uZWwtdGFnLS1wbGFpbi5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2V7Y29sb3I6I2U2YTIzY30uZWwtdGFnLS1wbGFpbi5lbC10YWctLXdhcm5pbmcgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNlNmEyM2N9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1jb2xvcjojZmJjNGM0O2NvbG9yOiNmNTZjNmN9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1kYW5nZXIuaXMtaGl0e2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC10YWctLXBsYWluLmVsLXRhZy0tZGFuZ2VyIC5lbC10YWdfX2Nsb3Nle2NvbG9yOiNmNTZjNmN9LmVsLXRhZy0tcGxhaW4uZWwtdGFnLS1kYW5nZXIgLmVsLXRhZ19fY2xvc2U6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNmNTZjNmN9LmVsLXRhZy0tbWVkaXVte2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI2cHh9LmVsLXRhZy0tbWVkaXVtIC5lbC1pY29uLWNsb3Nley13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC44KTt0cmFuc2Zvcm06c2NhbGUoLjgpfS5lbC10YWctLXNtYWxse2hlaWdodDoyNHB4O3BhZGRpbmc6MCA4cHg7bGluZS1oZWlnaHQ6MjJweH0uZWwtdGFnLS1zbWFsbCAuZWwtaWNvbi1jbG9zZXstd2Via2l0LXRyYW5zZm9ybTpzY2FsZSguOCk7dHJhbnNmb3JtOnNjYWxlKC44KX0uZWwtdGFnLS1taW5pe2hlaWdodDoyMHB4O3BhZGRpbmc6MCA1cHg7bGluZS1oZWlnaHQ6MTlweH0uZWwtdGFnLS1taW5pIC5lbC1pY29uLWNsb3Nle21hcmdpbi1sZWZ0Oi0zcHg7LXdlYmtpdC10cmFuc2Zvcm06c2NhbGUoLjcpO3RyYW5zZm9ybTpzY2FsZSguNyl9LmVsLWNhc2NhZGVye3Bvc2l0aW9uOnJlbGF0aXZlO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjQwcHh9LmVsLWNhc2NhZGVyOm5vdCguaXMtZGlzYWJsZWQpOmhvdmVyIC5lbC1pbnB1dF9faW5uZXJ7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLWNhc2NhZGVyIC5lbC1pbnB1dCAuZWwtaW5wdXRfX2lubmVyOmZvY3VzLC5lbC1jYXNjYWRlciAuZWwtaW5wdXQuaXMtZm9jdXMgLmVsLWlucHV0X19pbm5lcntib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtY2FzY2FkZXIgLmVsLWlucHV0e2N1cnNvcjpwb2ludGVyfS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWlucHV0X19pbm5lcnt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWljb24tYXJyb3ctZG93bnstd2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjNzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MsIC13ZWJraXQtdHJhbnNmb3JtIC4zczt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MsLXdlYmtpdC10cmFuc2Zvcm0gLjNzO2ZvbnQtc2l6ZToxNHB4fS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWljb24tYXJyb3ctZG93bi5pcy1yZXZlcnNley13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMTgwZGVnKTt0cmFuc2Zvcm06cm90YXRlWigxODBkZWcpfS5lbC1jYXNjYWRlciAuZWwtaW5wdXQgLmVsLWljb24tY2lyY2xlLWNsb3NlOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLWNhc2NhZGVyLS1tZWRpdW17Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzZweH0uZWwtY2FzY2FkZXItLXNtYWxse2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjMycHh9LmVsLWNhc2NhZGVyLS1taW5pe2ZvbnQtc2l6ZToxMnB4O2xpbmUtaGVpZ2h0OjI4cHh9LmVsLWNhc2NhZGVyLmlzLWRpc2FibGVkIC5lbC1jYXNjYWRlcl9fbGFiZWx7ei1pbmRleDoyO2NvbG9yOiNDMEM0Q0N9LmVsLWNhc2NhZGVyX19kcm9wZG93bnttYXJnaW46NXB4IDA7Zm9udC1zaXplOjE0cHg7YmFja2dyb3VuZDojRkZGO2JvcmRlcjoxcHggc29saWQgI0U0RTdFRDtib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWJveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpO2JveC1zaGFkb3c6MCAycHggMTJweCAwIHJnYmEoMCwwLDAsLjEpfS5lbC1jYXNjYWRlcl9fdGFnc3twb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7cmlnaHQ6MzBweDt0b3A6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7bGluZS1oZWlnaHQ6bm9ybWFsO3RleHQtYWxpZ246bGVmdDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhc2NhZGVyX190YWdzIC5lbC10YWd7ZGlzcGxheTotd2Via2l0LWlubGluZS1ib3g7ZGlzcGxheTotbXMtaW5saW5lLWZsZXhib3g7ZGlzcGxheTppbmxpbmUtZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttYXgtd2lkdGg6MTAwJTttYXJnaW46MnB4IDAgMnB4IDZweDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2JhY2tncm91bmQ6I2YwZjJmNX0uZWwtY2FzY2FkZXJfX3RhZ3MgLmVsLXRhZzpub3QoLmlzLWhpdCl7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFnPnNwYW57LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5lbC1jYXNjYWRlcl9fdGFncyAuZWwtdGFnIC5lbC1pY29uLWNsb3Nley13ZWJraXQtYm94LWZsZXg6MDstbXMtZmxleDpub25lO2ZsZXg6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNDMEM0Q0M7Y29sb3I6I0ZGRn0uZWwtY2FzY2FkZXJfX3RhZ3MgLmVsLXRhZyAuZWwtaWNvbi1jbG9zZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM5MDkzOTl9LmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLXBhbmVse2JvcmRlci1yYWRpdXM6NHB4fS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1saXN0e21heC1oZWlnaHQ6MjA0cHg7bWFyZ2luOjA7cGFkZGluZzo2cHggMDtmb250LXNpemU6MTRweDtjb2xvcjojNjA2MjY2O3RleHQtYWxpZ246Y2VudGVyfS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVte2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpqdXN0aWZ5Oy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MzRweDtwYWRkaW5nOjAgMTVweDt0ZXh0LWFsaWduOmxlZnQ7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyfS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtOmZvY3VzLC5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtOmhvdmVye2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24taXRlbS5pcy1jaGVja2Vke2NvbG9yOiM0MDlFRkY7Zm9udC13ZWlnaHQ6NzAwfS5lbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtPnNwYW57bWFyZ2luLXJpZ2h0OjEwcHh9LmVsLWNhc2NhZGVyX19lbXB0eS10ZXh0e21hcmdpbjoxMHB4IDA7Y29sb3I6I0MwQzRDQ30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dHstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7aGVpZ2h0OjI0cHg7bWluLXdpZHRoOjYwcHg7bWFyZ2luOjJweCAwIDJweCAxNXB4O3BhZGRpbmc6MDtjb2xvcjojNjA2MjY2O2JvcmRlcjpub25lO291dGxpbmU6MDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dDotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dDo6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXQ6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtY2FzY2FkZXJfX3NlYXJjaC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtY29sb3ItcHJlZGVmaW5le2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7Zm9udC1zaXplOjEycHg7bWFyZ2luLXRvcDo4cHg7d2lkdGg6MjgwcHh9LmVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Jze2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxOy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcH0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvcnttYXJnaW46MCAwIDhweCA4cHg7d2lkdGg6MjBweDtoZWlnaHQ6MjBweDtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cG9pbnRlcn0uZWwtY29sb3ItcHJlZGVmaW5lX19jb2xvci1zZWxlY3RvcjpudGgtY2hpbGQoMTBuKzEpe21hcmdpbi1sZWZ0OjB9LmVsLWNvbG9yLXByZWRlZmluZV9fY29sb3Itc2VsZWN0b3Iuc2VsZWN0ZWR7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAzcHggMnB4ICM0MDlFRkY7Ym94LXNoYWRvdzowIDAgM3B4IDJweCAjNDA5RUZGfS5lbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9yLXNlbGVjdG9yPmRpdntkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6M3B4fS5lbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9yLXNlbGVjdG9yLmlzLWFscGhhe2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQXdBQUFBTUNBSUFBQURaRjh1d0FBQUFHVWxFUVZRWVYyTTRnd0grWXdDR0lhc0lVd2hUMjVCVkJBRHR6WU5Zckh2djRnQUFBQUJKUlU1RXJrSmdnZz09KX0uZWwtY29sb3ItaHVlLXNsaWRlcntwb3NpdGlvbjpyZWxhdGl2ZTstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MjgwcHg7aGVpZ2h0OjEycHg7YmFja2dyb3VuZC1jb2xvcjpyZWQ7cGFkZGluZzowIDJweH0uZWwtY29sb3ItaHVlLXNsaWRlcl9fYmFye3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQ6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsbGVmdCB0b3AsIHJpZ2h0IHRvcCxjb2xvci1zdG9wKDAsIHJlZCksY29sb3Itc3RvcCgxNyUsICNmZjApLGNvbG9yLXN0b3AoMzMlLCAjMGYwKSxjb2xvci1zdG9wKDUwJSwgIzBmZiksY29sb3Itc3RvcCg2NyUsICMwMGYpLGNvbG9yLXN0b3AoODMlLCAjZjBmKSx0byhyZWQpKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZWQgMCwjZmYwIDE3JSwjMGYwIDMzJSwjMGZmIDUwJSwjMDBmIDY3JSwjZjBmIDgzJSxyZWQgMTAwJSk7aGVpZ2h0OjEwMCV9LmVsLWNvbG9yLWh1ZS1zbGlkZXJfX3RodW1ie3Bvc2l0aW9uOmFic29sdXRlO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtsZWZ0OjA7dG9wOjA7d2lkdGg6NHB4O2hlaWdodDoxMDAlO2JvcmRlci1yYWRpdXM6MXB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNmMGYwZjA7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAycHggcmdiYSgwLDAsMCwuNik7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjYpO3otaW5kZXg6MX0uZWwtY29sb3ItaHVlLXNsaWRlci5pcy12ZXJ0aWNhbHt3aWR0aDoxMnB4O2hlaWdodDoxODBweDtwYWRkaW5nOjJweCAwfS5lbC1jb2xvci1odWUtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1jb2xvci1odWUtc2xpZGVyX19iYXJ7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCwgbGVmdCBib3R0b20sY29sb3Itc3RvcCgwLCByZWQpLGNvbG9yLXN0b3AoMTclLCAjZmYwKSxjb2xvci1zdG9wKDMzJSwgIzBmMCksY29sb3Itc3RvcCg1MCUsICMwZmYpLGNvbG9yLXN0b3AoNjclLCAjMDBmKSxjb2xvci1zdG9wKDgzJSwgI2YwZiksdG8ocmVkKSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHJlZCAwLCNmZjAgMTclLCMwZjAgMzMlLCMwZmYgNTAlLCMwMGYgNjclLCNmMGYgODMlLHJlZCAxMDAlKX0uZWwtY29sb3ItaHVlLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtY29sb3ItaHVlLXNsaWRlcl9fdGh1bWJ7bGVmdDowO3RvcDowO3dpZHRoOjEwMCU7aGVpZ2h0OjRweH0uZWwtY29sb3Itc3ZwYW5lbHtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoyODBweDtoZWlnaHQ6MTgwcHh9LmVsLWNvbG9yLXN2cGFuZWxfX2JsYWNrLC5lbC1jb2xvci1zdnBhbmVsX193aGl0ZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cmlnaHQ6MDtib3R0b206MH0uZWwtY29sb3Itc3ZwYW5lbF9fd2hpdGV7YmFja2dyb3VuZDotd2Via2l0LWdyYWRpZW50KGxpbmVhcixsZWZ0IHRvcCwgcmlnaHQgdG9wLGZyb20oI2ZmZiksdG8ocmdiYSgyNTUsMjU1LDI1NSwwKSkpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCNmZmYscmdiYSgyNTUsMjU1LDI1NSwwKSl9LmVsLWNvbG9yLXN2cGFuZWxfX2JsYWNre2JhY2tncm91bmQ6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsbGVmdCBib3R0b20sIGxlZnQgdG9wLGZyb20oIzAwMCksdG8ocmdiYSgwLDAsMCwwKSkpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHRvcCwjMDAwLHJnYmEoMCwwLDAsMCkpfS5lbC1jb2xvci1zdnBhbmVsX19jdXJzb3J7cG9zaXRpb246YWJzb2x1dGV9LmVsLWNvbG9yLXN2cGFuZWxfX2N1cnNvcj5kaXZ7Y3Vyc29yOmhlYWQ7d2lkdGg6NHB4O2hlaWdodDo0cHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCAwIDEuNXB4ICNmZmYsaW5zZXQgMCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMyksMCAwIDFweCAycHggcmdiYSgwLDAsMCwuNCk7Ym94LXNoYWRvdzowIDAgMCAxLjVweCAjZmZmLGluc2V0IDAgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjMpLDAgMCAxcHggMnB4IHJnYmEoMCwwLDAsLjQpO2JvcmRlci1yYWRpdXM6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtMnB4LC0ycHgpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTJweCwtMnB4KX0uZWwtY29sb3ItYWxwaGEtc2xpZGVye3Bvc2l0aW9uOnJlbGF0aXZlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt3aWR0aDoyODBweDtoZWlnaHQ6MTJweDtiYWNrZ3JvdW5kOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQU1DQUlBQUFEWkY4dXdBQUFBR1VsRVFWUVlWMk00Z3dIK1l3Q0dJYXNJVXdoVDI1QlZCQUR0ellOWXJIdnY0Z0FBQUFCSlJVNUVya0pnZ2c9PSl9LmVsLWNvbG9yLWFscGhhLXNsaWRlcl9fYmFye3Bvc2l0aW9uOnJlbGF0aXZlO2JhY2tncm91bmQ6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsbGVmdCB0b3AsIHJpZ2h0IHRvcCxjb2xvci1zdG9wKDAsIHJnYmEoMjU1LDI1NSwyNTUsMCkpLHRvKCNmZmYpKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCxyZ2JhKDI1NSwyNTUsMjU1LDApIDAsI2ZmZiAxMDAlKTtoZWlnaHQ6MTAwJX0uZWwtY29sb3ItYWxwaGEtc2xpZGVyX190aHVtYntwb3NpdGlvbjphYnNvbHV0ZTtjdXJzb3I6cG9pbnRlcjstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bGVmdDowO3RvcDowO3dpZHRoOjRweDtoZWlnaHQ6MTAwJTtib3JkZXItcmFkaXVzOjFweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjZjBmMGYwOy13ZWJraXQtYm94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjYpO2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC42KTt6LWluZGV4OjF9LmVsLWNvbG9yLWFscGhhLXNsaWRlci5pcy12ZXJ0aWNhbHt3aWR0aDoyMHB4O2hlaWdodDoxODBweH0uZWwtY29sb3ItYWxwaGEtc2xpZGVyLmlzLXZlcnRpY2FsIC5lbC1jb2xvci1hbHBoYS1zbGlkZXJfX2JhcntiYWNrZ3JvdW5kOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSxjb2xvci1zdG9wKDAsIHJnYmEoMjU1LDI1NSwyNTUsMCkpLHRvKCNmZmYpKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20scmdiYSgyNTUsMjU1LDI1NSwwKSAwLCNmZmYgMTAwJSl9LmVsLWNvbG9yLWFscGhhLXNsaWRlci5pcy12ZXJ0aWNhbCAuZWwtY29sb3ItYWxwaGEtc2xpZGVyX190aHVtYntsZWZ0OjA7dG9wOjA7d2lkdGg6MTAwJTtoZWlnaHQ6NHB4fS5lbC1jb2xvci1kcm9wZG93bnt3aWR0aDozMDBweH0uZWwtY29sb3ItZHJvcGRvd25fX21haW4td3JhcHBlcnttYXJnaW4tYm90dG9tOjZweH0uZWwtY29sb3ItZHJvcGRvd25fX21haW4td3JhcHBlcjo6YWZ0ZXJ7ZGlzcGxheTp0YWJsZTtjbGVhcjpib3RofS5lbC1jb2xvci1kcm9wZG93bl9fYnRuc3ttYXJnaW4tdG9wOjZweDt0ZXh0LWFsaWduOnJpZ2h0fS5lbC1jb2xvci1kcm9wZG93bl9fdmFsdWV7ZmxvYXQ6bGVmdDtsaW5lLWhlaWdodDoyNnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwMDA7d2lkdGg6MTYwcHh9LmVsLWNvbG9yLWRyb3Bkb3duX19idG57Ym9yZGVyOjFweCBzb2xpZCAjZGNkY2RjO2NvbG9yOiMzMzM7bGluZS1oZWlnaHQ6MjRweDtib3JkZXItcmFkaXVzOjJweDtwYWRkaW5nOjAgMjBweDtjdXJzb3I6cG9pbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O291dGxpbmU6MDtmb250LXNpemU6MTJweH0uZWwtY29sb3ItZHJvcGRvd25fX2J0bltkaXNhYmxlZF17Y29sb3I6I2NjYztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNvbG9yLWRyb3Bkb3duX19idG46aG92ZXJ7Y29sb3I6IzQwOUVGRjtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtY29sb3ItZHJvcGRvd25fX2xpbmstYnRue2N1cnNvcjpwb2ludGVyO2NvbG9yOiM0MDlFRkY7dGV4dC1kZWNvcmF0aW9uOm5vbmU7cGFkZGluZzoxNXB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1jb2xvci1kcm9wZG93bl9fbGluay1idG46aG92ZXJ7Y29sb3I6dGludCgjNDA5RUZGLDIwJSl9LmVsLWNvbG9yLXBpY2tlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTtsaW5lLWhlaWdodDpub3JtYWw7aGVpZ2h0OjQwcHh9LmVsLWNvbG9yLXBpY2tlci5pcy1kaXNhYmxlZCAuZWwtY29sb3ItcGlja2VyX190cmlnZ2Vye2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY29sb3ItcGlja2VyLS1tZWRpdW17aGVpZ2h0OjM2cHh9LmVsLWNvbG9yLXBpY2tlci0tbWVkaXVtIC5lbC1jb2xvci1waWNrZXJfX3RyaWdnZXJ7aGVpZ2h0OjM2cHg7d2lkdGg6MzZweH0uZWwtY29sb3ItcGlja2VyLS1tZWRpdW0gLmVsLWNvbG9yLXBpY2tlcl9fbWFza3toZWlnaHQ6MzRweDt3aWR0aDozNHB4fS5lbC1jb2xvci1waWNrZXItLXNtYWxse2hlaWdodDozMnB4fS5lbC1jb2xvci1waWNrZXItLXNtYWxsIC5lbC1jb2xvci1waWNrZXJfX3RyaWdnZXJ7aGVpZ2h0OjMycHg7d2lkdGg6MzJweH0uZWwtY29sb3ItcGlja2VyLS1zbWFsbCAuZWwtY29sb3ItcGlja2VyX19tYXNre2hlaWdodDozMHB4O3dpZHRoOjMwcHh9LmVsLWNvbG9yLXBpY2tlci0tc21hbGwgLmVsLWNvbG9yLXBpY2tlcl9fZW1wdHksLmVsLWNvbG9yLXBpY2tlci0tc21hbGwgLmVsLWNvbG9yLXBpY2tlcl9faWNvbnstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCkgc2NhbGUoLjgpO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgtNTAlLC01MCUsMCkgc2NhbGUoLjgpfS5lbC1jb2xvci1waWNrZXItLW1pbml7aGVpZ2h0OjI4cHh9LmVsLWNvbG9yLXBpY2tlci0tbWluaSAuZWwtY29sb3ItcGlja2VyX190cmlnZ2Vye2hlaWdodDoyOHB4O3dpZHRoOjI4cHh9LmVsLWNvbG9yLXBpY2tlci0tbWluaSAuZWwtY29sb3ItcGlja2VyX19tYXNre2hlaWdodDoyNnB4O3dpZHRoOjI2cHh9LmVsLWNvbG9yLXBpY2tlci0tbWluaSAuZWwtY29sb3ItcGlja2VyX19lbXB0eSwuZWwtY29sb3ItcGlja2VyLS1taW5pIC5lbC1jb2xvci1waWNrZXJfX2ljb257LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApIHNjYWxlKC44KTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApIHNjYWxlKC44KX0uZWwtY29sb3ItcGlja2VyX19tYXNre2hlaWdodDozOHB4O3dpZHRoOjM4cHg7Ym9yZGVyLXJhZGl1czo0cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjFweDtsZWZ0OjFweDt6LWluZGV4OjE7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNyl9LmVsLWNvbG9yLXBpY2tlcl9fdHJpZ2dlcntkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjQwcHg7d2lkdGg6NDBweDtwYWRkaW5nOjRweDtib3JkZXI6MXB4IHNvbGlkICNlNmU2ZTY7Ym9yZGVyLXJhZGl1czo0cHg7Zm9udC1zaXplOjA7cG9zaXRpb246cmVsYXRpdmU7Y3Vyc29yOnBvaW50ZXJ9LmVsLWNvbG9yLXBpY2tlcl9fY29sb3IsLmVsLWlucHV0X19pbm5lciwuZWwtdGV4dGFyZWFfX2lubmVyLC5lbC10cmFuc2Zlci1wYW5lbHstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY29sb3ItcGlja2VyX19jb2xvcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyLXJhZGl1czoycHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtY29sb3ItcGlja2VyX19jb2xvci5pcy1hbHBoYXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUF3QUFBQU1DQUlBQUFEWkY4dXdBQUFBR1VsRVFWUVlWMk00Z3dIK1l3Q0dJYXNJVXdoVDI1QlZCQUR0ellOWXJIdnY0Z0FBQUFCSlJVNUVya0pnZ2c9PSl9LmVsLWlucHV0X19pbm5lciwuZWwtdGV4dGFyZWFfX2lubmVye2JhY2tncm91bmQtaW1hZ2U6bm9uZTstd2Via2l0LXRyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSl9LmVsLWNvbG9yLXBpY2tlcl9fY29sb3ItaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjB9LmVsLWNvbG9yLXBpY2tlcl9fZW1wdHl7Zm9udC1zaXplOjEycHg7Y29sb3I6Izk5OTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApfS5lbC1jb2xvci1waWNrZXJfX2ljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTAwJTt0b3A6NTAlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKC01MCUsLTUwJSwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoLTUwJSwtNTAlLDApO2NvbG9yOiNGRkY7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEycHh9LmVsLWNvbG9yLXBpY2tlcl9fcGFuZWx7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDtwYWRkaW5nOjZweDstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYm94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSk7Ym94LXNoYWRvdzowIDJweCAxMnB4IDAgcmdiYSgwLDAsMCwuMSl9LmVsLXRleHRhcmVhe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCU7dmVydGljYWwtYWxpZ246Ym90dG9tO2ZvbnQtc2l6ZToxNHB4fS5lbC10ZXh0YXJlYV9faW5uZXJ7ZGlzcGxheTpibG9jaztyZXNpemU6dmVydGljYWw7cGFkZGluZzo1cHggMTVweDtsaW5lLWhlaWdodDoxLjU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjEwMCU7Zm9udC1zaXplOmluaGVyaXQ7Y29sb3I6IzYwNjI2NjtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGN1YmljLWJlemllciguNjQ1LC4wNDUsLjM1NSwxKTt0cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC10ZXh0YXJlYV9faW5uZXI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWFfX2lubmVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYV9faW5uZXI6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYV9faW5uZXI6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWFfX2lubmVyOjpwbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYV9faW5uZXI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLXRleHRhcmVhX19pbm5lcjpmb2N1c3tvdXRsaW5lOjA7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXRleHRhcmVhIC5lbC1pbnB1dF9fY291bnR7Y29sb3I6IzkwOTM5OTtiYWNrZ3JvdW5kOiNGRkY7cG9zaXRpb246YWJzb2x1dGU7Zm9udC1zaXplOjEycHg7Ym90dG9tOjVweDtyaWdodDoxMHB4fS5lbC10ZXh0YXJlYS5pcy1kaXNhYmxlZCAuZWwtdGV4dGFyZWFfX2lubmVye2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtib3JkZXItY29sb3I6I0U0RTdFRDtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYS5pcy1kaXNhYmxlZCAuZWwtdGV4dGFyZWFfX2lubmVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYS5pcy1kaXNhYmxlZCAuZWwtdGV4dGFyZWFfX2lubmVyOjotbXMtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtdGV4dGFyZWEuaXMtZGlzYWJsZWQgLmVsLXRleHRhcmVhX19pbm5lcjo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYS5pcy1kaXNhYmxlZCAuZWwtdGV4dGFyZWFfX2lubmVyOjpwbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC10ZXh0YXJlYS5pcy1leGNlZWQgLmVsLXRleHRhcmVhX19pbm5lcntib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtdGV4dGFyZWEuaXMtZXhjZWVkIC5lbC1pbnB1dF9fY291bnR7Y29sb3I6I0Y1NkM2Q30uZWwtaW5wdXR7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTAwJX0uZWwtaW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFye3otaW5kZXg6MTE7d2lkdGg6NnB4fS5lbC1pbnB1dDo6LXdlYmtpdC1zY3JvbGxiYXI6aG9yaXpvbnRhbHtoZWlnaHQ6NnB4fS5lbC1pbnB1dDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWJ7Ym9yZGVyLXJhZGl1czo1cHg7d2lkdGg6NnB4O2JhY2tncm91bmQ6I2I0YmNjY30uZWwtaW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntiYWNrZ3JvdW5kOiNmZmZ9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOiNmZmZ9LmVsLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjay1waWVjZXtiYWNrZ3JvdW5kOiNmZmY7d2lkdGg6NnB4fS5lbC1pbnB1dCAuZWwtaW5wdXRfX2NsZWFye2NvbG9yOiNDMEM0Q0M7Zm9udC1zaXplOjE0cHg7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC10cmFuc2l0aW9uOmNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7dHJhbnNpdGlvbjpjb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpfS5lbC1pbnB1dCAuZWwtaW5wdXRfX2NsZWFyOmhvdmVye2NvbG9yOiM5MDkzOTl9LmVsLWlucHV0IC5lbC1pbnB1dF9fY291bnR7aGVpZ2h0OjEwMCU7ZGlzcGxheTotd2Via2l0LWlubGluZS1ib3g7ZGlzcGxheTotbXMtaW5saW5lLWZsZXhib3g7ZGlzcGxheTppbmxpbmUtZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxMnB4fS5lbC1pbnB1dCAuZWwtaW5wdXRfX2NvdW50IC5lbC1pbnB1dF9fY291bnQtaW5uZXJ7YmFja2dyb3VuZDojRkZGO2xpbmUtaGVpZ2h0OmluaXRpYWw7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzowIDVweH0uZWwtaW5wdXRfX2lubmVyey13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6I0ZGRjtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOiM2MDYyNjY7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweDtvdXRsaW5lOjA7cGFkZGluZzowIDE1cHg7LXdlYmtpdC10cmFuc2l0aW9uOmJvcmRlci1jb2xvciAuMnMgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7d2lkdGg6MTAwJX0uZWwtaW5wdXRfX3ByZWZpeCwuZWwtaW5wdXRfX3N1ZmZpeHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zcztoZWlnaHQ6MTAwJTtjb2xvcjojQzBDNENDO3RleHQtYWxpZ246Y2VudGVyfS5lbC1pbnB1dF9faW5uZXI6Oi1tcy1yZXZlYWx7ZGlzcGxheTpub25lfS5lbC1pbnB1dF9faW5uZXI6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtaW5wdXRfX2lubmVyOi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1pbnB1dF9faW5uZXI6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1pbnB1dF9faW5uZXI6Oi1tb3otcGxhY2Vob2xkZXJ7Y29sb3I6I0MwQzRDQ30uZWwtaW5wdXRfX2lubmVyOjpwbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1pbnB1dF9faW5uZXI6aG92ZXJ7Ym9yZGVyLWNvbG9yOiNDMEM0Q0N9LmVsLWlucHV0LmlzLWFjdGl2ZSAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dF9faW5uZXI6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7b3V0bGluZTowfS5lbC1pbnB1dF9fc3VmZml4e3JpZ2h0OjVweDstd2Via2l0LXRyYW5zaXRpb246YWxsIC4zczt0cmFuc2l0aW9uOmFsbCAuM3M7cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtaW5wdXRfX3N1ZmZpeC1pbm5lcntwb2ludGVyLWV2ZW50czphbGx9LmVsLWlucHV0X19wcmVmaXh7bGVmdDo1cHg7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3M7dHJhbnNpdGlvbjphbGwgLjNzfS5lbC1pbnB1dF9faWNvbntoZWlnaHQ6MTAwJTt3aWR0aDoyNXB4O3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjNzO3RyYW5zaXRpb246YWxsIC4zcztsaW5lLWhlaWdodDo0MHB4fS5lbC1pbnB1dF9faWNvbjphZnRlcntjb250ZW50OicnO2hlaWdodDoxMDAlO3dpZHRoOjA7ZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1pbnB1dF9fdmFsaWRhdGVJY29ue3BvaW50ZXItZXZlbnRzOm5vbmV9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXJ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBO2JvcmRlci1jb2xvcjojRTRFN0VEO2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVyOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6LW1zLWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjojQzBDNENDfS5lbC1pbnB1dC5pcy1kaXNhYmxlZCAuZWwtaW5wdXRfX2lubmVyOjotbW96LXBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faW5uZXI6OnBsYWNlaG9sZGVye2NvbG9yOiNDMEM0Q0N9LmVsLWlucHV0LmlzLWRpc2FibGVkIC5lbC1pbnB1dF9faWNvbntjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWlucHV0LmlzLWV4Y2VlZCAuZWwtaW5wdXRfX2lubmVye2JvcmRlci1jb2xvcjojRjU2QzZDfS5lbC1pbnB1dC5pcy1leGNlZWQgLmVsLWlucHV0X19zdWZmaXggLmVsLWlucHV0X19jb3VudHtjb2xvcjojRjU2QzZDfS5lbC1pbnB1dC0tc3VmZml4IC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1yaWdodDozMHB4fS5lbC1pbnB1dC0tcHJlZml4IC5lbC1pbnB1dF9faW5uZXJ7cGFkZGluZy1sZWZ0OjMwcHh9LmVsLWlucHV0LS1tZWRpdW17Zm9udC1zaXplOjE0cHh9LmVsLWlucHV0LS1tZWRpdW0gLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MzZweDtsaW5lLWhlaWdodDozNnB4fS5lbC1pbnB1dC0tbWVkaXVtIC5lbC1pbnB1dF9faWNvbntsaW5lLWhlaWdodDozNnB4fS5lbC1pbnB1dC0tc21hbGx7Zm9udC1zaXplOjEzcHh9LmVsLWlucHV0LS1zbWFsbCAuZWwtaW5wdXRfX2lubmVye2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9LmVsLWlucHV0LS1zbWFsbCAuZWwtaW5wdXRfX2ljb257bGluZS1oZWlnaHQ6MzJweH0uZWwtaW5wdXQtLW1pbml7Zm9udC1zaXplOjEycHh9LmVsLWlucHV0LS1taW5pIC5lbC1pbnB1dF9faW5uZXJ7aGVpZ2h0OjI4cHg7bGluZS1oZWlnaHQ6MjhweH0uZWwtaW5wdXQtLW1pbmkgLmVsLWlucHV0X19pY29ue2xpbmUtaGVpZ2h0OjI4cHh9LmVsLWlucHV0LWdyb3Vwe2xpbmUtaGVpZ2h0Om5vcm1hbDtkaXNwbGF5OmlubGluZS10YWJsZTt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXItc3BhY2luZzowfS5lbC1pbnB1dC1ncm91cD4uZWwtaW5wdXRfX2lubmVye3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OnRhYmxlLWNlbGx9LmVsLWlucHV0LWdyb3VwX19hcHBlbmQsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5ke2JhY2tncm91bmQtY29sb3I6I0Y1RjdGQTtjb2xvcjojOTA5Mzk5O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtkaXNwbGF5OnRhYmxlLWNlbGw7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjFweCBzb2xpZCAjRENERkU2O2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmc6MCAyMHB4O3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXB9LmVsLWlucHV0LWdyb3VwLS1wcmVwZW5kIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwX19hcHBlbmR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uZWwtaW5wdXQtZ3JvdXAtLWFwcGVuZCAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmVsLWlucHV0LWdyb3VwX19hcHBlbmQ6Zm9jdXMsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kOmZvY3Vze291dGxpbmU6MH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIC5lbC1zZWxlY3QsLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19wcmVwZW5kIC5lbC1zZWxlY3R7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOi0xMHB4IC0yMHB4fS5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIGJ1dHRvbi5lbC1idXR0b24sLmVsLWlucHV0LWdyb3VwX19hcHBlbmQgZGl2LmVsLXNlbGVjdCAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIGRpdi5lbC1zZWxlY3Q6aG92ZXIgLmVsLWlucHV0X19pbm5lciwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgYnV0dG9uLmVsLWJ1dHRvbiwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgZGl2LmVsLXNlbGVjdCAuZWwtaW5wdXRfX2lubmVyLC5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZCBkaXYuZWwtc2VsZWN0OmhvdmVyIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXItdG9wOjA7Ym9yZGVyLWJvdHRvbTowfS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1wcmltYXJ5LC5lbC10cmFuc2Zlcl9fYnV0dG9ue2JhY2tncm91bmQtY29sb3I6IzQwOUVGRn0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZCAuZWwtYnV0dG9uLC5lbC1pbnB1dC1ncm91cF9fYXBwZW5kIC5lbC1pbnB1dCwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgLmVsLWJ1dHRvbiwuZWwtaW5wdXQtZ3JvdXBfX3ByZXBlbmQgLmVsLWlucHV0e2ZvbnQtc2l6ZTppbmhlcml0fS5lbC1pbnB1dC1ncm91cF9fcHJlcGVuZHtib3JkZXItcmlnaHQ6MH0uZWwtaW5wdXQtZ3JvdXBfX2FwcGVuZHtib3JkZXItbGVmdDowfS5lbC1pbnB1dC1ncm91cC0tYXBwZW5kIC5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXIsLmVsLWlucHV0LWdyb3VwLS1wcmVwZW5kIC5lbC1zZWxlY3QgLmVsLWlucHV0LmlzLWZvY3VzIC5lbC1pbnB1dF9faW5uZXJ7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1pbnB1dF9faW5uZXI6Oi1tcy1jbGVhcntkaXNwbGF5Om5vbmU7d2lkdGg6MDtoZWlnaHQ6MH0uZWwtdHJhbnNmZXJ7Zm9udC1zaXplOjE0cHh9LmVsLXRyYW5zZmVyX19idXR0b25ze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwYWRkaW5nOjAgMzBweH0uZWwtdHJhbnNmZXJfX2J1dHRvbntkaXNwbGF5OmJsb2NrO21hcmdpbjowIGF1dG87cGFkZGluZzoxMHB4O2JvcmRlci1yYWRpdXM6NTAlO2NvbG9yOiNGRkY7Zm9udC1zaXplOjB9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uKy5lbC1idXR0b24sLmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtKy5lbC10cmFuc2Zlci1wYW5lbF9faXRlbSwuZWwtdHJhbnNmZXJfX2J1dHRvbiBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjB9LmVsLXRpbWVsaW5lLC5lbC10cmFuc2Zlcl9fYnV0dG9uIGksLmVsLXRyYW5zZmVyX19idXR0b24gc3Bhbntmb250LXNpemU6MTRweH0uZWwtdHJhbnNmZXJfX2J1dHRvbi5pcy13aXRoLXRleHRze2JvcmRlci1yYWRpdXM6NHB4fS5lbC10cmFuc2Zlcl9fYnV0dG9uLmlzLWRpc2FibGVkLC5lbC10cmFuc2Zlcl9fYnV0dG9uLmlzLWRpc2FibGVkOmhvdmVye2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Y29sb3I6I0MwQzRDQ30uZWwtdHJhbnNmZXJfX2J1dHRvbjpmaXJzdC1jaGlsZHttYXJnaW4tYm90dG9tOjEwcHh9LmVsLXRyYW5zZmVyX19idXR0b246bnRoLWNoaWxkKDIpe21hcmdpbjowfS5lbC10cmFuc2Zlci1wYW5lbHtib3JkZXI6MXB4IHNvbGlkICNFQkVFRjU7Ym9yZGVyLXJhZGl1czo0cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQ6I0ZGRjtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6MjAwcHg7bWF4LWhlaWdodDoxMDAlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtdHJhbnNmZXItcGFuZWxfX2JvZHl7aGVpZ2h0OjI0NnB4fS5lbC10cmFuc2Zlci1wYW5lbF9fYm9keS5pcy13aXRoLWZvb3RlcntwYWRkaW5nLWJvdHRvbTo0MHB4fS5lbC10cmFuc2Zlci1wYW5lbF9fbGlzdHttYXJnaW46MDtwYWRkaW5nOjZweCAwO2xpc3Qtc3R5bGU6bm9uZTtoZWlnaHQ6MjQ2cHg7b3ZlcmZsb3c6YXV0bzstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3h9LmVsLXRyYW5zZmVyLXBhbmVsX19saXN0LmlzLWZpbHRlcmFibGV7aGVpZ2h0OjE5NHB4O3BhZGRpbmctdG9wOjB9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVte2hlaWdodDozMHB4O2xpbmUtaGVpZ2h0OjMwcHg7cGFkZGluZy1sZWZ0OjE1cHg7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtLmVsLWNoZWNrYm94e2NvbG9yOiM2MDYyNjZ9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLXRyYW5zZmVyLXBhbmVsX19pdGVtLmVsLWNoZWNrYm94IC5lbC1jaGVja2JveF9fbGFiZWx7d2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlzcGxheTpibG9jazstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZy1sZWZ0OjI0cHg7bGluZS1oZWlnaHQ6MzBweH0uZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW0gLmVsLWNoZWNrYm94X19pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4fS5lbC10cmFuc2Zlci1wYW5lbF9fZmlsdGVye3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjoxNXB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrO3dpZHRoOmF1dG99LmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXIgLmVsLWlucHV0X19pbm5lcntoZWlnaHQ6MzJweDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZToxMnB4O2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjE2cHg7cGFkZGluZy1yaWdodDoxMHB4O3BhZGRpbmctbGVmdDozMHB4fS5lbC10cmFuc2Zlci1wYW5lbF9fZmlsdGVyIC5lbC1pbnB1dF9faWNvbnttYXJnaW4tbGVmdDo1cHh9LmVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXIgLmVsLWljb24tY2lyY2xlLWNsb3Nle2N1cnNvcjpwb2ludGVyfS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtdHJhbnNmZXItcGFuZWxfX2hlYWRlcntoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4O2JhY2tncm91bmQ6I0Y1RjdGQTttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MTVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjojMDAwfS5lbC1jb250YWluZXIsLmVsLWhlYWRlcnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19oZWFkZXIgLmVsLWNoZWNrYm94e2Rpc3BsYXk6YmxvY2s7bGluZS1oZWlnaHQ6NDBweH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19oZWFkZXIgLmVsLWNoZWNrYm94IC5lbC1jaGVja2JveF9fbGFiZWx7Zm9udC1zaXplOjE2cHg7Y29sb3I6IzMwMzEzMztmb250LXdlaWdodDo0MDB9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9faGVhZGVyIC5lbC1jaGVja2JveCAuZWwtY2hlY2tib3hfX2xhYmVsIHNwYW57cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTVweDtjb2xvcjojOTA5Mzk5O2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjQwMH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19mb290ZXJ7aGVpZ2h0OjQwcHg7YmFja2dyb3VuZDojRkZGO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXItdG9wOjFweCBzb2xpZCAjRUJFRUY1O3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO3otaW5kZXg6MX0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19mb290ZXI6OmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMDAlO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uZWwtY29udGFpbmVyLC5lbC10aW1lbGluZS1pdGVtX19ub2Rle2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveH0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLXRyYW5zZmVyLXBhbmVsX19mb290ZXIgLmVsLWNoZWNrYm94e3BhZGRpbmctbGVmdDoyMHB4O2NvbG9yOiM2MDYyNjZ9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC10cmFuc2Zlci1wYW5lbF9fZW1wdHl7bWFyZ2luOjA7aGVpZ2h0OjMwcHg7bGluZS1oZWlnaHQ6MzBweDtwYWRkaW5nOjZweCAxNXB4IDA7Y29sb3I6IzkwOTM5OTt0ZXh0LWFsaWduOmNlbnRlcn0uZWwtdHJhbnNmZXItcGFuZWwgLmVsLWNoZWNrYm94X19sYWJlbHtwYWRkaW5nLWxlZnQ6OHB4fS5lbC10cmFuc2Zlci1wYW5lbCAuZWwtY2hlY2tib3hfX2lubmVye2hlaWdodDoxNHB4O3dpZHRoOjE0cHg7Ym9yZGVyLXJhZGl1czozcHh9LmVsLXRyYW5zZmVyLXBhbmVsIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2hlaWdodDo2cHg7d2lkdGg6M3B4O2xlZnQ6NHB4fS5lbC1jb250YWluZXJ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1vcmllbnQ6aG9yaXpvbnRhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsOy1tcy1mbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC1kaXJlY3Rpb246cm93Oy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTstbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTphdXRvO2ZsZXgtYmFzaXM6YXV0bzstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWluLXdpZHRoOjB9LmVsLWNvbnRhaW5lci5pcy12ZXJ0aWNhbCwuZWwtZHJhd2VyLC5lbC1lbXB0eSwuZWwtcmVzdWx0ey13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsfS5lbC1jb250YWluZXIuaXMtdmVydGljYWx7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7LXdlYmtpdC1ib3gtZGlyZWN0aW9uOm5vcm1hbDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmVsLWhlYWRlcntwYWRkaW5nOjAgMjBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowfS5lbC1hc2lkZXtvdmVyZmxvdzphdXRvOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjB9LmVsLWZvb3RlciwuZWwtbWFpbnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtbWFpbntkaXNwbGF5OmJsb2NrOy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTstbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTphdXRvO2ZsZXgtYmFzaXM6YXV0bztvdmVyZmxvdzphdXRvOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZm9vdGVye3BhZGRpbmc6MCAyMHB4Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjB9LmVsLXRpbWVsaW5le21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZX0uZWwtdGltZWxpbmUgLmVsLXRpbWVsaW5lLWl0ZW06bGFzdC1jaGlsZCAuZWwtdGltZWxpbmUtaXRlbV9fdGFpbHtkaXNwbGF5Om5vbmV9LmVsLXRpbWVsaW5lLWl0ZW17cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZy1ib3R0b206MjBweH0uZWwtdGltZWxpbmUtaXRlbV9fd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLWxlZnQ6MjhweDt0b3A6LTNweH0uZWwtdGltZWxpbmUtaXRlbV9fdGFpbHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjRweDtoZWlnaHQ6MTAwJTtib3JkZXItbGVmdDoycHggc29saWQgI0U0RTdFRH0uZWwtdGltZWxpbmUtaXRlbV9faWNvbntjb2xvcjojRkZGO2ZvbnQtc2l6ZToxM3B4fS5lbC10aW1lbGluZS1pdGVtX19ub2Rle3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6I0U0RTdFRDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLWltYWdlX19lcnJvciwuZWwtdGltZWxpbmUtaXRlbV9fZG90e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDstd2Via2l0LWJveC1wYWNrOmNlbnRlcn0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tbm9ybWFse2xlZnQ6LTFweDt3aWR0aDoxMnB4O2hlaWdodDoxMnB4fS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1sYXJnZXtsZWZ0Oi0ycHg7d2lkdGg6MTRweDtoZWlnaHQ6MTRweH0uZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tc3VjY2Vzc3tiYWNrZ3JvdW5kLWNvbG9yOiM2N0MyM0F9LmVsLXRpbWVsaW5lLWl0ZW1fX25vZGUtLXdhcm5pbmd7YmFja2dyb3VuZC1jb2xvcjojRTZBMjNDfS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1kYW5nZXJ7YmFja2dyb3VuZC1jb2xvcjojRjU2QzZDfS5lbC10aW1lbGluZS1pdGVtX19ub2RlLS1pbmZve2JhY2tncm91bmQtY29sb3I6IzkwOTM5OX0uZWwtdGltZWxpbmUtaXRlbV9fZG90e3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtcGFjazpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtdGltZWxpbmUtaXRlbV9fY29udGVudHtjb2xvcjojMzAzMTMzfS5lbC10aW1lbGluZS1pdGVtX190aW1lc3RhbXB7Y29sb3I6IzkwOTM5OTtsaW5lLWhlaWdodDoxO2ZvbnQtc2l6ZToxM3B4fS5lbC10aW1lbGluZS1pdGVtX190aW1lc3RhbXAuaXMtdG9we21hcmdpbi1ib3R0b206OHB4O3BhZGRpbmctdG9wOjRweH0uZWwtdGltZWxpbmUtaXRlbV9fdGltZXN0YW1wLmlzLWJvdHRvbXttYXJnaW4tdG9wOjhweH0uZWwtbGlua3tkaXNwbGF5Oi13ZWJraXQtaW5saW5lLWJveDtkaXNwbGF5Oi1tcy1pbmxpbmUtZmxleGJveDtkaXNwbGF5OmlubGluZS1mbGV4Oy13ZWJraXQtYm94LW9yaWVudDpob3Jpem9udGFsOy13ZWJraXQtYm94LWRpcmVjdGlvbjpub3JtYWw7LW1zLWZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LWRpcmVjdGlvbjpyb3c7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7b3V0bGluZTowO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9LmVsLWxpbmsuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtyaWdodDowO2hlaWdodDowO2JvdHRvbTowO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM0MDlFRkZ9LmVsLWxpbmsuZWwtbGluay0tZGVmYXVsdDphZnRlciwuZWwtbGluay5lbC1saW5rLS1wcmltYXJ5LmlzLXVuZGVybGluZTpob3ZlcjphZnRlciwuZWwtbGluay5lbC1saW5rLS1wcmltYXJ5OmFmdGVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1saW5rLmlzLWRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtbGluayBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtbGluay5lbC1saW5rLS1kZWZhdWx0e2NvbG9yOiM2MDYyNjZ9LmVsLWxpbmsuZWwtbGluay0tZGVmYXVsdDpob3Zlcntjb2xvcjojNDA5RUZGfS5lbC1saW5rLmVsLWxpbmstLWRlZmF1bHQuaXMtZGlzYWJsZWR7Y29sb3I6I0MwQzRDQ30uZWwtbGluay5lbC1saW5rLS1wcmltYXJ5e2NvbG9yOiM0MDlFRkZ9LmVsLWxpbmsuZWwtbGluay0tcHJpbWFyeTpob3Zlcntjb2xvcjojNjZiMWZmfS5lbC1saW5rLmVsLWxpbmstLXByaW1hcnkuaXMtZGlzYWJsZWR7Y29sb3I6I2EwY2ZmZn0uZWwtbGluay5lbC1saW5rLS1kYW5nZXIuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLWRhbmdlcjphZnRlcntib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtbGluay5lbC1saW5rLS1kYW5nZXJ7Y29sb3I6I0Y1NkM2Q30uZWwtbGluay5lbC1saW5rLS1kYW5nZXI6aG92ZXJ7Y29sb3I6I2Y3ODk4OX0uZWwtbGluay5lbC1saW5rLS1kYW5nZXIuaXMtZGlzYWJsZWR7Y29sb3I6I2ZhYjZiNn0uZWwtbGluay5lbC1saW5rLS1zdWNjZXNzLmlzLXVuZGVybGluZTpob3ZlcjphZnRlciwuZWwtbGluay5lbC1saW5rLS1zdWNjZXNzOmFmdGVye2JvcmRlci1jb2xvcjojNjdDMjNBfS5lbC1saW5rLmVsLWxpbmstLXN1Y2Nlc3N7Y29sb3I6IzY3QzIzQX0uZWwtbGluay5lbC1saW5rLS1zdWNjZXNzOmhvdmVye2NvbG9yOiM4NWNlNjF9LmVsLWxpbmsuZWwtbGluay0tc3VjY2Vzcy5pcy1kaXNhYmxlZHtjb2xvcjojYjNlMTlkfS5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmcuaXMtdW5kZXJsaW5lOmhvdmVyOmFmdGVyLC5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmc6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOiNFNkEyM0N9LmVsLWxpbmsuZWwtbGluay0td2FybmluZ3tjb2xvcjojRTZBMjNDfS5lbC1saW5rLmVsLWxpbmstLXdhcm5pbmc6aG92ZXJ7Y29sb3I6I2ViYjU2M30uZWwtbGluay5lbC1saW5rLS13YXJuaW5nLmlzLWRpc2FibGVke2NvbG9yOiNmM2QxOWV9LmVsLWxpbmsuZWwtbGluay0taW5mby5pcy11bmRlcmxpbmU6aG92ZXI6YWZ0ZXIsLmVsLWxpbmsuZWwtbGluay0taW5mbzphZnRlcntib3JkZXItY29sb3I6IzkwOTM5OX0uZWwtbGluay5lbC1saW5rLS1pbmZve2NvbG9yOiM5MDkzOTl9LmVsLWxpbmsuZWwtbGluay0taW5mbzpob3Zlcntjb2xvcjojYTZhOWFkfS5lbC1saW5rLmVsLWxpbmstLWluZm8uaXMtZGlzYWJsZWR7Y29sb3I6I2M4YzljY30uZWwtZGl2aWRlcntiYWNrZ3JvdW5kLWNvbG9yOiNEQ0RGRTY7cG9zaXRpb246cmVsYXRpdmV9LmVsLWRpdmlkZXItLWhvcml6b250YWx7ZGlzcGxheTpibG9jaztoZWlnaHQ6MXB4O3dpZHRoOjEwMCU7bWFyZ2luOjI0cHggMH0uZWwtZGl2aWRlci0tdmVydGljYWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MXB4O2hlaWdodDoxZW07bWFyZ2luOjAgOHB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtZGl2aWRlcl9fdGV4dHtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7cGFkZGluZzowIDIwcHg7Zm9udC13ZWlnaHQ6NTAwO2NvbG9yOiMzMDMxMzM7Zm9udC1zaXplOjE0cHh9LmVsLWltYWdlX19lcnJvciwuZWwtaW1hZ2VfX3BsYWNlaG9sZGVye2JhY2tncm91bmQ6I0Y1RjdGQX0uZWwtZGl2aWRlcl9fdGV4dC5pcy1sZWZ0e2xlZnQ6MjBweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpfS5lbC1kaXZpZGVyX190ZXh0LmlzLWNlbnRlcntsZWZ0OjUwJTstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgtNTAlKX0uZWwtZGl2aWRlcl9fdGV4dC5pcy1yaWdodHtyaWdodDoyMHB4Oy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSl9LmVsLWltYWdlX19lcnJvciwuZWwtaW1hZ2VfX2lubmVyLC5lbC1pbWFnZV9fcGxhY2Vob2xkZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uZWwtaW1hZ2V7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVufS5lbC1pbWFnZV9faW5uZXJ7dmVydGljYWwtYWxpZ246dG9wfS5lbC1pbWFnZV9faW5uZXItLWNlbnRlcntwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6NTAlO2xlZnQ6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKTtkaXNwbGF5OmJsb2NrfS5lbC1pbWFnZV9fZXJyb3J7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC1wYWNrOmNlbnRlcjstd2Via2l0LWJveC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiNDMEM0Q0M7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1pbWFnZV9fcHJldmlld3tjdXJzb3I6cG9pbnRlcn0uZWwtaW1hZ2Utdmlld2VyX193cmFwcGVye3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowfS5lbC1pbWFnZS12aWV3ZXJfX2J0bntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlci1yYWRpdXM6NTAlO29wYWNpdHk6Ljg7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZWwtYnV0dG9uLC5lbC1jaGVja2JveCwuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lciwuZWwtZW1wdHlfX2ltYWdlIGltZywuZWwtcmFkaW97LXdlYmtpdC11c2VyLXNlbGVjdDpub25lfS5lbC1pbWFnZS12aWV3ZXJfX2Nsb3Nle3RvcDo0MHB4O3JpZ2h0OjQwcHg7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtmb250LXNpemU6MjRweDtjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzYwNjI2Nn0uZWwtaW1hZ2Utdmlld2VyX19jYW52YXN7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmVsLWltYWdlLXZpZXdlcl9fYWN0aW9uc3tsZWZ0OjUwJTtib3R0b206MzBweDstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVYKC01MCUpO3dpZHRoOjI4MnB4O2hlaWdodDo0NHB4O3BhZGRpbmc6MCAyM3B4O2JhY2tncm91bmQtY29sb3I6IzYwNjI2Njtib3JkZXItY29sb3I6I2ZmZjtib3JkZXItcmFkaXVzOjIycHh9LmVsLWltYWdlLXZpZXdlcl9fYWN0aW9uc19faW5uZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0ZXh0LWFsaWduOmp1c3RpZnk7Y3Vyc29yOmRlZmF1bHQ7Zm9udC1zaXplOjIzcHg7Y29sb3I6I2ZmZjtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy1tcy1mbGV4LXBhY2s6ZGlzdHJpYnV0ZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5lbC1pbWFnZS12aWV3ZXJfX25leHQsLmVsLWltYWdlLXZpZXdlcl9fcHJldnt3aWR0aDo0NHB4O2hlaWdodDo0NHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNjA2MjY2O2JvcmRlci1jb2xvcjojZmZmO3RvcDo1MCV9LmVsLWltYWdlLXZpZXdlcl9fcHJldnstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2xlZnQ6NDBweH0uZWwtaW1hZ2Utdmlld2VyX19uZXh0ey13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7cmlnaHQ6NDBweDt0ZXh0LWluZGVudDoycHh9LmVsLWltYWdlLXZpZXdlcl9fbWFza3twb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowO2xlZnQ6MDtvcGFjaXR5Oi41O2JhY2tncm91bmQ6IzAwMH0udmlld2VyLWZhZGUtZW50ZXItYWN0aXZley13ZWJraXQtYW5pbWF0aW9uOnZpZXdlci1mYWRlLWluIC4zczthbmltYXRpb246dmlld2VyLWZhZGUtaW4gLjNzfS52aWV3ZXItZmFkZS1sZWF2ZS1hY3RpdmV7LXdlYmtpdC1hbmltYXRpb246dmlld2VyLWZhZGUtb3V0IC4zczthbmltYXRpb246dmlld2VyLWZhZGUtb3V0IC4zc31ALXdlYmtpdC1rZXlmcmFtZXMgdmlld2VyLWZhZGUtaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9fUBrZXlmcmFtZXMgdmlld2VyLWZhZGUtaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTtvcGFjaXR5OjF9fUAtd2Via2l0LWtleWZyYW1lcyB2aWV3ZXItZmFkZS1vdXR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLDAsMCk7b3BhY2l0eToxfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwtMjBweCwwKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgdmlld2VyLWZhZGUtb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCwwLDApO29wYWNpdHk6MX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZTNkKDAsLTIwcHgsMCk7b3BhY2l0eTowfX0uZWwtYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7d2hpdGUtc3BhY2U6bm93cmFwO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6I0ZGRjtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7Y29sb3I6IzYwNjI2Njstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTowO21hcmdpbjowOy13ZWJraXQtdHJhbnNpdGlvbjouMXM7dHJhbnNpdGlvbjouMXM7Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmc6MTJweCAyMHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6NHB4fS5lbC1idXR0b24rLmVsLWJ1dHRvbiwuZWwtY2hlY2tib3guaXMtYm9yZGVyZWQrLmVsLWNoZWNrYm94LmlzLWJvcmRlcmVke21hcmdpbi1sZWZ0OjEwcHh9LmVsLWJ1dHRvbjpmb2N1cywuZWwtYnV0dG9uOmhvdmVye2NvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiNjNmUyZmY7YmFja2dyb3VuZC1jb2xvcjojZWNmNWZmfS5lbC1idXR0b246YWN0aXZle2NvbG9yOiMzYThlZTY7Ym9yZGVyLWNvbG9yOiMzYThlZTY7b3V0bGluZTowfS5lbC1idXR0b246Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjB9LmVsLWJ1dHRvbiBbY2xhc3MqPWVsLWljb24tXStzcGFue21hcmdpbi1sZWZ0OjVweH0uZWwtYnV0dG9uLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24uaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojRkZGO2JvcmRlci1jb2xvcjojNDA5RUZGO2NvbG9yOiM0MDlFRkZ9LmVsLWJ1dHRvbi5pcy1hY3RpdmUsLmVsLWJ1dHRvbi5pcy1wbGFpbjphY3RpdmV7Y29sb3I6IzNhOGVlNjtib3JkZXItY29sb3I6IzNhOGVlNn0uZWwtYnV0dG9uLmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiNGRkY7b3V0bGluZTowfS5lbC1idXR0b24uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNDMEM0Q0M7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtaW1hZ2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLWNvbG9yOiNFQkVFRjV9LmVsLWJ1dHRvbi5pcy1kaXNhYmxlZC5lbC1idXR0b24tLXRleHR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtYnV0dG9uLmlzLWRpc2FibGVkLmlzLXBsYWluLC5lbC1idXR0b24uaXMtZGlzYWJsZWQuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi5pcy1kaXNhYmxlZC5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Ym9yZGVyLWNvbG9yOiNFQkVFRjU7Y29sb3I6I0MwQzRDQ30uZWwtYnV0dG9uLmlzLWxvYWRpbmd7cG9zaXRpb246cmVsYXRpdmU7cG9pbnRlci1ldmVudHM6bm9uZX0uZWwtYnV0dG9uLmlzLWxvYWRpbmc6YmVmb3Jle3BvaW50ZXItZXZlbnRzOm5vbmU7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xcHg7dG9wOi0xcHg7cmlnaHQ6LTFweDtib3R0b206LTFweDtib3JkZXItcmFkaXVzOmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC4zNSl9LmVsLWJ1dHRvbi5pcy1yb3VuZHtib3JkZXItcmFkaXVzOjIwcHg7cGFkZGluZzoxMnB4IDIzcHh9LmVsLWJ1dHRvbi5pcy1jaXJjbGV7Ym9yZGVyLXJhZGl1czo1MCU7cGFkZGluZzoxMnB4fS5lbC1idXR0b24tLXByaW1hcnl7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLWJ1dHRvbi0tcHJpbWFyeTpmb2N1cywuZWwtYnV0dG9uLS1wcmltYXJ5OmhvdmVye2JhY2tncm91bmQ6IzY2YjFmZjtib3JkZXItY29sb3I6IzY2YjFmZjtjb2xvcjojRkZGfS5lbC1idXR0b24tLXByaW1hcnkuaXMtYWN0aXZlLC5lbC1idXR0b24tLXByaW1hcnk6YWN0aXZle2JhY2tncm91bmQ6IzNhOGVlNjtib3JkZXItY29sb3I6IzNhOGVlNjtjb2xvcjojRkZGfS5lbC1idXR0b24tLXByaW1hcnk6YWN0aXZle291dGxpbmU6MH0uZWwtYnV0dG9uLS1wcmltYXJ5LmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXByaW1hcnkuaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLXByaW1hcnkuaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I2EwY2ZmZjtib3JkZXItY29sb3I6I2EwY2ZmZn0uZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWlue2NvbG9yOiM0MDlFRkY7YmFja2dyb3VuZDojZWNmNWZmO2JvcmRlci1jb2xvcjojYjNkOGZmfS5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbjpob3ZlcntiYWNrZ3JvdW5kOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluOmFjdGl2ZXtiYWNrZ3JvdW5kOiMzYThlZTY7Ym9yZGVyLWNvbG9yOiMzYThlZTY7Y29sb3I6I0ZGRjtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0tcHJpbWFyeS5pcy1wbGFpbi5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1wcmltYXJ5LmlzLXBsYWluLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXByaW1hcnkuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6IzhjYzVmZjtiYWNrZ3JvdW5kLWNvbG9yOiNlY2Y1ZmY7Ym9yZGVyLWNvbG9yOiNkOWVjZmZ9LmVsLWJ1dHRvbi0tc3VjY2Vzc3tjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzY3QzIzQTtib3JkZXItY29sb3I6IzY3QzIzQX0uZWwtYnV0dG9uLS1zdWNjZXNzOmZvY3VzLC5lbC1idXR0b24tLXN1Y2Nlc3M6aG92ZXJ7YmFja2dyb3VuZDojODVjZTYxO2JvcmRlci1jb2xvcjojODVjZTYxO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0tc3VjY2VzczphY3RpdmV7YmFja2dyb3VuZDojNWRhZjM0O2JvcmRlci1jb2xvcjojNWRhZjM0O2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0tc3VjY2VzczphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojYjNlMTlkO2JvcmRlci1jb2xvcjojYjNlMTlkfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW57Y29sb3I6IzY3QzIzQTtiYWNrZ3JvdW5kOiNmMGY5ZWI7Ym9yZGVyLWNvbG9yOiNjMmU3YjB9LmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6IzY3QzIzQTtib3JkZXItY29sb3I6IzY3QzIzQTtjb2xvcjojRkZGfS5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6IzVkYWYzNDtib3JkZXItY29sb3I6IzVkYWYzNDtjb2xvcjojRkZGO291dGxpbmU6MH0uZWwtYnV0dG9uLS1zdWNjZXNzLmlzLXBsYWluLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLXN1Y2Nlc3MuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tc3VjY2Vzcy5pcy1wbGFpbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojYTRkYTg5O2JhY2tncm91bmQtY29sb3I6I2YwZjllYjtib3JkZXItY29sb3I6I2UxZjNkOH0uZWwtYnV0dG9uLS13YXJuaW5ne2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojRTZBMjNDO2JvcmRlci1jb2xvcjojRTZBMjNDfS5lbC1idXR0b24tLXdhcm5pbmc6Zm9jdXMsLmVsLWJ1dHRvbi0td2FybmluZzpob3ZlcntiYWNrZ3JvdW5kOiNlYmI1NjM7Ym9yZGVyLWNvbG9yOiNlYmI1NjM7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLWFjdGl2ZSwuZWwtYnV0dG9uLS13YXJuaW5nOmFjdGl2ZXtiYWNrZ3JvdW5kOiNjZjkyMzY7Ym9yZGVyLWNvbG9yOiNjZjkyMzY7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS13YXJuaW5nOmFjdGl2ZXtvdXRsaW5lOjB9LmVsLWJ1dHRvbi0td2FybmluZy5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS13YXJuaW5nLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS13YXJuaW5nLmlzLWRpc2FibGVkOmZvY3VzLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I0ZGRjtiYWNrZ3JvdW5kLWNvbG9yOiNmM2QxOWU7Ym9yZGVyLWNvbG9yOiNmM2QxOWV9LmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbntjb2xvcjojRTZBMjNDO2JhY2tncm91bmQ6I2ZkZjZlYztib3JkZXItY29sb3I6I2Y1ZGFiMX0uZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluOmZvY3VzLC5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW46aG92ZXJ7YmFja2dyb3VuZDojRTZBMjNDO2JvcmRlci1jb2xvcjojRTZBMjNDO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojY2Y5MjM2O2JvcmRlci1jb2xvcjojY2Y5MjM2O2NvbG9yOiNGRkY7b3V0bGluZTowfS5lbC1idXR0b24tLXdhcm5pbmcuaXMtcGxhaW4uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbi5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0td2FybmluZy5pcy1wbGFpbi5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS13YXJuaW5nLmlzLXBsYWluLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNmMGM3OGE7YmFja2dyb3VuZC1jb2xvcjojZmRmNmVjO2JvcmRlci1jb2xvcjojZmFlY2Q4fS5lbC1idXR0b24tLWRhbmdlcntjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6I0Y1NkM2Qztib3JkZXItY29sb3I6I0Y1NkM2Q30uZWwtYnV0dG9uLS1kYW5nZXI6Zm9jdXMsLmVsLWJ1dHRvbi0tZGFuZ2VyOmhvdmVye2JhY2tncm91bmQ6I2Y3ODk4OTtib3JkZXItY29sb3I6I2Y3ODk4OTtjb2xvcjojRkZGfS5lbC1idXR0b24tLWRhbmdlci5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0tZGFuZ2VyOmFjdGl2ZXtiYWNrZ3JvdW5kOiNkZDYxNjE7Ym9yZGVyLWNvbG9yOiNkZDYxNjE7Y29sb3I6I0ZGRn0uZWwtYnV0dG9uLS1kYW5nZXI6YWN0aXZle291dGxpbmU6MH0uZWwtYnV0dG9uLS1kYW5nZXIuaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLWRpc2FibGVkOmFjdGl2ZSwuZWwtYnV0dG9uLS1kYW5nZXIuaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojZmFiNmI2O2JvcmRlci1jb2xvcjojZmFiNmI2fS5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbntjb2xvcjojRjU2QzZDO2JhY2tncm91bmQ6I2ZlZjBmMDtib3JkZXItY29sb3I6I2ZiYzRjNH0uZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW46Zm9jdXMsLmVsLWJ1dHRvbi0tZGFuZ2VyLmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6I0Y1NkM2Qztib3JkZXItY29sb3I6I0Y1NkM2Qztjb2xvcjojRkZGfS5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbjphY3RpdmV7YmFja2dyb3VuZDojZGQ2MTYxO2JvcmRlci1jb2xvcjojZGQ2MTYxO2NvbG9yOiNGRkY7b3V0bGluZTowfS5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbi5pcy1kaXNhYmxlZCwuZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLWRhbmdlci5pcy1wbGFpbi5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1kYW5nZXIuaXMtcGxhaW4uaXMtZGlzYWJsZWQ6aG92ZXJ7Y29sb3I6I2Y5YTdhNztiYWNrZ3JvdW5kLWNvbG9yOiNmZWYwZjA7Ym9yZGVyLWNvbG9yOiNmZGUyZTJ9LmVsLWJ1dHRvbi0taW5mb3tjb2xvcjojRkZGO2JhY2tncm91bmQtY29sb3I6IzkwOTM5OTtib3JkZXItY29sb3I6IzkwOTM5OX0uZWwtYnV0dG9uLS1pbmZvOmZvY3VzLC5lbC1idXR0b24tLWluZm86aG92ZXJ7YmFja2dyb3VuZDojYTZhOWFkO2JvcmRlci1jb2xvcjojYTZhOWFkO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0taW5mby5pcy1hY3RpdmUsLmVsLWJ1dHRvbi0taW5mbzphY3RpdmV7YmFja2dyb3VuZDojODI4NDhhO2JvcmRlci1jb2xvcjojODI4NDhhO2NvbG9yOiNGRkZ9LmVsLWJ1dHRvbi0taW5mbzphY3RpdmV7b3V0bGluZTowfS5lbC1idXR0b24tLWluZm8uaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0taW5mby5pcy1kaXNhYmxlZDphY3RpdmUsLmVsLWJ1dHRvbi0taW5mby5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS1pbmZvLmlzLWRpc2FibGVkOmhvdmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojYzhjOWNjO2JvcmRlci1jb2xvcjojYzhjOWNjfS5lbC1idXR0b24tLWluZm8uaXMtcGxhaW57Y29sb3I6IzkwOTM5OTtiYWNrZ3JvdW5kOiNmNGY0ZjU7Ym9yZGVyLWNvbG9yOiNkM2Q0ZDZ9LmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbjpmb2N1cywuZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluOmhvdmVye2JhY2tncm91bmQ6IzkwOTM5OTtib3JkZXItY29sb3I6IzkwOTM5OTtjb2xvcjojRkZGfS5lbC1idXR0b24tLWluZm8uaXMtcGxhaW46YWN0aXZle2JhY2tncm91bmQ6IzgyODQ4YTtib3JkZXItY29sb3I6IzgyODQ4YTtjb2xvcjojRkZGO291dGxpbmU6MH0uZWwtYnV0dG9uLS1pbmZvLmlzLXBsYWluLmlzLWRpc2FibGVkLC5lbC1idXR0b24tLWluZm8uaXMtcGxhaW4uaXMtZGlzYWJsZWQ6YWN0aXZlLC5lbC1idXR0b24tLWluZm8uaXMtcGxhaW4uaXMtZGlzYWJsZWQ6Zm9jdXMsLmVsLWJ1dHRvbi0taW5mby5pcy1wbGFpbi5pcy1kaXNhYmxlZDpob3Zlcntjb2xvcjojYmNiZWMyO2JhY2tncm91bmQtY29sb3I6I2Y0ZjRmNTtib3JkZXItY29sb3I6I2U5ZTllYn0uZWwtYnV0dG9uLS1tZWRpdW17cGFkZGluZzoxMHB4IDIwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWJ1dHRvbi0tbWVkaXVtLmlzLXJvdW5ke3BhZGRpbmc6MTBweCAyMHB4fS5lbC1idXR0b24tLW1lZGl1bS5pcy1jaXJjbGV7cGFkZGluZzoxMHB4fS5lbC1idXR0b24tLXNtYWxse3BhZGRpbmc6OXB4IDE1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czozcHh9LmVsLWJ1dHRvbi0tc21hbGwuaXMtcm91bmR7cGFkZGluZzo5cHggMTVweH0uZWwtYnV0dG9uLS1zbWFsbC5pcy1jaXJjbGV7cGFkZGluZzo5cHh9LmVsLWJ1dHRvbi0tbWluaSwuZWwtYnV0dG9uLS1taW5pLmlzLXJvdW5ke3BhZGRpbmc6N3B4IDE1cHh9LmVsLWJ1dHRvbi0tbWluaXtmb250LXNpemU6MTJweDtib3JkZXItcmFkaXVzOjNweH0uZWwtYnV0dG9uLS1taW5pLmlzLWNpcmNsZXtwYWRkaW5nOjdweH0uZWwtYnV0dG9uLS10ZXh0e2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojNDA5RUZGO2JhY2tncm91bmQ6MCAwO3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0uZWwtYnV0dG9uLS10ZXh0OmZvY3VzLC5lbC1idXR0b24tLXRleHQ6aG92ZXJ7Y29sb3I6IzY2YjFmZjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnQ7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uZWwtYnV0dG9uLS10ZXh0OmFjdGl2ZXtjb2xvcjojM2E4ZWU2O2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5lbC1idXR0b24tLXRleHQuaXMtZGlzYWJsZWQsLmVsLWJ1dHRvbi0tdGV4dC5pcy1kaXNhYmxlZDpmb2N1cywuZWwtYnV0dG9uLS10ZXh0LmlzLWRpc2FibGVkOmhvdmVye2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWRhbmdlcjpsYXN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tZGFuZ2VyOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1pbmZvOmxhc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1pbmZvOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1wcmltYXJ5Omxhc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1wcmltYXJ5Om5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1zdWNjZXNzOmxhc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1zdWNjZXNzOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS13YXJuaW5nOmxhc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS13YXJuaW5nOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cD4uZWwtZHJvcGRvd24+LmVsLWJ1dHRvbntib3JkZXItbGVmdC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LC41KX0uZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWRhbmdlcjpmaXJzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWRhbmdlcjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0taW5mbzpmaXJzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLWluZm86bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXByaW1hcnk6Zmlyc3QtY2hpbGQsLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1wcmltYXJ5Om5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCksLmVsLWJ1dHRvbi1ncm91cCAuZWwtYnV0dG9uLS1zdWNjZXNzOmZpcnN0LWNoaWxkLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0tc3VjY2Vzczpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpLC5lbC1idXR0b24tZ3JvdXAgLmVsLWJ1dHRvbi0td2FybmluZzpmaXJzdC1jaGlsZCwuZWwtYnV0dG9uLWdyb3VwIC5lbC1idXR0b24tLXdhcm5pbmc6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItcmlnaHQtY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuNSl9LmVsLWJ1dHRvbi1ncm91cHtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmVsLWJ1dHRvbi1ncm91cDo6YWZ0ZXIsLmVsLWJ1dHRvbi1ncm91cDo6YmVmb3Jle2Rpc3BsYXk6dGFibGV9LmVsLWJ1dHRvbi1ncm91cDo6YWZ0ZXJ7Y2xlYXI6Ym90aH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b257ZmxvYXQ6bGVmdDtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b24uaXMtZGlzYWJsZWR7ei1pbmRleDoxfS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpmaXJzdC1jaGlsZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOmxhc3QtY2hpbGR7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjRweH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b246Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZC5pcy1yb3VuZHtib3JkZXItcmFkaXVzOjIwcHh9LmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQuaXMtY2lyY2xle2JvcmRlci1yYWRpdXM6NTAlfS5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpub3QoOmZpcnN0LWNoaWxkKTpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1yYWRpdXM6MH0uZWwtYnV0dG9uLWdyb3VwPi5lbC1idXR0b24uaXMtYWN0aXZlLC5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpub3QoLmlzLWRpc2FibGVkKTphY3RpdmUsLmVsLWJ1dHRvbi1ncm91cD4uZWwtYnV0dG9uOm5vdCguaXMtZGlzYWJsZWQpOmZvY3VzLC5lbC1idXR0b24tZ3JvdXA+LmVsLWJ1dHRvbjpub3QoLmlzLWRpc2FibGVkKTpob3Zlcnt6LWluZGV4OjF9LmVsLWJ1dHRvbi1ncm91cD4uZWwtZHJvcGRvd24+LmVsLWJ1dHRvbntib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS5lbC1jYWxlbmRhcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmVsLWNhbGVuZGFyX19oZWFkZXJ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1wYWNrOmp1c3RpZnk7LW1zLWZsZXgtcGFjazpqdXN0aWZ5O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmc6MTJweCAyMHB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNFQkVFRjV9LmVsLWJhY2t0b3AsLmVsLXBhZ2UtaGVhZGVye2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveH0uZWwtY2FsZW5kYXJfX3RpdGxle2NvbG9yOiMwMDA7LW1zLWZsZXgtaXRlbS1hbGlnbjpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXJ9LmVsLWNhbGVuZGFyX19ib2R5e3BhZGRpbmc6MTJweCAyMHB4IDM1cHh9LmVsLWNhbGVuZGFyLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlfS5lbC1jYWxlbmRhci10YWJsZSB0aGVhZCB0aHtwYWRkaW5nOjEycHggMDtjb2xvcjojNjA2MjY2O2ZvbnQtd2VpZ2h0OjQwMH0uZWwtY2FsZW5kYXItdGFibGU6bm90KC5pcy1yYW5nZSkgdGQubmV4dCwuZWwtY2FsZW5kYXItdGFibGU6bm90KC5pcy1yYW5nZSkgdGQucHJldntjb2xvcjojQzBDNENDfS5lbC1iYWNrdG9wLC5lbC1jYWxlbmRhci10YWJsZSB0ZC5pcy10b2RheXtjb2xvcjojNDA5RUZGfS5lbC1jYWxlbmRhci10YWJsZSB0ZHtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjRUJFRUY1O2JvcmRlci1yaWdodDoxcHggc29saWQgI0VCRUVGNTt2ZXJ0aWNhbC1hbGlnbjp0b3A7LXdlYmtpdC10cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzIGVhc2U7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBlYXNlfS5lbC1jYWxlbmRhci10YWJsZSB0ZC5pcy1zZWxlY3RlZHtiYWNrZ3JvdW5kLWNvbG9yOiNGMkY4RkV9LmVsLWNhbGVuZGFyLXRhYmxlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNFQkVFRjV9LmVsLWNhbGVuZGFyLXRhYmxlIHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjRUJFRUY1fS5lbC1jYWxlbmRhci10YWJsZSB0ci5lbC1jYWxlbmRhci10YWJsZV9fcm93LS1oaWRlLWJvcmRlciB0ZHtib3JkZXItdG9wOm5vbmV9LmVsLWNhbGVuZGFyLXRhYmxlIC5lbC1jYWxlbmRhci1kYXl7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6OHB4O2hlaWdodDo4NXB4fS5lbC1jYWxlbmRhci10YWJsZSAuZWwtY2FsZW5kYXItZGF5OmhvdmVye2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6I0YyRjhGRX0uZWwtYmFja3RvcHtwb3NpdGlvbjpmaXhlZDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtYm94LWFsaWduOmNlbnRlcjstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOy13ZWJraXQtYm94LXBhY2s6Y2VudGVyOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjIwcHg7LXdlYmtpdC1ib3gtc2hhZG93OjAgMCA2cHggcmdiYSgwLDAsMCwuMTIpO2JveC1zaGFkb3c6MCAwIDZweCByZ2JhKDAsMCwwLC4xMik7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDo1fS5lbC1iYWNrdG9wOmhvdmVye2JhY2tncm91bmQtY29sb3I6I0YyRjZGQ30uZWwtcGFnZS1oZWFkZXJ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDoyNHB4fS5lbC1wYWdlLWhlYWRlcl9fbGVmdHtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2N1cnNvcjpwb2ludGVyO21hcmdpbi1yaWdodDo0MHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5lbC1wYWdlLWhlYWRlcl9fbGVmdDo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDoxNnB4O3JpZ2h0Oi0yMHB4O3RvcDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTtiYWNrZ3JvdW5kLWNvbG9yOiNEQ0RGRTZ9LmVsLWNoZWNrYm94LC5lbC1jaGVja2JveF9faW5wdXR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5lbC1wYWdlLWhlYWRlcl9fbGVmdCAuZWwtaWNvbi1iYWNre2ZvbnQtc2l6ZToxOHB4O21hcmdpbi1yaWdodDo2cHg7LW1zLWZsZXgtaXRlbS1hbGlnbjpjZW50ZXI7YWxpZ24tc2VsZjpjZW50ZXJ9LmVsLXBhZ2UtaGVhZGVyX190aXRsZXtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo1MDB9LmVsLXBhZ2UtaGVhZGVyX19jb250ZW50e2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiMzMDMxMzN9LmVsLWNoZWNrYm94e2NvbG9yOiM2MDYyNjY7Zm9udC13ZWlnaHQ6NTAwO2ZvbnQtc2l6ZToxNHB4O2N1cnNvcjpwb2ludGVyOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTttYXJnaW4tcmlnaHQ6MzBweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWR7cGFkZGluZzo5cHggMjBweCA5cHggMTBweDtib3JkZXItcmFkaXVzOjRweDtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2xpbmUtaGVpZ2h0Om5vcm1hbDtoZWlnaHQ6NDBweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuaXMtY2hlY2tlZHtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuaXMtZGlzYWJsZWR7Ym9yZGVyLWNvbG9yOiNFQkVFRjU7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWVkaXVte3BhZGRpbmc6N3B4IDIwcHggN3B4IDEwcHg7Ym9yZGVyLXJhZGl1czo0cHg7aGVpZ2h0OjM2cHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1tZWRpdW0gLmVsLWNoZWNrYm94X19sYWJlbHtsaW5lLWhlaWdodDoxN3B4O2ZvbnQtc2l6ZToxNHB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWVkaXVtIC5lbC1jaGVja2JveF9faW5uZXJ7aGVpZ2h0OjE0cHg7d2lkdGg6MTRweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLXNtYWxse3BhZGRpbmc6NXB4IDE1cHggNXB4IDEwcHg7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2xhYmVse2xpbmUtaGVpZ2h0OjE1cHg7Zm9udC1zaXplOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2lubmVye2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1zbWFsbCAuZWwtY2hlY2tib3hfX2lubmVyOjphZnRlcntoZWlnaHQ6NnB4O3dpZHRoOjJweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLW1pbml7cGFkZGluZzozcHggMTVweCAzcHggMTBweDtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MjhweH0uZWwtY2hlY2tib3guaXMtYm9yZGVyZWQuZWwtY2hlY2tib3gtLW1pbmkgLmVsLWNoZWNrYm94X19sYWJlbHtsaW5lLWhlaWdodDoxMnB4O2ZvbnQtc2l6ZToxMnB4fS5lbC1jaGVja2JveC5pcy1ib3JkZXJlZC5lbC1jaGVja2JveC0tbWluaSAuZWwtY2hlY2tib3hfX2lubmVye2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmVsLWNoZWNrYm94LmlzLWJvcmRlcmVkLmVsLWNoZWNrYm94LS1taW5pIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2hlaWdodDo2cHg7d2lkdGg6MnB4fS5lbC1jaGVja2JveF9faW5wdXR7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2xpbmUtaGVpZ2h0OjE7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNlZGYyZmM7Ym9yZGVyLWNvbG9yOiNEQ0RGRTY7Y3Vyc29yOm5vdC1hbGxvd2VkfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcjo6YWZ0ZXJ7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQgLmVsLWNoZWNrYm94X19pbm5lcisuZWwtY2hlY2tib3hfX2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkLmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGMkY2RkM7Ym9yZGVyLWNvbG9yOiNEQ0RGRTZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZC5pcy1jaGVja2VkIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2JvcmRlci1jb2xvcjojQzBDNENDfS5lbC1jaGVja2JveF9faW5wdXQuaXMtZGlzYWJsZWQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVye2JhY2tncm91bmQtY29sb3I6I0YyRjZGQztib3JkZXItY29sb3I6I0RDREZFNn0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWRpc2FibGVkLmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcjo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6I0MwQzRDQztib3JkZXItY29sb3I6I0MwQzRDQ30uZWwtY2hlY2tib3hfX2lucHV0LmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lciwuZWwtY2hlY2tib3hfX2lucHV0LmlzLWluZGV0ZXJtaW5hdGUgLmVsLWNoZWNrYm94X19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiM0MDlFRkY7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1kaXNhYmxlZCtzcGFuLmVsLWNoZWNrYm94X19sYWJlbHtjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtY2hlY2tib3hfX2lucHV0LmlzLWNoZWNrZWQgLmVsLWNoZWNrYm94X19pbm5lcjo6YWZ0ZXJ7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBzY2FsZVkoMSk7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZykgc2NhbGVZKDEpfS5lbC1jaGVja2JveF9faW5wdXQuaXMtY2hlY2tlZCsuZWwtY2hlY2tib3hfX2xhYmVse2NvbG9yOiM0MDlFRkZ9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1mb2N1cyAuZWwtY2hlY2tib3hfX2lubmVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveF9faW5wdXQuaXMtaW5kZXRlcm1pbmF0ZSAuZWwtY2hlY2tib3hfX2lubmVyOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQtY29sb3I6I0ZGRjtoZWlnaHQ6MnB4Oy13ZWJraXQtdHJhbnNmb3JtOnNjYWxlKC41KTt0cmFuc2Zvcm06c2NhbGUoLjUpO2xlZnQ6MDtyaWdodDowO3RvcDo1cHh9LmVsLWNoZWNrYm94X19pbnB1dC5pcy1pbmRldGVybWluYXRlIC5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVye2Rpc3BsYXk6bm9uZX0uZWwtY2hlY2tib3hfX2lubmVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlcjoxcHggc29saWQgI0RDREZFNjtib3JkZXItcmFkaXVzOjJweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7d2lkdGg6MTRweDtoZWlnaHQ6MTRweDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7ei1pbmRleDoxOy13ZWJraXQtdHJhbnNpdGlvbjpib3JkZXItY29sb3IgLjI1cyBjdWJpYy1iZXppZXIoLjcxLC0uNDYsLjI5LDEuNDYpLGJhY2tncm91bmQtY29sb3IgLjI1cyBjdWJpYy1iZXppZXIoLjcxLC0uNDYsLjI5LDEuNDYpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KSxiYWNrZ3JvdW5kLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC43MSwtLjQ2LC4yOSwxLjQ2KX0uZWwtY2hlY2tib3hfX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1jaGVja2JveF9faW5uZXI6OmFmdGVyey13ZWJraXQtYm94LXNpemluZzpjb250ZW50LWJveDtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbnRlbnQ6XFxcIlxcXCI7Ym9yZGVyOjFweCBzb2xpZCAjRkZGO2JvcmRlci1sZWZ0OjA7Ym9yZGVyLXRvcDowO2hlaWdodDo3cHg7bGVmdDo0cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjFweDstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpIHNjYWxlWSgwKTt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKSBzY2FsZVkoMCk7d2lkdGg6M3B4Oy13ZWJraXQtdHJhbnNpdGlvbjotd2Via2l0LXRyYW5zZm9ybSAuMTVzIGVhc2UtaW4gLjA1czt0cmFuc2l0aW9uOi13ZWJraXQtdHJhbnNmb3JtIC4xNXMgZWFzZS1pbiAuMDVzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMgZWFzZS1pbiAuMDVzO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMgZWFzZS1pbiAuMDVzLCAtd2Via2l0LXRyYW5zZm9ybSAuMTVzIGVhc2UtaW4gLjA1czt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIGVhc2UtaW4gLjA1cywtd2Via2l0LXRyYW5zZm9ybSAuMTVzIGVhc2UtaW4gLjA1czstd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46Y2VudGVyO3RyYW5zZm9ybS1vcmlnaW46Y2VudGVyfS5lbC1jaGVja2JveF9fb3JpZ2luYWx7b3BhY2l0eTowO291dGxpbmU6MDtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW46MDt3aWR0aDowO2hlaWdodDowO3otaW5kZXg6LTF9LmVsLWNoZWNrYm94LWJ1dHRvbiwuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtY2hlY2tib3hfX2xhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO3BhZGRpbmctbGVmdDoxMHB4O2xpbmUtaGVpZ2h0OjE5cHg7Zm9udC1zaXplOjE0cHh9LmVsLWNoZWNrYm94Omxhc3Qtb2YtdHlwZXttYXJnaW4tcmlnaHQ6MH0uZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntsaW5lLWhlaWdodDoxO2ZvbnQtd2VpZ2h0OjUwMDt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246bWlkZGxlO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6I0ZGRjtib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7Ym9yZGVyLWxlZnQ6MDtjb2xvcjojNjA2MjY2Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RleHQtYWxpZ246Y2VudGVyOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOjA7bWFyZ2luOjA7LXdlYmtpdC10cmFuc2l0aW9uOmFsbCAuM3MgY3ViaWMtYmV6aWVyKC42NDUsLjA0NSwuMzU1LDEpO3RyYW5zaXRpb246YWxsIC4zcyBjdWJpYy1iZXppZXIoLjY0NSwuMDQ1LC4zNTUsMSk7cGFkZGluZzoxMnB4IDIwcHg7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLXJhZGl1czowfS5lbC1jaGVja2JveC1idXR0b25fX2lubmVyLmlzLXJvdW5ke3BhZGRpbmc6MTJweCAyMHB4fS5lbC1jaGVja2JveC1idXR0b25fX2lubmVyOmhvdmVye2NvbG9yOiM0MDlFRkZ9LmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIgW2NsYXNzKj1lbC1pY29uLV17bGluZS1oZWlnaHQ6Ljl9LmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIgW2NsYXNzKj1lbC1pY29uLV0rc3BhbnttYXJnaW4tbGVmdDo1cHh9LmVsLWNoZWNrYm94LWJ1dHRvbl9fb3JpZ2luYWx7b3BhY2l0eTowO291dGxpbmU6MDtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW46MDt6LWluZGV4Oi0xfS5lbC1yYWRpbywuZWwtcmFkaW9fX2lubmVyLC5lbC1yYWRpb19faW5wdXR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmVsLWNoZWNrYm94LWJ1dHRvbi5pcy1jaGVja2VkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2NvbG9yOiNGRkY7YmFja2dyb3VuZC1jb2xvcjojNDA5RUZGO2JvcmRlci1jb2xvcjojNDA5RUZGOy13ZWJraXQtYm94LXNoYWRvdzotMXB4IDAgMCAwICM4Y2M1ZmY7Ym94LXNoYWRvdzotMXB4IDAgMCAwICM4Y2M1ZmZ9LmVsLWNoZWNrYm94LWJ1dHRvbi5pcy1jaGVja2VkOmZpcnN0LWNoaWxkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1sZWZ0LWNvbG9yOiM0MDlFRkZ9LmVsLWNoZWNrYm94LWJ1dHRvbi5pcy1kaXNhYmxlZCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntjb2xvcjojQzBDNENDO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWltYWdlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojRkZGO2JvcmRlci1jb2xvcjojRUJFRUY1Oy13ZWJraXQtYm94LXNoYWRvdzpub25lO2JveC1zaGFkb3c6bm9uZX0uZWwtY2hlY2tib3gtYnV0dG9uLmlzLWRpc2FibGVkOmZpcnN0LWNoaWxkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1sZWZ0LWNvbG9yOiNFQkVFRjV9LmVsLWNoZWNrYm94LWJ1dHRvbjpmaXJzdC1jaGlsZCAuZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lcntib3JkZXItbGVmdDoxcHggc29saWQgI0RDREZFNjtib3JkZXItcmFkaXVzOjRweCAwIDAgNHB4Oy13ZWJraXQtYm94LXNoYWRvdzpub25lIWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fS5lbC1jaGVja2JveC1idXR0b24uaXMtZm9jdXMgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLWNoZWNrYm94LWJ1dHRvbjpsYXN0LWNoaWxkIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye2JvcmRlci1yYWRpdXM6MCA0cHggNHB4IDB9LmVsLWNoZWNrYm94LWJ1dHRvbi0tbWVkaXVtIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye3BhZGRpbmc6MTBweCAyMHB4O2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1yYWRpdXM6MH0uZWwtY2hlY2tib3gtYnV0dG9uLS1tZWRpdW0gLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzoxMHB4IDIwcHh9LmVsLWNoZWNrYm94LWJ1dHRvbi0tc21hbGwgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXJ7cGFkZGluZzo5cHggMTVweDtmb250LXNpemU6MTJweDtib3JkZXItcmFkaXVzOjB9LmVsLWNoZWNrYm94LWJ1dHRvbi0tc21hbGwgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzo5cHggMTVweH0uZWwtY2hlY2tib3gtYnV0dG9uLS1taW5pIC5lbC1jaGVja2JveC1idXR0b25fX2lubmVye3BhZGRpbmc6N3B4IDE1cHg7Zm9udC1zaXplOjEycHg7Ym9yZGVyLXJhZGl1czowfS5lbC1jaGVja2JveC1idXR0b24tLW1pbmkgLmVsLWNoZWNrYm94LWJ1dHRvbl9faW5uZXIuaXMtcm91bmR7cGFkZGluZzo3cHggMTVweH0uZWwtY2hlY2tib3gtZ3JvdXB7Zm9udC1zaXplOjB9LmVsLWF2YXRhciwuZWwtY2FzY2FkZXItcGFuZWwsLmVsLXJhZGlvLC5lbC1yYWRpby0tbWVkaXVtLmlzLWJvcmRlcmVkIC5lbC1yYWRpb19fbGFiZWwsLmVsLXJhZGlvX19sYWJlbHtmb250LXNpemU6MTRweH0uZWwtcmFkaW97Y29sb3I6IzYwNjI2Njtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7b3V0bGluZTowO21hcmdpbi1yaWdodDozMHB4fS5lbC1jYXNjYWRlci1ub2RlPi5lbC1yYWRpbywuZWwtcmFkaW86bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6MH0uZWwtcmFkaW8uaXMtYm9yZGVyZWR7cGFkZGluZzoxMnB4IDIwcHggMCAxMHB4O2JvcmRlci1yYWRpdXM6NHB4O2JvcmRlcjoxcHggc29saWQgI0RDREZFNjstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjQwcHh9LmVsLWNhc2NhZGVyLW1lbnUsLmVsLWNhc2NhZGVyLW1lbnVfX2xpc3QsLmVsLXJhZGlvX19pbm5lcnstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtcmFkaW8uaXMtYm9yZGVyZWQuaXMtY2hlY2tlZHtib3JkZXItY29sb3I6IzQwOUVGRn0uZWwtcmFkaW8uaXMtYm9yZGVyZWQuaXMtZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkO2JvcmRlci1jb2xvcjojRUJFRUY1fS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQgLmVsLXJhZGlvX19pbm5lciwuZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkLmlzLWNoZWNrZWQgLmVsLXJhZGlvX19pbm5lcntiYWNrZ3JvdW5kLWNvbG9yOiNGNUY3RkE7Ym9yZGVyLWNvbG9yOiNFNEU3RUR9LmVsLXJhZGlvLmlzLWJvcmRlcmVkKy5lbC1yYWRpby5pcy1ib3JkZXJlZHttYXJnaW4tbGVmdDoxMHB4fS5lbC1yYWRpby0tbWVkaXVtLmlzLWJvcmRlcmVke3BhZGRpbmc6MTBweCAyMHB4IDAgMTBweDtib3JkZXItcmFkaXVzOjRweDtoZWlnaHQ6MzZweH0uZWwtcmFkaW8tLW1pbmkuaXMtYm9yZGVyZWQgLmVsLXJhZGlvX19sYWJlbCwuZWwtcmFkaW8tLXNtYWxsLmlzLWJvcmRlcmVkIC5lbC1yYWRpb19fbGFiZWx7Zm9udC1zaXplOjEycHh9LmVsLXJhZGlvLS1tZWRpdW0uaXMtYm9yZGVyZWQgLmVsLXJhZGlvX19pbm5lcntoZWlnaHQ6MTRweDt3aWR0aDoxNHB4fS5lbC1yYWRpby0tc21hbGwuaXMtYm9yZGVyZWR7cGFkZGluZzo4cHggMTVweCAwIDEwcHg7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHh9LmVsLXJhZGlvLS1zbWFsbC5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2lubmVye2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmVsLXJhZGlvLS1taW5pLmlzLWJvcmRlcmVke3BhZGRpbmc6NnB4IDE1cHggMCAxMHB4O2JvcmRlci1yYWRpdXM6M3B4O2hlaWdodDoyOHB4fS5lbC1yYWRpby0tbWluaS5pcy1ib3JkZXJlZCAuZWwtcmFkaW9fX2lubmVye2hlaWdodDoxMnB4O3dpZHRoOjEycHh9LmVsLXJhZGlvX19pbnB1dHt3aGl0ZS1zcGFjZTpub3dyYXA7Y3Vyc29yOnBvaW50ZXI7b3V0bGluZTowO2xpbmUtaGVpZ2h0OjE7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQgLmVsLXJhZGlvX19pbm5lcntjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXJhZGlvX19pbnB1dC5pcy1kaXNhYmxlZCAuZWwtcmFkaW9fX2lubmVyOjphZnRlcntjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojRjVGN0ZBfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQgLmVsLXJhZGlvX19pbm5lcisuZWwtcmFkaW9fX2xhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uZWwtcmFkaW9fX2lucHV0LmlzLWRpc2FibGVkLmlzLWNoZWNrZWQgLmVsLXJhZGlvX19pbm5lcjo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjojQzBDNENDfS5lbC1yYWRpb19faW5wdXQuaXMtZGlzYWJsZWQrc3Bhbi5lbC1yYWRpb19fbGFiZWx7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLXJhZGlvX19pbnB1dC5pcy1jaGVja2VkIC5lbC1yYWRpb19faW5uZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkY7YmFja2dyb3VuZDojNDA5RUZGfS5lbC1yYWRpb19faW5wdXQuaXMtY2hlY2tlZCAuZWwtcmFkaW9fX2lubmVyOjphZnRlcnstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgxKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSkgc2NhbGUoMSl9LmVsLXJhZGlvX19pbnB1dC5pcy1jaGVja2VkKy5lbC1yYWRpb19fbGFiZWx7Y29sb3I6IzQwOUVGRn0uZWwtcmFkaW9fX2lucHV0LmlzLWZvY3VzIC5lbC1yYWRpb19faW5uZXJ7Ym9yZGVyLWNvbG9yOiM0MDlFRkZ9LmVsLXJhZGlvX19pbm5lcntib3JkZXI6MXB4IHNvbGlkICNEQ0RGRTY7Ym9yZGVyLXJhZGl1czoxMDAlO3dpZHRoOjE0cHg7aGVpZ2h0OjE0cHg7YmFja2dyb3VuZC1jb2xvcjojRkZGO2N1cnNvcjpwb2ludGVyOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtcmFkaW9fX2lubmVyOmhvdmVye2JvcmRlci1jb2xvcjojNDA5RUZGfS5lbC1yYWRpb19faW5uZXI6OmFmdGVye3dpZHRoOjRweDtoZWlnaHQ6NHB4O2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7Y29udGVudDpcXFwiXFxcIjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTt0b3A6NTAlOy13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpIHNjYWxlKDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwtNTAlKSBzY2FsZSgwKTstd2Via2l0LXRyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjE1cyBlYXNlLWluO3RyYW5zaXRpb246LXdlYmtpdC10cmFuc2Zvcm0gLjE1cyBlYXNlLWluO3RyYW5zaXRpb246dHJhbnNmb3JtIC4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIGVhc2UtaW4sIC13ZWJraXQtdHJhbnNmb3JtIC4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMTVzIGVhc2UtaW4sLXdlYmtpdC10cmFuc2Zvcm0gLjE1cyBlYXNlLWlufS5lbC1yYWRpb19fb3JpZ2luYWx7b3BhY2l0eTowO291dGxpbmU6MDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO21hcmdpbjowfS5lbC1yYWRpbzpmb2N1czpub3QoLmlzLWZvY3VzKTpub3QoOmFjdGl2ZSk6bm90KC5pcy1kaXNhYmxlZCkgLmVsLXJhZGlvX19pbm5lcnstd2Via2l0LWJveC1zaGFkb3c6MCAwIDJweCAycHggIzQwOUVGRjtib3gtc2hhZG93OjAgMCAycHggMnB4ICM0MDlFRkZ9LmVsLXJhZGlvX19sYWJlbHtwYWRkaW5nLWxlZnQ6MTBweH0uZWwtc2Nyb2xsYmFye292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uZWwtc2Nyb2xsYmFyOmFjdGl2ZT4uZWwtc2Nyb2xsYmFyX19iYXIsLmVsLXNjcm9sbGJhcjpmb2N1cz4uZWwtc2Nyb2xsYmFyX19iYXIsLmVsLXNjcm9sbGJhcjpob3Zlcj4uZWwtc2Nyb2xsYmFyX19iYXJ7b3BhY2l0eToxOy13ZWJraXQtdHJhbnNpdGlvbjpvcGFjaXR5IDM0MG1zIGVhc2Utb3V0O3RyYW5zaXRpb246b3BhY2l0eSAzNDBtcyBlYXNlLW91dH0uZWwtc2Nyb2xsYmFyX193cmFwe292ZXJmbG93OnNjcm9sbDtoZWlnaHQ6MTAwJX0uZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdHtzY3JvbGxiYXItd2lkdGg6bm9uZX0uZWwtc2Nyb2xsYmFyX193cmFwLS1oaWRkZW4tZGVmYXVsdDo6LXdlYmtpdC1zY3JvbGxiYXJ7d2lkdGg6MDtoZWlnaHQ6MH0uZWwtc2Nyb2xsYmFyX190aHVtYntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7aGVpZ2h0OjA7Y3Vyc29yOnBvaW50ZXI7Ym9yZGVyLXJhZGl1czppbmhlcml0O2JhY2tncm91bmQtY29sb3I6cmdiYSgxNDQsMTQ3LDE1MywuMyk7LXdlYmtpdC10cmFuc2l0aW9uOi4zcyBiYWNrZ3JvdW5kLWNvbG9yO3RyYW5zaXRpb246LjNzIGJhY2tncm91bmQtY29sb3J9LmVsLXNjcm9sbGJhcl9fdGh1bWI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDE0NCwxNDcsMTUzLC41KX0uZWwtc2Nyb2xsYmFyX19iYXJ7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MnB4O2JvdHRvbToycHg7ei1pbmRleDoxO2JvcmRlci1yYWRpdXM6NHB4O29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAxMjBtcyBlYXNlLW91dDt0cmFuc2l0aW9uOm9wYWNpdHkgMTIwbXMgZWFzZS1vdXR9LmVsLXNjcm9sbGJhcl9fYmFyLmlzLXZlcnRpY2Fse3dpZHRoOjZweDt0b3A6MnB4fS5lbC1zY3JvbGxiYXJfX2Jhci5pcy12ZXJ0aWNhbD5kaXZ7d2lkdGg6MTAwJX0uZWwtc2Nyb2xsYmFyX19iYXIuaXMtaG9yaXpvbnRhbHtoZWlnaHQ6NnB4O2xlZnQ6MnB4fS5lbC1zY3JvbGxiYXJfX2Jhci5pcy1ob3Jpem9udGFsPmRpdntoZWlnaHQ6MTAwJX0uZWwtY2FzY2FkZXItcGFuZWx7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtib3JkZXItcmFkaXVzOjRweH0uZWwtY2FzY2FkZXItcGFuZWwuaXMtYm9yZGVyZWR7Ym9yZGVyOjFweCBzb2xpZCAjRTRFN0VEO2JvcmRlci1yYWRpdXM6NHB4fS5lbC1jYXNjYWRlci1tZW51e21pbi13aWR0aDoxODBweDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6IzYwNjI2Njtib3JkZXItcmlnaHQ6c29saWQgMXB4ICNFNEU3RUR9LmVsLWNhc2NhZGVyLW1lbnU6bGFzdC1jaGlsZHtib3JkZXItcmlnaHQ6bm9uZX0uZWwtY2FzY2FkZXItbWVudV9fd3JhcHtoZWlnaHQ6MjA0cHh9LmVsLWNhc2NhZGVyLW1lbnVfX2xpc3R7cG9zaXRpb246cmVsYXRpdmU7bWluLWhlaWdodDoxMDAlO21hcmdpbjowO3BhZGRpbmc6NnB4IDA7bGlzdC1zdHlsZTpub25lOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtY2FzY2FkZXItbWVudV9faG92ZXItem9uZXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtwb2ludGVyLWV2ZW50czpub25lfS5lbC1jYXNjYWRlci1tZW51X19lbXB0eS10ZXh0e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7bGVmdDo1MCU7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLC01MCUpO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiNDMEM0Q0N9LmVsLWNhc2NhZGVyLW5vZGV7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMzBweCAwIDIwcHg7aGVpZ2h0OjM0cHg7bGluZS1oZWlnaHQ6MzRweDtvdXRsaW5lOjB9LmVsLWNhc2NhZGVyLW5vZGUuaXMtc2VsZWN0YWJsZS5pbi1hY3RpdmUtcGF0aHtjb2xvcjojNjA2MjY2fS5lbC1jYXNjYWRlci1ub2RlLmluLWFjdGl2ZS1wYXRoLC5lbC1jYXNjYWRlci1ub2RlLmlzLWFjdGl2ZSwuZWwtY2FzY2FkZXItbm9kZS5pcy1zZWxlY3RhYmxlLmluLWNoZWNrZWQtcGF0aHtjb2xvcjojNDA5RUZGO2ZvbnQtd2VpZ2h0OjcwMH0uZWwtY2FzY2FkZXItbm9kZTpub3QoLmlzLWRpc2FibGVkKXtjdXJzb3I6cG9pbnRlcn0uZWwtY2FzY2FkZXItbm9kZTpub3QoLmlzLWRpc2FibGVkKTpmb2N1cywuZWwtY2FzY2FkZXItbm9kZTpub3QoLmlzLWRpc2FibGVkKTpob3ZlcntiYWNrZ3JvdW5kOiNGNUY3RkF9LmVsLWNhc2NhZGVyLW5vZGUuaXMtZGlzYWJsZWR7Y29sb3I6I0MwQzRDQztjdXJzb3I6bm90LWFsbG93ZWR9LmVsLWNhc2NhZGVyLW5vZGVfX3ByZWZpeHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHh9LmVsLWNhc2NhZGVyLW5vZGVfX3Bvc3RmaXh7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweH0uZWwtY2FzY2FkZXItbm9kZV9fbGFiZWx7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxO3BhZGRpbmc6MCAxMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uZWwtY2FzY2FkZXItbm9kZT4uZWwtcmFkaW8gLmVsLXJhZGlvX19sYWJlbHtwYWRkaW5nLWxlZnQ6MH0uZWwtYXZhdGFye2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LWFsaWduOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNDMEM0Q0M7d2lkdGg6NDBweDtoZWlnaHQ6NDBweDtsaW5lLWhlaWdodDo0MHB4fS5lbC1kcmF3ZXIsLmVsLWRyYXdlcl9fYm9keT4qey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94fS5lbC1hdmF0YXI+aW1ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5lbC1lbXB0eV9faW1hZ2UgaW1nLC5lbC1lbXB0eV9faW1hZ2Ugc3Zne3ZlcnRpY2FsLWFsaWduOnRvcDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5lbC1hdmF0YXItLWNpcmNsZXtib3JkZXItcmFkaXVzOjUwJX0uZWwtYXZhdGFyLS1zcXVhcmV7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLWF2YXRhci0taWNvbntmb250LXNpemU6MThweH0uZWwtYXZhdGFyLS1sYXJnZXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2xpbmUtaGVpZ2h0OjQwcHh9LmVsLWF2YXRhci0tbWVkaXVte3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7bGluZS1oZWlnaHQ6MzZweH0uZWwtYXZhdGFyLS1zbWFsbHt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2xpbmUtaGVpZ2h0OjI4cHh9QC13ZWJraXQta2V5ZnJhbWVzIGVsLWRyYXdlci1mYWRlLWluezAle29wYWNpdHk6MH0xMDAle29wYWNpdHk6MX19QGtleWZyYW1lcyBlbC1kcmF3ZXItZmFkZS1pbnswJXtvcGFjaXR5OjB9MTAwJXtvcGFjaXR5OjF9fUAtd2Via2l0LWtleWZyYW1lcyBydGwtZHJhd2VyLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX19QGtleWZyYW1lcyBydGwtZHJhd2VyLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX19QC13ZWJraXQta2V5ZnJhbWVzIHJ0bC1kcmF3ZXItb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgxMDAlLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSwwKX19QGtleWZyYW1lcyBydGwtZHJhd2VyLW91dHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMTAwJSwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDEwMCUsMCl9fUAtd2Via2l0LWtleWZyYW1lcyBsdHItZHJhd2VyLWluezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlLDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfX1Aa2V5ZnJhbWVzIGx0ci1kcmF3ZXItaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKC0xMDAlLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUsMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9fUAtd2Via2l0LWtleWZyYW1lcyBsdHItZHJhd2VyLW91dHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSwwKX19QGtleWZyYW1lcyBsdHItZHJhd2VyLW91dHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoLTEwMCUsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMTAwJSwwKX19QC13ZWJraXQta2V5ZnJhbWVzIHR0Yi1kcmF3ZXItaW57MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMTAwJSl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9fUBrZXlmcmFtZXMgdHRiLWRyYXdlci1pbnswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwtMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0xMDAlKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX19QC13ZWJraXQta2V5ZnJhbWVzIHR0Yi1kcmF3ZXItb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpfX1Aa2V5ZnJhbWVzIHR0Yi1kcmF3ZXItb3V0ezAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKX0xMDAley13ZWJraXQtdHJhbnNmb3JtOnRyYW5zbGF0ZSgwLC0xMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsLTEwMCUpfX1ALXdlYmtpdC1rZXlmcmFtZXMgYnR0LWRyYXdlci1pbnswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMTAwJSl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9fUBrZXlmcmFtZXMgYnR0LWRyYXdlci1pbnswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMTAwJSl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9fUAtd2Via2l0LWtleWZyYW1lcyBidHQtZHJhd2VyLW91dHswJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGUoMCwxMDAlKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDAsMTAwJSl9fUBrZXlmcmFtZXMgYnR0LWRyYXdlci1vdXR7MCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMCk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlKDAsMTAwJSk7dHJhbnNmb3JtOnRyYW5zbGF0ZSgwLDEwMCUpfX0uZWwtZHJhd2Vye3Bvc2l0aW9uOmFic29sdXRlOy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveDtiYWNrZ3JvdW5kLWNvbG9yOiNGRkY7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjstd2Via2l0LWJveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpO2JveC1zaGFkb3c6MCA4cHggMTBweCAtNXB4IHJnYmEoMCwwLDAsLjIpLDAgMTZweCAyNHB4IDJweCByZ2JhKDAsMCwwLC4xNCksMCA2cHggMzBweCA1cHggcmdiYSgwLDAsMCwuMTIpO292ZXJmbG93OmhpZGRlbjtvdXRsaW5lOjB9LmVsLWRyYXdlci5ydGx7LXdlYmtpdC1hbmltYXRpb246cnRsLWRyYXdlci1vdXQgLjNzO2FuaW1hdGlvbjpydGwtZHJhd2VyLW91dCAuM3M7cmlnaHQ6MH0uZWwtZHJhd2VyX19vcGVuIC5lbC1kcmF3ZXIucnRsey13ZWJraXQtYW5pbWF0aW9uOnJ0bC1kcmF3ZXItaW4gLjNzIDFtczthbmltYXRpb246cnRsLWRyYXdlci1pbiAuM3MgMW1zfS5lbC1kcmF3ZXIubHRyey13ZWJraXQtYW5pbWF0aW9uOmx0ci1kcmF3ZXItb3V0IC4zczthbmltYXRpb246bHRyLWRyYXdlci1vdXQgLjNzO2xlZnQ6MH0uZWwtZHJhd2VyX19vcGVuIC5lbC1kcmF3ZXIubHRyey13ZWJraXQtYW5pbWF0aW9uOmx0ci1kcmF3ZXItaW4gLjNzIDFtczthbmltYXRpb246bHRyLWRyYXdlci1pbiAuM3MgMW1zfS5lbC1kcmF3ZXIudHRiey13ZWJraXQtYW5pbWF0aW9uOnR0Yi1kcmF3ZXItb3V0IC4zczthbmltYXRpb246dHRiLWRyYXdlci1vdXQgLjNzO3RvcDowfS5lbC1kcmF3ZXJfX29wZW4gLmVsLWRyYXdlci50dGJ7LXdlYmtpdC1hbmltYXRpb246dHRiLWRyYXdlci1pbiAuM3MgMW1zO2FuaW1hdGlvbjp0dGItZHJhd2VyLWluIC4zcyAxbXN9LmVsLWRyYXdlci5idHR7LXdlYmtpdC1hbmltYXRpb246YnR0LWRyYXdlci1vdXQgLjNzO2FuaW1hdGlvbjpidHQtZHJhd2VyLW91dCAuM3M7Ym90dG9tOjB9LmVsLWRyYXdlcl9fb3BlbiAuZWwtZHJhd2VyLmJ0dHstd2Via2l0LWFuaW1hdGlvbjpidHQtZHJhd2VyLWluIC4zcyAxbXM7YW5pbWF0aW9uOmJ0dC1kcmF3ZXItaW4gLjNzIDFtc30uZWwtZHJhd2VyX193cmFwcGVye3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjttYXJnaW46MH0uZWwtZHJhd2VyX19oZWFkZXJ7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyOy1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzcyNzY3YjtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O21hcmdpbi1ib3R0b206MzJweDtwYWRkaW5nOjIwcHggMjBweCAwfS5lbC1kcmF3ZXJfX2hlYWRlcj46Zmlyc3QtY2hpbGR7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxfS5lbC1kcmF3ZXJfX3RpdGxle21hcmdpbjowOy13ZWJraXQtYm94LWZsZXg6MTstbXMtZmxleDoxO2ZsZXg6MTtsaW5lLWhlaWdodDppbmhlcml0O2ZvbnQtc2l6ZToxcmVtfS5lbC1kcmF3ZXJfX2Nsb3NlLWJ0bntib3JkZXI6bm9uZTtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6MjBweDtjb2xvcjppbmhlcml0O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LmVsLWRyYXdlcl9fYm9keXstd2Via2l0LWJveC1mbGV4OjE7LW1zLWZsZXg6MTtmbGV4OjE7b3ZlcmZsb3c6YXV0b30uZWwtcG9wY29uZmlybV9fbWFpbiwuZWwtc2tlbGV0b25fX2ltYWdle2Rpc3BsYXk6LW1zLWZsZXhib3g7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyO2Rpc3BsYXk6LXdlYmtpdC1ib3h9LmVsLWRyYXdlcl9fYm9keT4qey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0uZWwtZHJhd2VyLmx0ciwuZWwtZHJhd2VyLnJ0bHtoZWlnaHQ6MTAwJTt0b3A6MDtib3R0b206MH0uZWwtZHJhd2VyLmJ0dCwuZWwtZHJhd2VyLnR0Ynt3aWR0aDoxMDAlO2xlZnQ6MDtyaWdodDowfS5lbC1kcmF3ZXJfX2NvbnRhaW5lcntwb3NpdGlvbjpyZWxhdGl2ZTtsZWZ0OjA7cmlnaHQ6MDt0b3A6MDtib3R0b206MDtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlfS5lbC1kcmF3ZXItZmFkZS1lbnRlci1hY3RpdmV7LXdlYmtpdC1hbmltYXRpb246ZWwtZHJhd2VyLWZhZGUtaW4gLjNzO2FuaW1hdGlvbjplbC1kcmF3ZXItZmFkZS1pbiAuM3N9LmVsLWRyYXdlci1mYWRlLWxlYXZlLWFjdGl2ZXthbmltYXRpb246ZWwtZHJhd2VyLWZhZGUtaW4gLjNzIHJldmVyc2V9LmVsLXBvcGNvbmZpcm1fX21haW57ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZWwtcG9wY29uZmlybV9faWNvbnttYXJnaW4tcmlnaHQ6NXB4fS5lbC1wb3Bjb25maXJtX19hY3Rpb257dGV4dC1hbGlnbjpyaWdodDttYXJnaW46MH1ALXdlYmtpdC1rZXlmcmFtZXMgZWwtc2tlbGV0b24tbG9hZGluZ3swJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNTAlfTEwMCV7YmFja2dyb3VuZC1wb3NpdGlvbjowIDUwJX19QGtleWZyYW1lcyBlbC1za2VsZXRvbi1sb2FkaW5nezAle2JhY2tncm91bmQtcG9zaXRpb246MTAwJSA1MCV9MTAwJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgNTAlfX0uZWwtc2tlbGV0b257d2lkdGg6MTAwJX0uZWwtc2tlbGV0b25fX2ZpcnN0LWxpbmUsLmVsLXNrZWxldG9uX19wYXJhZ3JhcGh7aGVpZ2h0OjE2cHg7bWFyZ2luLXRvcDoxNnB4O2JhY2tncm91bmQ6I2YyZjJmMn0uZWwtc2tlbGV0b24uaXMtYW5pbWF0ZWQgLmVsLXNrZWxldG9uX19pdGVte2JhY2tncm91bmQ6LXdlYmtpdC1ncmFkaWVudChsaW5lYXIsbGVmdCB0b3AsIHJpZ2h0IHRvcCxjb2xvci1zdG9wKDI1JSwgI2YyZjJmMiksY29sb3Itc3RvcCgzNyUsICNlNmU2ZTYpLGNvbG9yLXN0b3AoNjMlLCAjZjJmMmYyKSk7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQoOTBkZWcsI2YyZjJmMiAyNSUsI2U2ZTZlNiAzNyUsI2YyZjJmMiA2MyUpO2JhY2tncm91bmQtc2l6ZTo0MDAlIDEwMCU7LXdlYmtpdC1hbmltYXRpb246ZWwtc2tlbGV0b24tbG9hZGluZyAxLjRzIGVhc2UgaW5maW5pdGU7YW5pbWF0aW9uOmVsLXNrZWxldG9uLWxvYWRpbmcgMS40cyBlYXNlIGluZmluaXRlfS5lbC1za2VsZXRvbl9faXRlbXtiYWNrZ3JvdW5kOiNmMmYyZjI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjE2cHg7Ym9yZGVyLXJhZGl1czo0cHg7d2lkdGg6MTAwJX0uZWwtc2tlbGV0b25fX2NpcmNsZXtib3JkZXItcmFkaXVzOjUwJTt3aWR0aDozNnB4O2hlaWdodDozNnB4O2xpbmUtaGVpZ2h0OjM2cHh9LmVsLXNrZWxldG9uX19jaXJjbGUtLWxne3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bGluZS1oZWlnaHQ6NDBweH0uZWwtc2tlbGV0b25fX2NpcmNsZS0tbWR7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtsaW5lLWhlaWdodDoyOHB4fS5lbC1za2VsZXRvbl9fYnV0dG9ue2hlaWdodDo0MHB4O3dpZHRoOjY0cHg7Ym9yZGVyLXJhZGl1czo0cHh9LmVsLXNrZWxldG9uX19we3dpZHRoOjEwMCV9LmVsLXNrZWxldG9uX19wLmlzLWxhc3R7d2lkdGg6NjElfS5lbC1za2VsZXRvbl9fcC5pcy1maXJzdHt3aWR0aDozMyV9LmVsLXNrZWxldG9uX190ZXh0e3dpZHRoOjEwMCU7aGVpZ2h0OjEzcHh9LmVsLXNrZWxldG9uX19jYXB0aW9ue2hlaWdodDoxMnB4fS5lbC1za2VsZXRvbl9faDF7aGVpZ2h0OjIwcHh9LmVsLXNrZWxldG9uX19oM3toZWlnaHQ6MThweH0uZWwtc2tlbGV0b25fX2g1e2hlaWdodDoxNnB4fS5lbC1za2VsZXRvbl9faW1hZ2V7d2lkdGg6dW5zZXQ7ZGlzcGxheTotd2Via2l0LWJveDtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC1hbGlnbjpjZW50ZXI7LXdlYmtpdC1ib3gtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstd2Via2l0LWJveC1wYWNrOmNlbnRlcjstbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlci1yYWRpdXM6MH0uZWwtc2tlbGV0b25fX2ltYWdlIHN2Z3tmaWxsOiNEQ0RERTA7d2lkdGg6MjIlO2hlaWdodDoyMiV9LmVsLWVtcHR5e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo0MHB4IDB9LmVsLWVtcHR5X19pbWFnZXt3aWR0aDoxNjBweH0uZWwtZW1wdHlfX2ltYWdlIGltZ3std2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LW8tb2JqZWN0LWZpdDpjb250YWluO29iamVjdC1maXQ6Y29udGFpbn0uZWwtZW1wdHlfX2ltYWdlIHN2Z3tmaWxsOiNEQ0RERTB9LmVsLWVtcHR5X19kZXNjcmlwdGlvbnttYXJnaW4tdG9wOjIwcHh9LmVsLWVtcHR5X19kZXNjcmlwdGlvbiBwe21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM5MDkzOTl9LmVsLWVtcHR5X19ib3R0b20sLmVsLXJlc3VsdF9fdGl0bGV7bWFyZ2luLXRvcDoyMHB4fS5lbC1kZXNjcmlwdGlvbnN7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMzMDMxMzN9LmVsLWRlc2NyaXB0aW9uc19faGVhZGVye2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpqdXN0aWZ5Oy1tcy1mbGV4LXBhY2s6anVzdGlmeTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tYm90dG9tOjIwcHh9LmVsLWRlc2NyaXB0aW9uc19fdGl0bGV7Zm9udC1zaXplOjE2cHg7Zm9udC13ZWlnaHQ6NzAwfS5lbC1kZXNjcmlwdGlvbnMtLW1pbmksLmVsLWRlc2NyaXB0aW9ucy0tc21hbGx7Zm9udC1zaXplOjEycHh9LmVsLWRlc2NyaXB0aW9uc19fYm9keXtjb2xvcjojNjA2MjY2O2JhY2tncm91bmQtY29sb3I6I0ZGRn0uZWwtZGVzY3JpcHRpb25zX19ib2R5IC5lbC1kZXNjcmlwdGlvbnNfX3RhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTt3aWR0aDoxMDAlO3RhYmxlLWxheW91dDpmaXhlZH0uZWwtZGVzY3JpcHRpb25zX19ib2R5IC5lbC1kZXNjcmlwdGlvbnNfX3RhYmxlIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbHstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7dGV4dC1hbGlnbjpsZWZ0O2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjV9LmVsLWRlc2NyaXB0aW9uc19fYm9keSAuZWwtZGVzY3JpcHRpb25zX190YWJsZSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGwuaXMtbGVmdHt0ZXh0LWFsaWduOmxlZnR9LmVsLWRlc2NyaXB0aW9uc19fYm9keSAuZWwtZGVzY3JpcHRpb25zX190YWJsZSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGwuaXMtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5lbC1kZXNjcmlwdGlvbnNfX2JvZHkgLmVsLWRlc2NyaXB0aW9uc19fdGFibGUgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxsLmlzLXJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LmVsLWRlc2NyaXB0aW9ucyAuaXMtYm9yZGVyZWR7dGFibGUtbGF5b3V0OmF1dG99LmVsLWRlc2NyaXB0aW9ucyAuaXMtYm9yZGVyZWQgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse2JvcmRlcjoxcHggc29saWQgI0VCRUVGNTtwYWRkaW5nOjEycHggMTBweH0uZWwtZGVzY3JpcHRpb25zIDpub3QoLmlzLWJvcmRlcmVkKSAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGx7cGFkZGluZy1ib3R0b206MTJweH0uZWwtZGVzY3JpcHRpb25zLS1tZWRpdW0uaXMtYm9yZGVyZWQgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse3BhZGRpbmc6MTBweH0uZWwtZGVzY3JpcHRpb25zLS1tZWRpdW06bm90KC5pcy1ib3JkZXJlZCkgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse3BhZGRpbmctYm90dG9tOjEwcHh9LmVsLWRlc2NyaXB0aW9ucy0tc21hbGwuaXMtYm9yZGVyZWQgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse3BhZGRpbmc6OHB4IDEwcHh9LmVsLWRlc2NyaXB0aW9ucy0tc21hbGw6bm90KC5pcy1ib3JkZXJlZCkgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse3BhZGRpbmctYm90dG9tOjhweH0uZWwtZGVzY3JpcHRpb25zLS1taW5pLmlzLWJvcmRlcmVkIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbHtwYWRkaW5nOjZweCAxMHB4fS5lbC1kZXNjcmlwdGlvbnMtLW1pbmk6bm90KC5pcy1ib3JkZXJlZCkgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxse3BhZGRpbmctYm90dG9tOjZweH0uZWwtZGVzY3JpcHRpb25zLWl0ZW17dmVydGljYWwtYWxpZ246dG9wfS5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGFpbmVye2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXh9LmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250YWluZXIgLmVsLWRlc2NyaXB0aW9ucy1pdGVtX19jb250ZW50LC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGFpbmVyIC5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fbGFiZWx7ZGlzcGxheTotd2Via2l0LWlubGluZS1ib3g7ZGlzcGxheTotbXMtaW5saW5lLWZsZXhib3g7ZGlzcGxheTppbmxpbmUtZmxleDstd2Via2l0LWJveC1hbGlnbjpiYXNlbGluZTstbXMtZmxleC1hbGlnbjpiYXNlbGluZTthbGlnbi1pdGVtczpiYXNlbGluZX0uZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NvbnRhaW5lciAuZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NvbnRlbnR7LXdlYmtpdC1ib3gtZmxleDoxOy1tcy1mbGV4OjE7ZmxleDoxfS5lbC1kZXNjcmlwdGlvbnMtaXRlbV9fbGFiZWwuaGFzLWNvbG9uOjphZnRlcntjb250ZW50Oic6Jztwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LS41cHh9LmVsLWRlc2NyaXB0aW9ucy1pdGVtX19sYWJlbC5pcy1ib3JkZXJlZC1sYWJlbHtmb250LXdlaWdodDo3MDA7Y29sb3I6IzkwOTM5OTtiYWNrZ3JvdW5kOiNmYWZhZmF9LmVsLWRlc2NyaXB0aW9ucy1pdGVtX19sYWJlbDpub3QoLmlzLWJvcmRlcmVkLWxhYmVsKXttYXJnaW4tcmlnaHQ6MTBweH0uZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NvbnRlbnR7d29yZC1icmVhazpicmVhay13b3JkO292ZXJmbG93LXdyYXA6YnJlYWstd29yZH0uZWwtcmVzdWx0e2Rpc3BsYXk6LXdlYmtpdC1ib3g7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LXdlYmtpdC1ib3gtcGFjazpjZW50ZXI7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjstd2Via2l0LWJveC1hbGlnbjpjZW50ZXI7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uOy13ZWJraXQtYm94LW9yaWVudDp2ZXJ0aWNhbDstd2Via2l0LWJveC1kaXJlY3Rpb246bm9ybWFsO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt0ZXh0LWFsaWduOmNlbnRlcjstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzo0MHB4IDMwcHh9LmVsLXJlc3VsdF9faWNvbiBzdmd7d2lkdGg6NjRweDtoZWlnaHQ6NjRweH0uZWwtcmVzdWx0X190aXRsZSBwe21hcmdpbjowO2ZvbnQtc2l6ZToyMHB4O2NvbG9yOiMzMDMxMzM7bGluZS1oZWlnaHQ6MS4zfS5lbC1yZXN1bHRfX3N1YnRpdGxle21hcmdpbi10b3A6MTBweH0uZWwtcmVzdWx0X19zdWJ0aXRsZSBwe21hcmdpbjowO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiM2MDYyNjY7bGluZS1oZWlnaHQ6MS4zfS5lbC1yZXN1bHRfX2V4dHJhe21hcmdpbi10b3A6MzBweH0uZWwtcmVzdWx0IC5pY29uLXN1Y2Nlc3N7ZmlsbDojNjdDMjNBfS5lbC1yZXN1bHQgLmljb24tZXJyb3J7ZmlsbDojRjU2QzZDfS5lbC1yZXN1bHQgLmljb24taW5mb3tmaWxsOiM5MDkzOTl9LmVsLXJlc3VsdCAuaWNvbi13YXJuaW5ne2ZpbGw6I0U2QTIzQ31cIiwgXCJcIl0pO1xuXG4vLyBleHBvcnRzXG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/element-ui/lib/theme-chalk/index.css\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/button-group.js":
- /*!*****************************************************!*\
- !*** ./node_modules/element-ui/lib/button-group.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 96);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 96:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-button-group\" }, [_vm._t(\"default\")], 2)\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var button_groupvue_type_script_lang_js_ = ({\n name: 'ElButtonGroup'\n});\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_button_groupvue_type_script_lang_js_ = (button_groupvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_button_groupvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/button/src/button-group.vue\"\n/* harmony default export */ var button_group = (component.exports);\n// CONCATENATED MODULE: ./packages/button-group/index.js\n\n\n/* istanbul ignore next */\nbutton_group.install = function (Vue) {\n Vue.component(button_group.name, button_group);\n};\n\n/* harmony default export */ var packages_button_group = __webpack_exports__[\"default\"] = (button_group);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvYnV0dG9uLWdyb3VwLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2J1dHRvbi1ncm91cC5qcz84NDVmIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOTYpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q4NjYxZDAmXG52YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtYnV0dG9uLWdyb3VwXCIgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZDg2NjFkMCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEJ1dHRvbkdyb3VwJ1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYnV0dG9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19idXR0b25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1dHRvbl9ncm91cCA9IChjb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi1ncm91cC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5idXR0b25fZ3JvdXAuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChidXR0b25fZ3JvdXAubmFtZSwgYnV0dG9uX2dyb3VwKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2J1dHRvbl9ncm91cCA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGJ1dHRvbl9ncm91cCk7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/button-group.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/button.js":
- /*!***********************************************!*\
- !*** ./node_modules/element-ui/lib/button.js ***!
- \***********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 95);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 95:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n staticClass: \"el-button\",\n class: [\n _vm.type ? \"el-button--\" + _vm.type : \"\",\n _vm.buttonSize ? \"el-button--\" + _vm.buttonSize : \"\",\n {\n \"is-disabled\": _vm.buttonDisabled,\n \"is-loading\": _vm.loading,\n \"is-plain\": _vm.plain,\n \"is-round\": _vm.round,\n \"is-circle\": _vm.circle\n }\n ],\n attrs: {\n disabled: _vm.buttonDisabled || _vm.loading,\n autofocus: _vm.autofocus,\n type: _vm.nativeType\n },\n on: { click: _vm.handleClick }\n },\n [\n _vm.loading ? _c(\"i\", { staticClass: \"el-icon-loading\" }) : _vm._e(),\n _vm.icon && !_vm.loading ? _c(\"i\", { class: _vm.icon }) : _vm._e(),\n _vm.$slots.default ? _c(\"span\", [_vm._t(\"default\")], 2) : _vm._e()\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var buttonvue_type_script_lang_js_ = ({\n name: 'ElButton',\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n type: {\n type: String,\n default: 'default'\n },\n size: String,\n icon: {\n type: String,\n default: ''\n },\n nativeType: {\n type: String,\n default: 'button'\n },\n loading: Boolean,\n disabled: Boolean,\n plain: Boolean,\n autofocus: Boolean,\n round: Boolean,\n circle: Boolean\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n buttonSize: function buttonSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n buttonDisabled: function buttonDisabled() {\n return this.$options.propsData.hasOwnProperty('disabled') ? this.disabled : (this.elForm || {}).disabled;\n }\n },\n\n methods: {\n handleClick: function handleClick(evt) {\n this.$emit('click', evt);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_buttonvue_type_script_lang_js_ = (buttonvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/button/src/button.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_buttonvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/button/src/button.vue\"\n/* harmony default export */ var src_button = (component.exports);\n// CONCATENATED MODULE: ./packages/button/index.js\n\n\n/* istanbul ignore next */\nsrc_button.install = function (Vue) {\n Vue.component(src_button.name, src_button);\n};\n\n/* harmony default export */ var packages_button = __webpack_exports__[\"default\"] = (src_button);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvYnV0dG9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2J1dHRvbi5qcz9lZWRmIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOTUpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDk1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2E4NTlmYjQmXG52YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtYnV0dG9uXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICBfdm0udHlwZSA/IFwiZWwtYnV0dG9uLS1cIiArIF92bS50eXBlIDogXCJcIixcbiAgICAgICAgX3ZtLmJ1dHRvblNpemUgPyBcImVsLWJ1dHRvbi0tXCIgKyBfdm0uYnV0dG9uU2l6ZSA6IFwiXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBcImlzLWRpc2FibGVkXCI6IF92bS5idXR0b25EaXNhYmxlZCxcbiAgICAgICAgICBcImlzLWxvYWRpbmdcIjogX3ZtLmxvYWRpbmcsXG4gICAgICAgICAgXCJpcy1wbGFpblwiOiBfdm0ucGxhaW4sXG4gICAgICAgICAgXCJpcy1yb3VuZFwiOiBfdm0ucm91bmQsXG4gICAgICAgICAgXCJpcy1jaXJjbGVcIjogX3ZtLmNpcmNsZVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IF92bS5idXR0b25EaXNhYmxlZCB8fCBfdm0ubG9hZGluZyxcbiAgICAgICAgYXV0b2ZvY3VzOiBfdm0uYXV0b2ZvY3VzLFxuICAgICAgICB0eXBlOiBfdm0ubmF0aXZlVHlwZVxuICAgICAgfSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xpY2sgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLmxvYWRpbmcgPyBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWxvYWRpbmdcIiB9KSA6IF92bS5fZSgpLFxuICAgICAgX3ZtLmljb24gJiYgIV92bS5sb2FkaW5nID8gX2MoXCJpXCIsIHsgY2xhc3M6IF92bS5pY29uIH0pIDogX3ZtLl9lKCksXG4gICAgICBfdm0uJHNsb3RzLmRlZmF1bHQgPyBfYyhcInNwYW5cIiwgW192bS5fdChcImRlZmF1bHRcIildLCAyKSA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhODU5ZmI0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEJ1dHRvbicsXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGVmYXVsdCdcbiAgICB9LFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBpY29uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgbmF0aXZlVHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2J1dHRvbidcbiAgICB9LFxuICAgIGxvYWRpbmc6IEJvb2xlYW4sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgcGxhaW46IEJvb2xlYW4sXG4gICAgYXV0b2ZvY3VzOiBCb29sZWFuLFxuICAgIHJvdW5kOiBCb29sZWFuLFxuICAgIGNpcmNsZTogQm9vbGVhblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBidXR0b25TaXplOiBmdW5jdGlvbiBidXR0b25TaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuICAgIGJ1dHRvbkRpc2FibGVkOiBmdW5jdGlvbiBidXR0b25EaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLnByb3BzRGF0YS5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSA/IHRoaXMuZGlzYWJsZWQgOiAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2dCkge1xuICAgICAgdGhpcy4kZW1pdCgnY2xpY2snLCBldnQpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGJ1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19idXR0b24gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX2J1dHRvbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19idXR0b24ubmFtZSwgc3JjX2J1dHRvbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19idXR0b24gPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChzcmNfYnV0dG9uKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/button.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/cascader-panel.js":
- /*!*******************************************************!*\
- !*** ./node_modules/element-ui/lib/cascader-panel.js ***!
- \*******************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 60);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/scrollbar */ \"./node_modules/element-ui/lib/scrollbar.js\");\n\n/***/ }),\n\n/***/ 19:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/checkbox */ \"./node_modules/element-ui/lib/checkbox.js\");\n\n/***/ }),\n\n/***/ 21:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/shared */ \"./node_modules/element-ui/lib/utils/shared.js\");\n\n/***/ }),\n\n/***/ 26:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! babel-helper-vue-jsx-merge-props */ \"./node_modules/babel-helper-vue-jsx-merge-props/index.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 31:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scroll-into-view */ \"./node_modules/element-ui/lib/utils/scroll-into-view.js\");\n\n/***/ }),\n\n/***/ 40:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/aria-utils */ \"./node_modules/element-ui/lib/utils/aria-utils.js\");\n\n/***/ }),\n\n/***/ 51:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/radio */ \"./node_modules/element-ui/lib/radio.js\");\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/locale */ \"./node_modules/element-ui/lib/mixins/locale.js\");\n\n/***/ }),\n\n/***/ 60:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\nvar cascader_panelvue_type_template_id_34932346_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\"el-cascader-panel\", _vm.border && \"is-bordered\"],\n on: { keydown: _vm.handleKeyDown }\n },\n _vm._l(_vm.menus, function(menu, index) {\n return _c(\"cascader-menu\", {\n key: index,\n ref: \"menu\",\n refInFor: true,\n attrs: { index: index, nodes: menu }\n })\n }),\n 1\n )\n}\nvar staticRenderFns = []\ncascader_panelvue_type_template_id_34932346_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\n\n// EXTERNAL MODULE: external \"babel-helper-vue-jsx-merge-props\"\nvar external_babel_helper_vue_jsx_merge_props_ = __webpack_require__(26);\nvar external_babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__webpack_require__.n(external_babel_helper_vue_jsx_merge_props_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/scrollbar\"\nvar scrollbar_ = __webpack_require__(15);\nvar scrollbar_default = /*#__PURE__*/__webpack_require__.n(scrollbar_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/checkbox\"\nvar checkbox_ = __webpack_require__(19);\nvar checkbox_default = /*#__PURE__*/__webpack_require__.n(checkbox_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/radio\"\nvar radio_ = __webpack_require__(51);\nvar radio_default = /*#__PURE__*/__webpack_require__.n(radio_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(3);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nvar stopPropagation = function stopPropagation(e) {\n return e.stopPropagation();\n};\n\n/* harmony default export */ var cascader_nodevue_type_script_lang_js_ = ({\n inject: ['panel'],\n\n components: {\n ElCheckbox: checkbox_default.a,\n ElRadio: radio_default.a\n },\n\n props: {\n node: {\n required: true\n },\n nodeId: String\n },\n\n computed: {\n config: function config() {\n return this.panel.config;\n },\n isLeaf: function isLeaf() {\n return this.node.isLeaf;\n },\n isDisabled: function isDisabled() {\n return this.node.isDisabled;\n },\n checkedValue: function checkedValue() {\n return this.panel.checkedValue;\n },\n isChecked: function isChecked() {\n return this.node.isSameNode(this.checkedValue);\n },\n inActivePath: function inActivePath() {\n return this.isInPath(this.panel.activePath);\n },\n inCheckedPath: function inCheckedPath() {\n var _this = this;\n\n if (!this.config.checkStrictly) return false;\n\n return this.panel.checkedNodePaths.some(function (checkedPath) {\n return _this.isInPath(checkedPath);\n });\n },\n value: function value() {\n return this.node.getValueByOption();\n }\n },\n\n methods: {\n handleExpand: function handleExpand() {\n var _this2 = this;\n\n var panel = this.panel,\n node = this.node,\n isDisabled = this.isDisabled,\n config = this.config;\n var multiple = config.multiple,\n checkStrictly = config.checkStrictly;\n\n\n if (!checkStrictly && isDisabled || node.loading) return;\n\n if (config.lazy && !node.loaded) {\n panel.lazyLoad(node, function () {\n // do not use cached leaf value here, invoke this.isLeaf to get new value.\n var isLeaf = _this2.isLeaf;\n\n\n if (!isLeaf) _this2.handleExpand();\n if (multiple) {\n // if leaf sync checked state, else clear checked state\n var checked = isLeaf ? node.checked : false;\n _this2.handleMultiCheckChange(checked);\n }\n });\n } else {\n panel.handleExpand(node);\n }\n },\n handleCheckChange: function handleCheckChange() {\n var panel = this.panel,\n value = this.value,\n node = this.node;\n\n panel.handleCheckChange(value);\n panel.handleExpand(node);\n },\n handleMultiCheckChange: function handleMultiCheckChange(checked) {\n this.node.doCheck(checked);\n this.panel.calculateMultiCheckedValue();\n },\n isInPath: function isInPath(pathNodes) {\n var node = this.node;\n\n var selectedPathNode = pathNodes[node.level - 1] || {};\n return selectedPathNode.uid === node.uid;\n },\n renderPrefix: function renderPrefix(h) {\n var isLeaf = this.isLeaf,\n isChecked = this.isChecked,\n config = this.config;\n var checkStrictly = config.checkStrictly,\n multiple = config.multiple;\n\n\n if (multiple) {\n return this.renderCheckbox(h);\n } else if (checkStrictly) {\n return this.renderRadio(h);\n } else if (isLeaf && isChecked) {\n return this.renderCheckIcon(h);\n }\n\n return null;\n },\n renderPostfix: function renderPostfix(h) {\n var node = this.node,\n isLeaf = this.isLeaf;\n\n\n if (node.loading) {\n return this.renderLoadingIcon(h);\n } else if (!isLeaf) {\n return this.renderExpandIcon(h);\n }\n\n return null;\n },\n renderCheckbox: function renderCheckbox(h) {\n var node = this.node,\n config = this.config,\n isDisabled = this.isDisabled;\n\n var events = {\n on: { change: this.handleMultiCheckChange },\n nativeOn: {}\n };\n\n if (config.checkStrictly) {\n // when every node is selectable, click event should not trigger expand event.\n events.nativeOn.click = stopPropagation;\n }\n\n return h('el-checkbox', external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n value: node.checked,\n indeterminate: node.indeterminate,\n disabled: isDisabled\n }\n }, events]));\n },\n renderRadio: function renderRadio(h) {\n var checkedValue = this.checkedValue,\n value = this.value,\n isDisabled = this.isDisabled;\n\n // to keep same reference if value cause radio's checked state is calculated by reference comparision;\n\n if (Object(util_[\"isEqual\"])(value, checkedValue)) {\n value = checkedValue;\n }\n\n return h(\n 'el-radio',\n {\n attrs: {\n value: checkedValue,\n label: value,\n disabled: isDisabled\n },\n on: {\n 'change': this.handleCheckChange\n },\n nativeOn: {\n 'click': stopPropagation\n }\n },\n [h('span')]\n );\n },\n renderCheckIcon: function renderCheckIcon(h) {\n return h('i', { 'class': 'el-icon-check el-cascader-node__prefix' });\n },\n renderLoadingIcon: function renderLoadingIcon(h) {\n return h('i', { 'class': 'el-icon-loading el-cascader-node__postfix' });\n },\n renderExpandIcon: function renderExpandIcon(h) {\n return h('i', { 'class': 'el-icon-arrow-right el-cascader-node__postfix' });\n },\n renderContent: function renderContent(h) {\n var panel = this.panel,\n node = this.node;\n\n var render = panel.renderLabelFn;\n var vnode = render ? render({ node: node, data: node.data }) : null;\n\n return h(\n 'span',\n { 'class': 'el-cascader-node__label' },\n [vnode || node.label]\n );\n }\n },\n\n render: function render(h) {\n var _this3 = this;\n\n var inActivePath = this.inActivePath,\n inCheckedPath = this.inCheckedPath,\n isChecked = this.isChecked,\n isLeaf = this.isLeaf,\n isDisabled = this.isDisabled,\n config = this.config,\n nodeId = this.nodeId;\n var expandTrigger = config.expandTrigger,\n checkStrictly = config.checkStrictly,\n multiple = config.multiple;\n\n var disabled = !checkStrictly && isDisabled;\n var events = { on: {} };\n\n if (expandTrigger === 'click') {\n events.on.click = this.handleExpand;\n } else {\n events.on.mouseenter = function (e) {\n _this3.handleExpand();\n _this3.$emit('expand', e);\n };\n events.on.focus = function (e) {\n _this3.handleExpand();\n _this3.$emit('expand', e);\n };\n }\n if (isLeaf && !isDisabled && !checkStrictly && !multiple) {\n events.on.click = this.handleCheckChange;\n }\n\n return h(\n 'li',\n external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n role: 'menuitem',\n id: nodeId,\n 'aria-expanded': inActivePath,\n tabindex: disabled ? null : -1\n },\n 'class': {\n 'el-cascader-node': true,\n 'is-selectable': checkStrictly,\n 'in-active-path': inActivePath,\n 'in-checked-path': inCheckedPath,\n 'is-active': isChecked,\n 'is-disabled': disabled\n }\n }, events]),\n [this.renderPrefix(h), this.renderContent(h), this.renderPostfix(h)]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_nodevue_type_script_lang_js_ = (cascader_nodevue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue\nvar cascader_node_render, cascader_node_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_cascader_nodevue_type_script_lang_js_,\n cascader_node_render,\n cascader_node_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/cascader-panel/src/cascader-node.vue\"\n/* harmony default export */ var cascader_node = (component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/locale\"\nvar locale_ = __webpack_require__(6);\nvar locale_default = /*#__PURE__*/__webpack_require__.n(locale_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n\n/* harmony default export */ var cascader_menuvue_type_script_lang_js_ = ({\n name: 'ElCascaderMenu',\n\n mixins: [locale_default.a],\n\n inject: ['panel'],\n\n components: {\n ElScrollbar: scrollbar_default.a,\n CascaderNode: cascader_node\n },\n\n props: {\n nodes: {\n type: Array,\n required: true\n },\n index: Number\n },\n\n data: function data() {\n return {\n activeNode: null,\n hoverTimer: null,\n id: Object(util_[\"generateId\"])()\n };\n },\n\n\n computed: {\n isEmpty: function isEmpty() {\n return !this.nodes.length;\n },\n menuId: function menuId() {\n return 'cascader-menu-' + this.id + '-' + this.index;\n }\n },\n\n methods: {\n handleExpand: function handleExpand(e) {\n this.activeNode = e.target;\n },\n handleMouseMove: function handleMouseMove(e) {\n var activeNode = this.activeNode,\n hoverTimer = this.hoverTimer;\n var hoverZone = this.$refs.hoverZone;\n\n\n if (!activeNode || !hoverZone) return;\n\n if (activeNode.contains(e.target)) {\n clearTimeout(hoverTimer);\n\n var _$el$getBoundingClien = this.$el.getBoundingClientRect(),\n left = _$el$getBoundingClien.left;\n\n var startX = e.clientX - left;\n var _$el = this.$el,\n offsetWidth = _$el.offsetWidth,\n offsetHeight = _$el.offsetHeight;\n\n var top = activeNode.offsetTop;\n var bottom = top + activeNode.offsetHeight;\n\n hoverZone.innerHTML = '\\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + top + ' L' + offsetWidth + ' 0 V' + top + ' Z\" />\\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + bottom + ' L' + offsetWidth + ' ' + offsetHeight + ' V' + bottom + ' Z\" />\\n ';\n } else if (!hoverTimer) {\n this.hoverTimer = setTimeout(this.clearHoverZone, this.panel.config.hoverThreshold);\n }\n },\n clearHoverZone: function clearHoverZone() {\n var hoverZone = this.$refs.hoverZone;\n\n if (!hoverZone) return;\n hoverZone.innerHTML = '';\n },\n renderEmptyText: function renderEmptyText(h) {\n return h(\n 'div',\n { 'class': 'el-cascader-menu__empty-text' },\n [this.t('el.cascader.noData')]\n );\n },\n renderNodeList: function renderNodeList(h) {\n var menuId = this.menuId;\n var isHoverMenu = this.panel.isHoverMenu;\n\n var events = { on: {} };\n\n if (isHoverMenu) {\n events.on.expand = this.handleExpand;\n }\n\n var nodes = this.nodes.map(function (node, index) {\n var hasChildren = node.hasChildren;\n\n return h('cascader-node', external_babel_helper_vue_jsx_merge_props_default()([{\n key: node.uid,\n attrs: { node: node,\n 'node-id': menuId + '-' + index,\n 'aria-haspopup': hasChildren,\n 'aria-owns': hasChildren ? menuId : null\n }\n }, events]));\n });\n\n return [].concat(nodes, [isHoverMenu ? h('svg', { ref: 'hoverZone', 'class': 'el-cascader-menu__hover-zone' }) : null]);\n }\n },\n\n render: function render(h) {\n var isEmpty = this.isEmpty,\n menuId = this.menuId;\n\n var events = { nativeOn: {} };\n\n // optimize hover to expand experience (#8010)\n if (this.panel.isHoverMenu) {\n events.nativeOn.mousemove = this.handleMouseMove;\n // events.nativeOn.mouseleave = this.clearHoverZone;\n }\n\n return h(\n 'el-scrollbar',\n external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n tag: 'ul',\n role: 'menu',\n id: menuId,\n\n 'wrap-class': 'el-cascader-menu__wrap',\n 'view-class': {\n 'el-cascader-menu__list': true,\n 'is-empty': isEmpty\n }\n },\n 'class': 'el-cascader-menu' }, events]),\n [isEmpty ? this.renderEmptyText(h) : this.renderNodeList(h)]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_menuvue_type_script_lang_js_ = (cascader_menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue\nvar cascader_menu_render, cascader_menu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar cascader_menu_component = Object(componentNormalizer[\"a\" /* default */])(\n src_cascader_menuvue_type_script_lang_js_,\n cascader_menu_render,\n cascader_menu_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_menu_api; }\ncascader_menu_component.options.__file = \"packages/cascader-panel/src/cascader-menu.vue\"\n/* harmony default export */ var cascader_menu = (cascader_menu_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __webpack_require__(21);\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/node.js\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar uid = 0;\n\nvar node_Node = function () {\n function Node(data, config, parentNode) {\n _classCallCheck(this, Node);\n\n this.data = data;\n this.config = config;\n this.parent = parentNode || null;\n this.level = !this.parent ? 1 : this.parent.level + 1;\n this.uid = uid++;\n\n this.initState();\n this.initChildren();\n }\n\n Node.prototype.initState = function initState() {\n var _config = this.config,\n valueKey = _config.value,\n labelKey = _config.label;\n\n\n this.value = this.data[valueKey];\n this.label = this.data[labelKey];\n this.pathNodes = this.calculatePathNodes();\n this.path = this.pathNodes.map(function (node) {\n return node.value;\n });\n this.pathLabels = this.pathNodes.map(function (node) {\n return node.label;\n });\n\n // lazy load\n this.loading = false;\n this.loaded = false;\n };\n\n Node.prototype.initChildren = function initChildren() {\n var _this = this;\n\n var config = this.config;\n\n var childrenKey = config.children;\n var childrenData = this.data[childrenKey];\n this.hasChildren = Array.isArray(childrenData);\n this.children = (childrenData || []).map(function (child) {\n return new Node(child, config, _this);\n });\n };\n\n Node.prototype.calculatePathNodes = function calculatePathNodes() {\n var nodes = [this];\n var parent = this.parent;\n\n while (parent) {\n nodes.unshift(parent);\n parent = parent.parent;\n }\n\n return nodes;\n };\n\n Node.prototype.getPath = function getPath() {\n return this.path;\n };\n\n Node.prototype.getValue = function getValue() {\n return this.value;\n };\n\n Node.prototype.getValueByOption = function getValueByOption() {\n return this.config.emitPath ? this.getPath() : this.getValue();\n };\n\n Node.prototype.getText = function getText(allLevels, separator) {\n return allLevels ? this.pathLabels.join(separator) : this.label;\n };\n\n Node.prototype.isSameNode = function isSameNode(checkedValue) {\n var value = this.getValueByOption();\n return this.config.multiple && Array.isArray(checkedValue) ? checkedValue.some(function (val) {\n return Object(util_[\"isEqual\"])(val, value);\n }) : Object(util_[\"isEqual\"])(checkedValue, value);\n };\n\n Node.prototype.broadcast = function broadcast(event) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var handlerName = 'onParent' + Object(util_[\"capitalize\"])(event);\n\n this.children.forEach(function (child) {\n if (child) {\n // bottom up\n child.broadcast.apply(child, [event].concat(args));\n child[handlerName] && child[handlerName].apply(child, args);\n }\n });\n };\n\n Node.prototype.emit = function emit(event) {\n var parent = this.parent;\n\n var handlerName = 'onChild' + Object(util_[\"capitalize\"])(event);\n if (parent) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n parent[handlerName] && parent[handlerName].apply(parent, args);\n parent.emit.apply(parent, [event].concat(args));\n }\n };\n\n Node.prototype.onParentCheck = function onParentCheck(checked) {\n if (!this.isDisabled) {\n this.setCheckState(checked);\n }\n };\n\n Node.prototype.onChildCheck = function onChildCheck() {\n var children = this.children;\n\n var validChildren = children.filter(function (child) {\n return !child.isDisabled;\n });\n var checked = validChildren.length ? validChildren.every(function (child) {\n return child.checked;\n }) : false;\n\n this.setCheckState(checked);\n };\n\n Node.prototype.setCheckState = function setCheckState(checked) {\n var totalNum = this.children.length;\n var checkedNum = this.children.reduce(function (c, p) {\n var num = p.checked ? 1 : p.indeterminate ? 0.5 : 0;\n return c + num;\n }, 0);\n\n this.checked = checked;\n this.indeterminate = checkedNum !== totalNum && checkedNum > 0;\n };\n\n Node.prototype.syncCheckState = function syncCheckState(checkedValue) {\n var value = this.getValueByOption();\n var checked = this.isSameNode(checkedValue, value);\n\n this.doCheck(checked);\n };\n\n Node.prototype.doCheck = function doCheck(checked) {\n if (this.checked !== checked) {\n if (this.config.checkStrictly) {\n this.checked = checked;\n } else {\n // bottom up to unify the calculation of the indeterminate state\n this.broadcast('check', checked);\n this.setCheckState(checked);\n this.emit('check');\n }\n }\n };\n\n _createClass(Node, [{\n key: 'isDisabled',\n get: function get() {\n var data = this.data,\n parent = this.parent,\n config = this.config;\n\n var disabledKey = config.disabled;\n var checkStrictly = config.checkStrictly;\n\n return data[disabledKey] || !checkStrictly && parent && parent.isDisabled;\n }\n }, {\n key: 'isLeaf',\n get: function get() {\n var data = this.data,\n loaded = this.loaded,\n hasChildren = this.hasChildren,\n children = this.children;\n var _config2 = this.config,\n lazy = _config2.lazy,\n leafKey = _config2.leaf;\n\n if (lazy) {\n var isLeaf = Object(shared_[\"isDef\"])(data[leafKey]) ? data[leafKey] : loaded ? !children.length : false;\n this.hasChildren = !isLeaf;\n return isLeaf;\n }\n return !hasChildren;\n }\n }]);\n\n return Node;\n}();\n\n/* harmony default export */ var src_node = (node_Node);\n// CONCATENATED MODULE: ./packages/cascader-panel/src/store.js\nfunction store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar flatNodes = function flatNodes(data, leafOnly) {\n return data.reduce(function (res, node) {\n if (node.isLeaf) {\n res.push(node);\n } else {\n !leafOnly && res.push(node);\n res = res.concat(flatNodes(node.children, leafOnly));\n }\n return res;\n }, []);\n};\n\nvar store_Store = function () {\n function Store(data, config) {\n store_classCallCheck(this, Store);\n\n this.config = config;\n this.initNodes(data);\n }\n\n Store.prototype.initNodes = function initNodes(data) {\n var _this = this;\n\n data = Object(util_[\"coerceTruthyValueToArray\"])(data);\n this.nodes = data.map(function (nodeData) {\n return new src_node(nodeData, _this.config);\n });\n this.flattedNodes = this.getFlattedNodes(false, false);\n this.leafNodes = this.getFlattedNodes(true, false);\n };\n\n Store.prototype.appendNode = function appendNode(nodeData, parentNode) {\n var node = new src_node(nodeData, this.config, parentNode);\n var children = parentNode ? parentNode.children : this.nodes;\n\n children.push(node);\n };\n\n Store.prototype.appendNodes = function appendNodes(nodeDataList, parentNode) {\n var _this2 = this;\n\n nodeDataList = Object(util_[\"coerceTruthyValueToArray\"])(nodeDataList);\n nodeDataList.forEach(function (nodeData) {\n return _this2.appendNode(nodeData, parentNode);\n });\n };\n\n Store.prototype.getNodes = function getNodes() {\n return this.nodes;\n };\n\n Store.prototype.getFlattedNodes = function getFlattedNodes(leafOnly) {\n var cached = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var cachedNodes = leafOnly ? this.leafNodes : this.flattedNodes;\n return cached ? cachedNodes : flatNodes(this.nodes, leafOnly);\n };\n\n Store.prototype.getNodeByValue = function getNodeByValue(value) {\n var nodes = this.getFlattedNodes(false, !this.config.lazy).filter(function (node) {\n return Object(util_[\"valueEquals\"])(node.path, value) || node.value === value;\n });\n return nodes && nodes.length ? nodes[0] : null;\n };\n\n return Store;\n}();\n\n/* harmony default export */ var src_store = (store_Store);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/merge\"\nvar merge_ = __webpack_require__(9);\nvar merge_default = /*#__PURE__*/__webpack_require__.n(merge_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/aria-utils\"\nvar aria_utils_ = __webpack_require__(40);\nvar aria_utils_default = /*#__PURE__*/__webpack_require__.n(aria_utils_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scroll-into-view\"\nvar scroll_into_view_ = __webpack_require__(31);\nvar scroll_into_view_default = /*#__PURE__*/__webpack_require__.n(scroll_into_view_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar KeyCode = aria_utils_default.a.keys;\n\nvar DefaultProps = {\n expandTrigger: 'click', // or hover\n multiple: false,\n checkStrictly: false, // whether all nodes can be selected\n emitPath: true, // wether to emit an array of all levels value in which node is located\n lazy: false,\n lazyLoad: util_[\"noop\"],\n value: 'value',\n label: 'label',\n children: 'children',\n leaf: 'leaf',\n disabled: 'disabled',\n hoverThreshold: 500\n};\n\nvar cascader_panelvue_type_script_lang_js_isLeaf = function isLeaf(el) {\n return !el.getAttribute('aria-owns');\n};\n\nvar getSibling = function getSibling(el, distance) {\n var parentNode = el.parentNode;\n\n if (parentNode) {\n var siblings = parentNode.querySelectorAll('.el-cascader-node[tabindex=\"-1\"]');\n var index = Array.prototype.indexOf.call(siblings, el);\n return siblings[index + distance] || null;\n }\n return null;\n};\n\nvar getMenuIndex = function getMenuIndex(el, distance) {\n if (!el) return;\n var pieces = el.id.split('-');\n return Number(pieces[pieces.length - 2]);\n};\n\nvar focusNode = function focusNode(el) {\n if (!el) return;\n el.focus();\n !cascader_panelvue_type_script_lang_js_isLeaf(el) && el.click();\n};\n\nvar checkNode = function checkNode(el) {\n if (!el) return;\n\n var input = el.querySelector('input');\n if (input) {\n input.click();\n } else if (cascader_panelvue_type_script_lang_js_isLeaf(el)) {\n el.click();\n }\n};\n\n/* harmony default export */ var cascader_panelvue_type_script_lang_js_ = ({\n name: 'ElCascaderPanel',\n\n components: {\n CascaderMenu: cascader_menu\n },\n\n props: {\n value: {},\n options: Array,\n props: Object,\n border: {\n type: Boolean,\n default: true\n },\n renderLabel: Function\n },\n\n provide: function provide() {\n return {\n panel: this\n };\n },\n data: function data() {\n return {\n checkedValue: null,\n checkedNodePaths: [],\n store: [],\n menus: [],\n activePath: [],\n loadCount: 0\n };\n },\n\n\n computed: {\n config: function config() {\n return merge_default()(_extends({}, DefaultProps), this.props || {});\n },\n multiple: function multiple() {\n return this.config.multiple;\n },\n checkStrictly: function checkStrictly() {\n return this.config.checkStrictly;\n },\n leafOnly: function leafOnly() {\n return !this.checkStrictly;\n },\n isHoverMenu: function isHoverMenu() {\n return this.config.expandTrigger === 'hover';\n },\n renderLabelFn: function renderLabelFn() {\n return this.renderLabel || this.$scopedSlots.default;\n }\n },\n\n watch: {\n options: {\n handler: function handler() {\n this.initStore();\n },\n immediate: true,\n deep: true\n },\n value: function value() {\n this.syncCheckedValue();\n this.checkStrictly && this.calculateCheckedNodePaths();\n },\n checkedValue: function checkedValue(val) {\n if (!Object(util_[\"isEqual\"])(val, this.value)) {\n this.checkStrictly && this.calculateCheckedNodePaths();\n this.$emit('input', val);\n this.$emit('change', val);\n }\n }\n },\n\n mounted: function mounted() {\n if (!this.isEmptyValue(this.value)) {\n this.syncCheckedValue();\n }\n },\n\n\n methods: {\n initStore: function initStore() {\n var config = this.config,\n options = this.options;\n\n if (config.lazy && Object(util_[\"isEmpty\"])(options)) {\n this.lazyLoad();\n } else {\n this.store = new src_store(options, config);\n this.menus = [this.store.getNodes()];\n this.syncMenuState();\n }\n },\n syncCheckedValue: function syncCheckedValue() {\n var value = this.value,\n checkedValue = this.checkedValue;\n\n if (!Object(util_[\"isEqual\"])(value, checkedValue)) {\n this.activePath = [];\n this.checkedValue = value;\n this.syncMenuState();\n }\n },\n syncMenuState: function syncMenuState() {\n var multiple = this.multiple,\n checkStrictly = this.checkStrictly;\n\n this.syncActivePath();\n multiple && this.syncMultiCheckState();\n checkStrictly && this.calculateCheckedNodePaths();\n this.$nextTick(this.scrollIntoView);\n },\n syncMultiCheckState: function syncMultiCheckState() {\n var _this = this;\n\n var nodes = this.getFlattedNodes(this.leafOnly);\n\n nodes.forEach(function (node) {\n node.syncCheckState(_this.checkedValue);\n });\n },\n isEmptyValue: function isEmptyValue(val) {\n var multiple = this.multiple,\n config = this.config;\n var emitPath = config.emitPath;\n\n if (multiple || emitPath) {\n return Object(util_[\"isEmpty\"])(val);\n }\n return false;\n },\n syncActivePath: function syncActivePath() {\n var _this2 = this;\n\n var store = this.store,\n multiple = this.multiple,\n activePath = this.activePath,\n checkedValue = this.checkedValue;\n\n\n if (!Object(util_[\"isEmpty\"])(activePath)) {\n var nodes = activePath.map(function (node) {\n return _this2.getNodeByValue(node.getValue());\n });\n this.expandNodes(nodes);\n } else if (!this.isEmptyValue(checkedValue)) {\n var value = multiple ? checkedValue[0] : checkedValue;\n var checkedNode = this.getNodeByValue(value) || {};\n var _nodes = (checkedNode.pathNodes || []).slice(0, -1);\n this.expandNodes(_nodes);\n } else {\n this.activePath = [];\n this.menus = [store.getNodes()];\n }\n },\n expandNodes: function expandNodes(nodes) {\n var _this3 = this;\n\n nodes.forEach(function (node) {\n return _this3.handleExpand(node, true /* silent */);\n });\n },\n calculateCheckedNodePaths: function calculateCheckedNodePaths() {\n var _this4 = this;\n\n var checkedValue = this.checkedValue,\n multiple = this.multiple;\n\n var checkedValues = multiple ? Object(util_[\"coerceTruthyValueToArray\"])(checkedValue) : [checkedValue];\n this.checkedNodePaths = checkedValues.map(function (v) {\n var checkedNode = _this4.getNodeByValue(v);\n return checkedNode ? checkedNode.pathNodes : [];\n });\n },\n handleKeyDown: function handleKeyDown(e) {\n var target = e.target,\n keyCode = e.keyCode;\n\n\n switch (keyCode) {\n case KeyCode.up:\n var prev = getSibling(target, -1);\n focusNode(prev);\n break;\n case KeyCode.down:\n var next = getSibling(target, 1);\n focusNode(next);\n break;\n case KeyCode.left:\n var preMenu = this.$refs.menu[getMenuIndex(target) - 1];\n if (preMenu) {\n var expandedNode = preMenu.$el.querySelector('.el-cascader-node[aria-expanded=\"true\"]');\n focusNode(expandedNode);\n }\n break;\n case KeyCode.right:\n var nextMenu = this.$refs.menu[getMenuIndex(target) + 1];\n if (nextMenu) {\n var firstNode = nextMenu.$el.querySelector('.el-cascader-node[tabindex=\"-1\"]');\n focusNode(firstNode);\n }\n break;\n case KeyCode.enter:\n checkNode(target);\n break;\n case KeyCode.esc:\n case KeyCode.tab:\n this.$emit('close');\n break;\n default:\n return;\n }\n },\n handleExpand: function handleExpand(node, silent) {\n var activePath = this.activePath;\n var level = node.level;\n\n var path = activePath.slice(0, level - 1);\n var menus = this.menus.slice(0, level);\n\n if (!node.isLeaf) {\n path.push(node);\n menus.push(node.children);\n }\n\n this.activePath = path;\n this.menus = menus;\n\n if (!silent) {\n var pathValues = path.map(function (node) {\n return node.getValue();\n });\n var activePathValues = activePath.map(function (node) {\n return node.getValue();\n });\n if (!Object(util_[\"valueEquals\"])(pathValues, activePathValues)) {\n this.$emit('active-item-change', pathValues); // Deprecated\n this.$emit('expand-change', pathValues);\n }\n }\n },\n handleCheckChange: function handleCheckChange(value) {\n this.checkedValue = value;\n },\n lazyLoad: function lazyLoad(node, onFullfiled) {\n var _this5 = this;\n\n var config = this.config;\n\n if (!node) {\n node = node || { root: true, level: 0 };\n this.store = new src_store([], config);\n this.menus = [this.store.getNodes()];\n }\n node.loading = true;\n var resolve = function resolve(dataList) {\n var parent = node.root ? null : node;\n dataList && dataList.length && _this5.store.appendNodes(dataList, parent);\n node.loading = false;\n node.loaded = true;\n\n // dispose default value on lazy load mode\n if (Array.isArray(_this5.checkedValue)) {\n var nodeValue = _this5.checkedValue[_this5.loadCount++];\n var valueKey = _this5.config.value;\n var leafKey = _this5.config.leaf;\n\n if (Array.isArray(dataList) && dataList.filter(function (item) {\n return item[valueKey] === nodeValue;\n }).length > 0) {\n var checkedNode = _this5.store.getNodeByValue(nodeValue);\n\n if (!checkedNode.data[leafKey]) {\n _this5.lazyLoad(checkedNode, function () {\n _this5.handleExpand(checkedNode);\n });\n }\n\n if (_this5.loadCount === _this5.checkedValue.length) {\n _this5.$parent.computePresentText();\n }\n }\n }\n\n onFullfiled && onFullfiled(dataList);\n };\n config.lazyLoad(node, resolve);\n },\n\n\n /**\n * public methods\n */\n calculateMultiCheckedValue: function calculateMultiCheckedValue() {\n this.checkedValue = this.getCheckedNodes(this.leafOnly).map(function (node) {\n return node.getValueByOption();\n });\n },\n scrollIntoView: function scrollIntoView() {\n if (this.$isServer) return;\n\n var menus = this.$refs.menu || [];\n menus.forEach(function (menu) {\n var menuElement = menu.$el;\n if (menuElement) {\n var container = menuElement.querySelector('.el-scrollbar__wrap');\n var activeNode = menuElement.querySelector('.el-cascader-node.is-active') || menuElement.querySelector('.el-cascader-node.in-active-path');\n scroll_into_view_default()(container, activeNode);\n }\n });\n },\n getNodeByValue: function getNodeByValue(val) {\n return this.store.getNodeByValue(val);\n },\n getFlattedNodes: function getFlattedNodes(leafOnly) {\n var cached = !this.config.lazy;\n return this.store.getFlattedNodes(leafOnly, cached);\n },\n getCheckedNodes: function getCheckedNodes(leafOnly) {\n var checkedValue = this.checkedValue,\n multiple = this.multiple;\n\n if (multiple) {\n var nodes = this.getFlattedNodes(leafOnly);\n return nodes.filter(function (node) {\n return node.checked;\n });\n } else {\n return this.isEmptyValue(checkedValue) ? [] : [this.getNodeByValue(checkedValue)];\n }\n },\n clearCheckedNodes: function clearCheckedNodes() {\n var config = this.config,\n leafOnly = this.leafOnly;\n var multiple = config.multiple,\n emitPath = config.emitPath;\n\n if (multiple) {\n this.getCheckedNodes(leafOnly).filter(function (node) {\n return !node.isDisabled;\n }).forEach(function (node) {\n return node.doCheck(false);\n });\n this.calculateMultiCheckedValue();\n } else {\n this.checkedValue = emitPath ? [] : null;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_panelvue_type_script_lang_js_ = (cascader_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar cascader_panel_component = Object(componentNormalizer[\"a\" /* default */])(\n src_cascader_panelvue_type_script_lang_js_,\n cascader_panelvue_type_template_id_34932346_render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_panel_api; }\ncascader_panel_component.options.__file = \"packages/cascader-panel/src/cascader-panel.vue\"\n/* harmony default export */ var cascader_panel = (cascader_panel_component.exports);\n// CONCATENATED MODULE: ./packages/cascader-panel/index.js\n\n\n/* istanbul ignore next */\ncascader_panel.install = function (Vue) {\n Vue.component(cascader_panel.name, cascader_panel);\n};\n\n/* harmony default export */ var packages_cascader_panel = __webpack_exports__[\"default\"] = (cascader_panel);\n\n/***/ }),\n\n/***/ 9:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/merge */ \"./node_modules/element-ui/lib/utils/merge.js\");\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2FzY2FkZXItcGFuZWwuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2FzY2FkZXItcGFuZWwuanM/NDcyNiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDYwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2NoZWNrYm94XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMjE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJiYWJlbC1oZWxwZXItdnVlLWpzeC1tZXJnZS1wcm9wc1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsLWludG8tdmlld1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9hcmlhLXV0aWxzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTE6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3JhZGlvXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDYwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0OTMyMzQ2JlxudmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ5MzIzNDZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IFtcImVsLWNhc2NhZGVyLXBhbmVsXCIsIF92bS5ib3JkZXIgJiYgXCJpcy1ib3JkZXJlZFwiXSxcbiAgICAgIG9uOiB7IGtleWRvd246IF92bS5oYW5kbGVLZXlEb3duIH1cbiAgICB9LFxuICAgIF92bS5fbChfdm0ubWVudXMsIGZ1bmN0aW9uKG1lbnUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gX2MoXCJjYXNjYWRlci1tZW51XCIsIHtcbiAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgcmVmOiBcIm1lbnVcIixcbiAgICAgICAgcmVmSW5Gb3I6IHRydWUsXG4gICAgICAgIGF0dHJzOiB7IGluZGV4OiBpbmRleCwgbm9kZXM6IG1lbnUgfVxuICAgICAgfSlcbiAgICB9KSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxuY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzQ5MzIzNDYmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJiYWJlbC1oZWxwZXItdnVlLWpzeC1tZXJnZS1wcm9wc1wiXG52YXIgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XG52YXIgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3Njcm9sbGJhclwiXG52YXIgc2Nyb2xsYmFyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIHNjcm9sbGJhcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzY3JvbGxiYXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2NoZWNrYm94XCJcbnZhciBjaGVja2JveF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcbnZhciBjaGVja2JveF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjaGVja2JveF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvcmFkaW9cIlxudmFyIHJhZGlvXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xudmFyIHJhZGlvX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHJhZGlvXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCJcbnZhciB1dGlsXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1ub2RlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cblxuXG5cbnZhciBzdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oZSkge1xuICByZXR1cm4gZS5zdG9wUHJvcGFnYXRpb24oKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBpbmplY3Q6IFsncGFuZWwnXSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxDaGVja2JveDogY2hlY2tib3hfZGVmYXVsdC5hLFxuICAgIEVsUmFkaW86IHJhZGlvX2RlZmF1bHQuYVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgbm9kZToge1xuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIG5vZGVJZDogU3RyaW5nXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb25maWc6IGZ1bmN0aW9uIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsLmNvbmZpZztcbiAgICB9LFxuICAgIGlzTGVhZjogZnVuY3Rpb24gaXNMZWFmKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS5pc0xlYWY7XG4gICAgfSxcbiAgICBpc0Rpc2FibGVkOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS5pc0Rpc2FibGVkO1xuICAgIH0sXG4gICAgY2hlY2tlZFZhbHVlOiBmdW5jdGlvbiBjaGVja2VkVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbC5jaGVja2VkVmFsdWU7XG4gICAgfSxcbiAgICBpc0NoZWNrZWQ6IGZ1bmN0aW9uIGlzQ2hlY2tlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUuaXNTYW1lTm9kZSh0aGlzLmNoZWNrZWRWYWx1ZSk7XG4gICAgfSxcbiAgICBpbkFjdGl2ZVBhdGg6IGZ1bmN0aW9uIGluQWN0aXZlUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzSW5QYXRoKHRoaXMucGFuZWwuYWN0aXZlUGF0aCk7XG4gICAgfSxcbiAgICBpbkNoZWNrZWRQYXRoOiBmdW5jdGlvbiBpbkNoZWNrZWRQYXRoKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5jaGVja1N0cmljdGx5KSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBhbmVsLmNoZWNrZWROb2RlUGF0aHMuc29tZShmdW5jdGlvbiAoY2hlY2tlZFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLmlzSW5QYXRoKGNoZWNrZWRQYXRoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZS5nZXRWYWx1ZUJ5T3B0aW9uKCk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVFeHBhbmQ6IGZ1bmN0aW9uIGhhbmRsZUV4cGFuZCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsLFxuICAgICAgICAgIG5vZGUgPSB0aGlzLm5vZGUsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICAgIHZhciBtdWx0aXBsZSA9IGNvbmZpZy5tdWx0aXBsZSxcbiAgICAgICAgICBjaGVja1N0cmljdGx5ID0gY29uZmlnLmNoZWNrU3RyaWN0bHk7XG5cblxuICAgICAgaWYgKCFjaGVja1N0cmljdGx5ICYmIGlzRGlzYWJsZWQgfHwgbm9kZS5sb2FkaW5nKSByZXR1cm47XG5cbiAgICAgIGlmIChjb25maWcubGF6eSAmJiAhbm9kZS5sb2FkZWQpIHtcbiAgICAgICAgcGFuZWwubGF6eUxvYWQobm9kZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIGRvIG5vdCB1c2UgY2FjaGVkIGxlYWYgdmFsdWUgaGVyZSwgaW52b2tlIHRoaXMuaXNMZWFmIHRvIGdldCBuZXcgdmFsdWUuXG4gICAgICAgICAgdmFyIGlzTGVhZiA9IF90aGlzMi5pc0xlYWY7XG5cblxuICAgICAgICAgIGlmICghaXNMZWFmKSBfdGhpczIuaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgICAgICAvLyBpZiBsZWFmIHN5bmMgY2hlY2tlZCBzdGF0ZSwgZWxzZSBjbGVhciBjaGVja2VkIHN0YXRlXG4gICAgICAgICAgICB2YXIgY2hlY2tlZCA9IGlzTGVhZiA/IG5vZGUuY2hlY2tlZCA6IGZhbHNlO1xuICAgICAgICAgICAgX3RoaXMyLmhhbmRsZU11bHRpQ2hlY2tDaGFuZ2UoY2hlY2tlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhbmVsLmhhbmRsZUV4cGFuZChub2RlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNoZWNrQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGVja0NoYW5nZSgpIHtcbiAgICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWwsXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlLFxuICAgICAgICAgIG5vZGUgPSB0aGlzLm5vZGU7XG5cbiAgICAgIHBhbmVsLmhhbmRsZUNoZWNrQ2hhbmdlKHZhbHVlKTtcbiAgICAgIHBhbmVsLmhhbmRsZUV4cGFuZChub2RlKTtcbiAgICB9LFxuICAgIGhhbmRsZU11bHRpQ2hlY2tDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZU11bHRpQ2hlY2tDaGFuZ2UoY2hlY2tlZCkge1xuICAgICAgdGhpcy5ub2RlLmRvQ2hlY2soY2hlY2tlZCk7XG4gICAgICB0aGlzLnBhbmVsLmNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlKCk7XG4gICAgfSxcbiAgICBpc0luUGF0aDogZnVuY3Rpb24gaXNJblBhdGgocGF0aE5vZGVzKSB7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZTtcblxuICAgICAgdmFyIHNlbGVjdGVkUGF0aE5vZGUgPSBwYXRoTm9kZXNbbm9kZS5sZXZlbCAtIDFdIHx8IHt9O1xuICAgICAgcmV0dXJuIHNlbGVjdGVkUGF0aE5vZGUudWlkID09PSBub2RlLnVpZDtcbiAgICB9LFxuICAgIHJlbmRlclByZWZpeDogZnVuY3Rpb24gcmVuZGVyUHJlZml4KGgpIHtcbiAgICAgIHZhciBpc0xlYWYgPSB0aGlzLmlzTGVhZixcbiAgICAgICAgICBpc0NoZWNrZWQgPSB0aGlzLmlzQ2hlY2tlZCxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICAgIHZhciBjaGVja1N0cmljdGx5ID0gY29uZmlnLmNoZWNrU3RyaWN0bHksXG4gICAgICAgICAgbXVsdGlwbGUgPSBjb25maWcubXVsdGlwbGU7XG5cblxuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNoZWNrYm94KGgpO1xuICAgICAgfSBlbHNlIGlmIChjaGVja1N0cmljdGx5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlclJhZGlvKGgpO1xuICAgICAgfSBlbHNlIGlmIChpc0xlYWYgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNoZWNrSWNvbihoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW5kZXJQb3N0Zml4OiBmdW5jdGlvbiByZW5kZXJQb3N0Zml4KGgpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlLFxuICAgICAgICAgIGlzTGVhZiA9IHRoaXMuaXNMZWFmO1xuXG5cbiAgICAgIGlmIChub2RlLmxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTG9hZGluZ0ljb24oaCk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0xlYWYpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXhwYW5kSWNvbihoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW5kZXJDaGVja2JveDogZnVuY3Rpb24gcmVuZGVyQ2hlY2tib3goaCkge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGUsXG4gICAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZDtcblxuICAgICAgdmFyIGV2ZW50cyA9IHtcbiAgICAgICAgb246IHsgY2hhbmdlOiB0aGlzLmhhbmRsZU11bHRpQ2hlY2tDaGFuZ2UgfSxcbiAgICAgICAgbmF0aXZlT246IHt9XG4gICAgICB9O1xuXG4gICAgICBpZiAoY29uZmlnLmNoZWNrU3RyaWN0bHkpIHtcbiAgICAgICAgLy8gd2hlbiBldmVyeSBub2RlIGlzIHNlbGVjdGFibGUsIGNsaWNrIGV2ZW50IHNob3VsZCBub3QgdHJpZ2dlciBleHBhbmQgZXZlbnQuXG4gICAgICAgIGV2ZW50cy5uYXRpdmVPbi5jbGljayA9IHN0b3BQcm9wYWdhdGlvbjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGgoJ2VsLWNoZWNrYm94JywgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfZGVmYXVsdCgpKFt7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdmFsdWU6IG5vZGUuY2hlY2tlZCxcbiAgICAgICAgICBpbmRldGVybWluYXRlOiBub2RlLmluZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGlzRGlzYWJsZWRcbiAgICAgICAgfVxuICAgICAgfSwgZXZlbnRzXSkpO1xuICAgIH0sXG4gICAgcmVuZGVyUmFkaW86IGZ1bmN0aW9uIHJlbmRlclJhZGlvKGgpIHtcbiAgICAgIHZhciBjaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWUsXG4gICAgICAgICAgaXNEaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZDtcblxuICAgICAgLy8gdG8ga2VlcCBzYW1lIHJlZmVyZW5jZSBpZiB2YWx1ZSBjYXVzZSByYWRpbydzIGNoZWNrZWQgc3RhdGUgaXMgY2FsY3VsYXRlZCBieSByZWZlcmVuY2UgY29tcGFyaXNpb247XG5cbiAgICAgIGlmIChPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKSh2YWx1ZSwgY2hlY2tlZFZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IGNoZWNrZWRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICdlbC1yYWRpbycsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdmFsdWU6IGNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgIGxhYmVsOiB2YWx1ZSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2NoYW5nZSc6IHRoaXMuaGFuZGxlQ2hlY2tDaGFuZ2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAnY2xpY2snOiBzdG9wUHJvcGFnYXRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtoKCdzcGFuJyldXG4gICAgICApO1xuICAgIH0sXG4gICAgcmVuZGVyQ2hlY2tJY29uOiBmdW5jdGlvbiByZW5kZXJDaGVja0ljb24oaCkge1xuICAgICAgcmV0dXJuIGgoJ2knLCB7ICdjbGFzcyc6ICdlbC1pY29uLWNoZWNrIGVsLWNhc2NhZGVyLW5vZGVfX3ByZWZpeCcgfSk7XG4gICAgfSxcbiAgICByZW5kZXJMb2FkaW5nSWNvbjogZnVuY3Rpb24gcmVuZGVyTG9hZGluZ0ljb24oaCkge1xuICAgICAgcmV0dXJuIGgoJ2knLCB7ICdjbGFzcyc6ICdlbC1pY29uLWxvYWRpbmcgZWwtY2FzY2FkZXItbm9kZV9fcG9zdGZpeCcgfSk7XG4gICAgfSxcbiAgICByZW5kZXJFeHBhbmRJY29uOiBmdW5jdGlvbiByZW5kZXJFeHBhbmRJY29uKGgpIHtcbiAgICAgIHJldHVybiBoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1hcnJvdy1yaWdodCBlbC1jYXNjYWRlci1ub2RlX19wb3N0Zml4JyB9KTtcbiAgICB9LFxuICAgIHJlbmRlckNvbnRlbnQ6IGZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoaCkge1xuICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbCxcbiAgICAgICAgICBub2RlID0gdGhpcy5ub2RlO1xuXG4gICAgICB2YXIgcmVuZGVyID0gcGFuZWwucmVuZGVyTGFiZWxGbjtcbiAgICAgIHZhciB2bm9kZSA9IHJlbmRlciA/IHJlbmRlcih7IG5vZGU6IG5vZGUsIGRhdGE6IG5vZGUuZGF0YSB9KSA6IG51bGw7XG5cbiAgICAgIHJldHVybiBoKFxuICAgICAgICAnc3BhbicsXG4gICAgICAgIHsgJ2NsYXNzJzogJ2VsLWNhc2NhZGVyLW5vZGVfX2xhYmVsJyB9LFxuICAgICAgICBbdm5vZGUgfHwgbm9kZS5sYWJlbF1cbiAgICAgICk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBpbkFjdGl2ZVBhdGggPSB0aGlzLmluQWN0aXZlUGF0aCxcbiAgICAgICAgaW5DaGVja2VkUGF0aCA9IHRoaXMuaW5DaGVja2VkUGF0aCxcbiAgICAgICAgaXNDaGVja2VkID0gdGhpcy5pc0NoZWNrZWQsXG4gICAgICAgIGlzTGVhZiA9IHRoaXMuaXNMZWFmLFxuICAgICAgICBpc0Rpc2FibGVkID0gdGhpcy5pc0Rpc2FibGVkLFxuICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgbm9kZUlkID0gdGhpcy5ub2RlSWQ7XG4gICAgdmFyIGV4cGFuZFRyaWdnZXIgPSBjb25maWcuZXhwYW5kVHJpZ2dlcixcbiAgICAgICAgY2hlY2tTdHJpY3RseSA9IGNvbmZpZy5jaGVja1N0cmljdGx5LFxuICAgICAgICBtdWx0aXBsZSA9IGNvbmZpZy5tdWx0aXBsZTtcblxuICAgIHZhciBkaXNhYmxlZCA9ICFjaGVja1N0cmljdGx5ICYmIGlzRGlzYWJsZWQ7XG4gICAgdmFyIGV2ZW50cyA9IHsgb246IHt9IH07XG5cbiAgICBpZiAoZXhwYW5kVHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgZXZlbnRzLm9uLmNsaWNrID0gdGhpcy5oYW5kbGVFeHBhbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50cy5vbi5tb3VzZWVudGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgX3RoaXMzLmhhbmRsZUV4cGFuZCgpO1xuICAgICAgICBfdGhpczMuJGVtaXQoJ2V4cGFuZCcsIGUpO1xuICAgICAgfTtcbiAgICAgIGV2ZW50cy5vbi5mb2N1cyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIF90aGlzMy5oYW5kbGVFeHBhbmQoKTtcbiAgICAgICAgX3RoaXMzLiRlbWl0KCdleHBhbmQnLCBlKTtcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChpc0xlYWYgJiYgIWlzRGlzYWJsZWQgJiYgIWNoZWNrU3RyaWN0bHkgJiYgIW11bHRpcGxlKSB7XG4gICAgICBldmVudHMub24uY2xpY2sgPSB0aGlzLmhhbmRsZUNoZWNrQ2hhbmdlO1xuICAgIH1cblxuICAgIHJldHVybiBoKFxuICAgICAgJ2xpJyxcbiAgICAgIGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzX2RlZmF1bHQoKShbe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHJvbGU6ICdtZW51aXRlbScsXG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICAnYXJpYS1leHBhbmRlZCc6IGluQWN0aXZlUGF0aCxcbiAgICAgICAgICB0YWJpbmRleDogZGlzYWJsZWQgPyBudWxsIDogLTFcbiAgICAgICAgfSxcbiAgICAgICAgJ2NsYXNzJzoge1xuICAgICAgICAgICdlbC1jYXNjYWRlci1ub2RlJzogdHJ1ZSxcbiAgICAgICAgICAnaXMtc2VsZWN0YWJsZSc6IGNoZWNrU3RyaWN0bHksXG4gICAgICAgICAgJ2luLWFjdGl2ZS1wYXRoJzogaW5BY3RpdmVQYXRoLFxuICAgICAgICAgICdpbi1jaGVja2VkLXBhdGgnOiBpbkNoZWNrZWRQYXRoLFxuICAgICAgICAgICdpcy1hY3RpdmUnOiBpc0NoZWNrZWQsXG4gICAgICAgICAgJ2lzLWRpc2FibGVkJzogZGlzYWJsZWRcbiAgICAgICAgfVxuICAgICAgfSwgZXZlbnRzXSksXG4gICAgICBbdGhpcy5yZW5kZXJQcmVmaXgoaCksIHRoaXMucmVuZGVyQ29udGVudChoKSwgdGhpcy5yZW5kZXJQb3N0Zml4KGgpXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbm9kZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Nhc2NhZGVyX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2FzY2FkZXJfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbm9kZS52dWVcbnZhciBjYXNjYWRlcl9ub2RlX3JlbmRlciwgY2FzY2FkZXJfbm9kZV9zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfY2FzY2FkZXJfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY2FzY2FkZXJfbm9kZV9yZW5kZXIsXG4gIGNhc2NhZGVyX25vZGVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW5vZGUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX25vZGUgPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL21peGlucy9sb2NhbGVcIlxudmFyIGxvY2FsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xudmFyIGxvY2FsZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihsb2NhbGVfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW1lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2FzY2FkZXJNZW51JyxcblxuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IFsncGFuZWwnXSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxTY3JvbGxiYXI6IHNjcm9sbGJhcl9kZWZhdWx0LmEsXG4gICAgQ2FzY2FkZXJOb2RlOiBjYXNjYWRlcl9ub2RlXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBub2Rlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaW5kZXg6IE51bWJlclxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZU5vZGU6IG51bGwsXG4gICAgICBob3ZlclRpbWVyOiBudWxsLFxuICAgICAgaWQ6IE9iamVjdCh1dGlsX1tcImdlbmVyYXRlSWRcIl0pKClcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLm5vZGVzLmxlbmd0aDtcbiAgICB9LFxuICAgIG1lbnVJZDogZnVuY3Rpb24gbWVudUlkKCkge1xuICAgICAgcmV0dXJuICdjYXNjYWRlci1tZW51LScgKyB0aGlzLmlkICsgJy0nICsgdGhpcy5pbmRleDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlRXhwYW5kKGUpIHtcbiAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IGUudGFyZ2V0O1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VNb3ZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZSkge1xuICAgICAgdmFyIGFjdGl2ZU5vZGUgPSB0aGlzLmFjdGl2ZU5vZGUsXG4gICAgICAgICAgaG92ZXJUaW1lciA9IHRoaXMuaG92ZXJUaW1lcjtcbiAgICAgIHZhciBob3ZlclpvbmUgPSB0aGlzLiRyZWZzLmhvdmVyWm9uZTtcblxuXG4gICAgICBpZiAoIWFjdGl2ZU5vZGUgfHwgIWhvdmVyWm9uZSkgcmV0dXJuO1xuXG4gICAgICBpZiAoYWN0aXZlTm9kZS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGhvdmVyVGltZXIpO1xuXG4gICAgICAgIHZhciBfJGVsJGdldEJvdW5kaW5nQ2xpZW4gPSB0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgIGxlZnQgPSBfJGVsJGdldEJvdW5kaW5nQ2xpZW4ubGVmdDtcblxuICAgICAgICB2YXIgc3RhcnRYID0gZS5jbGllbnRYIC0gbGVmdDtcbiAgICAgICAgdmFyIF8kZWwgPSB0aGlzLiRlbCxcbiAgICAgICAgICAgIG9mZnNldFdpZHRoID0gXyRlbC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIG9mZnNldEhlaWdodCA9IF8kZWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIHZhciB0b3AgPSBhY3RpdmVOb2RlLm9mZnNldFRvcDtcbiAgICAgICAgdmFyIGJvdHRvbSA9IHRvcCArIGFjdGl2ZU5vZGUub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIGhvdmVyWm9uZS5pbm5lckhUTUwgPSAnXFxuICAgICAgICAgIDxwYXRoIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IGF1dG87XCIgZmlsbD1cInRyYW5zcGFyZW50XCIgZD1cIk0nICsgc3RhcnRYICsgJyAnICsgdG9wICsgJyBMJyArIG9mZnNldFdpZHRoICsgJyAwIFYnICsgdG9wICsgJyBaXCIgLz5cXG4gICAgICAgICAgPHBhdGggc3R5bGU9XCJwb2ludGVyLWV2ZW50czogYXV0bztcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBkPVwiTScgKyBzdGFydFggKyAnICcgKyBib3R0b20gKyAnIEwnICsgb2Zmc2V0V2lkdGggKyAnICcgKyBvZmZzZXRIZWlnaHQgKyAnIFYnICsgYm90dG9tICsgJyBaXCIgLz5cXG4gICAgICAgICc7XG4gICAgICB9IGVsc2UgaWYgKCFob3ZlclRpbWVyKSB7XG4gICAgICAgIHRoaXMuaG92ZXJUaW1lciA9IHNldFRpbWVvdXQodGhpcy5jbGVhckhvdmVyWm9uZSwgdGhpcy5wYW5lbC5jb25maWcuaG92ZXJUaHJlc2hvbGQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJIb3ZlclpvbmU6IGZ1bmN0aW9uIGNsZWFySG92ZXJab25lKCkge1xuICAgICAgdmFyIGhvdmVyWm9uZSA9IHRoaXMuJHJlZnMuaG92ZXJab25lO1xuXG4gICAgICBpZiAoIWhvdmVyWm9uZSkgcmV0dXJuO1xuICAgICAgaG92ZXJab25lLmlubmVySFRNTCA9ICcnO1xuICAgIH0sXG4gICAgcmVuZGVyRW1wdHlUZXh0OiBmdW5jdGlvbiByZW5kZXJFbXB0eVRleHQoaCkge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51X19lbXB0eS10ZXh0JyB9LFxuICAgICAgICBbdGhpcy50KCdlbC5jYXNjYWRlci5ub0RhdGEnKV1cbiAgICAgICk7XG4gICAgfSxcbiAgICByZW5kZXJOb2RlTGlzdDogZnVuY3Rpb24gcmVuZGVyTm9kZUxpc3QoaCkge1xuICAgICAgdmFyIG1lbnVJZCA9IHRoaXMubWVudUlkO1xuICAgICAgdmFyIGlzSG92ZXJNZW51ID0gdGhpcy5wYW5lbC5pc0hvdmVyTWVudTtcblxuICAgICAgdmFyIGV2ZW50cyA9IHsgb246IHt9IH07XG5cbiAgICAgIGlmIChpc0hvdmVyTWVudSkge1xuICAgICAgICBldmVudHMub24uZXhwYW5kID0gdGhpcy5oYW5kbGVFeHBhbmQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgaGFzQ2hpbGRyZW4gPSBub2RlLmhhc0NoaWxkcmVuO1xuXG4gICAgICAgIHJldHVybiBoKCdjYXNjYWRlci1ub2RlJywgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfZGVmYXVsdCgpKFt7XG4gICAgICAgICAga2V5OiBub2RlLnVpZCxcbiAgICAgICAgICBhdHRyczogeyBub2RlOiBub2RlLFxuICAgICAgICAgICAgJ25vZGUtaWQnOiBtZW51SWQgKyAnLScgKyBpbmRleCxcbiAgICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgICAnYXJpYS1vd25zJzogaGFzQ2hpbGRyZW4gPyBtZW51SWQgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9LCBldmVudHNdKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFtdLmNvbmNhdChub2RlcywgW2lzSG92ZXJNZW51ID8gaCgnc3ZnJywgeyByZWY6ICdob3ZlclpvbmUnLCAnY2xhc3MnOiAnZWwtY2FzY2FkZXItbWVudV9faG92ZXItem9uZScgfSkgOiBudWxsXSk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgaXNFbXB0eSA9IHRoaXMuaXNFbXB0eSxcbiAgICAgICAgbWVudUlkID0gdGhpcy5tZW51SWQ7XG5cbiAgICB2YXIgZXZlbnRzID0geyBuYXRpdmVPbjoge30gfTtcblxuICAgIC8vIG9wdGltaXplIGhvdmVyIHRvIGV4cGFuZCBleHBlcmllbmNlICgjODAxMClcbiAgICBpZiAodGhpcy5wYW5lbC5pc0hvdmVyTWVudSkge1xuICAgICAgZXZlbnRzLm5hdGl2ZU9uLm1vdXNlbW92ZSA9IHRoaXMuaGFuZGxlTW91c2VNb3ZlO1xuICAgICAgLy8gZXZlbnRzLm5hdGl2ZU9uLm1vdXNlbGVhdmUgPSB0aGlzLmNsZWFySG92ZXJab25lO1xuICAgIH1cblxuICAgIHJldHVybiBoKFxuICAgICAgJ2VsLXNjcm9sbGJhcicsXG4gICAgICBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3tcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0YWc6ICd1bCcsXG4gICAgICAgICAgcm9sZTogJ21lbnUnLFxuICAgICAgICAgIGlkOiBtZW51SWQsXG5cbiAgICAgICAgICAnd3JhcC1jbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51X193cmFwJyxcbiAgICAgICAgICAndmlldy1jbGFzcyc6IHtcbiAgICAgICAgICAgICdlbC1jYXNjYWRlci1tZW51X19saXN0JzogdHJ1ZSxcbiAgICAgICAgICAgICdpcy1lbXB0eSc6IGlzRW1wdHlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdjbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51JyB9LCBldmVudHNdKSxcbiAgICAgIFtpc0VtcHR5ID8gdGhpcy5yZW5kZXJFbXB0eVRleHQoaCkgOiB0aGlzLnJlbmRlck5vZGVMaXN0KGgpXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Nhc2NhZGVyX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2FzY2FkZXJfbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWVcbnZhciBjYXNjYWRlcl9tZW51X3JlbmRlciwgY2FzY2FkZXJfbWVudV9zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY2FzY2FkZXJfbWVudV9jb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19jYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjYXNjYWRlcl9tZW51X3JlbmRlcixcbiAgY2FzY2FkZXJfbWVudV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhc2NhZGVyX21lbnVfYXBpOyB9XG5jYXNjYWRlcl9tZW51X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW1lbnUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX21lbnUgPSAoY2FzY2FkZXJfbWVudV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkXCJcbnZhciBzaGFyZWRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL25vZGUuanNcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cblxuXG5cbnZhciB1aWQgPSAwO1xuXG52YXIgbm9kZV9Ob2RlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBOb2RlKGRhdGEsIGNvbmZpZywgcGFyZW50Tm9kZSkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOb2RlKTtcblxuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnROb2RlIHx8IG51bGw7XG4gICAgdGhpcy5sZXZlbCA9ICF0aGlzLnBhcmVudCA/IDEgOiB0aGlzLnBhcmVudC5sZXZlbCArIDE7XG4gICAgdGhpcy51aWQgPSB1aWQrKztcblxuICAgIHRoaXMuaW5pdFN0YXRlKCk7XG4gICAgdGhpcy5pbml0Q2hpbGRyZW4oKTtcbiAgfVxuXG4gIE5vZGUucHJvdG90eXBlLmluaXRTdGF0ZSA9IGZ1bmN0aW9uIGluaXRTdGF0ZSgpIHtcbiAgICB2YXIgX2NvbmZpZyA9IHRoaXMuY29uZmlnLFxuICAgICAgICB2YWx1ZUtleSA9IF9jb25maWcudmFsdWUsXG4gICAgICAgIGxhYmVsS2V5ID0gX2NvbmZpZy5sYWJlbDtcblxuXG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZGF0YVt2YWx1ZUtleV07XG4gICAgdGhpcy5sYWJlbCA9IHRoaXMuZGF0YVtsYWJlbEtleV07XG4gICAgdGhpcy5wYXRoTm9kZXMgPSB0aGlzLmNhbGN1bGF0ZVBhdGhOb2RlcygpO1xuICAgIHRoaXMucGF0aCA9IHRoaXMucGF0aE5vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5wYXRoTGFiZWxzID0gdGhpcy5wYXRoTm9kZXMubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5sYWJlbDtcbiAgICB9KTtcblxuICAgIC8vIGxhenkgbG9hZFxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuaW5pdENoaWxkcmVuID0gZnVuY3Rpb24gaW5pdENoaWxkcmVuKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICB2YXIgY2hpbGRyZW5LZXkgPSBjb25maWcuY2hpbGRyZW47XG4gICAgdmFyIGNoaWxkcmVuRGF0YSA9IHRoaXMuZGF0YVtjaGlsZHJlbktleV07XG4gICAgdGhpcy5oYXNDaGlsZHJlbiA9IEFycmF5LmlzQXJyYXkoY2hpbGRyZW5EYXRhKTtcbiAgICB0aGlzLmNoaWxkcmVuID0gKGNoaWxkcmVuRGF0YSB8fCBbXSkubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgcmV0dXJuIG5ldyBOb2RlKGNoaWxkLCBjb25maWcsIF90aGlzKTtcbiAgICB9KTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5jYWxjdWxhdGVQYXRoTm9kZXMgPSBmdW5jdGlvbiBjYWxjdWxhdGVQYXRoTm9kZXMoKSB7XG4gICAgdmFyIG5vZGVzID0gW3RoaXNdO1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudDtcblxuICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgIG5vZGVzLnVuc2hpZnQocGFyZW50KTtcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGVzO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmdldFBhdGggPSBmdW5jdGlvbiBnZXRQYXRoKCkge1xuICAgIHJldHVybiB0aGlzLnBhdGg7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5nZXRWYWx1ZUJ5T3B0aW9uID0gZnVuY3Rpb24gZ2V0VmFsdWVCeU9wdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZW1pdFBhdGggPyB0aGlzLmdldFBhdGgoKSA6IHRoaXMuZ2V0VmFsdWUoKTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24gZ2V0VGV4dChhbGxMZXZlbHMsIHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhbGxMZXZlbHMgPyB0aGlzLnBhdGhMYWJlbHMuam9pbihzZXBhcmF0b3IpIDogdGhpcy5sYWJlbDtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5pc1NhbWVOb2RlID0gZnVuY3Rpb24gaXNTYW1lTm9kZShjaGVja2VkVmFsdWUpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlQnlPcHRpb24oKTtcbiAgICByZXR1cm4gdGhpcy5jb25maWcubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheShjaGVja2VkVmFsdWUpID8gY2hlY2tlZFZhbHVlLnNvbWUoZnVuY3Rpb24gKHZhbCkge1xuICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKHZhbCwgdmFsdWUpO1xuICAgIH0pIDogT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkoY2hlY2tlZFZhbHVlLCB2YWx1ZSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuYnJvYWRjYXN0ID0gZnVuY3Rpb24gYnJvYWRjYXN0KGV2ZW50KSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgaGFuZGxlck5hbWUgPSAnb25QYXJlbnQnICsgT2JqZWN0KHV0aWxfW1wiY2FwaXRhbGl6ZVwiXSkoZXZlbnQpO1xuXG4gICAgdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkKSB7XG4gICAgICAgIC8vIGJvdHRvbSB1cFxuICAgICAgICBjaGlsZC5icm9hZGNhc3QuYXBwbHkoY2hpbGQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgICAgY2hpbGRbaGFuZGxlck5hbWVdICYmIGNoaWxkW2hhbmRsZXJOYW1lXS5hcHBseShjaGlsZCwgYXJncyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cbiAgICB2YXIgaGFuZGxlck5hbWUgPSAnb25DaGlsZCcgKyBPYmplY3QodXRpbF9bXCJjYXBpdGFsaXplXCJdKShldmVudCk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICBwYXJlbnRbaGFuZGxlck5hbWVdICYmIHBhcmVudFtoYW5kbGVyTmFtZV0uYXBwbHkocGFyZW50LCBhcmdzKTtcbiAgICAgIHBhcmVudC5lbWl0LmFwcGx5KHBhcmVudCwgW2V2ZW50XS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5vblBhcmVudENoZWNrID0gZnVuY3Rpb24gb25QYXJlbnRDaGVjayhjaGVja2VkKSB7XG4gICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0Q2hlY2tTdGF0ZShjaGVja2VkKTtcbiAgICB9XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUub25DaGlsZENoZWNrID0gZnVuY3Rpb24gb25DaGlsZENoZWNrKCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG5cbiAgICB2YXIgdmFsaWRDaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiAhY2hpbGQuaXNEaXNhYmxlZDtcbiAgICB9KTtcbiAgICB2YXIgY2hlY2tlZCA9IHZhbGlkQ2hpbGRyZW4ubGVuZ3RoID8gdmFsaWRDaGlsZHJlbi5ldmVyeShmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC5jaGVja2VkO1xuICAgIH0pIDogZmFsc2U7XG5cbiAgICB0aGlzLnNldENoZWNrU3RhdGUoY2hlY2tlZCk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuc2V0Q2hlY2tTdGF0ZSA9IGZ1bmN0aW9uIHNldENoZWNrU3RhdGUoY2hlY2tlZCkge1xuICAgIHZhciB0b3RhbE51bSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIHZhciBjaGVja2VkTnVtID0gdGhpcy5jaGlsZHJlbi5yZWR1Y2UoZnVuY3Rpb24gKGMsIHApIHtcbiAgICAgIHZhciBudW0gPSBwLmNoZWNrZWQgPyAxIDogcC5pbmRldGVybWluYXRlID8gMC41IDogMDtcbiAgICAgIHJldHVybiBjICsgbnVtO1xuICAgIH0sIDApO1xuXG4gICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSBjaGVja2VkTnVtICE9PSB0b3RhbE51bSAmJiBjaGVja2VkTnVtID4gMDtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5zeW5jQ2hlY2tTdGF0ZSA9IGZ1bmN0aW9uIHN5bmNDaGVja1N0YXRlKGNoZWNrZWRWYWx1ZSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVCeU9wdGlvbigpO1xuICAgIHZhciBjaGVja2VkID0gdGhpcy5pc1NhbWVOb2RlKGNoZWNrZWRWYWx1ZSwgdmFsdWUpO1xuXG4gICAgdGhpcy5kb0NoZWNrKGNoZWNrZWQpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmRvQ2hlY2sgPSBmdW5jdGlvbiBkb0NoZWNrKGNoZWNrZWQpIHtcbiAgICBpZiAodGhpcy5jaGVja2VkICE9PSBjaGVja2VkKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcuY2hlY2tTdHJpY3RseSkge1xuICAgICAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYm90dG9tIHVwIHRvIHVuaWZ5IHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgaW5kZXRlcm1pbmF0ZSBzdGF0ZVxuICAgICAgICB0aGlzLmJyb2FkY2FzdCgnY2hlY2snLCBjaGVja2VkKTtcbiAgICAgICAgdGhpcy5zZXRDaGVja1N0YXRlKGNoZWNrZWQpO1xuICAgICAgICB0aGlzLmVtaXQoJ2NoZWNrJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIF9jcmVhdGVDbGFzcyhOb2RlLCBbe1xuICAgIGtleTogJ2lzRGlzYWJsZWQnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgcGFyZW50ID0gdGhpcy5wYXJlbnQsXG4gICAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICAgIHZhciBkaXNhYmxlZEtleSA9IGNvbmZpZy5kaXNhYmxlZDtcbiAgICAgIHZhciBjaGVja1N0cmljdGx5ID0gY29uZmlnLmNoZWNrU3RyaWN0bHk7XG5cbiAgICAgIHJldHVybiBkYXRhW2Rpc2FibGVkS2V5XSB8fCAhY2hlY2tTdHJpY3RseSAmJiBwYXJlbnQgJiYgcGFyZW50LmlzRGlzYWJsZWQ7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnaXNMZWFmJyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhLFxuICAgICAgICAgIGxvYWRlZCA9IHRoaXMubG9hZGVkLFxuICAgICAgICAgIGhhc0NoaWxkcmVuID0gdGhpcy5oYXNDaGlsZHJlbixcbiAgICAgICAgICBjaGlsZHJlbiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICB2YXIgX2NvbmZpZzIgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBsYXp5ID0gX2NvbmZpZzIubGF6eSxcbiAgICAgICAgICBsZWFmS2V5ID0gX2NvbmZpZzIubGVhZjtcblxuICAgICAgaWYgKGxhenkpIHtcbiAgICAgICAgdmFyIGlzTGVhZiA9IE9iamVjdChzaGFyZWRfW1wiaXNEZWZcIl0pKGRhdGFbbGVhZktleV0pID8gZGF0YVtsZWFmS2V5XSA6IGxvYWRlZCA/ICFjaGlsZHJlbi5sZW5ndGggOiBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNDaGlsZHJlbiA9ICFpc0xlYWY7XG4gICAgICAgIHJldHVybiBpc0xlYWY7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWhhc0NoaWxkcmVuO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBOb2RlO1xufSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfbm9kZSA9IChub2RlX05vZGUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvc3RvcmUuanNcbmZ1bmN0aW9uIHN0b3JlX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuXG5cblxudmFyIGZsYXROb2RlcyA9IGZ1bmN0aW9uIGZsYXROb2RlcyhkYXRhLCBsZWFmT25seSkge1xuICByZXR1cm4gZGF0YS5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgbm9kZSkge1xuICAgIGlmIChub2RlLmlzTGVhZikge1xuICAgICAgcmVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICFsZWFmT25seSAmJiByZXMucHVzaChub2RlKTtcbiAgICAgIHJlcyA9IHJlcy5jb25jYXQoZmxhdE5vZGVzKG5vZGUuY2hpbGRyZW4sIGxlYWZPbmx5KSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIFtdKTtcbn07XG5cbnZhciBzdG9yZV9TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RvcmUoZGF0YSwgY29uZmlnKSB7XG4gICAgc3RvcmVfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RvcmUpO1xuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0Tm9kZXMoZGF0YSk7XG4gIH1cblxuICBTdG9yZS5wcm90b3R5cGUuaW5pdE5vZGVzID0gZnVuY3Rpb24gaW5pdE5vZGVzKGRhdGEpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZGF0YSA9IE9iamVjdCh1dGlsX1tcImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheVwiXSkoZGF0YSk7XG4gICAgdGhpcy5ub2RlcyA9IGRhdGEubWFwKGZ1bmN0aW9uIChub2RlRGF0YSkge1xuICAgICAgcmV0dXJuIG5ldyBzcmNfbm9kZShub2RlRGF0YSwgX3RoaXMuY29uZmlnKTtcbiAgICB9KTtcbiAgICB0aGlzLmZsYXR0ZWROb2RlcyA9IHRoaXMuZ2V0RmxhdHRlZE5vZGVzKGZhbHNlLCBmYWxzZSk7XG4gICAgdGhpcy5sZWFmTm9kZXMgPSB0aGlzLmdldEZsYXR0ZWROb2Rlcyh0cnVlLCBmYWxzZSk7XG4gIH07XG5cbiAgU3RvcmUucHJvdG90eXBlLmFwcGVuZE5vZGUgPSBmdW5jdGlvbiBhcHBlbmROb2RlKG5vZGVEYXRhLCBwYXJlbnROb2RlKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgc3JjX25vZGUobm9kZURhdGEsIHRoaXMuY29uZmlnLCBwYXJlbnROb2RlKTtcbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnROb2RlID8gcGFyZW50Tm9kZS5jaGlsZHJlbiA6IHRoaXMubm9kZXM7XG5cbiAgICBjaGlsZHJlbi5wdXNoKG5vZGUpO1xuICB9O1xuXG4gIFN0b3JlLnByb3RvdHlwZS5hcHBlbmROb2RlcyA9IGZ1bmN0aW9uIGFwcGVuZE5vZGVzKG5vZGVEYXRhTGlzdCwgcGFyZW50Tm9kZSkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm9kZURhdGFMaXN0ID0gT2JqZWN0KHV0aWxfW1wiY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5XCJdKShub2RlRGF0YUxpc3QpO1xuICAgIG5vZGVEYXRhTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlRGF0YSkge1xuICAgICAgcmV0dXJuIF90aGlzMi5hcHBlbmROb2RlKG5vZGVEYXRhLCBwYXJlbnROb2RlKTtcbiAgICB9KTtcbiAgfTtcblxuICBTdG9yZS5wcm90b3R5cGUuZ2V0Tm9kZXMgPSBmdW5jdGlvbiBnZXROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlcztcbiAgfTtcblxuICBTdG9yZS5wcm90b3R5cGUuZ2V0RmxhdHRlZE5vZGVzID0gZnVuY3Rpb24gZ2V0RmxhdHRlZE5vZGVzKGxlYWZPbmx5KSB7XG4gICAgdmFyIGNhY2hlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuICAgIHZhciBjYWNoZWROb2RlcyA9IGxlYWZPbmx5ID8gdGhpcy5sZWFmTm9kZXMgOiB0aGlzLmZsYXR0ZWROb2RlcztcbiAgICByZXR1cm4gY2FjaGVkID8gY2FjaGVkTm9kZXMgOiBmbGF0Tm9kZXModGhpcy5ub2RlcywgbGVhZk9ubHkpO1xuICB9O1xuXG4gIFN0b3JlLnByb3RvdHlwZS5nZXROb2RlQnlWYWx1ZSA9IGZ1bmN0aW9uIGdldE5vZGVCeVZhbHVlKHZhbHVlKSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5nZXRGbGF0dGVkTm9kZXMoZmFsc2UsICF0aGlzLmNvbmZpZy5sYXp5KS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJ2YWx1ZUVxdWFsc1wiXSkobm9kZS5wYXRoLCB2YWx1ZSkgfHwgbm9kZS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzICYmIG5vZGVzLmxlbmd0aCA/IG5vZGVzWzBdIDogbnVsbDtcbiAgfTtcblxuICByZXR1cm4gU3RvcmU7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zdG9yZSA9IChzdG9yZV9TdG9yZSk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2VcIlxudmFyIG1lcmdlXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgbWVyZ2VfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obWVyZ2VfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2FyaWEtdXRpbHNcIlxudmFyIGFyaWFfdXRpbHNfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XG52YXIgYXJpYV91dGlsc19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihhcmlhX3V0aWxzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3XCJcbnZhciBzY3JvbGxfaW50b192aWV3XyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIHNjcm9sbF9pbnRvX3ZpZXdfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2Nyb2xsX2ludG9fdmlld18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG52YXIgS2V5Q29kZSA9IGFyaWFfdXRpbHNfZGVmYXVsdC5hLmtleXM7XG5cbnZhciBEZWZhdWx0UHJvcHMgPSB7XG4gIGV4cGFuZFRyaWdnZXI6ICdjbGljaycsIC8vIG9yIGhvdmVyXG4gIG11bHRpcGxlOiBmYWxzZSxcbiAgY2hlY2tTdHJpY3RseTogZmFsc2UsIC8vIHdoZXRoZXIgYWxsIG5vZGVzIGNhbiBiZSBzZWxlY3RlZFxuICBlbWl0UGF0aDogdHJ1ZSwgLy8gd2V0aGVyIHRvIGVtaXQgYW4gYXJyYXkgb2YgYWxsIGxldmVscyB2YWx1ZSBpbiB3aGljaCBub2RlIGlzIGxvY2F0ZWRcbiAgbGF6eTogZmFsc2UsXG4gIGxhenlMb2FkOiB1dGlsX1tcIm5vb3BcIl0sXG4gIHZhbHVlOiAndmFsdWUnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGxlYWY6ICdsZWFmJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGhvdmVyVGhyZXNob2xkOiA1MDBcbn07XG5cbnZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2lzTGVhZiA9IGZ1bmN0aW9uIGlzTGVhZihlbCkge1xuICByZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSgnYXJpYS1vd25zJyk7XG59O1xuXG52YXIgZ2V0U2libGluZyA9IGZ1bmN0aW9uIGdldFNpYmxpbmcoZWwsIGRpc3RhbmNlKSB7XG4gIHZhciBwYXJlbnROb2RlID0gZWwucGFyZW50Tm9kZTtcblxuICBpZiAocGFyZW50Tm9kZSkge1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmVsLWNhc2NhZGVyLW5vZGVbdGFiaW5kZXg9XCItMVwiXScpO1xuICAgIHZhciBpbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoc2libGluZ3MsIGVsKTtcbiAgICByZXR1cm4gc2libGluZ3NbaW5kZXggKyBkaXN0YW5jZV0gfHwgbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBnZXRNZW51SW5kZXggPSBmdW5jdGlvbiBnZXRNZW51SW5kZXgoZWwsIGRpc3RhbmNlKSB7XG4gIGlmICghZWwpIHJldHVybjtcbiAgdmFyIHBpZWNlcyA9IGVsLmlkLnNwbGl0KCctJyk7XG4gIHJldHVybiBOdW1iZXIocGllY2VzW3BpZWNlcy5sZW5ndGggLSAyXSk7XG59O1xuXG52YXIgZm9jdXNOb2RlID0gZnVuY3Rpb24gZm9jdXNOb2RlKGVsKSB7XG4gIGlmICghZWwpIHJldHVybjtcbiAgZWwuZm9jdXMoKTtcbiAgIWNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaXNMZWFmKGVsKSAmJiBlbC5jbGljaygpO1xufTtcblxudmFyIGNoZWNrTm9kZSA9IGZ1bmN0aW9uIGNoZWNrTm9kZShlbCkge1xuICBpZiAoIWVsKSByZXR1cm47XG5cbiAgdmFyIGlucHV0ID0gZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgaWYgKGlucHV0KSB7XG4gICAgaW5wdXQuY2xpY2soKTtcbiAgfSBlbHNlIGlmIChjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2lzTGVhZihlbCkpIHtcbiAgICBlbC5jbGljaygpO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENhc2NhZGVyUGFuZWwnLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBDYXNjYWRlck1lbnU6IGNhc2NhZGVyX21lbnVcbiAgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7fSxcbiAgICBvcHRpb25zOiBBcnJheSxcbiAgICBwcm9wczogT2JqZWN0LFxuICAgIGJvcmRlcjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHJlbmRlckxhYmVsOiBGdW5jdGlvblxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhbmVsOiB0aGlzXG4gICAgfTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZFZhbHVlOiBudWxsLFxuICAgICAgY2hlY2tlZE5vZGVQYXRoczogW10sXG4gICAgICBzdG9yZTogW10sXG4gICAgICBtZW51czogW10sXG4gICAgICBhY3RpdmVQYXRoOiBbXSxcbiAgICAgIGxvYWRDb3VudDogMFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGNvbmZpZzogZnVuY3Rpb24gY29uZmlnKCkge1xuICAgICAgcmV0dXJuIG1lcmdlX2RlZmF1bHQoKShfZXh0ZW5kcyh7fSwgRGVmYXVsdFByb3BzKSwgdGhpcy5wcm9wcyB8fCB7fSk7XG4gICAgfSxcbiAgICBtdWx0aXBsZTogZnVuY3Rpb24gbXVsdGlwbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcubXVsdGlwbGU7XG4gICAgfSxcbiAgICBjaGVja1N0cmljdGx5OiBmdW5jdGlvbiBjaGVja1N0cmljdGx5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrU3RyaWN0bHk7XG4gICAgfSxcbiAgICBsZWFmT25seTogZnVuY3Rpb24gbGVhZk9ubHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuY2hlY2tTdHJpY3RseTtcbiAgICB9LFxuICAgIGlzSG92ZXJNZW51OiBmdW5jdGlvbiBpc0hvdmVyTWVudSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5leHBhbmRUcmlnZ2VyID09PSAnaG92ZXInO1xuICAgIH0sXG4gICAgcmVuZGVyTGFiZWxGbjogZnVuY3Rpb24gcmVuZGVyTGFiZWxGbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckxhYmVsIHx8IHRoaXMuJHNjb3BlZFNsb3RzLmRlZmF1bHQ7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgb3B0aW9uczoge1xuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5pbml0U3RvcmUoKTtcbiAgICAgIH0sXG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBkZWVwOiB0cnVlXG4gICAgfSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoKSB7XG4gICAgICB0aGlzLnN5bmNDaGVja2VkVmFsdWUoKTtcbiAgICAgIHRoaXMuY2hlY2tTdHJpY3RseSAmJiB0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTtcbiAgICB9LFxuICAgIGNoZWNrZWRWYWx1ZTogZnVuY3Rpb24gY2hlY2tlZFZhbHVlKHZhbCkge1xuICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKSh2YWwsIHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTdHJpY3RseSAmJiB0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICghdGhpcy5pc0VtcHR5VmFsdWUodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuc3luY0NoZWNrZWRWYWx1ZSgpO1xuICAgIH1cbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBpbml0U3RvcmU6IGZ1bmN0aW9uIGluaXRTdG9yZSgpIHtcbiAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICBpZiAoY29uZmlnLmxhenkgJiYgT2JqZWN0KHV0aWxfW1wiaXNFbXB0eVwiXSkob3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5sYXp5TG9hZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yZSA9IG5ldyBzcmNfc3RvcmUob3B0aW9ucywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5tZW51cyA9IFt0aGlzLnN0b3JlLmdldE5vZGVzKCldO1xuICAgICAgICB0aGlzLnN5bmNNZW51U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN5bmNDaGVja2VkVmFsdWU6IGZ1bmN0aW9uIHN5bmNDaGVja2VkVmFsdWUoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLFxuICAgICAgICAgIGNoZWNrZWRWYWx1ZSA9IHRoaXMuY2hlY2tlZFZhbHVlO1xuXG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKHZhbHVlLCBjaGVja2VkVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUGF0aCA9IFtdO1xuICAgICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnN5bmNNZW51U3RhdGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN5bmNNZW51U3RhdGU6IGZ1bmN0aW9uIHN5bmNNZW51U3RhdGUoKSB7XG4gICAgICB2YXIgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlLFxuICAgICAgICAgIGNoZWNrU3RyaWN0bHkgPSB0aGlzLmNoZWNrU3RyaWN0bHk7XG5cbiAgICAgIHRoaXMuc3luY0FjdGl2ZVBhdGgoKTtcbiAgICAgIG11bHRpcGxlICYmIHRoaXMuc3luY011bHRpQ2hlY2tTdGF0ZSgpO1xuICAgICAgY2hlY2tTdHJpY3RseSAmJiB0aGlzLmNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMuc2Nyb2xsSW50b1ZpZXcpO1xuICAgIH0sXG4gICAgc3luY011bHRpQ2hlY2tTdGF0ZTogZnVuY3Rpb24gc3luY011bHRpQ2hlY2tTdGF0ZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciBub2RlcyA9IHRoaXMuZ2V0RmxhdHRlZE5vZGVzKHRoaXMubGVhZk9ubHkpO1xuXG4gICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIG5vZGUuc3luY0NoZWNrU3RhdGUoX3RoaXMuY2hlY2tlZFZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaXNFbXB0eVZhbHVlOiBmdW5jdGlvbiBpc0VtcHR5VmFsdWUodmFsKSB7XG4gICAgICB2YXIgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlLFxuICAgICAgICAgIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgdmFyIGVtaXRQYXRoID0gY29uZmlnLmVtaXRQYXRoO1xuXG4gICAgICBpZiAobXVsdGlwbGUgfHwgZW1pdFBhdGgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImlzRW1wdHlcIl0pKHZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBzeW5jQWN0aXZlUGF0aDogZnVuY3Rpb24gc3luY0FjdGl2ZVBhdGgoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHN0b3JlID0gdGhpcy5zdG9yZSxcbiAgICAgICAgICBtdWx0aXBsZSA9IHRoaXMubXVsdGlwbGUsXG4gICAgICAgICAgYWN0aXZlUGF0aCA9IHRoaXMuYWN0aXZlUGF0aCxcbiAgICAgICAgICBjaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZTtcblxuXG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcImlzRW1wdHlcIl0pKGFjdGl2ZVBhdGgpKSB7XG4gICAgICAgIHZhciBub2RlcyA9IGFjdGl2ZVBhdGgubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5nZXROb2RlQnlWYWx1ZShub2RlLmdldFZhbHVlKCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5leHBhbmROb2Rlcyhub2Rlcyk7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRW1wdHlWYWx1ZShjaGVja2VkVmFsdWUpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IG11bHRpcGxlID8gY2hlY2tlZFZhbHVlWzBdIDogY2hlY2tlZFZhbHVlO1xuICAgICAgICB2YXIgY2hlY2tlZE5vZGUgPSB0aGlzLmdldE5vZGVCeVZhbHVlKHZhbHVlKSB8fCB7fTtcbiAgICAgICAgdmFyIF9ub2RlcyA9IChjaGVja2VkTm9kZS5wYXRoTm9kZXMgfHwgW10pLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgdGhpcy5leHBhbmROb2Rlcyhfbm9kZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmVQYXRoID0gW107XG4gICAgICAgIHRoaXMubWVudXMgPSBbc3RvcmUuZ2V0Tm9kZXMoKV07XG4gICAgICB9XG4gICAgfSxcbiAgICBleHBhbmROb2RlczogZnVuY3Rpb24gZXhwYW5kTm9kZXMobm9kZXMpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHJldHVybiBfdGhpczMuaGFuZGxlRXhwYW5kKG5vZGUsIHRydWUgLyogc2lsZW50ICovKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2FsY3VsYXRlQ2hlY2tlZE5vZGVQYXRoczogZnVuY3Rpb24gY2FsY3VsYXRlQ2hlY2tlZE5vZGVQYXRocygpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB2YXIgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlO1xuXG4gICAgICB2YXIgY2hlY2tlZFZhbHVlcyA9IG11bHRpcGxlID8gT2JqZWN0KHV0aWxfW1wiY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5XCJdKShjaGVja2VkVmFsdWUpIDogW2NoZWNrZWRWYWx1ZV07XG4gICAgICB0aGlzLmNoZWNrZWROb2RlUGF0aHMgPSBjaGVja2VkVmFsdWVzLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICB2YXIgY2hlY2tlZE5vZGUgPSBfdGhpczQuZ2V0Tm9kZUJ5VmFsdWUodik7XG4gICAgICAgIHJldHVybiBjaGVja2VkTm9kZSA/IGNoZWNrZWROb2RlLnBhdGhOb2RlcyA6IFtdO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVLZXlEb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGUpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldCxcbiAgICAgICAgICBrZXlDb2RlID0gZS5rZXlDb2RlO1xuXG5cbiAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgICBjYXNlIEtleUNvZGUudXA6XG4gICAgICAgICAgdmFyIHByZXYgPSBnZXRTaWJsaW5nKHRhcmdldCwgLTEpO1xuICAgICAgICAgIGZvY3VzTm9kZShwcmV2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlDb2RlLmRvd246XG4gICAgICAgICAgdmFyIG5leHQgPSBnZXRTaWJsaW5nKHRhcmdldCwgMSk7XG4gICAgICAgICAgZm9jdXNOb2RlKG5leHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEtleUNvZGUubGVmdDpcbiAgICAgICAgICB2YXIgcHJlTWVudSA9IHRoaXMuJHJlZnMubWVudVtnZXRNZW51SW5kZXgodGFyZ2V0KSAtIDFdO1xuICAgICAgICAgIGlmIChwcmVNZW51KSB7XG4gICAgICAgICAgICB2YXIgZXhwYW5kZWROb2RlID0gcHJlTWVudS4kZWwucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyLW5vZGVbYXJpYS1leHBhbmRlZD1cInRydWVcIl0nKTtcbiAgICAgICAgICAgIGZvY3VzTm9kZShleHBhbmRlZE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlDb2RlLnJpZ2h0OlxuICAgICAgICAgIHZhciBuZXh0TWVudSA9IHRoaXMuJHJlZnMubWVudVtnZXRNZW51SW5kZXgodGFyZ2V0KSArIDFdO1xuICAgICAgICAgIGlmIChuZXh0TWVudSkge1xuICAgICAgICAgICAgdmFyIGZpcnN0Tm9kZSA9IG5leHRNZW51LiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXItbm9kZVt0YWJpbmRleD1cIi0xXCJdJyk7XG4gICAgICAgICAgICBmb2N1c05vZGUoZmlyc3ROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5lbnRlcjpcbiAgICAgICAgICBjaGVja05vZGUodGFyZ2V0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBLZXlDb2RlLmVzYzpcbiAgICAgICAgY2FzZSBLZXlDb2RlLnRhYjpcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlRXhwYW5kKG5vZGUsIHNpbGVudCkge1xuICAgICAgdmFyIGFjdGl2ZVBhdGggPSB0aGlzLmFjdGl2ZVBhdGg7XG4gICAgICB2YXIgbGV2ZWwgPSBub2RlLmxldmVsO1xuXG4gICAgICB2YXIgcGF0aCA9IGFjdGl2ZVBhdGguc2xpY2UoMCwgbGV2ZWwgLSAxKTtcbiAgICAgIHZhciBtZW51cyA9IHRoaXMubWVudXMuc2xpY2UoMCwgbGV2ZWwpO1xuXG4gICAgICBpZiAoIW5vZGUuaXNMZWFmKSB7XG4gICAgICAgIHBhdGgucHVzaChub2RlKTtcbiAgICAgICAgbWVudXMucHVzaChub2RlLmNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3RpdmVQYXRoID0gcGF0aDtcbiAgICAgIHRoaXMubWVudXMgPSBtZW51cztcblxuICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgdmFyIHBhdGhWYWx1ZXMgPSBwYXRoLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlLmdldFZhbHVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgYWN0aXZlUGF0aFZhbHVlcyA9IGFjdGl2ZVBhdGgubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0VmFsdWUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghT2JqZWN0KHV0aWxfW1widmFsdWVFcXVhbHNcIl0pKHBhdGhWYWx1ZXMsIGFjdGl2ZVBhdGhWYWx1ZXMpKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnYWN0aXZlLWl0ZW0tY2hhbmdlJywgcGF0aFZhbHVlcyk7IC8vIERlcHJlY2F0ZWRcbiAgICAgICAgICB0aGlzLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgcGF0aFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNoZWNrQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGVja0NoYW5nZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSB2YWx1ZTtcbiAgICB9LFxuICAgIGxhenlMb2FkOiBmdW5jdGlvbiBsYXp5TG9hZChub2RlLCBvbkZ1bGxmaWxlZCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIG5vZGUgPSBub2RlIHx8IHsgcm9vdDogdHJ1ZSwgbGV2ZWw6IDAgfTtcbiAgICAgICAgdGhpcy5zdG9yZSA9IG5ldyBzcmNfc3RvcmUoW10sIGNvbmZpZyk7XG4gICAgICAgIHRoaXMubWVudXMgPSBbdGhpcy5zdG9yZS5nZXROb2RlcygpXTtcbiAgICAgIH1cbiAgICAgIG5vZGUubG9hZGluZyA9IHRydWU7XG4gICAgICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoZGF0YUxpc3QpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucm9vdCA/IG51bGwgOiBub2RlO1xuICAgICAgICBkYXRhTGlzdCAmJiBkYXRhTGlzdC5sZW5ndGggJiYgX3RoaXM1LnN0b3JlLmFwcGVuZE5vZGVzKGRhdGFMaXN0LCBwYXJlbnQpO1xuICAgICAgICBub2RlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgbm9kZS5sb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIGRpc3Bvc2UgZGVmYXVsdCB2YWx1ZSBvbiBsYXp5IGxvYWQgbW9kZVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfdGhpczUuY2hlY2tlZFZhbHVlKSkge1xuICAgICAgICAgIHZhciBub2RlVmFsdWUgPSBfdGhpczUuY2hlY2tlZFZhbHVlW190aGlzNS5sb2FkQ291bnQrK107XG4gICAgICAgICAgdmFyIHZhbHVlS2V5ID0gX3RoaXM1LmNvbmZpZy52YWx1ZTtcbiAgICAgICAgICB2YXIgbGVhZktleSA9IF90aGlzNS5jb25maWcubGVhZjtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFMaXN0KSAmJiBkYXRhTGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtW3ZhbHVlS2V5XSA9PT0gbm9kZVZhbHVlO1xuICAgICAgICAgIH0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciBjaGVja2VkTm9kZSA9IF90aGlzNS5zdG9yZS5nZXROb2RlQnlWYWx1ZShub2RlVmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoIWNoZWNrZWROb2RlLmRhdGFbbGVhZktleV0pIHtcbiAgICAgICAgICAgICAgX3RoaXM1LmxhenlMb2FkKGNoZWNrZWROb2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXM1LmhhbmRsZUV4cGFuZChjaGVja2VkTm9kZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX3RoaXM1LmxvYWRDb3VudCA9PT0gX3RoaXM1LmNoZWNrZWRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgX3RoaXM1LiRwYXJlbnQuY29tcHV0ZVByZXNlbnRUZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb25GdWxsZmlsZWQgJiYgb25GdWxsZmlsZWQoZGF0YUxpc3QpO1xuICAgICAgfTtcbiAgICAgIGNvbmZpZy5sYXp5TG9hZChub2RlLCByZXNvbHZlKTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBwdWJsaWMgbWV0aG9kc1xuICAgICovXG4gICAgY2FsY3VsYXRlTXVsdGlDaGVja2VkVmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlKCkge1xuICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSB0aGlzLmdldENoZWNrZWROb2Rlcyh0aGlzLmxlYWZPbmx5KS5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuZ2V0VmFsdWVCeU9wdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoKSB7XG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcblxuICAgICAgdmFyIG1lbnVzID0gdGhpcy4kcmVmcy5tZW51IHx8IFtdO1xuICAgICAgbWVudXMuZm9yRWFjaChmdW5jdGlvbiAobWVudSkge1xuICAgICAgICB2YXIgbWVudUVsZW1lbnQgPSBtZW51LiRlbDtcbiAgICAgICAgaWYgKG1lbnVFbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbC1zY3JvbGxiYXJfX3dyYXAnKTtcbiAgICAgICAgICB2YXIgYWN0aXZlTm9kZSA9IG1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlLmlzLWFjdGl2ZScpIHx8IG1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlLmluLWFjdGl2ZS1wYXRoJyk7XG4gICAgICAgICAgc2Nyb2xsX2ludG9fdmlld19kZWZhdWx0KCkoY29udGFpbmVyLCBhY3RpdmVOb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXROb2RlQnlWYWx1ZTogZnVuY3Rpb24gZ2V0Tm9kZUJ5VmFsdWUodmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXROb2RlQnlWYWx1ZSh2YWwpO1xuICAgIH0sXG4gICAgZ2V0RmxhdHRlZE5vZGVzOiBmdW5jdGlvbiBnZXRGbGF0dGVkTm9kZXMobGVhZk9ubHkpIHtcbiAgICAgIHZhciBjYWNoZWQgPSAhdGhpcy5jb25maWcubGF6eTtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEZsYXR0ZWROb2RlcyhsZWFmT25seSwgY2FjaGVkKTtcbiAgICB9LFxuICAgIGdldENoZWNrZWROb2RlczogZnVuY3Rpb24gZ2V0Q2hlY2tlZE5vZGVzKGxlYWZPbmx5KSB7XG4gICAgICB2YXIgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlO1xuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5nZXRGbGF0dGVkTm9kZXMobGVhZk9ubHkpO1xuICAgICAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuY2hlY2tlZDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0VtcHR5VmFsdWUoY2hlY2tlZFZhbHVlKSA/IFtdIDogW3RoaXMuZ2V0Tm9kZUJ5VmFsdWUoY2hlY2tlZFZhbHVlKV07XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhckNoZWNrZWROb2RlczogZnVuY3Rpb24gY2xlYXJDaGVja2VkTm9kZXMoKSB7XG4gICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgICAgbGVhZk9ubHkgPSB0aGlzLmxlYWZPbmx5O1xuICAgICAgdmFyIG11bHRpcGxlID0gY29uZmlnLm11bHRpcGxlLFxuICAgICAgICAgIGVtaXRQYXRoID0gY29uZmlnLmVtaXRQYXRoO1xuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5nZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiAhbm9kZS5pc0Rpc2FibGVkO1xuICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuZG9DaGVjayhmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IGVtaXRQYXRoID8gW10gOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Nhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjYXNjYWRlcl9wYW5lbF9jb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19jYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9yZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY2FzY2FkZXJfcGFuZWxfYXBpOyB9XG5jYXNjYWRlcl9wYW5lbF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FzY2FkZXJfcGFuZWwgPSAoY2FzY2FkZXJfcGFuZWxfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jYXNjYWRlcl9wYW5lbC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNhc2NhZGVyX3BhbmVsLm5hbWUsIGNhc2NhZGVyX3BhbmVsKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2Nhc2NhZGVyX3BhbmVsID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY2FzY2FkZXJfcGFuZWwpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gOTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2VcIik7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/cascader-panel.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/checkbox-group.js":
- /*!*******************************************************!*\
- !*** ./node_modules/element-ui/lib/checkbox-group.js ***!
- \*******************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 92);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 92:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-checkbox-group\",\n attrs: { role: \"group\", \"aria-label\": \"checkbox-group\" }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(4);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n\n\n\n/* harmony default export */ var checkbox_groupvue_type_script_lang_js_ = ({\n name: 'ElCheckboxGroup',\n\n componentName: 'ElCheckboxGroup',\n\n mixins: [emitter_default.a],\n\n inject: {\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n value: {},\n disabled: Boolean,\n min: Number,\n max: Number,\n size: String,\n fill: String,\n textColor: String\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n checkboxGroupSize: function checkboxGroupSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n }\n },\n\n watch: {\n value: function value(_value) {\n this.dispatch('ElFormItem', 'el.form.change', [_value]);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkbox_groupvue_type_script_lang_js_ = (checkbox_groupvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_checkbox_groupvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/checkbox/src/checkbox-group.vue\"\n/* harmony default export */ var checkbox_group = (component.exports);\n// CONCATENATED MODULE: ./packages/checkbox-group/index.js\n\n\n/* istanbul ignore next */\ncheckbox_group.install = function (Vue) {\n Vue.component(checkbox_group.name, checkbox_group);\n};\n\n/* harmony default export */ var packages_checkbox_group = __webpack_exports__[\"default\"] = (checkbox_group);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3gtZ3JvdXAuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3gtZ3JvdXAuanM/N2ZjMSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkyKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDkyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTcyODlhMjkwJlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWdyb3VwXCIsXG4gICAgICBhdHRyczogeyByb2xlOiBcImdyb3VwXCIsIFwiYXJpYS1sYWJlbFwiOiBcImNoZWNrYm94LWdyb3VwXCIgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI4OWEyOTAmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDaGVja2JveEdyb3VwJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxDaGVja2JveEdyb3VwJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbWluOiBOdW1iZXIsXG4gICAgbWF4OiBOdW1iZXIsXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGZpbGw6IFN0cmluZyxcbiAgICB0ZXh0Q29sb3I6IFN0cmluZ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBjaGVja2JveEdyb3VwU2l6ZTogZnVuY3Rpb24gY2hlY2tib3hHcm91cFNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCBbX3ZhbHVlXSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX2NoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2hlY2tib3hfZ3JvdXAgPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC1ncm91cC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jaGVja2JveF9ncm91cC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNoZWNrYm94X2dyb3VwLm5hbWUsIGNoZWNrYm94X2dyb3VwKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NoZWNrYm94X2dyb3VwID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoY2hlY2tib3hfZ3JvdXApO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/checkbox-group.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/checkbox.js":
- /*!*************************************************!*\
- !*** ./node_modules/element-ui/lib/checkbox.js ***!
- \*************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 90);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 90:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-checkbox\",\n class: [\n _vm.border && _vm.checkboxSize\n ? \"el-checkbox--\" + _vm.checkboxSize\n : \"\",\n { \"is-disabled\": _vm.isDisabled },\n { \"is-bordered\": _vm.border },\n { \"is-checked\": _vm.isChecked }\n ],\n attrs: { id: _vm.id }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"el-checkbox__input\",\n class: {\n \"is-disabled\": _vm.isDisabled,\n \"is-checked\": _vm.isChecked,\n \"is-indeterminate\": _vm.indeterminate,\n \"is-focus\": _vm.focus\n },\n attrs: {\n tabindex: _vm.indeterminate ? 0 : false,\n role: _vm.indeterminate ? \"checkbox\" : false,\n \"aria-checked\": _vm.indeterminate ? \"mixed\" : false\n }\n },\n [\n _c(\"span\", { staticClass: \"el-checkbox__inner\" }),\n _vm.trueLabel || _vm.falseLabel\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox__original\",\n attrs: {\n type: \"checkbox\",\n \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n \"true-value\": _vm.trueLabel,\n \"false-value\": _vm.falseLabel\n },\n domProps: {\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, null) > -1\n : _vm._q(_vm.model, _vm.trueLabel)\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? _vm.trueLabel : _vm.falseLabel\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n })\n : _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox__original\",\n attrs: {\n type: \"checkbox\",\n \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n disabled: _vm.isDisabled,\n name: _vm.name\n },\n domProps: {\n value: _vm.label,\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, _vm.label) > -1\n : _vm.model\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.label,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n })\n ]\n ),\n _vm.$slots.default || _vm.label\n ? _c(\n \"span\",\n { staticClass: \"el-checkbox__label\" },\n [\n _vm._t(\"default\"),\n !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n ],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(4);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var checkboxvue_type_script_lang_js_ = ({\n name: 'ElCheckbox',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n componentName: 'ElCheckbox',\n\n data: function data() {\n return {\n selfModel: false,\n focus: false,\n isLimitExceeded: false\n };\n },\n\n\n computed: {\n model: {\n get: function get() {\n return this.isGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n },\n set: function set(val) {\n if (this.isGroup) {\n this.isLimitExceeded = false;\n this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (this.isLimitExceeded = true);\n\n this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (this.isLimitExceeded = true);\n\n this.isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n } else {\n this.$emit('input', val);\n this.selfModel = val;\n }\n }\n },\n\n isChecked: function isChecked() {\n if ({}.toString.call(this.model) === '[object Boolean]') {\n return this.model;\n } else if (Array.isArray(this.model)) {\n return this.model.indexOf(this.label) > -1;\n } else if (this.model !== null && this.model !== undefined) {\n return this.model === this.trueLabel;\n }\n },\n isGroup: function isGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElCheckboxGroup') {\n parent = parent.$parent;\n } else {\n this._checkboxGroup = parent;\n return true;\n }\n }\n return false;\n },\n store: function store() {\n return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n },\n\n\n /* used to make the isDisabled judgment under max/min props */\n isLimitDisabled: function isLimitDisabled() {\n var _checkboxGroup = this._checkboxGroup,\n max = _checkboxGroup.max,\n min = _checkboxGroup.min;\n\n return !!(max || min) && this.model.length >= max && !this.isChecked || this.model.length <= min && this.isChecked;\n },\n isDisabled: function isDisabled() {\n return this.isGroup ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled : this.disabled || (this.elForm || {}).disabled;\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n checkboxSize: function checkboxSize() {\n var temCheckboxSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n return this.isGroup ? this._checkboxGroup.checkboxGroupSize || temCheckboxSize : temCheckboxSize;\n }\n },\n\n props: {\n value: {},\n label: {},\n indeterminate: Boolean,\n disabled: Boolean,\n checked: Boolean,\n name: String,\n trueLabel: [String, Number],\n falseLabel: [String, Number],\n id: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n controls: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n border: Boolean,\n size: String\n },\n\n methods: {\n addToStore: function addToStore() {\n if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n this.model.push(this.label);\n } else {\n this.model = this.trueLabel || true;\n }\n },\n handleChange: function handleChange(ev) {\n var _this = this;\n\n if (this.isLimitExceeded) return;\n var value = void 0;\n if (ev.target.checked) {\n value = this.trueLabel === undefined ? true : this.trueLabel;\n } else {\n value = this.falseLabel === undefined ? false : this.falseLabel;\n }\n this.$emit('change', value, ev);\n this.$nextTick(function () {\n if (_this.isGroup) {\n _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n }\n });\n }\n },\n\n created: function created() {\n this.checked && this.addToStore();\n },\n mounted: function mounted() {\n // 为indeterminate元素 添加aria-controls 属性\n if (this.indeterminate) {\n this.$el.setAttribute('aria-controls', this.controls);\n }\n },\n\n\n watch: {\n value: function value(_value) {\n this.dispatch('ElFormItem', 'el.form.change', _value);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkboxvue_type_script_lang_js_ = (checkboxvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_checkboxvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/checkbox/src/checkbox.vue\"\n/* harmony default export */ var src_checkbox = (component.exports);\n// CONCATENATED MODULE: ./packages/checkbox/index.js\n\n\n/* istanbul ignore next */\nsrc_checkbox.install = function (Vue) {\n Vue.component(src_checkbox.name, src_checkbox);\n};\n\n/* harmony default export */ var packages_checkbox = __webpack_exports__[\"default\"] = (src_checkbox);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3guanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvY2hlY2tib3guanM/ZGNkYyJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDkwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQwMzg3MDc0JlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hcIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIF92bS5ib3JkZXIgJiYgX3ZtLmNoZWNrYm94U2l6ZVxuICAgICAgICAgID8gXCJlbC1jaGVja2JveC0tXCIgKyBfdm0uY2hlY2tib3hTaXplXG4gICAgICAgICAgOiBcIlwiLFxuICAgICAgICB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQgfSxcbiAgICAgICAgeyBcImlzLWJvcmRlcmVkXCI6IF92bS5ib3JkZXIgfSxcbiAgICAgICAgeyBcImlzLWNoZWNrZWRcIjogX3ZtLmlzQ2hlY2tlZCB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHsgaWQ6IF92bS5pZCB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9faW5wdXRcIixcbiAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIFwiaXMtY2hlY2tlZFwiOiBfdm0uaXNDaGVja2VkLFxuICAgICAgICAgICAgXCJpcy1pbmRldGVybWluYXRlXCI6IF92bS5pbmRldGVybWluYXRlLFxuICAgICAgICAgICAgXCJpcy1mb2N1c1wiOiBfdm0uZm9jdXNcbiAgICAgICAgICB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICB0YWJpbmRleDogX3ZtLmluZGV0ZXJtaW5hdGUgPyAwIDogZmFsc2UsXG4gICAgICAgICAgICByb2xlOiBfdm0uaW5kZXRlcm1pbmF0ZSA/IFwiY2hlY2tib3hcIiA6IGZhbHNlLFxuICAgICAgICAgICAgXCJhcmlhLWNoZWNrZWRcIjogX3ZtLmluZGV0ZXJtaW5hdGUgPyBcIm1peGVkXCIgOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19pbm5lclwiIH0pLFxuICAgICAgICAgIF92bS50cnVlTGFiZWwgfHwgX3ZtLmZhbHNlTGFiZWxcbiAgICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19vcmlnaW5hbFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6IF92bS5pbmRldGVybWluYXRlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCIsXG4gICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ubmFtZSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIFwidHJ1ZS12YWx1ZVwiOiBfdm0udHJ1ZUxhYmVsLFxuICAgICAgICAgICAgICAgICAgXCJmYWxzZS12YWx1ZVwiOiBfdm0uZmFsc2VMYWJlbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKVxuICAgICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ubW9kZWwsIG51bGwpID4gLTFcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX3EoX3ZtLm1vZGVsLCBfdm0udHJ1ZUxhYmVsKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZTogW1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyBfdm0udHJ1ZUxhYmVsIDogX3ZtLmZhbHNlTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkZWwuY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmIChfdm0ubW9kZWwgPSAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA+IC0xICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5tb2RlbCA9ICQkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsICQkaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJCRhLnNsaWNlKCQkaSArIDEpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLm1vZGVsID0gJCRjXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWxcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX29yaWdpbmFsXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogX3ZtLmluZGV0ZXJtaW5hdGUgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5uYW1lXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKVxuICAgICAgICAgICAgICAgICAgICA/IF92bS5faShfdm0ubW9kZWwsIF92bS5sYWJlbCkgPiAtMVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5tb2RlbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNoYW5nZTogW1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgJCRhID0gX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJCRlbCA9ICRldmVudC50YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSgkJGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJCR2ID0gX3ZtLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5tb2RlbCA9ICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLm1vZGVsID0gJCRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwgPSAkJGNcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IHRydWVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfdm0uJHNsb3RzLmRlZmF1bHQgfHwgX3ZtLmxhYmVsXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX2xhYmVsXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKSxcbiAgICAgICAgICAgICAgIV92bS4kc2xvdHMuZGVmYXVsdCA/IFtfdm0uX3YoX3ZtLl9zKF92bS5sYWJlbCkpXSA6IF92bS5fZSgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDAzODcwNzQmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNoZWNrYm94dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2hlY2tib3gnLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnROYW1lOiAnRWxDaGVja2JveCcsXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VsZk1vZGVsOiBmYWxzZSxcbiAgICAgIGZvY3VzOiBmYWxzZSxcbiAgICAgIGlzTGltaXRFeGNlZWRlZDogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtb2RlbDoge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLnN0b3JlIDogdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy52YWx1ZSA6IHRoaXMuc2VsZk1vZGVsO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgICBpZiAodGhpcy5pc0dyb3VwKSB7XG4gICAgICAgICAgdGhpcy5pc0xpbWl0RXhjZWVkZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwLm1pbiAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPCB0aGlzLl9jaGVja2JveEdyb3VwLm1pbiAmJiAodGhpcy5pc0xpbWl0RXhjZWVkZWQgPSB0cnVlKTtcblxuICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAubWF4ICE9PSB1bmRlZmluZWQgJiYgdmFsLmxlbmd0aCA+IHRoaXMuX2NoZWNrYm94R3JvdXAubWF4ICYmICh0aGlzLmlzTGltaXRFeGNlZWRlZCA9IHRydWUpO1xuXG4gICAgICAgICAgdGhpcy5pc0xpbWl0RXhjZWVkZWQgPT09IGZhbHNlICYmIHRoaXMuZGlzcGF0Y2goJ0VsQ2hlY2tib3hHcm91cCcsICdpbnB1dCcsIFt2YWxdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbCk7XG4gICAgICAgICAgdGhpcy5zZWxmTW9kZWwgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNDaGVja2VkOiBmdW5jdGlvbiBpc0NoZWNrZWQoKSB7XG4gICAgICBpZiAoe30udG9TdHJpbmcuY2FsbCh0aGlzLm1vZGVsKSA9PT0gJ1tvYmplY3QgQm9vbGVhbl0nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMubW9kZWwpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsLmluZGV4T2YodGhpcy5sYWJlbCkgPiAtMTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlbCAhPT0gbnVsbCAmJiB0aGlzLm1vZGVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwgPT09IHRoaXMudHJ1ZUxhYmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNHcm91cDogZnVuY3Rpb24gaXNHcm91cCgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsQ2hlY2tib3hHcm91cCcpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwID0gcGFyZW50O1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBzdG9yZTogZnVuY3Rpb24gc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hlY2tib3hHcm91cCA/IHRoaXMuX2NoZWNrYm94R3JvdXAudmFsdWUgOiB0aGlzLnZhbHVlO1xuICAgIH0sXG5cblxuICAgIC8qIHVzZWQgdG8gbWFrZSB0aGUgaXNEaXNhYmxlZCBqdWRnbWVudCB1bmRlciBtYXgvbWluIHByb3BzICovXG4gICAgaXNMaW1pdERpc2FibGVkOiBmdW5jdGlvbiBpc0xpbWl0RGlzYWJsZWQoKSB7XG4gICAgICB2YXIgX2NoZWNrYm94R3JvdXAgPSB0aGlzLl9jaGVja2JveEdyb3VwLFxuICAgICAgICAgIG1heCA9IF9jaGVja2JveEdyb3VwLm1heCxcbiAgICAgICAgICBtaW4gPSBfY2hlY2tib3hHcm91cC5taW47XG5cbiAgICAgIHJldHVybiAhIShtYXggfHwgbWluKSAmJiB0aGlzLm1vZGVsLmxlbmd0aCA+PSBtYXggJiYgIXRoaXMuaXNDaGVja2VkIHx8IHRoaXMubW9kZWwubGVuZ3RoIDw9IG1pbiAmJiB0aGlzLmlzQ2hlY2tlZDtcbiAgICB9LFxuICAgIGlzRGlzYWJsZWQ6IGZ1bmN0aW9uIGlzRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5fY2hlY2tib3hHcm91cC5kaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQgfHwgdGhpcy5pc0xpbWl0RGlzYWJsZWQgOiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfSxcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIGNoZWNrYm94U2l6ZTogZnVuY3Rpb24gY2hlY2tib3hTaXplKCkge1xuICAgICAgdmFyIHRlbUNoZWNrYm94U2l6ZSA9IHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLl9jaGVja2JveEdyb3VwLmNoZWNrYm94R3JvdXBTaXplIHx8IHRlbUNoZWNrYm94U2l6ZSA6IHRlbUNoZWNrYm94U2l6ZTtcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgbGFiZWw6IHt9LFxuICAgIGluZGV0ZXJtaW5hdGU6IEJvb2xlYW4sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgY2hlY2tlZDogQm9vbGVhbixcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgdHJ1ZUxhYmVsOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIGZhbHNlTGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgaWQ6IFN0cmluZywgLyog5b2TaW5kZXRlcm1pbmF0ZeS4uuecn+aXtu+8jOS4umNvbnRyb2xz5o+Q5L6b55u45YWz6L+e55qEY2hlY2tib3jnmoRpZO+8jOihqOaYjuWFg+e0oOmXtOeahOaOp+WItuWFs+ezuyovXG4gICAgY29udHJvbHM6IFN0cmluZywgLyog5b2TaW5kZXRlcm1pbmF0ZeS4uuecn+aXtu+8jOS4umNvbnRyb2xz5o+Q5L6b55u45YWz6L+e55qEY2hlY2tib3jnmoRpZO+8jOihqOaYjuWFg+e0oOmXtOeahOaOp+WItuWFs+ezuyovXG4gICAgYm9yZGVyOiBCb29sZWFuLFxuICAgIHNpemU6IFN0cmluZ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUb1N0b3JlOiBmdW5jdGlvbiBhZGRUb1N0b3JlKCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkgJiYgdGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpID09PSAtMSkge1xuICAgICAgICB0aGlzLm1vZGVsLnB1c2godGhpcy5sYWJlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy50cnVlTGFiZWwgfHwgdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5pc0xpbWl0RXhjZWVkZWQpIHJldHVybjtcbiAgICAgIHZhciB2YWx1ZSA9IHZvaWQgMDtcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMudHJ1ZUxhYmVsID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy50cnVlTGFiZWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZmFsc2VMYWJlbCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLmZhbHNlTGFiZWw7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSwgZXYpO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuaXNHcm91cCkge1xuICAgICAgICAgIF90aGlzLmRpc3BhdGNoKCdFbENoZWNrYm94R3JvdXAnLCAnY2hhbmdlJywgW190aGlzLl9jaGVja2JveEdyb3VwLnZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuY2hlY2tlZCAmJiB0aGlzLmFkZFRvU3RvcmUoKTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAvLyDkuLppbmRldGVybWluYXRl5YWD57SgIOa3u+WKoGFyaWEtY29udHJvbHMg5bGe5oCnXG4gICAgaWYgKHRoaXMuaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgdGhpcy4kZWwuc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgdGhpcy5jb250cm9scyk7XG4gICAgfVxuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoX3ZhbHVlKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgX3ZhbHVlKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jaGVja2JveHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjaGVja2JveHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfY2hlY2tib3h2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2hlY2tib3ggPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfY2hlY2tib3guaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfY2hlY2tib3gubmFtZSwgc3JjX2NoZWNrYm94KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NoZWNrYm94ID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoc3JjX2NoZWNrYm94KTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/checkbox.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/element-ui.common.js":
- /*!**********************************************************!*\
- !*** ./node_modules/element-ui/lib/element-ui.common.js ***!
- \**********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 45);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/date-util */ \"./node_modules/element-ui/lib/utils/date-util.js\");\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/locale */ \"./node_modules/element-ui/lib/mixins/locale.js\");\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vue-popper */ \"./node_modules/element-ui/lib/utils/vue-popper.js\");\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! vue */ \"vue\");\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/merge */ \"./node_modules/element-ui/lib/utils/merge.js\");\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/input */ \"./node_modules/element-ui/lib/input.js\");\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/migrating */ \"./node_modules/element-ui/lib/mixins/migrating.js\");\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/clickoutside */ \"./node_modules/element-ui/lib/utils/clickoutside.js\");\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/popup */ \"./node_modules/element-ui/lib/utils/popup/index.js\");\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/locale */ \"./node_modules/element-ui/lib/locale/index.js\");\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/button */ \"./node_modules/element-ui/lib/button.js\");\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/resize-event */ \"./node_modules/element-ui/lib/utils/resize-event.js\");\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/types */ \"./node_modules/element-ui/lib/utils/types.js\");\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce/debounce */ \"./node_modules/throttle-debounce/debounce.js\");\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/checkbox */ \"./node_modules/element-ui/lib/checkbox.js\");\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/scrollbar */ \"./node_modules/element-ui/lib/scrollbar.js\");\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/shared */ \"./node_modules/element-ui/lib/utils/shared.js\");\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/date */ \"./node_modules/element-ui/lib/utils/date.js\");\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/transitions/collapse-transition */ \"./node_modules/element-ui/lib/transitions/collapse-transition.js\");\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vdom */ \"./node_modules/element-ui/lib/utils/vdom.js\");\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/focus */ \"./node_modules/element-ui/lib/mixins/focus.js\");\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! babel-helper-vue-jsx-merge-props */ \"./node_modules/babel-helper-vue-jsx-merge-props/index.js\");\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce/throttle */ \"./node_modules/throttle-debounce/throttle.js\");\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/tooltip */ \"./node_modules/element-ui/lib/tooltip.js\");\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scroll-into-view */ \"./node_modules/element-ui/lib/utils/scroll-into-view.js\");\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/button-group */ \"./node_modules/element-ui/lib/button-group.js\");\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/tag */ \"./node_modules/element-ui/lib/tag.js\");\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scrollbar-width */ \"./node_modules/element-ui/lib/utils/scrollbar-width.js\");\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/checkbox-group */ \"./node_modules/element-ui/lib/checkbox-group.js\");\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/after-leave */ \"./node_modules/element-ui/lib/utils/after-leave.js\");\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/progress */ \"./node_modules/element-ui/lib/progress.js\");\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/aria-utils */ \"./node_modules/element-ui/lib/utils/aria-utils.js\");\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce */ \"./node_modules/throttle-debounce/index.js\");\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/select */ \"./node_modules/element-ui/lib/select.js\");\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/option */ \"./node_modules/element-ui/lib/option.js\");\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! normalize-wheel */ \"./node_modules/normalize-wheel/index.js\");\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/aria-dialog */ \"./node_modules/element-ui/lib/utils/aria-dialog.js\");\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! async-validator */ \"./node_modules/async-validator/es/index.js\");\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/input-number */ \"./node_modules/element-ui/lib/input-number.js\");\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/cascader-panel */ \"./node_modules/element-ui/lib/cascader-panel.js\");\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/radio */ \"./node_modules/element-ui/lib/radio.js\");\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/popover */ \"./node_modules/element-ui/lib/popover.js\");\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(46);\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/pagination/src/pager.vue?vue&type=template&id=7274f267&\nvar pagervue_type_template_id_7274f267_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"ul\",\n { staticClass: \"el-pager\", on: { click: _vm.onPagerClick } },\n [\n _vm.pageCount > 0\n ? _c(\n \"li\",\n {\n staticClass: \"number\",\n class: { active: _vm.currentPage === 1, disabled: _vm.disabled }\n },\n [_vm._v(\"1\")]\n )\n : _vm._e(),\n _vm.showPrevMore\n ? _c(\"li\", {\n staticClass: \"el-icon more btn-quickprev\",\n class: [_vm.quickprevIconClass, { disabled: _vm.disabled }],\n on: {\n mouseenter: function($event) {\n _vm.onMouseenter(\"left\")\n },\n mouseleave: function($event) {\n _vm.quickprevIconClass = \"el-icon-more\"\n }\n }\n })\n : _vm._e(),\n _vm._l(_vm.pagers, function(pager) {\n return _c(\n \"li\",\n {\n key: pager,\n staticClass: \"number\",\n class: { active: _vm.currentPage === pager, disabled: _vm.disabled }\n },\n [_vm._v(_vm._s(pager))]\n )\n }),\n _vm.showNextMore\n ? _c(\"li\", {\n staticClass: \"el-icon more btn-quicknext\",\n class: [_vm.quicknextIconClass, { disabled: _vm.disabled }],\n on: {\n mouseenter: function($event) {\n _vm.onMouseenter(\"right\")\n },\n mouseleave: function($event) {\n _vm.quicknextIconClass = \"el-icon-more\"\n }\n }\n })\n : _vm._e(),\n _vm.pageCount > 1\n ? _c(\n \"li\",\n {\n staticClass: \"number\",\n class: {\n active: _vm.currentPage === _vm.pageCount,\n disabled: _vm.disabled\n }\n },\n [_vm._v(_vm._s(_vm.pageCount))]\n )\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\npagervue_type_template_id_7274f267_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue?vue&type=template&id=7274f267&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/pagination/src/pager.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var pagervue_type_script_lang_js_ = ({\n name: 'ElPager',\n\n props: {\n currentPage: Number,\n\n pageCount: Number,\n\n pagerCount: Number,\n\n disabled: Boolean\n },\n\n watch: {\n showPrevMore: function showPrevMore(val) {\n if (!val) this.quickprevIconClass = 'el-icon-more';\n },\n showNextMore: function showNextMore(val) {\n if (!val) this.quicknextIconClass = 'el-icon-more';\n }\n },\n\n methods: {\n onPagerClick: function onPagerClick(event) {\n var target = event.target;\n if (target.tagName === 'UL' || this.disabled) {\n return;\n }\n\n var newPage = Number(event.target.textContent);\n var pageCount = this.pageCount;\n var currentPage = this.currentPage;\n var pagerCountOffset = this.pagerCount - 2;\n\n if (target.className.indexOf('more') !== -1) {\n if (target.className.indexOf('quickprev') !== -1) {\n newPage = currentPage - pagerCountOffset;\n } else if (target.className.indexOf('quicknext') !== -1) {\n newPage = currentPage + pagerCountOffset;\n }\n }\n\n /* istanbul ignore if */\n if (!isNaN(newPage)) {\n if (newPage < 1) {\n newPage = 1;\n }\n\n if (newPage > pageCount) {\n newPage = pageCount;\n }\n }\n\n if (newPage !== currentPage) {\n this.$emit('change', newPage);\n }\n },\n onMouseenter: function onMouseenter(direction) {\n if (this.disabled) return;\n if (direction === 'left') {\n this.quickprevIconClass = 'el-icon-d-arrow-left';\n } else {\n this.quicknextIconClass = 'el-icon-d-arrow-right';\n }\n }\n },\n\n computed: {\n pagers: function pagers() {\n var pagerCount = this.pagerCount;\n var halfPagerCount = (pagerCount - 1) / 2;\n\n var currentPage = Number(this.currentPage);\n var pageCount = Number(this.pageCount);\n\n var showPrevMore = false;\n var showNextMore = false;\n\n if (pageCount > pagerCount) {\n if (currentPage > pagerCount - halfPagerCount) {\n showPrevMore = true;\n }\n\n if (currentPage < pageCount - halfPagerCount) {\n showNextMore = true;\n }\n }\n\n var array = [];\n\n if (showPrevMore && !showNextMore) {\n var startPage = pageCount - (pagerCount - 2);\n for (var i = startPage; i < pageCount; i++) {\n array.push(i);\n }\n } else if (!showPrevMore && showNextMore) {\n for (var _i = 2; _i < pagerCount; _i++) {\n array.push(_i);\n }\n } else if (showPrevMore && showNextMore) {\n var offset = Math.floor(pagerCount / 2) - 1;\n for (var _i2 = currentPage - offset; _i2 <= currentPage + offset; _i2++) {\n array.push(_i2);\n }\n } else {\n for (var _i3 = 2; _i3 < pageCount; _i3++) {\n array.push(_i3);\n }\n }\n\n this.showPrevMore = showPrevMore;\n this.showNextMore = showNextMore;\n\n return array;\n }\n },\n\n data: function data() {\n return {\n current: null,\n showPrevMore: false,\n showNextMore: false,\n quicknextIconClass: 'el-icon-more',\n quickprevIconClass: 'el-icon-more'\n };\n }\n});\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_pagervue_type_script_lang_js_ = (pagervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n// CONCATENATED MODULE: ./packages/pagination/src/pager.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = normalizeComponent(\n src_pagervue_type_script_lang_js_,\n pagervue_type_template_id_7274f267_render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/pagination/src/pager.vue\"\n/* harmony default export */ var pager = (component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/select\"\nvar select_ = __webpack_require__(36);\nvar select_default = /*#__PURE__*/__webpack_require__.n(select_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/option\"\nvar option_ = __webpack_require__(37);\nvar option_default = /*#__PURE__*/__webpack_require__.n(option_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/input\"\nvar input_ = __webpack_require__(8);\nvar input_default = /*#__PURE__*/__webpack_require__.n(input_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/locale\"\nvar locale_ = __webpack_require__(4);\nvar locale_default = /*#__PURE__*/__webpack_require__.n(locale_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(2);\n\n// CONCATENATED MODULE: ./packages/pagination/src/pagination.js\n\n\n\n\n\n\n\n/* harmony default export */ var pagination = ({\n name: 'ElPagination',\n\n props: {\n pageSize: {\n type: Number,\n default: 10\n },\n\n small: Boolean,\n\n total: Number,\n\n pageCount: Number,\n\n pagerCount: {\n type: Number,\n validator: function validator(value) {\n return (value | 0) === value && value > 4 && value < 22 && value % 2 === 1;\n },\n\n default: 7\n },\n\n currentPage: {\n type: Number,\n default: 1\n },\n\n layout: {\n default: 'prev, pager, next, jumper, ->, total'\n },\n\n pageSizes: {\n type: Array,\n default: function _default() {\n return [10, 20, 30, 40, 50, 100];\n }\n },\n\n popperClass: String,\n\n prevText: String,\n\n nextText: String,\n\n background: Boolean,\n\n disabled: Boolean,\n\n hideOnSinglePage: Boolean\n },\n\n data: function data() {\n return {\n internalCurrentPage: 1,\n internalPageSize: 0,\n lastEmittedPage: -1,\n userChangePageSize: false\n };\n },\n render: function render(h) {\n var layout = this.layout;\n if (!layout) return null;\n if (this.hideOnSinglePage && (!this.internalPageCount || this.internalPageCount === 1)) return null;\n\n var template = h('div', { 'class': ['el-pagination', {\n 'is-background': this.background,\n 'el-pagination--small': this.small\n }] });\n var TEMPLATE_MAP = {\n prev: h('prev'),\n jumper: h('jumper'),\n pager: h('pager', {\n attrs: { currentPage: this.internalCurrentPage, pageCount: this.internalPageCount, pagerCount: this.pagerCount, disabled: this.disabled },\n on: {\n 'change': this.handleCurrentChange\n }\n }),\n next: h('next'),\n sizes: h('sizes', {\n attrs: { pageSizes: this.pageSizes }\n }),\n slot: h('slot', [this.$slots.default ? this.$slots.default : '']),\n total: h('total')\n };\n var components = layout.split(',').map(function (item) {\n return item.trim();\n });\n var rightWrapper = h('div', { 'class': 'el-pagination__rightwrapper' });\n var haveRightWrapper = false;\n\n template.children = template.children || [];\n rightWrapper.children = rightWrapper.children || [];\n components.forEach(function (compo) {\n if (compo === '->') {\n haveRightWrapper = true;\n return;\n }\n\n if (!haveRightWrapper) {\n template.children.push(TEMPLATE_MAP[compo]);\n } else {\n rightWrapper.children.push(TEMPLATE_MAP[compo]);\n }\n });\n\n if (haveRightWrapper) {\n template.children.unshift(rightWrapper);\n }\n\n return template;\n },\n\n\n components: {\n Prev: {\n render: function render(h) {\n return h(\n 'button',\n {\n attrs: {\n type: 'button',\n\n disabled: this.$parent.disabled || this.$parent.internalCurrentPage <= 1\n },\n 'class': 'btn-prev', on: {\n 'click': this.$parent.prev\n }\n },\n [this.$parent.prevText ? h('span', [this.$parent.prevText]) : h('i', { 'class': 'el-icon el-icon-arrow-left' })]\n );\n }\n },\n\n Next: {\n render: function render(h) {\n return h(\n 'button',\n {\n attrs: {\n type: 'button',\n\n disabled: this.$parent.disabled || this.$parent.internalCurrentPage === this.$parent.internalPageCount || this.$parent.internalPageCount === 0\n },\n 'class': 'btn-next', on: {\n 'click': this.$parent.next\n }\n },\n [this.$parent.nextText ? h('span', [this.$parent.nextText]) : h('i', { 'class': 'el-icon el-icon-arrow-right' })]\n );\n }\n },\n\n Sizes: {\n mixins: [locale_default.a],\n\n props: {\n pageSizes: Array\n },\n\n watch: {\n pageSizes: {\n immediate: true,\n handler: function handler(newVal, oldVal) {\n if (Object(util_[\"valueEquals\"])(newVal, oldVal)) return;\n if (Array.isArray(newVal)) {\n this.$parent.internalPageSize = newVal.indexOf(this.$parent.pageSize) > -1 ? this.$parent.pageSize : this.pageSizes[0];\n }\n }\n }\n },\n\n render: function render(h) {\n var _this = this;\n\n return h(\n 'span',\n { 'class': 'el-pagination__sizes' },\n [h(\n 'el-select',\n {\n attrs: {\n value: this.$parent.internalPageSize,\n popperClass: this.$parent.popperClass || '',\n size: 'mini',\n\n disabled: this.$parent.disabled },\n on: {\n 'input': this.handleChange\n }\n },\n [this.pageSizes.map(function (item) {\n return h('el-option', {\n attrs: {\n value: item,\n label: item + _this.t('el.pagination.pagesize') }\n });\n })]\n )]\n );\n },\n\n\n components: {\n ElSelect: select_default.a,\n ElOption: option_default.a\n },\n\n methods: {\n handleChange: function handleChange(val) {\n if (val !== this.$parent.internalPageSize) {\n this.$parent.internalPageSize = val = parseInt(val, 10);\n this.$parent.userChangePageSize = true;\n this.$parent.$emit('update:pageSize', val);\n this.$parent.$emit('size-change', val);\n }\n }\n }\n },\n\n Jumper: {\n mixins: [locale_default.a],\n\n components: { ElInput: input_default.a },\n\n data: function data() {\n return {\n userInput: null\n };\n },\n\n\n watch: {\n '$parent.internalCurrentPage': function $parentInternalCurrentPage() {\n this.userInput = null;\n }\n },\n\n methods: {\n handleKeyup: function handleKeyup(_ref) {\n var keyCode = _ref.keyCode,\n target = _ref.target;\n\n // Chrome, Safari, Firefox triggers change event on Enter\n // Hack for IE: https://github.com/ElemeFE/element/issues/11710\n // Drop this method when we no longer supports IE\n if (keyCode === 13) {\n this.handleChange(target.value);\n }\n },\n handleInput: function handleInput(value) {\n this.userInput = value;\n },\n handleChange: function handleChange(value) {\n this.$parent.internalCurrentPage = this.$parent.getValidCurrentPage(value);\n this.$parent.emitChange();\n this.userInput = null;\n }\n },\n\n render: function render(h) {\n return h(\n 'span',\n { 'class': 'el-pagination__jump' },\n [this.t('el.pagination.goto'), h('el-input', {\n 'class': 'el-pagination__editor is-in-pagination',\n attrs: { min: 1,\n max: this.$parent.internalPageCount,\n value: this.userInput !== null ? this.userInput : this.$parent.internalCurrentPage,\n type: 'number',\n disabled: this.$parent.disabled\n },\n nativeOn: {\n 'keyup': this.handleKeyup\n },\n on: {\n 'input': this.handleInput,\n 'change': this.handleChange\n }\n }), this.t('el.pagination.pageClassifier')]\n );\n }\n },\n\n Total: {\n mixins: [locale_default.a],\n\n render: function render(h) {\n return typeof this.$parent.total === 'number' ? h(\n 'span',\n { 'class': 'el-pagination__total' },\n [this.t('el.pagination.total', { total: this.$parent.total })]\n ) : '';\n }\n },\n\n Pager: pager\n },\n\n methods: {\n handleCurrentChange: function handleCurrentChange(val) {\n this.internalCurrentPage = this.getValidCurrentPage(val);\n this.userChangePageSize = true;\n this.emitChange();\n },\n prev: function prev() {\n if (this.disabled) return;\n var newVal = this.internalCurrentPage - 1;\n this.internalCurrentPage = this.getValidCurrentPage(newVal);\n this.$emit('prev-click', this.internalCurrentPage);\n this.emitChange();\n },\n next: function next() {\n if (this.disabled) return;\n var newVal = this.internalCurrentPage + 1;\n this.internalCurrentPage = this.getValidCurrentPage(newVal);\n this.$emit('next-click', this.internalCurrentPage);\n this.emitChange();\n },\n getValidCurrentPage: function getValidCurrentPage(value) {\n value = parseInt(value, 10);\n\n var havePageCount = typeof this.internalPageCount === 'number';\n\n var resetValue = void 0;\n if (!havePageCount) {\n if (isNaN(value) || value < 1) resetValue = 1;\n } else {\n if (value < 1) {\n resetValue = 1;\n } else if (value > this.internalPageCount) {\n resetValue = this.internalPageCount;\n }\n }\n\n if (resetValue === undefined && isNaN(value)) {\n resetValue = 1;\n } else if (resetValue === 0) {\n resetValue = 1;\n }\n\n return resetValue === undefined ? value : resetValue;\n },\n emitChange: function emitChange() {\n var _this2 = this;\n\n this.$nextTick(function () {\n if (_this2.internalCurrentPage !== _this2.lastEmittedPage || _this2.userChangePageSize) {\n _this2.$emit('current-change', _this2.internalCurrentPage);\n _this2.lastEmittedPage = _this2.internalCurrentPage;\n _this2.userChangePageSize = false;\n }\n });\n }\n },\n\n computed: {\n internalPageCount: function internalPageCount() {\n if (typeof this.total === 'number') {\n return Math.max(1, Math.ceil(this.total / this.internalPageSize));\n } else if (typeof this.pageCount === 'number') {\n return Math.max(1, this.pageCount);\n }\n return null;\n }\n },\n\n watch: {\n currentPage: {\n immediate: true,\n handler: function handler(val) {\n this.internalCurrentPage = this.getValidCurrentPage(val);\n }\n },\n\n pageSize: {\n immediate: true,\n handler: function handler(val) {\n this.internalPageSize = isNaN(val) ? 10 : val;\n }\n },\n\n internalCurrentPage: {\n immediate: true,\n handler: function handler(newVal) {\n this.$emit('update:currentPage', newVal);\n this.lastEmittedPage = -1;\n }\n },\n\n internalPageCount: function internalPageCount(newVal) {\n /* istanbul ignore if */\n var oldPage = this.internalCurrentPage;\n if (newVal > 0 && oldPage === 0) {\n this.internalCurrentPage = 1;\n } else if (oldPage > newVal) {\n this.internalCurrentPage = newVal === 0 ? 1 : newVal;\n this.userChangePageSize && this.emitChange();\n }\n this.userChangePageSize = false;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/pagination/index.js\n\n\n/* istanbul ignore next */\npagination.install = function (Vue) {\n Vue.component(pagination.name, pagination);\n};\n\n/* harmony default export */ var packages_pagination = (pagination);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dialog/src/component.vue?vue&type=template&id=60140e62&\nvar componentvue_type_template_id_60140e62_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"dialog-fade\" },\n on: { \"after-enter\": _vm.afterEnter, \"after-leave\": _vm.afterLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-dialog__wrapper\",\n on: {\n click: function($event) {\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.handleWrapperClick($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n key: _vm.key,\n ref: \"dialog\",\n class: [\n \"el-dialog\",\n {\n \"is-fullscreen\": _vm.fullscreen,\n \"el-dialog--center\": _vm.center\n },\n _vm.customClass\n ],\n style: _vm.style,\n attrs: {\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": _vm.title || \"dialog\"\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-dialog__header\" },\n [\n _vm._t(\"title\", [\n _c(\"span\", { staticClass: \"el-dialog__title\" }, [\n _vm._v(_vm._s(_vm.title))\n ])\n ]),\n _vm.showClose\n ? _c(\n \"button\",\n {\n staticClass: \"el-dialog__headerbtn\",\n attrs: { type: \"button\", \"aria-label\": \"Close\" },\n on: { click: _vm.handleClose }\n },\n [\n _c(\"i\", {\n staticClass:\n \"el-dialog__close el-icon el-icon-close\"\n })\n ]\n )\n : _vm._e()\n ],\n 2\n ),\n _vm.rendered\n ? _c(\n \"div\",\n { staticClass: \"el-dialog__body\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e(),\n _vm.$slots.footer\n ? _c(\n \"div\",\n { staticClass: \"el-dialog__footer\" },\n [_vm._t(\"footer\")],\n 2\n )\n : _vm._e()\n ]\n )\n ]\n )\n ]\n )\n}\nvar componentvue_type_template_id_60140e62_staticRenderFns = []\ncomponentvue_type_template_id_60140e62_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dialog/src/component.vue?vue&type=template&id=60140e62&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/popup\"\nvar popup_ = __webpack_require__(11);\nvar popup_default = /*#__PURE__*/__webpack_require__.n(popup_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/migrating\"\nvar migrating_ = __webpack_require__(9);\nvar migrating_default = /*#__PURE__*/__webpack_require__.n(migrating_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(3);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dialog/src/component.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var componentvue_type_script_lang_js_ = ({\n name: 'ElDialog',\n\n mixins: [popup_default.a, emitter_default.a, migrating_default.a],\n\n props: {\n title: {\n type: String,\n default: ''\n },\n\n modal: {\n type: Boolean,\n default: true\n },\n\n modalAppendToBody: {\n type: Boolean,\n default: true\n },\n\n appendToBody: {\n type: Boolean,\n default: false\n },\n\n lockScroll: {\n type: Boolean,\n default: true\n },\n\n closeOnClickModal: {\n type: Boolean,\n default: true\n },\n\n closeOnPressEscape: {\n type: Boolean,\n default: true\n },\n\n showClose: {\n type: Boolean,\n default: true\n },\n\n width: String,\n\n fullscreen: Boolean,\n\n customClass: {\n type: String,\n default: ''\n },\n\n top: {\n type: String,\n default: '15vh'\n },\n beforeClose: Function,\n center: {\n type: Boolean,\n default: false\n },\n\n destroyOnClose: Boolean\n },\n\n data: function data() {\n return {\n closed: false,\n key: 0\n };\n },\n\n\n watch: {\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n this.closed = false;\n this.$emit('open');\n this.$el.addEventListener('scroll', this.updatePopper);\n this.$nextTick(function () {\n _this.$refs.dialog.scrollTop = 0;\n });\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n } else {\n this.$el.removeEventListener('scroll', this.updatePopper);\n if (!this.closed) this.$emit('close');\n if (this.destroyOnClose) {\n this.$nextTick(function () {\n _this.key++;\n });\n }\n }\n }\n },\n\n computed: {\n style: function style() {\n var style = {};\n if (!this.fullscreen) {\n style.marginTop = this.top;\n if (this.width) {\n style.width = this.width;\n }\n }\n return style;\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'size': 'size is removed.'\n }\n };\n },\n handleWrapperClick: function handleWrapperClick() {\n if (!this.closeOnClickModal) return;\n this.handleClose();\n },\n handleClose: function handleClose() {\n if (typeof this.beforeClose === 'function') {\n this.beforeClose(this.hide);\n } else {\n this.hide();\n }\n },\n hide: function hide(cancel) {\n if (cancel !== false) {\n this.$emit('update:visible', false);\n this.$emit('close');\n this.closed = true;\n }\n },\n updatePopper: function updatePopper() {\n this.broadcast('ElSelectDropdown', 'updatePopper');\n this.broadcast('ElDropdownMenu', 'updatePopper');\n },\n afterEnter: function afterEnter() {\n this.$emit('opened');\n },\n afterLeave: function afterLeave() {\n this.$emit('closed');\n }\n },\n\n mounted: function mounted() {\n if (this.visible) {\n this.rendered = true;\n this.open();\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n }\n },\n destroyed: function destroyed() {\n // if appendToBody is true, remove DOM node after destroy\n if (this.appendToBody && this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/dialog/src/component.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_componentvue_type_script_lang_js_ = (componentvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dialog/src/component.vue\n\n\n\n\n\n/* normalize component */\n\nvar component_component = normalizeComponent(\n src_componentvue_type_script_lang_js_,\n componentvue_type_template_id_60140e62_render,\n componentvue_type_template_id_60140e62_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var component_api; }\ncomponent_component.options.__file = \"packages/dialog/src/component.vue\"\n/* harmony default export */ var src_component = (component_component.exports);\n// CONCATENATED MODULE: ./packages/dialog/index.js\n\n\n/* istanbul ignore next */\nsrc_component.install = function (Vue) {\n Vue.component(src_component.name, src_component);\n};\n\n/* harmony default export */ var dialog = (src_component);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete.vue?vue&type=template&id=152f2ee6&\nvar autocompletevue_type_template_id_152f2ee6_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.close,\n expression: \"close\"\n }\n ],\n staticClass: \"el-autocomplete\",\n attrs: {\n \"aria-haspopup\": \"listbox\",\n role: \"combobox\",\n \"aria-expanded\": _vm.suggestionVisible,\n \"aria-owns\": _vm.id\n }\n },\n [\n _c(\n \"el-input\",\n _vm._b(\n {\n ref: \"input\",\n on: {\n input: _vm.handleInput,\n change: _vm.handleChange,\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n clear: _vm.handleClear\n },\n nativeOn: {\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.highlight(_vm.highlightedIndex - 1)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.highlight(_vm.highlightedIndex + 1)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.handleKeyEnter($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n return _vm.close($event)\n }\n ]\n }\n },\n \"el-input\",\n [_vm.$props, _vm.$attrs],\n false\n ),\n [\n _vm.$slots.prepend\n ? _c(\"template\", { slot: \"prepend\" }, [_vm._t(\"prepend\")], 2)\n : _vm._e(),\n _vm.$slots.append\n ? _c(\"template\", { slot: \"append\" }, [_vm._t(\"append\")], 2)\n : _vm._e(),\n _vm.$slots.prefix\n ? _c(\"template\", { slot: \"prefix\" }, [_vm._t(\"prefix\")], 2)\n : _vm._e(),\n _vm.$slots.suffix\n ? _c(\"template\", { slot: \"suffix\" }, [_vm._t(\"suffix\")], 2)\n : _vm._e()\n ],\n 2\n ),\n _c(\n \"el-autocomplete-suggestions\",\n {\n ref: \"suggestions\",\n class: [_vm.popperClass ? _vm.popperClass : \"\"],\n attrs: {\n \"visible-arrow\": \"\",\n \"popper-options\": _vm.popperOptions,\n \"append-to-body\": _vm.popperAppendToBody,\n placement: _vm.placement,\n id: _vm.id\n }\n },\n _vm._l(_vm.suggestions, function(item, index) {\n return _c(\n \"li\",\n {\n key: index,\n class: { highlighted: _vm.highlightedIndex === index },\n attrs: {\n id: _vm.id + \"-item-\" + index,\n role: \"option\",\n \"aria-selected\": _vm.highlightedIndex === index\n },\n on: {\n click: function($event) {\n _vm.select(item)\n }\n }\n },\n [\n _vm._t(\n \"default\",\n [\n _vm._v(\"\\n \" + _vm._s(item[_vm.valueKey]) + \"\\n \")\n ],\n { item: item }\n )\n ],\n 2\n )\n }),\n 0\n )\n ],\n 1\n )\n}\nvar autocompletevue_type_template_id_152f2ee6_staticRenderFns = []\nautocompletevue_type_template_id_152f2ee6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue?vue&type=template&id=152f2ee6&\n\n// EXTERNAL MODULE: external \"throttle-debounce/debounce\"\nvar debounce_ = __webpack_require__(16);\nvar debounce_default = /*#__PURE__*/__webpack_require__.n(debounce_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/clickoutside\"\nvar clickoutside_ = __webpack_require__(10);\nvar clickoutside_default = /*#__PURE__*/__webpack_require__.n(clickoutside_);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=template&id=cd10dcf0&\nvar autocomplete_suggestionsvue_type_template_id_cd10dcf0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-autocomplete-suggestion el-popper\",\n class: {\n \"is-loading\": !_vm.parent.hideLoading && _vm.parent.loading\n },\n style: { width: _vm.dropdownWidth },\n attrs: { role: \"region\" }\n },\n [\n _c(\n \"el-scrollbar\",\n {\n attrs: {\n tag: \"ul\",\n \"wrap-class\": \"el-autocomplete-suggestion__wrap\",\n \"view-class\": \"el-autocomplete-suggestion__list\"\n }\n },\n [\n !_vm.parent.hideLoading && _vm.parent.loading\n ? _c(\"li\", [_c(\"i\", { staticClass: \"el-icon-loading\" })])\n : _vm._t(\"default\")\n ],\n 2\n )\n ],\n 1\n )\n ]\n )\n}\nvar autocomplete_suggestionsvue_type_template_id_cd10dcf0_staticRenderFns = []\nautocomplete_suggestionsvue_type_template_id_cd10dcf0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=template&id=cd10dcf0&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __webpack_require__(5);\nvar vue_popper_default = /*#__PURE__*/__webpack_require__.n(vue_popper_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/scrollbar\"\nvar scrollbar_ = __webpack_require__(18);\nvar scrollbar_default = /*#__PURE__*/__webpack_require__.n(scrollbar_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var autocomplete_suggestionsvue_type_script_lang_js_ = ({\n components: { ElScrollbar: scrollbar_default.a },\n mixins: [vue_popper_default.a, emitter_default.a],\n\n componentName: 'ElAutocompleteSuggestions',\n\n data: function data() {\n return {\n parent: this.$parent,\n dropdownWidth: ''\n };\n },\n\n\n props: {\n options: {\n default: function _default() {\n return {\n gpuAcceleration: false\n };\n }\n },\n id: String\n },\n\n methods: {\n select: function select(item) {\n this.dispatch('ElAutocomplete', 'item-click', item);\n }\n },\n\n updated: function updated() {\n var _this = this;\n\n this.$nextTick(function (_) {\n _this.popperJS && _this.updatePopper();\n });\n },\n mounted: function mounted() {\n this.$parent.popperElm = this.popperElm = this.$el;\n this.referenceElm = this.$parent.$refs.input.$refs.input || this.$parent.$refs.input.$refs.textarea;\n this.referenceList = this.$el.querySelector('.el-autocomplete-suggestion__list');\n this.referenceList.setAttribute('role', 'listbox');\n this.referenceList.setAttribute('id', this.id);\n },\n created: function created() {\n var _this2 = this;\n\n this.$on('visible', function (val, inputWidth) {\n _this2.dropdownWidth = inputWidth + 'px';\n _this2.showPopper = val;\n });\n }\n});\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_autocomplete_suggestionsvue_type_script_lang_js_ = (autocomplete_suggestionsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete-suggestions.vue\n\n\n\n\n\n/* normalize component */\n\nvar autocomplete_suggestions_component = normalizeComponent(\n src_autocomplete_suggestionsvue_type_script_lang_js_,\n autocomplete_suggestionsvue_type_template_id_cd10dcf0_render,\n autocomplete_suggestionsvue_type_template_id_cd10dcf0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var autocomplete_suggestions_api; }\nautocomplete_suggestions_component.options.__file = \"packages/autocomplete/src/autocomplete-suggestions.vue\"\n/* harmony default export */ var autocomplete_suggestions = (autocomplete_suggestions_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/focus\"\nvar focus_ = __webpack_require__(23);\nvar focus_default = /*#__PURE__*/__webpack_require__.n(focus_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/autocomplete/src/autocomplete.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var autocompletevue_type_script_lang_js_ = ({\n name: 'ElAutocomplete',\n\n mixins: [emitter_default.a, focus_default()('input'), migrating_default.a],\n\n inheritAttrs: false,\n\n componentName: 'ElAutocomplete',\n\n components: {\n ElInput: input_default.a,\n ElAutocompleteSuggestions: autocomplete_suggestions\n },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n props: {\n valueKey: {\n type: String,\n default: 'value'\n },\n popperClass: String,\n popperOptions: Object,\n placeholder: String,\n clearable: {\n type: Boolean,\n default: false\n },\n disabled: Boolean,\n name: String,\n size: String,\n value: String,\n maxlength: Number,\n minlength: Number,\n autofocus: Boolean,\n fetchSuggestions: Function,\n triggerOnFocus: {\n type: Boolean,\n default: true\n },\n customItem: String,\n selectWhenUnmatched: {\n type: Boolean,\n default: false\n },\n prefixIcon: String,\n suffixIcon: String,\n label: String,\n debounce: {\n type: Number,\n default: 300\n },\n placement: {\n type: String,\n default: 'bottom-start'\n },\n hideLoading: Boolean,\n popperAppendToBody: {\n type: Boolean,\n default: true\n },\n highlightFirstItem: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n return {\n activated: false,\n suggestions: [],\n loading: false,\n highlightedIndex: -1,\n suggestionDisabled: false\n };\n },\n\n computed: {\n suggestionVisible: function suggestionVisible() {\n var suggestions = this.suggestions;\n var isValidData = Array.isArray(suggestions) && suggestions.length > 0;\n return (isValidData || this.loading) && this.activated;\n },\n id: function id() {\n return 'el-autocomplete-' + Object(util_[\"generateId\"])();\n }\n },\n watch: {\n suggestionVisible: function suggestionVisible(val) {\n var $input = this.getInput();\n if ($input) {\n this.broadcast('ElAutocompleteSuggestions', 'visible', [val, $input.offsetWidth]);\n }\n }\n },\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'custom-item': 'custom-item is removed, use scoped slot instead.',\n 'props': 'props is removed, use value-key instead.'\n }\n };\n },\n getData: function getData(queryString) {\n var _this = this;\n\n if (this.suggestionDisabled) {\n return;\n }\n this.loading = true;\n this.fetchSuggestions(queryString, function (suggestions) {\n _this.loading = false;\n if (_this.suggestionDisabled) {\n return;\n }\n if (Array.isArray(suggestions)) {\n _this.suggestions = suggestions;\n _this.highlightedIndex = _this.highlightFirstItem ? 0 : -1;\n } else {\n console.error('[Element Error][Autocomplete]autocomplete suggestions must be an array');\n }\n });\n },\n handleInput: function handleInput(value) {\n this.$emit('input', value);\n this.suggestionDisabled = false;\n if (!this.triggerOnFocus && !value) {\n this.suggestionDisabled = true;\n this.suggestions = [];\n return;\n }\n this.debouncedGetData(value);\n },\n handleChange: function handleChange(value) {\n this.$emit('change', value);\n },\n handleFocus: function handleFocus(event) {\n this.activated = true;\n this.$emit('focus', event);\n if (this.triggerOnFocus) {\n this.debouncedGetData(this.value);\n }\n },\n handleBlur: function handleBlur(event) {\n this.$emit('blur', event);\n },\n handleClear: function handleClear() {\n this.activated = false;\n this.$emit('clear');\n },\n close: function close(e) {\n this.activated = false;\n },\n handleKeyEnter: function handleKeyEnter(e) {\n var _this2 = this;\n\n if (this.suggestionVisible && this.highlightedIndex >= 0 && this.highlightedIndex < this.suggestions.length) {\n e.preventDefault();\n this.select(this.suggestions[this.highlightedIndex]);\n } else if (this.selectWhenUnmatched) {\n this.$emit('select', { value: this.value });\n this.$nextTick(function (_) {\n _this2.suggestions = [];\n _this2.highlightedIndex = -1;\n });\n }\n },\n select: function select(item) {\n var _this3 = this;\n\n this.$emit('input', item[this.valueKey]);\n this.$emit('select', item);\n this.$nextTick(function (_) {\n _this3.suggestions = [];\n _this3.highlightedIndex = -1;\n });\n },\n highlight: function highlight(index) {\n if (!this.suggestionVisible || this.loading) {\n return;\n }\n if (index < 0) {\n this.highlightedIndex = -1;\n return;\n }\n if (index >= this.suggestions.length) {\n index = this.suggestions.length - 1;\n }\n var suggestion = this.$refs.suggestions.$el.querySelector('.el-autocomplete-suggestion__wrap');\n var suggestionList = suggestion.querySelectorAll('.el-autocomplete-suggestion__list li');\n\n var highlightItem = suggestionList[index];\n var scrollTop = suggestion.scrollTop;\n var offsetTop = highlightItem.offsetTop;\n\n if (offsetTop + highlightItem.scrollHeight > scrollTop + suggestion.clientHeight) {\n suggestion.scrollTop += highlightItem.scrollHeight;\n }\n if (offsetTop < scrollTop) {\n suggestion.scrollTop -= highlightItem.scrollHeight;\n }\n this.highlightedIndex = index;\n var $input = this.getInput();\n $input.setAttribute('aria-activedescendant', this.id + '-item-' + this.highlightedIndex);\n },\n getInput: function getInput() {\n return this.$refs.input.getInput();\n }\n },\n mounted: function mounted() {\n var _this4 = this;\n\n this.debouncedGetData = debounce_default()(this.debounce, this.getData);\n this.$on('item-click', function (item) {\n _this4.select(item);\n });\n var $input = this.getInput();\n $input.setAttribute('role', 'textbox');\n $input.setAttribute('aria-autocomplete', 'list');\n $input.setAttribute('aria-controls', 'id');\n $input.setAttribute('aria-activedescendant', this.id + '-item-' + this.highlightedIndex);\n },\n beforeDestroy: function beforeDestroy() {\n this.$refs.suggestions.$destroy();\n }\n});\n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_autocompletevue_type_script_lang_js_ = (autocompletevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/autocomplete/src/autocomplete.vue\n\n\n\n\n\n/* normalize component */\n\nvar autocomplete_component = normalizeComponent(\n src_autocompletevue_type_script_lang_js_,\n autocompletevue_type_template_id_152f2ee6_render,\n autocompletevue_type_template_id_152f2ee6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var autocomplete_api; }\nautocomplete_component.options.__file = \"packages/autocomplete/src/autocomplete.vue\"\n/* harmony default export */ var autocomplete = (autocomplete_component.exports);\n// CONCATENATED MODULE: ./packages/autocomplete/index.js\n\n\n/* istanbul ignore next */\nautocomplete.install = function (Vue) {\n Vue.component(autocomplete.name, autocomplete);\n};\n\n/* harmony default export */ var packages_autocomplete = (autocomplete);\n// EXTERNAL MODULE: external \"element-ui/lib/button\"\nvar button_ = __webpack_require__(13);\nvar button_default = /*#__PURE__*/__webpack_require__.n(button_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/button-group\"\nvar button_group_ = __webpack_require__(28);\nvar button_group_default = /*#__PURE__*/__webpack_require__.n(button_group_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n\n\n/* harmony default export */ var dropdownvue_type_script_lang_js_ = ({\n name: 'ElDropdown',\n\n componentName: 'ElDropdown',\n\n mixins: [emitter_default.a, migrating_default.a],\n\n directives: { Clickoutside: clickoutside_default.a },\n\n components: {\n ElButton: button_default.a,\n ElButtonGroup: button_group_default.a\n },\n\n provide: function provide() {\n return {\n dropdown: this\n };\n },\n\n\n props: {\n trigger: {\n type: String,\n default: 'hover'\n },\n type: String,\n size: {\n type: String,\n default: ''\n },\n splitButton: Boolean,\n hideOnClick: {\n type: Boolean,\n default: true\n },\n placement: {\n type: String,\n default: 'bottom-end'\n },\n visibleArrow: {\n default: true\n },\n showTimeout: {\n type: Number,\n default: 250\n },\n hideTimeout: {\n type: Number,\n default: 150\n },\n tabindex: {\n type: Number,\n default: 0\n },\n disabled: {\n type: Boolean,\n default: false\n }\n },\n\n data: function data() {\n return {\n timeout: null,\n visible: false,\n triggerElm: null,\n menuItems: null,\n menuItemsArray: null,\n dropdownElm: null,\n focusing: false,\n listId: 'dropdown-menu-' + Object(util_[\"generateId\"])()\n };\n },\n\n\n computed: {\n dropdownSize: function dropdownSize() {\n return this.size || (this.$ELEMENT || {}).size;\n }\n },\n\n mounted: function mounted() {\n this.$on('menu-item-click', this.handleMenuItemClick);\n },\n\n\n watch: {\n visible: function visible(val) {\n this.broadcast('ElDropdownMenu', 'visible', val);\n this.$emit('visible-change', val);\n },\n focusing: function focusing(val) {\n var selfDefine = this.$el.querySelector('.el-dropdown-selfdefine');\n if (selfDefine) {\n // 自定义\n if (val) {\n selfDefine.className += ' focusing';\n } else {\n selfDefine.className = selfDefine.className.replace('focusing', '');\n }\n }\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'menu-align': 'menu-align is renamed to placement.'\n }\n };\n },\n show: function show() {\n var _this = this;\n\n if (this.disabled) return;\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this.visible = true;\n }, this.trigger === 'click' ? 0 : this.showTimeout);\n },\n hide: function hide() {\n var _this2 = this;\n\n if (this.disabled) return;\n this.removeTabindex();\n if (this.tabindex >= 0) {\n this.resetTabindex(this.triggerElm);\n }\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this2.visible = false;\n }, this.trigger === 'click' ? 0 : this.hideTimeout);\n },\n handleClick: function handleClick() {\n if (this.disabled) return;\n if (this.visible) {\n this.hide();\n } else {\n this.show();\n }\n },\n handleTriggerKeyDown: function handleTriggerKeyDown(ev) {\n var keyCode = ev.keyCode;\n if ([38, 40].indexOf(keyCode) > -1) {\n // up/down\n this.removeTabindex();\n this.resetTabindex(this.menuItems[0]);\n this.menuItems[0].focus();\n ev.preventDefault();\n ev.stopPropagation();\n } else if (keyCode === 13) {\n // space enter选中\n this.handleClick();\n } else if ([9, 27].indexOf(keyCode) > -1) {\n // tab || esc\n this.hide();\n }\n },\n handleItemKeyDown: function handleItemKeyDown(ev) {\n var keyCode = ev.keyCode;\n var target = ev.target;\n var currentIndex = this.menuItemsArray.indexOf(target);\n var max = this.menuItemsArray.length - 1;\n var nextIndex = void 0;\n if ([38, 40].indexOf(keyCode) > -1) {\n // up/down\n if (keyCode === 38) {\n // up\n nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0;\n } else {\n // down\n nextIndex = currentIndex < max ? currentIndex + 1 : max;\n }\n this.removeTabindex();\n this.resetTabindex(this.menuItems[nextIndex]);\n this.menuItems[nextIndex].focus();\n ev.preventDefault();\n ev.stopPropagation();\n } else if (keyCode === 13) {\n // enter选中\n this.triggerElmFocus();\n target.click();\n if (this.hideOnClick) {\n // click关闭\n this.visible = false;\n }\n } else if ([9, 27].indexOf(keyCode) > -1) {\n // tab // esc\n this.hide();\n this.triggerElmFocus();\n }\n },\n resetTabindex: function resetTabindex(ele) {\n // 下次tab时组件聚焦元素\n this.removeTabindex();\n ele.setAttribute('tabindex', '0'); // 下次期望的聚焦元素\n },\n removeTabindex: function removeTabindex() {\n this.triggerElm.setAttribute('tabindex', '-1');\n this.menuItemsArray.forEach(function (item) {\n item.setAttribute('tabindex', '-1');\n });\n },\n initAria: function initAria() {\n this.dropdownElm.setAttribute('id', this.listId);\n this.triggerElm.setAttribute('aria-haspopup', 'list');\n this.triggerElm.setAttribute('aria-controls', this.listId);\n\n if (!this.splitButton) {\n // 自定义\n this.triggerElm.setAttribute('role', 'button');\n this.triggerElm.setAttribute('tabindex', this.tabindex);\n this.triggerElm.setAttribute('class', (this.triggerElm.getAttribute('class') || '') + ' el-dropdown-selfdefine'); // 控制\n }\n },\n initEvent: function initEvent() {\n var _this3 = this;\n\n var trigger = this.trigger,\n show = this.show,\n hide = this.hide,\n handleClick = this.handleClick,\n splitButton = this.splitButton,\n handleTriggerKeyDown = this.handleTriggerKeyDown,\n handleItemKeyDown = this.handleItemKeyDown;\n\n this.triggerElm = splitButton ? this.$refs.trigger.$el : this.$slots.default[0].elm;\n\n var dropdownElm = this.dropdownElm;\n\n this.triggerElm.addEventListener('keydown', handleTriggerKeyDown); // triggerElm keydown\n dropdownElm.addEventListener('keydown', handleItemKeyDown, true); // item keydown\n // 控制自定义元素的样式\n if (!splitButton) {\n this.triggerElm.addEventListener('focus', function () {\n _this3.focusing = true;\n });\n this.triggerElm.addEventListener('blur', function () {\n _this3.focusing = false;\n });\n this.triggerElm.addEventListener('click', function () {\n _this3.focusing = false;\n });\n }\n if (trigger === 'hover') {\n this.triggerElm.addEventListener('mouseenter', show);\n this.triggerElm.addEventListener('mouseleave', hide);\n dropdownElm.addEventListener('mouseenter', show);\n dropdownElm.addEventListener('mouseleave', hide);\n } else if (trigger === 'click') {\n this.triggerElm.addEventListener('click', handleClick);\n }\n },\n handleMenuItemClick: function handleMenuItemClick(command, instance) {\n if (this.hideOnClick) {\n this.visible = false;\n }\n this.$emit('command', command, instance);\n },\n triggerElmFocus: function triggerElmFocus() {\n this.triggerElm.focus && this.triggerElm.focus();\n },\n initDomOperation: function initDomOperation() {\n this.dropdownElm = this.popperElm;\n this.menuItems = this.dropdownElm.querySelectorAll(\"[tabindex='-1']\");\n this.menuItemsArray = [].slice.call(this.menuItems);\n\n this.initEvent();\n this.initAria();\n }\n },\n\n render: function render(h) {\n var _this4 = this;\n\n var hide = this.hide,\n splitButton = this.splitButton,\n type = this.type,\n dropdownSize = this.dropdownSize,\n disabled = this.disabled;\n\n\n var handleMainButtonClick = function handleMainButtonClick(event) {\n _this4.$emit('click', event);\n hide();\n };\n\n var triggerElm = null;\n if (splitButton) {\n triggerElm = h('el-button-group', [h(\n 'el-button',\n {\n attrs: { type: type, size: dropdownSize, disabled: disabled },\n nativeOn: {\n 'click': handleMainButtonClick\n }\n },\n [this.$slots.default]\n ), h(\n 'el-button',\n { ref: 'trigger', attrs: { type: type, size: dropdownSize, disabled: disabled },\n 'class': 'el-dropdown__caret-button' },\n [h('i', { 'class': 'el-dropdown__icon el-icon-arrow-down' })]\n )]);\n } else {\n triggerElm = this.$slots.default;\n var vnodeData = triggerElm[0].data || {};\n var _vnodeData$attrs = vnodeData.attrs,\n attrs = _vnodeData$attrs === undefined ? {} : _vnodeData$attrs;\n\n if (disabled && !attrs.disabled) {\n attrs.disabled = true;\n vnodeData.attrs = attrs;\n }\n }\n var menuElm = disabled ? null : this.$slots.dropdown;\n\n return h(\n 'div',\n { 'class': 'el-dropdown', directives: [{\n name: 'clickoutside',\n value: hide\n }],\n attrs: { 'aria-disabled': disabled }\n },\n [triggerElm, menuElm]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdownvue_type_script_lang_js_ = (dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown.vue\nvar dropdown_render, dropdown_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar dropdown_component = normalizeComponent(\n src_dropdownvue_type_script_lang_js_,\n dropdown_render,\n dropdown_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var dropdown_api; }\ndropdown_component.options.__file = \"packages/dropdown/src/dropdown.vue\"\n/* harmony default export */ var dropdown = (dropdown_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown/index.js\n\n\n/* istanbul ignore next */\ndropdown.install = function (Vue) {\n Vue.component(dropdown.name, dropdown);\n};\n\n/* harmony default export */ var packages_dropdown = (dropdown);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-menu.vue?vue&type=template&id=0da6b714&\nvar dropdown_menuvue_type_template_id_0da6b714_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n [\n _c(\n \"ul\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-dropdown-menu el-popper\",\n class: [_vm.size && \"el-dropdown-menu--\" + _vm.size]\n },\n [_vm._t(\"default\")],\n 2\n )\n ]\n )\n}\nvar dropdown_menuvue_type_template_id_0da6b714_staticRenderFns = []\ndropdown_menuvue_type_template_id_0da6b714_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue?vue&type=template&id=0da6b714&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-menu.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var dropdown_menuvue_type_script_lang_js_ = ({\n name: 'ElDropdownMenu',\n\n componentName: 'ElDropdownMenu',\n\n mixins: [vue_popper_default.a],\n\n props: {\n visibleArrow: {\n type: Boolean,\n default: true\n },\n arrowOffset: {\n type: Number,\n default: 0\n }\n },\n\n data: function data() {\n return {\n size: this.dropdown.dropdownSize\n };\n },\n\n\n inject: ['dropdown'],\n\n created: function created() {\n var _this = this;\n\n this.$on('updatePopper', function () {\n if (_this.showPopper) _this.updatePopper();\n });\n this.$on('visible', function (val) {\n _this.showPopper = val;\n });\n },\n mounted: function mounted() {\n this.dropdown.popperElm = this.popperElm = this.$el;\n this.referenceElm = this.dropdown.$el;\n // compatible with 2.6 new v-slot syntax\n // issue link https://github.com/ElemeFE/element/issues/14345\n this.dropdown.initDomOperation();\n },\n\n\n watch: {\n 'dropdown.placement': {\n immediate: true,\n handler: function handler(val) {\n this.currentPlacement = val;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdown_menuvue_type_script_lang_js_ = (dropdown_menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-menu.vue\n\n\n\n\n\n/* normalize component */\n\nvar dropdown_menu_component = normalizeComponent(\n src_dropdown_menuvue_type_script_lang_js_,\n dropdown_menuvue_type_template_id_0da6b714_render,\n dropdown_menuvue_type_template_id_0da6b714_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var dropdown_menu_api; }\ndropdown_menu_component.options.__file = \"packages/dropdown/src/dropdown-menu.vue\"\n/* harmony default export */ var dropdown_menu = (dropdown_menu_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown-menu/index.js\n\n\n/* istanbul ignore next */\ndropdown_menu.install = function (Vue) {\n Vue.component(dropdown_menu.name, dropdown_menu);\n};\n\n/* harmony default export */ var packages_dropdown_menu = (dropdown_menu);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-item.vue?vue&type=template&id=6359102a&\nvar dropdown_itemvue_type_template_id_6359102a_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n staticClass: \"el-dropdown-menu__item\",\n class: {\n \"is-disabled\": _vm.disabled,\n \"el-dropdown-menu__item--divided\": _vm.divided\n },\n attrs: {\n \"aria-disabled\": _vm.disabled,\n tabindex: _vm.disabled ? null : -1\n },\n on: { click: _vm.handleClick }\n },\n [_vm.icon ? _c(\"i\", { class: _vm.icon }) : _vm._e(), _vm._t(\"default\")],\n 2\n )\n}\nvar dropdown_itemvue_type_template_id_6359102a_staticRenderFns = []\ndropdown_itemvue_type_template_id_6359102a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue?vue&type=template&id=6359102a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/dropdown/src/dropdown-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var dropdown_itemvue_type_script_lang_js_ = ({\n name: 'ElDropdownItem',\n\n mixins: [emitter_default.a],\n\n props: {\n command: {},\n disabled: Boolean,\n divided: Boolean,\n icon: String\n },\n\n methods: {\n handleClick: function handleClick(e) {\n this.dispatch('ElDropdown', 'menu-item-click', [this.command, this]);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_dropdown_itemvue_type_script_lang_js_ = (dropdown_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/dropdown/src/dropdown-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar dropdown_item_component = normalizeComponent(\n src_dropdown_itemvue_type_script_lang_js_,\n dropdown_itemvue_type_template_id_6359102a_render,\n dropdown_itemvue_type_template_id_6359102a_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var dropdown_item_api; }\ndropdown_item_component.options.__file = \"packages/dropdown/src/dropdown-item.vue\"\n/* harmony default export */ var dropdown_item = (dropdown_item_component.exports);\n// CONCATENATED MODULE: ./packages/dropdown-item/index.js\n\n\n/* istanbul ignore next */\ndropdown_item.install = function (Vue) {\n Vue.component(dropdown_item.name, dropdown_item);\n};\n\n/* harmony default export */ var packages_dropdown_item = (dropdown_item);\n// CONCATENATED MODULE: ./src/utils/aria-utils.js\nvar aria = aria || {};\n\naria.Utils = aria.Utils || {};\n\n/**\n * @desc Set focus on descendant nodes until the first focusable element is\n * found.\n * @param element\n * DOM node for which to find the first focusable descendant.\n * @returns\n * true if a focusable element is found and focus is set.\n */\naria.Utils.focusFirstDescendant = function (element) {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (aria.Utils.attemptFocus(child) || aria.Utils.focusFirstDescendant(child)) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @desc Find the last descendant node that is focusable.\n * @param element\n * DOM node for which to find the last focusable descendant.\n * @returns\n * true if a focusable element is found and focus is set.\n */\n\naria.Utils.focusLastDescendant = function (element) {\n for (var i = element.childNodes.length - 1; i >= 0; i--) {\n var child = element.childNodes[i];\n if (aria.Utils.attemptFocus(child) || aria.Utils.focusLastDescendant(child)) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @desc Set Attempt to set focus on the current node.\n * @param element\n * The node to attempt to focus on.\n * @returns\n * true if element is focused.\n */\naria.Utils.attemptFocus = function (element) {\n if (!aria.Utils.isFocusable(element)) {\n return false;\n }\n aria.Utils.IgnoreUtilFocusChanges = true;\n try {\n element.focus();\n } catch (e) {}\n aria.Utils.IgnoreUtilFocusChanges = false;\n return document.activeElement === element;\n};\n\naria.Utils.isFocusable = function (element) {\n if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute('tabIndex') !== null) {\n return true;\n }\n\n if (element.disabled) {\n return false;\n }\n\n switch (element.nodeName) {\n case 'A':\n return !!element.href && element.rel !== 'ignore';\n case 'INPUT':\n return element.type !== 'hidden' && element.type !== 'file';\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n};\n\n/**\n * 触发一个事件\n * mouseenter, mouseleave, mouseover, keyup, change, click 等\n * @param {Element} elm\n * @param {String} name\n * @param {*} opts\n */\naria.Utils.triggerEvent = function (elm, name) {\n var eventName = void 0;\n\n if (/^mouse|click/.test(name)) {\n eventName = 'MouseEvents';\n } else if (/^key/.test(name)) {\n eventName = 'KeyboardEvent';\n } else {\n eventName = 'HTMLEvents';\n }\n var evt = document.createEvent(eventName);\n\n for (var _len = arguments.length, opts = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n opts[_key - 2] = arguments[_key];\n }\n\n evt.initEvent.apply(evt, [name].concat(opts));\n elm.dispatchEvent ? elm.dispatchEvent(evt) : elm.fireEvent('on' + name, evt);\n\n return elm;\n};\n\naria.Utils.keys = {\n tab: 9,\n enter: 13,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n esc: 27\n};\n\n/* harmony default export */ var aria_utils = (aria.Utils);\n// CONCATENATED MODULE: ./src/utils/menu/aria-submenu.js\n\n\nvar SubMenu = function SubMenu(parent, domNode) {\n this.domNode = domNode;\n this.parent = parent;\n this.subMenuItems = [];\n this.subIndex = 0;\n this.init();\n};\n\nSubMenu.prototype.init = function () {\n this.subMenuItems = this.domNode.querySelectorAll('li');\n this.addListeners();\n};\n\nSubMenu.prototype.gotoSubIndex = function (idx) {\n if (idx === this.subMenuItems.length) {\n idx = 0;\n } else if (idx < 0) {\n idx = this.subMenuItems.length - 1;\n }\n this.subMenuItems[idx].focus();\n this.subIndex = idx;\n};\n\nSubMenu.prototype.addListeners = function () {\n var _this = this;\n\n var keys = aria_utils.keys;\n var parentNode = this.parent.domNode;\n Array.prototype.forEach.call(this.subMenuItems, function (el) {\n el.addEventListener('keydown', function (event) {\n var prevDef = false;\n switch (event.keyCode) {\n case keys.down:\n _this.gotoSubIndex(_this.subIndex + 1);\n prevDef = true;\n break;\n case keys.up:\n _this.gotoSubIndex(_this.subIndex - 1);\n prevDef = true;\n break;\n case keys.tab:\n aria_utils.triggerEvent(parentNode, 'mouseleave');\n break;\n case keys.enter:\n case keys.space:\n prevDef = true;\n event.currentTarget.click();\n break;\n }\n if (prevDef) {\n event.preventDefault();\n event.stopPropagation();\n }\n return false;\n });\n });\n};\n\n/* harmony default export */ var aria_submenu = (SubMenu);\n// CONCATENATED MODULE: ./src/utils/menu/aria-menuitem.js\n\n\n\nvar MenuItem = function MenuItem(domNode) {\n this.domNode = domNode;\n this.submenu = null;\n this.init();\n};\n\nMenuItem.prototype.init = function () {\n this.domNode.setAttribute('tabindex', '0');\n var menuChild = this.domNode.querySelector('.el-menu');\n if (menuChild) {\n this.submenu = new aria_submenu(this, menuChild);\n }\n this.addListeners();\n};\n\nMenuItem.prototype.addListeners = function () {\n var _this = this;\n\n var keys = aria_utils.keys;\n this.domNode.addEventListener('keydown', function (event) {\n var prevDef = false;\n switch (event.keyCode) {\n case keys.down:\n aria_utils.triggerEvent(event.currentTarget, 'mouseenter');\n _this.submenu && _this.submenu.gotoSubIndex(0);\n prevDef = true;\n break;\n case keys.up:\n aria_utils.triggerEvent(event.currentTarget, 'mouseenter');\n _this.submenu && _this.submenu.gotoSubIndex(_this.submenu.subMenuItems.length - 1);\n prevDef = true;\n break;\n case keys.tab:\n aria_utils.triggerEvent(event.currentTarget, 'mouseleave');\n break;\n case keys.enter:\n case keys.space:\n prevDef = true;\n event.currentTarget.click();\n break;\n }\n if (prevDef) {\n event.preventDefault();\n }\n });\n};\n\n/* harmony default export */ var aria_menuitem = (MenuItem);\n// CONCATENATED MODULE: ./src/utils/menu/aria-menubar.js\n\n\nvar Menu = function Menu(domNode) {\n this.domNode = domNode;\n this.init();\n};\n\nMenu.prototype.init = function () {\n var menuChildren = this.domNode.childNodes;\n [].filter.call(menuChildren, function (child) {\n return child.nodeType === 1;\n }).forEach(function (child) {\n new aria_menuitem(child); // eslint-disable-line\n });\n};\n/* harmony default export */ var aria_menubar = (Menu);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __webpack_require__(1);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n/* harmony default export */ var menuvue_type_script_lang_js_ = ({\n name: 'ElMenu',\n\n render: function render(h) {\n var component = h(\n 'ul',\n {\n attrs: {\n role: 'menubar'\n },\n key: +this.collapse,\n style: { backgroundColor: this.backgroundColor || '' },\n 'class': {\n 'el-menu--horizontal': this.mode === 'horizontal',\n 'el-menu--collapse': this.collapse,\n \"el-menu\": true\n }\n },\n [this.$slots.default]\n );\n\n if (this.collapseTransition) {\n return h('el-menu-collapse-transition', [component]);\n } else {\n return component;\n }\n },\n\n\n componentName: 'ElMenu',\n\n mixins: [emitter_default.a, migrating_default.a],\n\n provide: function provide() {\n return {\n rootMenu: this\n };\n },\n\n\n components: {\n 'el-menu-collapse-transition': {\n functional: true,\n render: function render(createElement, context) {\n var data = {\n props: {\n mode: 'out-in'\n },\n on: {\n beforeEnter: function beforeEnter(el) {\n el.style.opacity = 0.2;\n },\n enter: function enter(el) {\n Object(dom_[\"addClass\"])(el, 'el-opacity-transition');\n el.style.opacity = 1;\n },\n afterEnter: function afterEnter(el) {\n Object(dom_[\"removeClass\"])(el, 'el-opacity-transition');\n el.style.opacity = '';\n },\n beforeLeave: function beforeLeave(el) {\n if (!el.dataset) el.dataset = {};\n\n if (Object(dom_[\"hasClass\"])(el, 'el-menu--collapse')) {\n Object(dom_[\"removeClass\"])(el, 'el-menu--collapse');\n el.dataset.oldOverflow = el.style.overflow;\n el.dataset.scrollWidth = el.clientWidth;\n Object(dom_[\"addClass\"])(el, 'el-menu--collapse');\n } else {\n Object(dom_[\"addClass\"])(el, 'el-menu--collapse');\n el.dataset.oldOverflow = el.style.overflow;\n el.dataset.scrollWidth = el.clientWidth;\n Object(dom_[\"removeClass\"])(el, 'el-menu--collapse');\n }\n\n el.style.width = el.scrollWidth + 'px';\n el.style.overflow = 'hidden';\n },\n leave: function leave(el) {\n Object(dom_[\"addClass\"])(el, 'horizontal-collapse-transition');\n el.style.width = el.dataset.scrollWidth + 'px';\n }\n }\n };\n return createElement('transition', data, context.children);\n }\n }\n },\n\n props: {\n mode: {\n type: String,\n default: 'vertical'\n },\n defaultActive: {\n type: String,\n default: ''\n },\n defaultOpeneds: Array,\n uniqueOpened: Boolean,\n router: Boolean,\n menuTrigger: {\n type: String,\n default: 'hover'\n },\n collapse: Boolean,\n backgroundColor: String,\n textColor: String,\n activeTextColor: String,\n collapseTransition: {\n type: Boolean,\n default: true\n }\n },\n data: function data() {\n return {\n activeIndex: this.defaultActive,\n openedMenus: this.defaultOpeneds && !this.collapse ? this.defaultOpeneds.slice(0) : [],\n items: {},\n submenus: {}\n };\n },\n\n computed: {\n hoverBackground: function hoverBackground() {\n return this.backgroundColor ? this.mixColor(this.backgroundColor, 0.2) : '';\n },\n isMenuPopup: function isMenuPopup() {\n return this.mode === 'horizontal' || this.mode === 'vertical' && this.collapse;\n }\n },\n watch: {\n defaultActive: function defaultActive(value) {\n if (!this.items[value]) {\n this.activeIndex = null;\n }\n this.updateActiveIndex(value);\n },\n defaultOpeneds: function defaultOpeneds(value) {\n if (!this.collapse) {\n this.openedMenus = value;\n }\n },\n collapse: function collapse(value) {\n if (value) this.openedMenus = [];\n this.broadcast('ElSubmenu', 'toggle-collapse', value);\n }\n },\n methods: {\n updateActiveIndex: function updateActiveIndex(val) {\n var item = this.items[val] || this.items[this.activeIndex] || this.items[this.defaultActive];\n if (item) {\n this.activeIndex = item.index;\n this.initOpenedMenu();\n } else {\n this.activeIndex = null;\n }\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'theme': 'theme is removed.'\n }\n };\n },\n getColorChannels: function getColorChannels(color) {\n color = color.replace('#', '');\n if (/^[0-9a-fA-F]{3}$/.test(color)) {\n color = color.split('');\n for (var i = 2; i >= 0; i--) {\n color.splice(i, 0, color[i]);\n }\n color = color.join('');\n }\n if (/^[0-9a-fA-F]{6}$/.test(color)) {\n return {\n red: parseInt(color.slice(0, 2), 16),\n green: parseInt(color.slice(2, 4), 16),\n blue: parseInt(color.slice(4, 6), 16)\n };\n } else {\n return {\n red: 255,\n green: 255,\n blue: 255\n };\n }\n },\n mixColor: function mixColor(color, percent) {\n var _getColorChannels = this.getColorChannels(color),\n red = _getColorChannels.red,\n green = _getColorChannels.green,\n blue = _getColorChannels.blue;\n\n if (percent > 0) {\n // shade given color\n red *= 1 - percent;\n green *= 1 - percent;\n blue *= 1 - percent;\n } else {\n // tint given color\n red += (255 - red) * percent;\n green += (255 - green) * percent;\n blue += (255 - blue) * percent;\n }\n return 'rgb(' + Math.round(red) + ', ' + Math.round(green) + ', ' + Math.round(blue) + ')';\n },\n addItem: function addItem(item) {\n this.$set(this.items, item.index, item);\n },\n removeItem: function removeItem(item) {\n delete this.items[item.index];\n },\n addSubmenu: function addSubmenu(item) {\n this.$set(this.submenus, item.index, item);\n },\n removeSubmenu: function removeSubmenu(item) {\n delete this.submenus[item.index];\n },\n openMenu: function openMenu(index, indexPath) {\n var openedMenus = this.openedMenus;\n if (openedMenus.indexOf(index) !== -1) return;\n // 将不在该菜单路径下的其余菜单收起\n // collapse all menu that are not under current menu item\n if (this.uniqueOpened) {\n this.openedMenus = openedMenus.filter(function (index) {\n return indexPath.indexOf(index) !== -1;\n });\n }\n this.openedMenus.push(index);\n },\n closeMenu: function closeMenu(index) {\n var i = this.openedMenus.indexOf(index);\n if (i !== -1) {\n this.openedMenus.splice(i, 1);\n }\n },\n handleSubmenuClick: function handleSubmenuClick(submenu) {\n var index = submenu.index,\n indexPath = submenu.indexPath;\n\n var isOpened = this.openedMenus.indexOf(index) !== -1;\n\n if (isOpened) {\n this.closeMenu(index);\n this.$emit('close', index, indexPath);\n } else {\n this.openMenu(index, indexPath);\n this.$emit('open', index, indexPath);\n }\n },\n handleItemClick: function handleItemClick(item) {\n var _this = this;\n\n var index = item.index,\n indexPath = item.indexPath;\n\n var oldActiveIndex = this.activeIndex;\n var hasIndex = item.index !== null;\n\n if (hasIndex) {\n this.activeIndex = item.index;\n }\n\n this.$emit('select', index, indexPath, item);\n\n if (this.mode === 'horizontal' || this.collapse) {\n this.openedMenus = [];\n }\n\n if (this.router && hasIndex) {\n this.routeToItem(item, function (error) {\n _this.activeIndex = oldActiveIndex;\n if (error) {\n // vue-router 3.1.0+ push/replace cause NavigationDuplicated error \n // https://github.com/ElemeFE/element/issues/17044\n if (error.name === 'NavigationDuplicated') return;\n console.error(error);\n }\n });\n }\n },\n\n // 初始化展开菜单\n // initialize opened menu\n initOpenedMenu: function initOpenedMenu() {\n var _this2 = this;\n\n var index = this.activeIndex;\n var activeItem = this.items[index];\n if (!activeItem || this.mode === 'horizontal' || this.collapse) return;\n\n var indexPath = activeItem.indexPath;\n\n // 展开该菜单项的路径上所有子菜单\n // expand all submenus of the menu item\n indexPath.forEach(function (index) {\n var submenu = _this2.submenus[index];\n submenu && _this2.openMenu(index, submenu.indexPath);\n });\n },\n routeToItem: function routeToItem(item, onError) {\n var route = item.route || item.index;\n try {\n this.$router.push(route, function () {}, onError);\n } catch (e) {\n console.error(e);\n }\n },\n open: function open(index) {\n var _this3 = this;\n\n var indexPath = this.submenus[index.toString()].indexPath;\n\n indexPath.forEach(function (i) {\n return _this3.openMenu(i, indexPath);\n });\n },\n close: function close(index) {\n this.closeMenu(index);\n }\n },\n mounted: function mounted() {\n this.initOpenedMenu();\n this.$on('item-click', this.handleItemClick);\n this.$on('submenu-click', this.handleSubmenuClick);\n if (this.mode === 'horizontal') {\n new aria_menubar(this.$el); // eslint-disable-line\n }\n this.$watch('items', this.updateActiveIndex);\n }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menuvue_type_script_lang_js_ = (menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu.vue\nvar menu_render, menu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar menu_component = normalizeComponent(\n src_menuvue_type_script_lang_js_,\n menu_render,\n menu_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var menu_api; }\nmenu_component.options.__file = \"packages/menu/src/menu.vue\"\n/* harmony default export */ var src_menu = (menu_component.exports);\n// CONCATENATED MODULE: ./packages/menu/index.js\n\n\n/* istanbul ignore next */\nsrc_menu.install = function (Vue) {\n Vue.component(src_menu.name, src_menu);\n};\n\n/* harmony default export */ var packages_menu = (src_menu);\n// EXTERNAL MODULE: external \"element-ui/lib/transitions/collapse-transition\"\nvar collapse_transition_ = __webpack_require__(21);\nvar collapse_transition_default = /*#__PURE__*/__webpack_require__.n(collapse_transition_);\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-mixin.js\n/* harmony default export */ var menu_mixin = ({\n inject: ['rootMenu'],\n computed: {\n indexPath: function indexPath() {\n var path = [this.index];\n var parent = this.$parent;\n while (parent.$options.componentName !== 'ElMenu') {\n if (parent.index) {\n path.unshift(parent.index);\n }\n parent = parent.$parent;\n }\n return path;\n },\n parentMenu: function parentMenu() {\n var parent = this.$parent;\n while (parent && ['ElMenu', 'ElSubmenu'].indexOf(parent.$options.componentName) === -1) {\n parent = parent.$parent;\n }\n return parent;\n },\n paddingStyle: function paddingStyle() {\n if (this.rootMenu.mode !== 'vertical') return {};\n\n var padding = 20;\n var parent = this.$parent;\n\n if (this.rootMenu.collapse) {\n padding = 20;\n } else {\n while (parent && parent.$options.componentName !== 'ElMenu') {\n if (parent.$options.componentName === 'ElSubmenu') {\n padding += 20;\n }\n parent = parent.$parent;\n }\n }\n return { paddingLeft: padding + 'px' };\n }\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/submenu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nvar poperMixins = {\n props: {\n transformOrigin: {\n type: [Boolean, String],\n default: false\n },\n offset: vue_popper_default.a.props.offset,\n boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n popperOptions: vue_popper_default.a.props.popperOptions\n },\n data: vue_popper_default.a.data,\n methods: vue_popper_default.a.methods,\n beforeDestroy: vue_popper_default.a.beforeDestroy,\n deactivated: vue_popper_default.a.deactivated\n};\n\n/* harmony default export */ var submenuvue_type_script_lang_js_ = ({\n name: 'ElSubmenu',\n\n componentName: 'ElSubmenu',\n\n mixins: [menu_mixin, emitter_default.a, poperMixins],\n\n components: { ElCollapseTransition: collapse_transition_default.a },\n\n props: {\n index: {\n type: String,\n required: true\n },\n showTimeout: {\n type: Number,\n default: 300\n },\n hideTimeout: {\n type: Number,\n default: 300\n },\n popperClass: String,\n disabled: Boolean,\n popperAppendToBody: {\n type: Boolean,\n default: undefined\n }\n },\n\n data: function data() {\n return {\n popperJS: null,\n timeout: null,\n items: {},\n submenus: {},\n mouseInChild: false\n };\n },\n\n watch: {\n opened: function opened(val) {\n var _this = this;\n\n if (this.isMenuPopup) {\n this.$nextTick(function (_) {\n _this.updatePopper();\n });\n }\n }\n },\n computed: {\n // popper option\n appendToBody: function appendToBody() {\n return this.popperAppendToBody === undefined ? this.isFirstLevel : this.popperAppendToBody;\n },\n menuTransitionName: function menuTransitionName() {\n return this.rootMenu.collapse ? 'el-zoom-in-left' : 'el-zoom-in-top';\n },\n opened: function opened() {\n return this.rootMenu.openedMenus.indexOf(this.index) > -1;\n },\n active: function active() {\n var isActive = false;\n var submenus = this.submenus;\n var items = this.items;\n\n Object.keys(items).forEach(function (index) {\n if (items[index].active) {\n isActive = true;\n }\n });\n\n Object.keys(submenus).forEach(function (index) {\n if (submenus[index].active) {\n isActive = true;\n }\n });\n\n return isActive;\n },\n hoverBackground: function hoverBackground() {\n return this.rootMenu.hoverBackground;\n },\n backgroundColor: function backgroundColor() {\n return this.rootMenu.backgroundColor || '';\n },\n activeTextColor: function activeTextColor() {\n return this.rootMenu.activeTextColor || '';\n },\n textColor: function textColor() {\n return this.rootMenu.textColor || '';\n },\n mode: function mode() {\n return this.rootMenu.mode;\n },\n isMenuPopup: function isMenuPopup() {\n return this.rootMenu.isMenuPopup;\n },\n titleStyle: function titleStyle() {\n if (this.mode !== 'horizontal') {\n return {\n color: this.textColor\n };\n }\n return {\n borderBottomColor: this.active ? this.rootMenu.activeTextColor ? this.activeTextColor : '' : 'transparent',\n color: this.active ? this.activeTextColor : this.textColor\n };\n },\n isFirstLevel: function isFirstLevel() {\n var isFirstLevel = true;\n var parent = this.$parent;\n while (parent && parent !== this.rootMenu) {\n if (['ElSubmenu', 'ElMenuItemGroup'].indexOf(parent.$options.componentName) > -1) {\n isFirstLevel = false;\n break;\n } else {\n parent = parent.$parent;\n }\n }\n return isFirstLevel;\n }\n },\n methods: {\n handleCollapseToggle: function handleCollapseToggle(value) {\n if (value) {\n this.initPopper();\n } else {\n this.doDestroy();\n }\n },\n addItem: function addItem(item) {\n this.$set(this.items, item.index, item);\n },\n removeItem: function removeItem(item) {\n delete this.items[item.index];\n },\n addSubmenu: function addSubmenu(item) {\n this.$set(this.submenus, item.index, item);\n },\n removeSubmenu: function removeSubmenu(item) {\n delete this.submenus[item.index];\n },\n handleClick: function handleClick() {\n var rootMenu = this.rootMenu,\n disabled = this.disabled;\n\n if (rootMenu.menuTrigger === 'hover' && rootMenu.mode === 'horizontal' || rootMenu.collapse && rootMenu.mode === 'vertical' || disabled) {\n return;\n }\n this.dispatch('ElMenu', 'submenu-click', this);\n },\n handleMouseenter: function handleMouseenter(event) {\n var _this2 = this;\n\n var showTimeout = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.showTimeout;\n\n\n if (!('ActiveXObject' in window) && event.type === 'focus' && !event.relatedTarget) {\n return;\n }\n var rootMenu = this.rootMenu,\n disabled = this.disabled;\n\n if (rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal' || !rootMenu.collapse && rootMenu.mode === 'vertical' || disabled) {\n return;\n }\n this.dispatch('ElSubmenu', 'mouse-enter-child');\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this2.rootMenu.openMenu(_this2.index, _this2.indexPath);\n }, showTimeout);\n\n if (this.appendToBody) {\n this.$parent.$el.dispatchEvent(new MouseEvent('mouseenter'));\n }\n },\n handleMouseleave: function handleMouseleave() {\n var _this3 = this;\n\n var deepDispatch = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var rootMenu = this.rootMenu;\n\n if (rootMenu.menuTrigger === 'click' && rootMenu.mode === 'horizontal' || !rootMenu.collapse && rootMenu.mode === 'vertical') {\n return;\n }\n this.dispatch('ElSubmenu', 'mouse-leave-child');\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n !_this3.mouseInChild && _this3.rootMenu.closeMenu(_this3.index);\n }, this.hideTimeout);\n\n if (this.appendToBody && deepDispatch) {\n if (this.$parent.$options.name === 'ElSubmenu') {\n this.$parent.handleMouseleave(true);\n }\n }\n },\n handleTitleMouseenter: function handleTitleMouseenter() {\n if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n var title = this.$refs['submenu-title'];\n title && (title.style.backgroundColor = this.rootMenu.hoverBackground);\n },\n handleTitleMouseleave: function handleTitleMouseleave() {\n if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n var title = this.$refs['submenu-title'];\n title && (title.style.backgroundColor = this.rootMenu.backgroundColor || '');\n },\n updatePlacement: function updatePlacement() {\n this.currentPlacement = this.mode === 'horizontal' && this.isFirstLevel ? 'bottom-start' : 'right-start';\n },\n initPopper: function initPopper() {\n this.referenceElm = this.$el;\n this.popperElm = this.$refs.menu;\n this.updatePlacement();\n }\n },\n created: function created() {\n var _this4 = this;\n\n this.$on('toggle-collapse', this.handleCollapseToggle);\n this.$on('mouse-enter-child', function () {\n _this4.mouseInChild = true;\n clearTimeout(_this4.timeout);\n });\n this.$on('mouse-leave-child', function () {\n _this4.mouseInChild = false;\n clearTimeout(_this4.timeout);\n });\n },\n mounted: function mounted() {\n this.parentMenu.addSubmenu(this);\n this.rootMenu.addSubmenu(this);\n this.initPopper();\n },\n beforeDestroy: function beforeDestroy() {\n this.parentMenu.removeSubmenu(this);\n this.rootMenu.removeSubmenu(this);\n },\n render: function render(h) {\n var _this5 = this;\n\n var active = this.active,\n opened = this.opened,\n paddingStyle = this.paddingStyle,\n titleStyle = this.titleStyle,\n backgroundColor = this.backgroundColor,\n rootMenu = this.rootMenu,\n currentPlacement = this.currentPlacement,\n menuTransitionName = this.menuTransitionName,\n mode = this.mode,\n disabled = this.disabled,\n popperClass = this.popperClass,\n $slots = this.$slots,\n isFirstLevel = this.isFirstLevel;\n\n\n var popupMenu = h(\n 'transition',\n {\n attrs: { name: menuTransitionName }\n },\n [h(\n 'div',\n {\n ref: 'menu',\n directives: [{\n name: 'show',\n value: opened\n }],\n\n 'class': ['el-menu--' + mode, popperClass],\n on: {\n 'mouseenter': function mouseenter($event) {\n return _this5.handleMouseenter($event, 100);\n },\n 'mouseleave': function mouseleave() {\n return _this5.handleMouseleave(true);\n },\n 'focus': function focus($event) {\n return _this5.handleMouseenter($event, 100);\n }\n }\n },\n [h(\n 'ul',\n {\n attrs: {\n role: 'menu'\n },\n 'class': ['el-menu el-menu--popup', 'el-menu--popup-' + currentPlacement],\n style: { backgroundColor: rootMenu.backgroundColor || '' } },\n [$slots.default]\n )]\n )]\n );\n\n var inlineMenu = h('el-collapse-transition', [h(\n 'ul',\n {\n attrs: {\n role: 'menu'\n },\n 'class': 'el-menu el-menu--inline',\n directives: [{\n name: 'show',\n value: opened\n }],\n\n style: { backgroundColor: rootMenu.backgroundColor || '' } },\n [$slots.default]\n )]);\n\n var submenuTitleIcon = rootMenu.mode === 'horizontal' && isFirstLevel || rootMenu.mode === 'vertical' && !rootMenu.collapse ? 'el-icon-arrow-down' : 'el-icon-arrow-right';\n\n return h(\n 'li',\n {\n 'class': {\n 'el-submenu': true,\n 'is-active': active,\n 'is-opened': opened,\n 'is-disabled': disabled\n },\n attrs: { role: 'menuitem',\n 'aria-haspopup': 'true',\n 'aria-expanded': opened\n },\n on: {\n 'mouseenter': this.handleMouseenter,\n 'mouseleave': function mouseleave() {\n return _this5.handleMouseleave(false);\n },\n 'focus': this.handleMouseenter\n }\n },\n [h(\n 'div',\n {\n 'class': 'el-submenu__title',\n ref: 'submenu-title',\n on: {\n 'click': this.handleClick,\n 'mouseenter': this.handleTitleMouseenter,\n 'mouseleave': this.handleTitleMouseleave\n },\n\n style: [paddingStyle, titleStyle, { backgroundColor: backgroundColor }]\n },\n [$slots.title, h('i', { 'class': ['el-submenu__icon-arrow', submenuTitleIcon] })]\n ), this.isMenuPopup ? popupMenu : inlineMenu]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/menu/src/submenu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_submenuvue_type_script_lang_js_ = (submenuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/submenu.vue\nvar submenu_render, submenu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar submenu_component = normalizeComponent(\n src_submenuvue_type_script_lang_js_,\n submenu_render,\n submenu_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var submenu_api; }\nsubmenu_component.options.__file = \"packages/menu/src/submenu.vue\"\n/* harmony default export */ var submenu = (submenu_component.exports);\n// CONCATENATED MODULE: ./packages/submenu/index.js\n\n\n/* istanbul ignore next */\nsubmenu.install = function (Vue) {\n Vue.component(submenu.name, submenu);\n};\n\n/* harmony default export */ var packages_submenu = (submenu);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item.vue?vue&type=template&id=2a5dbfea&\nvar menu_itemvue_type_template_id_2a5dbfea_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n staticClass: \"el-menu-item\",\n class: {\n \"is-active\": _vm.active,\n \"is-disabled\": _vm.disabled\n },\n style: [\n _vm.paddingStyle,\n _vm.itemStyle,\n { backgroundColor: _vm.backgroundColor }\n ],\n attrs: { role: \"menuitem\", tabindex: \"-1\" },\n on: {\n click: _vm.handleClick,\n mouseenter: _vm.onMouseEnter,\n focus: _vm.onMouseEnter,\n blur: _vm.onMouseLeave,\n mouseleave: _vm.onMouseLeave\n }\n },\n [\n _vm.parentMenu.$options.componentName === \"ElMenu\" &&\n _vm.rootMenu.collapse &&\n _vm.$slots.title\n ? _c(\"el-tooltip\", { attrs: { effect: \"dark\", placement: \"right\" } }, [\n _c(\n \"div\",\n { attrs: { slot: \"content\" }, slot: \"content\" },\n [_vm._t(\"title\")],\n 2\n ),\n _c(\n \"div\",\n {\n staticStyle: {\n position: \"absolute\",\n left: \"0\",\n top: \"0\",\n height: \"100%\",\n width: \"100%\",\n display: \"inline-block\",\n \"box-sizing\": \"border-box\",\n padding: \"0 20px\"\n }\n },\n [_vm._t(\"default\")],\n 2\n )\n ])\n : [_vm._t(\"default\"), _vm._t(\"title\")]\n ],\n 2\n )\n}\nvar menu_itemvue_type_template_id_2a5dbfea_staticRenderFns = []\nmenu_itemvue_type_template_id_2a5dbfea_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue?vue&type=template&id=2a5dbfea&\n\n// EXTERNAL MODULE: external \"element-ui/lib/tooltip\"\nvar tooltip_ = __webpack_require__(26);\nvar tooltip_default = /*#__PURE__*/__webpack_require__.n(tooltip_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var menu_itemvue_type_script_lang_js_ = ({\n name: 'ElMenuItem',\n\n componentName: 'ElMenuItem',\n\n mixins: [menu_mixin, emitter_default.a],\n\n components: { ElTooltip: tooltip_default.a },\n\n props: {\n index: {\n default: null,\n validator: function validator(val) {\n return typeof val === 'string' || val === null;\n }\n },\n route: [String, Object],\n disabled: Boolean\n },\n computed: {\n active: function active() {\n return this.index === this.rootMenu.activeIndex;\n },\n hoverBackground: function hoverBackground() {\n return this.rootMenu.hoverBackground;\n },\n backgroundColor: function backgroundColor() {\n return this.rootMenu.backgroundColor || '';\n },\n activeTextColor: function activeTextColor() {\n return this.rootMenu.activeTextColor || '';\n },\n textColor: function textColor() {\n return this.rootMenu.textColor || '';\n },\n mode: function mode() {\n return this.rootMenu.mode;\n },\n itemStyle: function itemStyle() {\n var style = {\n color: this.active ? this.activeTextColor : this.textColor\n };\n if (this.mode === 'horizontal' && !this.isNested) {\n style.borderBottomColor = this.active ? this.rootMenu.activeTextColor ? this.activeTextColor : '' : 'transparent';\n }\n return style;\n },\n isNested: function isNested() {\n return this.parentMenu !== this.rootMenu;\n }\n },\n methods: {\n onMouseEnter: function onMouseEnter() {\n if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n this.$el.style.backgroundColor = this.hoverBackground;\n },\n onMouseLeave: function onMouseLeave() {\n if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return;\n this.$el.style.backgroundColor = this.backgroundColor;\n },\n handleClick: function handleClick() {\n if (!this.disabled) {\n this.dispatch('ElMenu', 'item-click', this);\n this.$emit('click', this);\n }\n }\n },\n mounted: function mounted() {\n this.parentMenu.addItem(this);\n this.rootMenu.addItem(this);\n },\n beforeDestroy: function beforeDestroy() {\n this.parentMenu.removeItem(this);\n this.rootMenu.removeItem(this);\n }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menu_itemvue_type_script_lang_js_ = (menu_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar menu_item_component = normalizeComponent(\n src_menu_itemvue_type_script_lang_js_,\n menu_itemvue_type_template_id_2a5dbfea_render,\n menu_itemvue_type_template_id_2a5dbfea_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var menu_item_api; }\nmenu_item_component.options.__file = \"packages/menu/src/menu-item.vue\"\n/* harmony default export */ var menu_item = (menu_item_component.exports);\n// CONCATENATED MODULE: ./packages/menu-item/index.js\n\n\n/* istanbul ignore next */\nmenu_item.install = function (Vue) {\n Vue.component(menu_item.name, menu_item);\n};\n\n/* harmony default export */ var packages_menu_item = (menu_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item-group.vue?vue&type=template&id=543b7bdc&\nvar menu_item_groupvue_type_template_id_543b7bdc_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"li\", { staticClass: \"el-menu-item-group\" }, [\n _c(\n \"div\",\n {\n staticClass: \"el-menu-item-group__title\",\n style: { paddingLeft: _vm.levelPadding + \"px\" }\n },\n [!_vm.$slots.title ? [_vm._v(_vm._s(_vm.title))] : _vm._t(\"title\")],\n 2\n ),\n _c(\"ul\", [_vm._t(\"default\")], 2)\n ])\n}\nvar menu_item_groupvue_type_template_id_543b7bdc_staticRenderFns = []\nmenu_item_groupvue_type_template_id_543b7bdc_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue?vue&type=template&id=543b7bdc&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/menu/src/menu-item-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var menu_item_groupvue_type_script_lang_js_ = ({\n name: 'ElMenuItemGroup',\n\n componentName: 'ElMenuItemGroup',\n\n inject: ['rootMenu'],\n props: {\n title: {\n type: String\n }\n },\n data: function data() {\n return {\n paddingLeft: 20\n };\n },\n\n computed: {\n levelPadding: function levelPadding() {\n var padding = 20;\n var parent = this.$parent;\n if (this.rootMenu.collapse) return 20;\n while (parent && parent.$options.componentName !== 'ElMenu') {\n if (parent.$options.componentName === 'ElSubmenu') {\n padding += 20;\n }\n parent = parent.$parent;\n }\n return padding;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_menu_item_groupvue_type_script_lang_js_ = (menu_item_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/menu/src/menu-item-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar menu_item_group_component = normalizeComponent(\n src_menu_item_groupvue_type_script_lang_js_,\n menu_item_groupvue_type_template_id_543b7bdc_render,\n menu_item_groupvue_type_template_id_543b7bdc_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var menu_item_group_api; }\nmenu_item_group_component.options.__file = \"packages/menu/src/menu-item-group.vue\"\n/* harmony default export */ var menu_item_group = (menu_item_group_component.exports);\n// CONCATENATED MODULE: ./packages/menu-item-group/index.js\n\n\n/* istanbul ignore next */\nmenu_item_group.install = function (Vue) {\n Vue.component(menu_item_group.name, menu_item_group);\n};\n\n/* harmony default export */ var packages_menu_item_group = (menu_item_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=template&id=343dd774&\nvar inputvue_type_template_id_343dd774_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\n _vm.type === \"textarea\" ? \"el-textarea\" : \"el-input\",\n _vm.inputSize ? \"el-input--\" + _vm.inputSize : \"\",\n {\n \"is-disabled\": _vm.inputDisabled,\n \"is-exceed\": _vm.inputExceed,\n \"el-input-group\": _vm.$slots.prepend || _vm.$slots.append,\n \"el-input-group--append\": _vm.$slots.append,\n \"el-input-group--prepend\": _vm.$slots.prepend,\n \"el-input--prefix\": _vm.$slots.prefix || _vm.prefixIcon,\n \"el-input--suffix\":\n _vm.$slots.suffix ||\n _vm.suffixIcon ||\n _vm.clearable ||\n _vm.showPassword\n }\n ],\n on: {\n mouseenter: function($event) {\n _vm.hovering = true\n },\n mouseleave: function($event) {\n _vm.hovering = false\n }\n }\n },\n [\n _vm.type !== \"textarea\"\n ? [\n _vm.$slots.prepend\n ? _c(\n \"div\",\n { staticClass: \"el-input-group__prepend\" },\n [_vm._t(\"prepend\")],\n 2\n )\n : _vm._e(),\n _vm.type !== \"textarea\"\n ? _c(\n \"input\",\n _vm._b(\n {\n ref: \"input\",\n staticClass: \"el-input__inner\",\n attrs: {\n tabindex: _vm.tabindex,\n type: _vm.showPassword\n ? _vm.passwordVisible\n ? \"text\"\n : \"password\"\n : _vm.type,\n disabled: _vm.inputDisabled,\n readonly: _vm.readonly,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n \"aria-label\": _vm.label\n },\n on: {\n compositionstart: _vm.handleCompositionStart,\n compositionupdate: _vm.handleCompositionUpdate,\n compositionend: _vm.handleCompositionEnd,\n input: _vm.handleInput,\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n change: _vm.handleChange\n }\n },\n \"input\",\n _vm.$attrs,\n false\n )\n )\n : _vm._e(),\n _vm.$slots.prefix || _vm.prefixIcon\n ? _c(\n \"span\",\n { staticClass: \"el-input__prefix\" },\n [\n _vm._t(\"prefix\"),\n _vm.prefixIcon\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: _vm.prefixIcon\n })\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _vm.getSuffixVisible()\n ? _c(\"span\", { staticClass: \"el-input__suffix\" }, [\n _c(\n \"span\",\n { staticClass: \"el-input__suffix-inner\" },\n [\n !_vm.showClear ||\n !_vm.showPwdVisible ||\n !_vm.isWordLimitVisible\n ? [\n _vm._t(\"suffix\"),\n _vm.suffixIcon\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: _vm.suffixIcon\n })\n : _vm._e()\n ]\n : _vm._e(),\n _vm.showClear\n ? _c(\"i\", {\n staticClass:\n \"el-input__icon el-icon-circle-close el-input__clear\",\n on: {\n mousedown: function($event) {\n $event.preventDefault()\n },\n click: _vm.clear\n }\n })\n : _vm._e(),\n _vm.showPwdVisible\n ? _c(\"i\", {\n staticClass:\n \"el-input__icon el-icon-view el-input__clear\",\n on: { click: _vm.handlePasswordVisible }\n })\n : _vm._e(),\n _vm.isWordLimitVisible\n ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n _c(\n \"span\",\n { staticClass: \"el-input__count-inner\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.textLength) +\n \"/\" +\n _vm._s(_vm.upperLimit) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm._e()\n ],\n 2\n ),\n _vm.validateState\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: [\"el-input__validateIcon\", _vm.validateIcon]\n })\n : _vm._e()\n ])\n : _vm._e(),\n _vm.$slots.append\n ? _c(\n \"div\",\n { staticClass: \"el-input-group__append\" },\n [_vm._t(\"append\")],\n 2\n )\n : _vm._e()\n ]\n : _c(\n \"textarea\",\n _vm._b(\n {\n ref: \"textarea\",\n staticClass: \"el-textarea__inner\",\n style: _vm.textareaStyle,\n attrs: {\n tabindex: _vm.tabindex,\n disabled: _vm.inputDisabled,\n readonly: _vm.readonly,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n \"aria-label\": _vm.label\n },\n on: {\n compositionstart: _vm.handleCompositionStart,\n compositionupdate: _vm.handleCompositionUpdate,\n compositionend: _vm.handleCompositionEnd,\n input: _vm.handleInput,\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n change: _vm.handleChange\n }\n },\n \"textarea\",\n _vm.$attrs,\n false\n )\n ),\n _vm.isWordLimitVisible && _vm.type === \"textarea\"\n ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n _vm._v(_vm._s(_vm.textLength) + \"/\" + _vm._s(_vm.upperLimit))\n ])\n : _vm._e()\n ],\n 2\n )\n}\nvar inputvue_type_template_id_343dd774_staticRenderFns = []\ninputvue_type_template_id_343dd774_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=template&id=343dd774&\n\n// CONCATENATED MODULE: ./packages/input/src/calcTextareaHeight.js\nvar hiddenTextarea = void 0;\n\nvar HIDDEN_STYLE = '\\n height:0 !important;\\n visibility:hidden !important;\\n overflow:hidden !important;\\n position:absolute !important;\\n z-index:-1000 !important;\\n top:0 !important;\\n right:0 !important\\n';\n\nvar CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];\n\nfunction calculateNodeStyling(targetElement) {\n var style = window.getComputedStyle(targetElement);\n\n var boxSizing = style.getPropertyValue('box-sizing');\n\n var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n\n var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n\n var contextStyle = CONTEXT_STYLE.map(function (name) {\n return name + ':' + style.getPropertyValue(name);\n }).join(';');\n\n return { contextStyle: contextStyle, paddingSize: paddingSize, borderSize: borderSize, boxSizing: boxSizing };\n}\n\nfunction calcTextareaHeight(targetElement) {\n var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n document.body.appendChild(hiddenTextarea);\n }\n\n var _calculateNodeStyling = calculateNodeStyling(targetElement),\n paddingSize = _calculateNodeStyling.paddingSize,\n borderSize = _calculateNodeStyling.borderSize,\n boxSizing = _calculateNodeStyling.boxSizing,\n contextStyle = _calculateNodeStyling.contextStyle;\n\n hiddenTextarea.setAttribute('style', contextStyle + ';' + HIDDEN_STYLE);\n hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n var height = hiddenTextarea.scrollHeight;\n var result = {};\n\n if (boxSizing === 'border-box') {\n height = height + borderSize;\n } else if (boxSizing === 'content-box') {\n height = height - paddingSize;\n }\n\n hiddenTextarea.value = '';\n var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n if (minRows !== null) {\n var minHeight = singleRowHeight * minRows;\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n height = Math.max(minHeight, height);\n result.minHeight = minHeight + 'px';\n }\n if (maxRows !== null) {\n var maxHeight = singleRowHeight * maxRows;\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n height = Math.min(maxHeight, height);\n }\n result.height = height + 'px';\n hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n hiddenTextarea = null;\n return result;\n};\n// EXTERNAL MODULE: external \"element-ui/lib/utils/merge\"\nvar merge_ = __webpack_require__(7);\nvar merge_default = /*#__PURE__*/__webpack_require__.n(merge_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __webpack_require__(19);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n/* harmony default export */ var inputvue_type_script_lang_js_ = ({\n name: 'ElInput',\n\n componentName: 'ElInput',\n\n mixins: [emitter_default.a, migrating_default.a],\n\n inheritAttrs: false,\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n data: function data() {\n return {\n textareaCalcStyle: {},\n hovering: false,\n focused: false,\n isComposing: false,\n passwordVisible: false\n };\n },\n\n\n props: {\n value: [String, Number],\n size: String,\n resize: String,\n form: String,\n disabled: Boolean,\n readonly: Boolean,\n type: {\n type: String,\n default: 'text'\n },\n autosize: {\n type: [Boolean, Object],\n default: false\n },\n autocomplete: {\n type: String,\n default: 'off'\n },\n /** @Deprecated in next major version */\n autoComplete: {\n type: String,\n validator: function validator(val) {\n false && false;\n return true;\n }\n },\n validateEvent: {\n type: Boolean,\n default: true\n },\n suffixIcon: String,\n prefixIcon: String,\n label: String,\n clearable: {\n type: Boolean,\n default: false\n },\n showPassword: {\n type: Boolean,\n default: false\n },\n showWordLimit: {\n type: Boolean,\n default: false\n },\n tabindex: String\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n validateState: function validateState() {\n return this.elFormItem ? this.elFormItem.validateState : '';\n },\n needStatusIcon: function needStatusIcon() {\n return this.elForm ? this.elForm.statusIcon : false;\n },\n validateIcon: function validateIcon() {\n return {\n validating: 'el-icon-loading',\n success: 'el-icon-circle-check',\n error: 'el-icon-circle-close'\n }[this.validateState];\n },\n textareaStyle: function textareaStyle() {\n return merge_default()({}, this.textareaCalcStyle, { resize: this.resize });\n },\n inputSize: function inputSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n inputDisabled: function inputDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n nativeInputValue: function nativeInputValue() {\n return this.value === null || this.value === undefined ? '' : String(this.value);\n },\n showClear: function showClear() {\n return this.clearable && !this.inputDisabled && !this.readonly && this.nativeInputValue && (this.focused || this.hovering);\n },\n showPwdVisible: function showPwdVisible() {\n return this.showPassword && !this.inputDisabled && !this.readonly && (!!this.nativeInputValue || this.focused);\n },\n isWordLimitVisible: function isWordLimitVisible() {\n return this.showWordLimit && this.$attrs.maxlength && (this.type === 'text' || this.type === 'textarea') && !this.inputDisabled && !this.readonly && !this.showPassword;\n },\n upperLimit: function upperLimit() {\n return this.$attrs.maxlength;\n },\n textLength: function textLength() {\n if (typeof this.value === 'number') {\n return String(this.value).length;\n }\n\n return (this.value || '').length;\n },\n inputExceed: function inputExceed() {\n // show exceed style if length of initial value greater then maxlength\n return this.isWordLimitVisible && this.textLength > this.upperLimit;\n }\n },\n\n watch: {\n value: function value(val) {\n this.$nextTick(this.resizeTextarea);\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', [val]);\n }\n },\n\n // native input value is set explicitly\n // do not use v-model / :value in template\n // see: https://github.com/ElemeFE/element/issues/14521\n nativeInputValue: function nativeInputValue() {\n this.setNativeInputValue();\n },\n\n // when change between <input> and <textarea>,\n // update DOM dependent value and styles\n // https://github.com/ElemeFE/element/issues/14857\n type: function type() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.setNativeInputValue();\n _this.resizeTextarea();\n _this.updateIconOffset();\n });\n }\n },\n\n methods: {\n focus: function focus() {\n this.getInput().focus();\n },\n blur: function blur() {\n this.getInput().blur();\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'icon': 'icon is removed, use suffix-icon / prefix-icon instead.',\n 'on-icon-click': 'on-icon-click is removed.'\n },\n events: {\n 'click': 'click is removed.'\n }\n };\n },\n handleBlur: function handleBlur(event) {\n this.focused = false;\n this.$emit('blur', event);\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.blur', [this.value]);\n }\n },\n select: function select() {\n this.getInput().select();\n },\n resizeTextarea: function resizeTextarea() {\n if (this.$isServer) return;\n var autosize = this.autosize,\n type = this.type;\n\n if (type !== 'textarea') return;\n if (!autosize) {\n this.textareaCalcStyle = {\n minHeight: calcTextareaHeight(this.$refs.textarea).minHeight\n };\n return;\n }\n var minRows = autosize.minRows;\n var maxRows = autosize.maxRows;\n\n this.textareaCalcStyle = calcTextareaHeight(this.$refs.textarea, minRows, maxRows);\n },\n setNativeInputValue: function setNativeInputValue() {\n var input = this.getInput();\n if (!input) return;\n if (input.value === this.nativeInputValue) return;\n input.value = this.nativeInputValue;\n },\n handleFocus: function handleFocus(event) {\n this.focused = true;\n this.$emit('focus', event);\n },\n handleCompositionStart: function handleCompositionStart(event) {\n this.$emit('compositionstart', event);\n this.isComposing = true;\n },\n handleCompositionUpdate: function handleCompositionUpdate(event) {\n this.$emit('compositionupdate', event);\n var text = event.target.value;\n var lastCharacter = text[text.length - 1] || '';\n this.isComposing = !Object(shared_[\"isKorean\"])(lastCharacter);\n },\n handleCompositionEnd: function handleCompositionEnd(event) {\n this.$emit('compositionend', event);\n if (this.isComposing) {\n this.isComposing = false;\n this.handleInput(event);\n }\n },\n handleInput: function handleInput(event) {\n // should not emit input during composition\n // see: https://github.com/ElemeFE/element/issues/10516\n if (this.isComposing) return;\n\n // hack for https://github.com/ElemeFE/element/issues/8548\n // should remove the following line when we don't support IE\n if (event.target.value === this.nativeInputValue) return;\n\n this.$emit('input', event.target.value);\n\n // ensure native input value is controlled\n // see: https://github.com/ElemeFE/element/issues/12850\n this.$nextTick(this.setNativeInputValue);\n },\n handleChange: function handleChange(event) {\n this.$emit('change', event.target.value);\n },\n calcIconOffset: function calcIconOffset(place) {\n var elList = [].slice.call(this.$el.querySelectorAll('.el-input__' + place) || []);\n if (!elList.length) return;\n var el = null;\n for (var i = 0; i < elList.length; i++) {\n if (elList[i].parentNode === this.$el) {\n el = elList[i];\n break;\n }\n }\n if (!el) return;\n var pendantMap = {\n suffix: 'append',\n prefix: 'prepend'\n };\n\n var pendant = pendantMap[place];\n if (this.$slots[pendant]) {\n el.style.transform = 'translateX(' + (place === 'suffix' ? '-' : '') + this.$el.querySelector('.el-input-group__' + pendant).offsetWidth + 'px)';\n } else {\n el.removeAttribute('style');\n }\n },\n updateIconOffset: function updateIconOffset() {\n this.calcIconOffset('prefix');\n this.calcIconOffset('suffix');\n },\n clear: function clear() {\n this.$emit('input', '');\n this.$emit('change', '');\n this.$emit('clear');\n },\n handlePasswordVisible: function handlePasswordVisible() {\n var _this2 = this;\n\n this.passwordVisible = !this.passwordVisible;\n this.$nextTick(function () {\n _this2.focus();\n });\n },\n getInput: function getInput() {\n return this.$refs.input || this.$refs.textarea;\n },\n getSuffixVisible: function getSuffixVisible() {\n return this.$slots.suffix || this.suffixIcon || this.showClear || this.showPassword || this.isWordLimitVisible || this.validateState && this.needStatusIcon;\n }\n },\n\n created: function created() {\n this.$on('inputSelect', this.select);\n },\n mounted: function mounted() {\n this.setNativeInputValue();\n this.resizeTextarea();\n this.updateIconOffset();\n },\n updated: function updated() {\n this.$nextTick(this.updateIconOffset);\n }\n});\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_inputvue_type_script_lang_js_ = (inputvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/input/src/input.vue\n\n\n\n\n\n/* normalize component */\n\nvar input_component = normalizeComponent(\n src_inputvue_type_script_lang_js_,\n inputvue_type_template_id_343dd774_render,\n inputvue_type_template_id_343dd774_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var input_api; }\ninput_component.options.__file = \"packages/input/src/input.vue\"\n/* harmony default export */ var src_input = (input_component.exports);\n// CONCATENATED MODULE: ./packages/input/index.js\n\n\n/* istanbul ignore next */\nsrc_input.install = function (Vue) {\n Vue.component(src_input.name, src_input);\n};\n\n/* harmony default export */ var packages_input = (src_input);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\nvar input_numbervue_type_template_id_42f8cf66_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\n \"el-input-number\",\n _vm.inputNumberSize ? \"el-input-number--\" + _vm.inputNumberSize : \"\",\n { \"is-disabled\": _vm.inputNumberDisabled },\n { \"is-without-controls\": !_vm.controls },\n { \"is-controls-right\": _vm.controlsAtRight }\n ],\n on: {\n dragstart: function($event) {\n $event.preventDefault()\n }\n }\n },\n [\n _vm.controls\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-input-number__decrease\",\n class: { \"is-disabled\": _vm.minDisabled },\n attrs: { role: \"button\" },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.decrease($event)\n }\n }\n },\n [\n _c(\"i\", {\n class:\n \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-down\" : \"minus\")\n })\n ]\n )\n : _vm._e(),\n _vm.controls\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-input-number__increase\",\n class: { \"is-disabled\": _vm.maxDisabled },\n attrs: { role: \"button\" },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.increase($event)\n }\n }\n },\n [\n _c(\"i\", {\n class: \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-up\" : \"plus\")\n })\n ]\n )\n : _vm._e(),\n _c(\"el-input\", {\n ref: \"input\",\n attrs: {\n value: _vm.displayValue,\n placeholder: _vm.placeholder,\n disabled: _vm.inputNumberDisabled,\n size: _vm.inputNumberSize,\n max: _vm.max,\n min: _vm.min,\n name: _vm.name,\n label: _vm.label\n },\n on: {\n blur: _vm.handleBlur,\n focus: _vm.handleFocus,\n input: _vm.handleInput,\n change: _vm.handleInputChange\n },\n nativeOn: {\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.increase($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.decrease($event)\n }\n ]\n }\n })\n ],\n 1\n )\n}\nvar input_numbervue_type_template_id_42f8cf66_staticRenderFns = []\ninput_numbervue_type_template_id_42f8cf66_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\n\n// CONCATENATED MODULE: ./src/directives/repeat-click.js\n\n\n/* harmony default export */ var repeat_click = ({\n bind: function bind(el, binding, vnode) {\n var interval = null;\n var startTime = void 0;\n var handler = function handler() {\n return vnode.context[binding.expression].apply();\n };\n var clear = function clear() {\n if (Date.now() - startTime < 100) {\n handler();\n }\n clearInterval(interval);\n interval = null;\n };\n\n Object(dom_[\"on\"])(el, 'mousedown', function (e) {\n if (e.button !== 0) return;\n startTime = Date.now();\n Object(dom_[\"once\"])(document, 'mouseup', clear);\n clearInterval(interval);\n interval = setInterval(handler, 100);\n });\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var input_numbervue_type_script_lang_js_ = ({\n name: 'ElInputNumber',\n mixins: [focus_default()('input')],\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n directives: {\n repeatClick: repeat_click\n },\n components: {\n ElInput: input_default.a\n },\n props: {\n step: {\n type: Number,\n default: 1\n },\n stepStrictly: {\n type: Boolean,\n default: false\n },\n max: {\n type: Number,\n default: Infinity\n },\n min: {\n type: Number,\n default: -Infinity\n },\n value: {},\n disabled: Boolean,\n size: String,\n controls: {\n type: Boolean,\n default: true\n },\n controlsPosition: {\n type: String,\n default: ''\n },\n name: String,\n label: String,\n placeholder: String,\n precision: {\n type: Number,\n validator: function validator(val) {\n return val >= 0 && val === parseInt(val, 10);\n }\n }\n },\n data: function data() {\n return {\n currentValue: 0,\n userInput: null\n };\n },\n\n watch: {\n value: {\n immediate: true,\n handler: function handler(value) {\n var newVal = value === undefined ? value : Number(value);\n if (newVal !== undefined) {\n if (isNaN(newVal)) {\n return;\n }\n\n if (this.stepStrictly) {\n var stepPrecision = this.getPrecision(this.step);\n var precisionFactor = Math.pow(10, stepPrecision);\n newVal = Math.round(newVal / this.step) * precisionFactor * this.step / precisionFactor;\n }\n\n if (this.precision !== undefined) {\n newVal = this.toPrecision(newVal, this.precision);\n }\n }\n if (newVal >= this.max) newVal = this.max;\n if (newVal <= this.min) newVal = this.min;\n this.currentValue = newVal;\n this.userInput = null;\n this.$emit('input', newVal);\n }\n }\n },\n computed: {\n minDisabled: function minDisabled() {\n return this._decrease(this.value, this.step) < this.min;\n },\n maxDisabled: function maxDisabled() {\n return this._increase(this.value, this.step) > this.max;\n },\n numPrecision: function numPrecision() {\n var value = this.value,\n step = this.step,\n getPrecision = this.getPrecision,\n precision = this.precision;\n\n var stepPrecision = getPrecision(step);\n if (precision !== undefined) {\n if (stepPrecision > precision) {\n console.warn('[Element Warn][InputNumber]precision should not be less than the decimal places of step');\n }\n return precision;\n } else {\n return Math.max(getPrecision(value), stepPrecision);\n }\n },\n controlsAtRight: function controlsAtRight() {\n return this.controls && this.controlsPosition === 'right';\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n inputNumberSize: function inputNumberSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n inputNumberDisabled: function inputNumberDisabled() {\n return this.disabled || !!(this.elForm || {}).disabled;\n },\n displayValue: function displayValue() {\n if (this.userInput !== null) {\n return this.userInput;\n }\n\n var currentValue = this.currentValue;\n\n if (typeof currentValue === 'number') {\n if (this.stepStrictly) {\n var stepPrecision = this.getPrecision(this.step);\n var precisionFactor = Math.pow(10, stepPrecision);\n currentValue = Math.round(currentValue / this.step) * precisionFactor * this.step / precisionFactor;\n }\n\n if (this.precision !== undefined) {\n currentValue = currentValue.toFixed(this.precision);\n }\n }\n\n return currentValue;\n }\n },\n methods: {\n toPrecision: function toPrecision(num, precision) {\n if (precision === undefined) precision = this.numPrecision;\n return parseFloat(Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision));\n },\n getPrecision: function getPrecision(value) {\n if (value === undefined) return 0;\n var valueString = value.toString();\n var dotPosition = valueString.indexOf('.');\n var precision = 0;\n if (dotPosition !== -1) {\n precision = valueString.length - dotPosition - 1;\n }\n return precision;\n },\n _increase: function _increase(val, step) {\n if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n var precisionFactor = Math.pow(10, this.numPrecision);\n // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n return this.toPrecision((precisionFactor * val + precisionFactor * step) / precisionFactor);\n },\n _decrease: function _decrease(val, step) {\n if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n var precisionFactor = Math.pow(10, this.numPrecision);\n\n return this.toPrecision((precisionFactor * val - precisionFactor * step) / precisionFactor);\n },\n increase: function increase() {\n if (this.inputNumberDisabled || this.maxDisabled) return;\n var value = this.value || 0;\n var newVal = this._increase(value, this.step);\n this.setCurrentValue(newVal);\n },\n decrease: function decrease() {\n if (this.inputNumberDisabled || this.minDisabled) return;\n var value = this.value || 0;\n var newVal = this._decrease(value, this.step);\n this.setCurrentValue(newVal);\n },\n handleBlur: function handleBlur(event) {\n this.$emit('blur', event);\n },\n handleFocus: function handleFocus(event) {\n this.$emit('focus', event);\n },\n setCurrentValue: function setCurrentValue(newVal) {\n var oldVal = this.currentValue;\n if (typeof newVal === 'number' && this.precision !== undefined) {\n newVal = this.toPrecision(newVal, this.precision);\n }\n if (newVal >= this.max) newVal = this.max;\n if (newVal <= this.min) newVal = this.min;\n if (oldVal === newVal) return;\n this.userInput = null;\n this.$emit('input', newVal);\n this.$emit('change', newVal, oldVal);\n this.currentValue = newVal;\n },\n handleInput: function handleInput(value) {\n this.userInput = value;\n },\n handleInputChange: function handleInputChange(value) {\n var newVal = value === '' ? undefined : Number(value);\n if (!isNaN(newVal) || value === '') {\n this.setCurrentValue(newVal);\n }\n this.userInput = null;\n },\n select: function select() {\n this.$refs.input.select();\n }\n },\n mounted: function mounted() {\n var innerInput = this.$refs.input.$refs.input;\n innerInput.setAttribute('role', 'spinbutton');\n innerInput.setAttribute('aria-valuemax', this.max);\n innerInput.setAttribute('aria-valuemin', this.min);\n innerInput.setAttribute('aria-valuenow', this.currentValue);\n innerInput.setAttribute('aria-disabled', this.inputNumberDisabled);\n },\n updated: function updated() {\n if (!this.$refs || !this.$refs.input) return;\n var innerInput = this.$refs.input.$refs.input;\n innerInput.setAttribute('aria-valuenow', this.currentValue);\n }\n});\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_input_numbervue_type_script_lang_js_ = (input_numbervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue\n\n\n\n\n\n/* normalize component */\n\nvar input_number_component = normalizeComponent(\n src_input_numbervue_type_script_lang_js_,\n input_numbervue_type_template_id_42f8cf66_render,\n input_numbervue_type_template_id_42f8cf66_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var input_number_api; }\ninput_number_component.options.__file = \"packages/input-number/src/input-number.vue\"\n/* harmony default export */ var input_number = (input_number_component.exports);\n// CONCATENATED MODULE: ./packages/input-number/index.js\n\n\n/* istanbul ignore next */\ninput_number.install = function (Vue) {\n Vue.component(input_number.name, input_number);\n};\n\n/* harmony default export */ var packages_input_number = (input_number);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\nvar radiovue_type_template_id_69cd6268_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-radio\",\n class: [\n _vm.border && _vm.radioSize ? \"el-radio--\" + _vm.radioSize : \"\",\n { \"is-disabled\": _vm.isDisabled },\n { \"is-focus\": _vm.focus },\n { \"is-bordered\": _vm.border },\n { \"is-checked\": _vm.model === _vm.label }\n ],\n attrs: {\n role: \"radio\",\n \"aria-checked\": _vm.model === _vm.label,\n \"aria-disabled\": _vm.isDisabled,\n tabindex: _vm.tabIndex\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.model = _vm.isDisabled ? _vm.model : _vm.label\n }\n }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"el-radio__input\",\n class: {\n \"is-disabled\": _vm.isDisabled,\n \"is-checked\": _vm.model === _vm.label\n }\n },\n [\n _c(\"span\", { staticClass: \"el-radio__inner\" }),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n ref: \"radio\",\n staticClass: \"el-radio__original\",\n attrs: {\n type: \"radio\",\n \"aria-hidden\": \"true\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n tabindex: \"-1\",\n autocomplete: \"off\"\n },\n domProps: {\n value: _vm.label,\n checked: _vm._q(_vm.model, _vm.label)\n },\n on: {\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n },\n change: [\n function($event) {\n _vm.model = _vm.label\n },\n _vm.handleChange\n ]\n }\n })\n ]\n ),\n _c(\n \"span\",\n {\n staticClass: \"el-radio__label\",\n on: {\n keydown: function($event) {\n $event.stopPropagation()\n }\n }\n },\n [\n _vm._t(\"default\"),\n !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n ],\n 2\n )\n ]\n )\n}\nvar radiovue_type_template_id_69cd6268_staticRenderFns = []\nradiovue_type_template_id_69cd6268_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var radiovue_type_script_lang_js_ = ({\n name: 'ElRadio',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n\n elFormItem: {\n default: ''\n }\n },\n\n componentName: 'ElRadio',\n\n props: {\n value: {},\n label: {},\n disabled: Boolean,\n name: String,\n border: Boolean,\n size: String\n },\n\n data: function data() {\n return {\n focus: false\n };\n },\n\n computed: {\n isGroup: function isGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElRadioGroup') {\n parent = parent.$parent;\n } else {\n this._radioGroup = parent;\n return true;\n }\n }\n return false;\n },\n\n model: {\n get: function get() {\n return this.isGroup ? this._radioGroup.value : this.value;\n },\n set: function set(val) {\n if (this.isGroup) {\n this.dispatch('ElRadioGroup', 'input', [val]);\n } else {\n this.$emit('input', val);\n }\n this.$refs.radio && (this.$refs.radio.checked = this.model === this.label);\n }\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n radioSize: function radioSize() {\n var temRadioSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n return this.isGroup ? this._radioGroup.radioGroupSize || temRadioSize : temRadioSize;\n },\n isDisabled: function isDisabled() {\n return this.isGroup ? this._radioGroup.disabled || this.disabled || (this.elForm || {}).disabled : this.disabled || (this.elForm || {}).disabled;\n },\n tabIndex: function tabIndex() {\n return this.isDisabled || this.isGroup && this.model !== this.label ? -1 : 0;\n }\n },\n\n methods: {\n handleChange: function handleChange() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.$emit('change', _this.model);\n _this.isGroup && _this.dispatch('ElRadioGroup', 'handleChange', _this.model);\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radiovue_type_script_lang_js_ = (radiovue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_component = normalizeComponent(\n src_radiovue_type_script_lang_js_,\n radiovue_type_template_id_69cd6268_render,\n radiovue_type_template_id_69cd6268_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var radio_api; }\nradio_component.options.__file = \"packages/radio/src/radio.vue\"\n/* harmony default export */ var src_radio = (radio_component.exports);\n// CONCATENATED MODULE: ./packages/radio/index.js\n\n\n/* istanbul ignore next */\nsrc_radio.install = function (Vue) {\n Vue.component(src_radio.name, src_radio);\n};\n\n/* harmony default export */ var packages_radio = (src_radio);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-group.vue?vue&type=template&id=818a704c&\nvar radio_groupvue_type_template_id_818a704c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n _vm._elTag,\n {\n tag: \"component\",\n staticClass: \"el-radio-group\",\n attrs: { role: \"radiogroup\" },\n on: { keydown: _vm.handleKeydown }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar radio_groupvue_type_template_id_818a704c_staticRenderFns = []\nradio_groupvue_type_template_id_818a704c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue?vue&type=template&id=818a704c&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\nvar keyCode = Object.freeze({\n LEFT: 37,\n UP: 38,\n RIGHT: 39,\n DOWN: 40\n});\n/* harmony default export */ var radio_groupvue_type_script_lang_js_ = ({\n name: 'ElRadioGroup',\n\n componentName: 'ElRadioGroup',\n\n inject: {\n elFormItem: {\n default: ''\n }\n },\n\n mixins: [emitter_default.a],\n\n props: {\n value: {},\n size: String,\n fill: String,\n textColor: String,\n disabled: Boolean\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n _elTag: function _elTag() {\n var tag = (this.$vnode.data || {}).tag;\n if (!tag || tag === 'component') tag = 'div';\n return tag;\n },\n radioGroupSize: function radioGroupSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n }\n },\n\n created: function created() {\n var _this = this;\n\n this.$on('handleChange', function (value) {\n _this.$emit('change', value);\n });\n },\n mounted: function mounted() {\n // 当radioGroup没有默认选项时,第一个可以选中Tab导航\n var radios = this.$el.querySelectorAll('[type=radio]');\n var firstLabel = this.$el.querySelectorAll('[role=radio]')[0];\n if (![].some.call(radios, function (radio) {\n return radio.checked;\n }) && firstLabel) {\n firstLabel.tabIndex = 0;\n }\n },\n\n methods: {\n handleKeydown: function handleKeydown(e) {\n // 左右上下按键 可以在radio组内切换不同选项\n var target = e.target;\n var className = target.nodeName === 'INPUT' ? '[type=radio]' : '[role=radio]';\n var radios = this.$el.querySelectorAll(className);\n var length = radios.length;\n var index = [].indexOf.call(radios, target);\n var roleRadios = this.$el.querySelectorAll('[role=radio]');\n switch (e.keyCode) {\n case keyCode.LEFT:\n case keyCode.UP:\n e.stopPropagation();\n e.preventDefault();\n if (index === 0) {\n roleRadios[length - 1].click();\n roleRadios[length - 1].focus();\n } else {\n roleRadios[index - 1].click();\n roleRadios[index - 1].focus();\n }\n break;\n case keyCode.RIGHT:\n case keyCode.DOWN:\n if (index === length - 1) {\n e.stopPropagation();\n e.preventDefault();\n roleRadios[0].click();\n roleRadios[0].focus();\n } else {\n roleRadios[index + 1].click();\n roleRadios[index + 1].focus();\n }\n break;\n default:\n break;\n }\n }\n },\n watch: {\n value: function value(_value) {\n this.dispatch('ElFormItem', 'el.form.change', [this.value]);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radio_groupvue_type_script_lang_js_ = (radio_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_group_component = normalizeComponent(\n src_radio_groupvue_type_script_lang_js_,\n radio_groupvue_type_template_id_818a704c_render,\n radio_groupvue_type_template_id_818a704c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var radio_group_api; }\nradio_group_component.options.__file = \"packages/radio/src/radio-group.vue\"\n/* harmony default export */ var radio_group = (radio_group_component.exports);\n// CONCATENATED MODULE: ./packages/radio-group/index.js\n\n\n/* istanbul ignore next */\nradio_group.install = function (Vue) {\n Vue.component(radio_group.name, radio_group);\n};\n\n/* harmony default export */ var packages_radio_group = (radio_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-button.vue?vue&type=template&id=18a77a32&\nvar radio_buttonvue_type_template_id_18a77a32_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-radio-button\",\n class: [\n _vm.size ? \"el-radio-button--\" + _vm.size : \"\",\n { \"is-active\": _vm.value === _vm.label },\n { \"is-disabled\": _vm.isDisabled },\n { \"is-focus\": _vm.focus }\n ],\n attrs: {\n role: \"radio\",\n \"aria-checked\": _vm.value === _vm.label,\n \"aria-disabled\": _vm.isDisabled,\n tabindex: _vm.tabIndex\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.value = _vm.isDisabled ? _vm.value : _vm.label\n }\n }\n },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.value,\n expression: \"value\"\n }\n ],\n staticClass: \"el-radio-button__orig-radio\",\n attrs: {\n type: \"radio\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n tabindex: \"-1\",\n autocomplete: \"off\"\n },\n domProps: { value: _vm.label, checked: _vm._q(_vm.value, _vm.label) },\n on: {\n change: [\n function($event) {\n _vm.value = _vm.label\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n }),\n _c(\n \"span\",\n {\n staticClass: \"el-radio-button__inner\",\n style: _vm.value === _vm.label ? _vm.activeStyle : null,\n on: {\n keydown: function($event) {\n $event.stopPropagation()\n }\n }\n },\n [\n _vm._t(\"default\"),\n !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n ],\n 2\n )\n ]\n )\n}\nvar radio_buttonvue_type_template_id_18a77a32_staticRenderFns = []\nradio_buttonvue_type_template_id_18a77a32_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue?vue&type=template&id=18a77a32&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio-button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var radio_buttonvue_type_script_lang_js_ = ({\n name: 'ElRadioButton',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n label: {},\n disabled: Boolean,\n name: String\n },\n data: function data() {\n return {\n focus: false\n };\n },\n\n computed: {\n value: {\n get: function get() {\n return this._radioGroup.value;\n },\n set: function set(value) {\n this._radioGroup.$emit('input', value);\n }\n },\n _radioGroup: function _radioGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElRadioGroup') {\n parent = parent.$parent;\n } else {\n return parent;\n }\n }\n return false;\n },\n activeStyle: function activeStyle() {\n return {\n backgroundColor: this._radioGroup.fill || '',\n borderColor: this._radioGroup.fill || '',\n boxShadow: this._radioGroup.fill ? '-1px 0 0 0 ' + this._radioGroup.fill : '',\n color: this._radioGroup.textColor || ''\n };\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n size: function size() {\n return this._radioGroup.radioGroupSize || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n isDisabled: function isDisabled() {\n return this.disabled || this._radioGroup.disabled || (this.elForm || {}).disabled;\n },\n tabIndex: function tabIndex() {\n return this.isDisabled || this._radioGroup && this.value !== this.label ? -1 : 0;\n }\n },\n\n methods: {\n handleChange: function handleChange() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.dispatch('ElRadioGroup', 'handleChange', _this.value);\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radio_buttonvue_type_script_lang_js_ = (radio_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/radio/src/radio-button.vue\n\n\n\n\n\n/* normalize component */\n\nvar radio_button_component = normalizeComponent(\n src_radio_buttonvue_type_script_lang_js_,\n radio_buttonvue_type_template_id_18a77a32_render,\n radio_buttonvue_type_template_id_18a77a32_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var radio_button_api; }\nradio_button_component.options.__file = \"packages/radio/src/radio-button.vue\"\n/* harmony default export */ var radio_button = (radio_button_component.exports);\n// CONCATENATED MODULE: ./packages/radio-button/index.js\n\n\n/* istanbul ignore next */\nradio_button.install = function (Vue) {\n Vue.component(radio_button.name, radio_button);\n};\n\n/* harmony default export */ var packages_radio_button = (radio_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\nvar checkboxvue_type_template_id_d0387074_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-checkbox\",\n class: [\n _vm.border && _vm.checkboxSize\n ? \"el-checkbox--\" + _vm.checkboxSize\n : \"\",\n { \"is-disabled\": _vm.isDisabled },\n { \"is-bordered\": _vm.border },\n { \"is-checked\": _vm.isChecked }\n ],\n attrs: { id: _vm.id }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"el-checkbox__input\",\n class: {\n \"is-disabled\": _vm.isDisabled,\n \"is-checked\": _vm.isChecked,\n \"is-indeterminate\": _vm.indeterminate,\n \"is-focus\": _vm.focus\n },\n attrs: {\n tabindex: _vm.indeterminate ? 0 : false,\n role: _vm.indeterminate ? \"checkbox\" : false,\n \"aria-checked\": _vm.indeterminate ? \"mixed\" : false\n }\n },\n [\n _c(\"span\", { staticClass: \"el-checkbox__inner\" }),\n _vm.trueLabel || _vm.falseLabel\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox__original\",\n attrs: {\n type: \"checkbox\",\n \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n \"true-value\": _vm.trueLabel,\n \"false-value\": _vm.falseLabel\n },\n domProps: {\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, null) > -1\n : _vm._q(_vm.model, _vm.trueLabel)\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? _vm.trueLabel : _vm.falseLabel\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n })\n : _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox__original\",\n attrs: {\n type: \"checkbox\",\n \"aria-hidden\": _vm.indeterminate ? \"true\" : \"false\",\n disabled: _vm.isDisabled,\n name: _vm.name\n },\n domProps: {\n value: _vm.label,\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, _vm.label) > -1\n : _vm.model\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.label,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n })\n ]\n ),\n _vm.$slots.default || _vm.label\n ? _c(\n \"span\",\n { staticClass: \"el-checkbox__label\" },\n [\n _vm._t(\"default\"),\n !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n ],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar checkboxvue_type_template_id_d0387074_staticRenderFns = []\ncheckboxvue_type_template_id_d0387074_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=template&id=d0387074&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var checkboxvue_type_script_lang_js_ = ({\n name: 'ElCheckbox',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n componentName: 'ElCheckbox',\n\n data: function data() {\n return {\n selfModel: false,\n focus: false,\n isLimitExceeded: false\n };\n },\n\n\n computed: {\n model: {\n get: function get() {\n return this.isGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n },\n set: function set(val) {\n if (this.isGroup) {\n this.isLimitExceeded = false;\n this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (this.isLimitExceeded = true);\n\n this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (this.isLimitExceeded = true);\n\n this.isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n } else {\n this.$emit('input', val);\n this.selfModel = val;\n }\n }\n },\n\n isChecked: function isChecked() {\n if ({}.toString.call(this.model) === '[object Boolean]') {\n return this.model;\n } else if (Array.isArray(this.model)) {\n return this.model.indexOf(this.label) > -1;\n } else if (this.model !== null && this.model !== undefined) {\n return this.model === this.trueLabel;\n }\n },\n isGroup: function isGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElCheckboxGroup') {\n parent = parent.$parent;\n } else {\n this._checkboxGroup = parent;\n return true;\n }\n }\n return false;\n },\n store: function store() {\n return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n },\n\n\n /* used to make the isDisabled judgment under max/min props */\n isLimitDisabled: function isLimitDisabled() {\n var _checkboxGroup = this._checkboxGroup,\n max = _checkboxGroup.max,\n min = _checkboxGroup.min;\n\n return !!(max || min) && this.model.length >= max && !this.isChecked || this.model.length <= min && this.isChecked;\n },\n isDisabled: function isDisabled() {\n return this.isGroup ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled : this.disabled || (this.elForm || {}).disabled;\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n checkboxSize: function checkboxSize() {\n var temCheckboxSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n return this.isGroup ? this._checkboxGroup.checkboxGroupSize || temCheckboxSize : temCheckboxSize;\n }\n },\n\n props: {\n value: {},\n label: {},\n indeterminate: Boolean,\n disabled: Boolean,\n checked: Boolean,\n name: String,\n trueLabel: [String, Number],\n falseLabel: [String, Number],\n id: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n controls: String, /* 当indeterminate为真时,为controls提供相关连的checkbox的id,表明元素间的控制关系*/\n border: Boolean,\n size: String\n },\n\n methods: {\n addToStore: function addToStore() {\n if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n this.model.push(this.label);\n } else {\n this.model = this.trueLabel || true;\n }\n },\n handleChange: function handleChange(ev) {\n var _this = this;\n\n if (this.isLimitExceeded) return;\n var value = void 0;\n if (ev.target.checked) {\n value = this.trueLabel === undefined ? true : this.trueLabel;\n } else {\n value = this.falseLabel === undefined ? false : this.falseLabel;\n }\n this.$emit('change', value, ev);\n this.$nextTick(function () {\n if (_this.isGroup) {\n _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n }\n });\n }\n },\n\n created: function created() {\n this.checked && this.addToStore();\n },\n mounted: function mounted() {\n // 为indeterminate元素 添加aria-controls 属性\n if (this.indeterminate) {\n this.$el.setAttribute('aria-controls', this.controls);\n }\n },\n\n\n watch: {\n value: function value(_value) {\n this.dispatch('ElFormItem', 'el.form.change', _value);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkboxvue_type_script_lang_js_ = (checkboxvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_component = normalizeComponent(\n src_checkboxvue_type_script_lang_js_,\n checkboxvue_type_template_id_d0387074_render,\n checkboxvue_type_template_id_d0387074_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var checkbox_api; }\ncheckbox_component.options.__file = \"packages/checkbox/src/checkbox.vue\"\n/* harmony default export */ var src_checkbox = (checkbox_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox/index.js\n\n\n/* istanbul ignore next */\nsrc_checkbox.install = function (Vue) {\n Vue.component(src_checkbox.name, src_checkbox);\n};\n\n/* harmony default export */ var packages_checkbox = (src_checkbox);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-button.vue?vue&type=template&id=478e906e&\nvar checkbox_buttonvue_type_template_id_478e906e_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-checkbox-button\",\n class: [\n _vm.size ? \"el-checkbox-button--\" + _vm.size : \"\",\n { \"is-disabled\": _vm.isDisabled },\n { \"is-checked\": _vm.isChecked },\n { \"is-focus\": _vm.focus }\n ],\n attrs: {\n role: \"checkbox\",\n \"aria-checked\": _vm.isChecked,\n \"aria-disabled\": _vm.isDisabled\n }\n },\n [\n _vm.trueLabel || _vm.falseLabel\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox-button__original\",\n attrs: {\n type: \"checkbox\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n \"true-value\": _vm.trueLabel,\n \"false-value\": _vm.falseLabel\n },\n domProps: {\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, null) > -1\n : _vm._q(_vm.model, _vm.trueLabel)\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? _vm.trueLabel : _vm.falseLabel\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n })\n : _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n staticClass: \"el-checkbox-button__original\",\n attrs: {\n type: \"checkbox\",\n name: _vm.name,\n disabled: _vm.isDisabled\n },\n domProps: {\n value: _vm.label,\n checked: Array.isArray(_vm.model)\n ? _vm._i(_vm.model, _vm.label) > -1\n : _vm.model\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.model,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.label,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.model = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.model = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.model = $$c\n }\n },\n _vm.handleChange\n ],\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n }\n }\n }),\n _vm.$slots.default || _vm.label\n ? _c(\n \"span\",\n {\n staticClass: \"el-checkbox-button__inner\",\n style: _vm.isChecked ? _vm.activeStyle : null\n },\n [_vm._t(\"default\", [_vm._v(_vm._s(_vm.label))])],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar checkbox_buttonvue_type_template_id_478e906e_staticRenderFns = []\ncheckbox_buttonvue_type_template_id_478e906e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue?vue&type=template&id=478e906e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var checkbox_buttonvue_type_script_lang_js_ = ({\n name: 'ElCheckboxButton',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n data: function data() {\n return {\n selfModel: false,\n focus: false,\n isLimitExceeded: false\n };\n },\n\n\n props: {\n value: {},\n label: {},\n disabled: Boolean,\n checked: Boolean,\n name: String,\n trueLabel: [String, Number],\n falseLabel: [String, Number]\n },\n computed: {\n model: {\n get: function get() {\n return this._checkboxGroup ? this.store : this.value !== undefined ? this.value : this.selfModel;\n },\n set: function set(val) {\n if (this._checkboxGroup) {\n this.isLimitExceeded = false;\n this._checkboxGroup.min !== undefined && val.length < this._checkboxGroup.min && (this.isLimitExceeded = true);\n\n this._checkboxGroup.max !== undefined && val.length > this._checkboxGroup.max && (this.isLimitExceeded = true);\n\n this.isLimitExceeded === false && this.dispatch('ElCheckboxGroup', 'input', [val]);\n } else if (this.value !== undefined) {\n this.$emit('input', val);\n } else {\n this.selfModel = val;\n }\n }\n },\n\n isChecked: function isChecked() {\n if ({}.toString.call(this.model) === '[object Boolean]') {\n return this.model;\n } else if (Array.isArray(this.model)) {\n return this.model.indexOf(this.label) > -1;\n } else if (this.model !== null && this.model !== undefined) {\n return this.model === this.trueLabel;\n }\n },\n _checkboxGroup: function _checkboxGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElCheckboxGroup') {\n parent = parent.$parent;\n } else {\n return parent;\n }\n }\n return false;\n },\n store: function store() {\n return this._checkboxGroup ? this._checkboxGroup.value : this.value;\n },\n activeStyle: function activeStyle() {\n return {\n backgroundColor: this._checkboxGroup.fill || '',\n borderColor: this._checkboxGroup.fill || '',\n color: this._checkboxGroup.textColor || '',\n 'box-shadow': '-1px 0 0 0 ' + this._checkboxGroup.fill\n\n };\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n size: function size() {\n return this._checkboxGroup.checkboxGroupSize || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n\n\n /* used to make the isDisabled judgment under max/min props */\n isLimitDisabled: function isLimitDisabled() {\n var _checkboxGroup2 = this._checkboxGroup,\n max = _checkboxGroup2.max,\n min = _checkboxGroup2.min;\n\n return !!(max || min) && this.model.length >= max && !this.isChecked || this.model.length <= min && this.isChecked;\n },\n isDisabled: function isDisabled() {\n return this._checkboxGroup ? this._checkboxGroup.disabled || this.disabled || (this.elForm || {}).disabled || this.isLimitDisabled : this.disabled || (this.elForm || {}).disabled;\n }\n },\n methods: {\n addToStore: function addToStore() {\n if (Array.isArray(this.model) && this.model.indexOf(this.label) === -1) {\n this.model.push(this.label);\n } else {\n this.model = this.trueLabel || true;\n }\n },\n handleChange: function handleChange(ev) {\n var _this = this;\n\n if (this.isLimitExceeded) return;\n var value = void 0;\n if (ev.target.checked) {\n value = this.trueLabel === undefined ? true : this.trueLabel;\n } else {\n value = this.falseLabel === undefined ? false : this.falseLabel;\n }\n this.$emit('change', value, ev);\n this.$nextTick(function () {\n if (_this._checkboxGroup) {\n _this.dispatch('ElCheckboxGroup', 'change', [_this._checkboxGroup.value]);\n }\n });\n }\n },\n\n created: function created() {\n this.checked && this.addToStore();\n }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkbox_buttonvue_type_script_lang_js_ = (checkbox_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-button.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_button_component = normalizeComponent(\n src_checkbox_buttonvue_type_script_lang_js_,\n checkbox_buttonvue_type_template_id_478e906e_render,\n checkbox_buttonvue_type_template_id_478e906e_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var checkbox_button_api; }\ncheckbox_button_component.options.__file = \"packages/checkbox/src/checkbox-button.vue\"\n/* harmony default export */ var checkbox_button = (checkbox_button_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox-button/index.js\n\n\n/* istanbul ignore next */\ncheckbox_button.install = function (Vue) {\n Vue.component(checkbox_button.name, checkbox_button);\n};\n\n/* harmony default export */ var packages_checkbox_button = (checkbox_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\nvar checkbox_groupvue_type_template_id_7289a290_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-checkbox-group\",\n attrs: { role: \"group\", \"aria-label\": \"checkbox-group\" }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar checkbox_groupvue_type_template_id_7289a290_staticRenderFns = []\ncheckbox_groupvue_type_template_id_7289a290_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=template&id=7289a290&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n\n\n\n/* harmony default export */ var checkbox_groupvue_type_script_lang_js_ = ({\n name: 'ElCheckboxGroup',\n\n componentName: 'ElCheckboxGroup',\n\n mixins: [emitter_default.a],\n\n inject: {\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n value: {},\n disabled: Boolean,\n min: Number,\n max: Number,\n size: String,\n fill: String,\n textColor: String\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n checkboxGroupSize: function checkboxGroupSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n }\n },\n\n watch: {\n value: function value(_value) {\n this.dispatch('ElFormItem', 'el.form.change', [_value]);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_checkbox_groupvue_type_script_lang_js_ = (checkbox_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/checkbox/src/checkbox-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar checkbox_group_component = normalizeComponent(\n src_checkbox_groupvue_type_script_lang_js_,\n checkbox_groupvue_type_template_id_7289a290_render,\n checkbox_groupvue_type_template_id_7289a290_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var checkbox_group_api; }\ncheckbox_group_component.options.__file = \"packages/checkbox/src/checkbox-group.vue\"\n/* harmony default export */ var checkbox_group = (checkbox_group_component.exports);\n// CONCATENATED MODULE: ./packages/checkbox-group/index.js\n\n\n/* istanbul ignore next */\ncheckbox_group.install = function (Vue) {\n Vue.component(checkbox_group.name, checkbox_group);\n};\n\n/* harmony default export */ var packages_checkbox_group = (checkbox_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/switch/src/component.vue?vue&type=template&id=2dcd8fbb&\nvar componentvue_type_template_id_2dcd8fbb_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-switch\",\n class: { \"is-disabled\": _vm.switchDisabled, \"is-checked\": _vm.checked },\n attrs: {\n role: \"switch\",\n \"aria-checked\": _vm.checked,\n \"aria-disabled\": _vm.switchDisabled\n },\n on: {\n click: function($event) {\n $event.preventDefault()\n return _vm.switchValue($event)\n }\n }\n },\n [\n _c(\"input\", {\n ref: \"input\",\n staticClass: \"el-switch__input\",\n attrs: {\n type: \"checkbox\",\n id: _vm.id,\n name: _vm.name,\n \"true-value\": _vm.activeValue,\n \"false-value\": _vm.inactiveValue,\n disabled: _vm.switchDisabled\n },\n on: {\n change: _vm.handleChange,\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.switchValue($event)\n }\n }\n }),\n _vm.inactiveIconClass || _vm.inactiveText\n ? _c(\n \"span\",\n {\n class: [\n \"el-switch__label\",\n \"el-switch__label--left\",\n !_vm.checked ? \"is-active\" : \"\"\n ]\n },\n [\n _vm.inactiveIconClass\n ? _c(\"i\", { class: [_vm.inactiveIconClass] })\n : _vm._e(),\n !_vm.inactiveIconClass && _vm.inactiveText\n ? _c(\"span\", { attrs: { \"aria-hidden\": _vm.checked } }, [\n _vm._v(_vm._s(_vm.inactiveText))\n ])\n : _vm._e()\n ]\n )\n : _vm._e(),\n _c(\"span\", {\n ref: \"core\",\n staticClass: \"el-switch__core\",\n style: { width: _vm.coreWidth + \"px\" }\n }),\n _vm.activeIconClass || _vm.activeText\n ? _c(\n \"span\",\n {\n class: [\n \"el-switch__label\",\n \"el-switch__label--right\",\n _vm.checked ? \"is-active\" : \"\"\n ]\n },\n [\n _vm.activeIconClass\n ? _c(\"i\", { class: [_vm.activeIconClass] })\n : _vm._e(),\n !_vm.activeIconClass && _vm.activeText\n ? _c(\"span\", { attrs: { \"aria-hidden\": !_vm.checked } }, [\n _vm._v(_vm._s(_vm.activeText))\n ])\n : _vm._e()\n ]\n )\n : _vm._e()\n ]\n )\n}\nvar componentvue_type_template_id_2dcd8fbb_staticRenderFns = []\ncomponentvue_type_template_id_2dcd8fbb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/switch/src/component.vue?vue&type=template&id=2dcd8fbb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/switch/src/component.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var switch_src_componentvue_type_script_lang_js_ = ({\n name: 'ElSwitch',\n mixins: [focus_default()('input'), migrating_default.a, emitter_default.a],\n inject: {\n elForm: {\n default: ''\n }\n },\n props: {\n value: {\n type: [Boolean, String, Number],\n default: false\n },\n disabled: {\n type: Boolean,\n default: false\n },\n width: {\n type: Number,\n default: 40\n },\n activeIconClass: {\n type: String,\n default: ''\n },\n inactiveIconClass: {\n type: String,\n default: ''\n },\n activeText: String,\n inactiveText: String,\n activeColor: {\n type: String,\n default: ''\n },\n inactiveColor: {\n type: String,\n default: ''\n },\n activeValue: {\n type: [Boolean, String, Number],\n default: true\n },\n inactiveValue: {\n type: [Boolean, String, Number],\n default: false\n },\n name: {\n type: String,\n default: ''\n },\n validateEvent: {\n type: Boolean,\n default: true\n },\n id: String\n },\n data: function data() {\n return {\n coreWidth: this.width\n };\n },\n created: function created() {\n if (!~[this.activeValue, this.inactiveValue].indexOf(this.value)) {\n this.$emit('input', this.inactiveValue);\n }\n },\n\n computed: {\n checked: function checked() {\n return this.value === this.activeValue;\n },\n switchDisabled: function switchDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n watch: {\n checked: function checked() {\n this.$refs.input.checked = this.checked;\n if (this.activeColor || this.inactiveColor) {\n this.setBackgroundColor();\n }\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', [this.value]);\n }\n }\n },\n methods: {\n handleChange: function handleChange(event) {\n var _this = this;\n\n var val = this.checked ? this.inactiveValue : this.activeValue;\n this.$emit('input', val);\n this.$emit('change', val);\n this.$nextTick(function () {\n // set input's checked property\n // in case parent refuses to change component's value\n if (_this.$refs.input) {\n _this.$refs.input.checked = _this.checked;\n }\n });\n },\n setBackgroundColor: function setBackgroundColor() {\n var newColor = this.checked ? this.activeColor : this.inactiveColor;\n this.$refs.core.style.borderColor = newColor;\n this.$refs.core.style.backgroundColor = newColor;\n },\n switchValue: function switchValue() {\n !this.switchDisabled && this.handleChange();\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'on-color': 'on-color is renamed to active-color.',\n 'off-color': 'off-color is renamed to inactive-color.',\n 'on-text': 'on-text is renamed to active-text.',\n 'off-text': 'off-text is renamed to inactive-text.',\n 'on-value': 'on-value is renamed to active-value.',\n 'off-value': 'off-value is renamed to inactive-value.',\n 'on-icon-class': 'on-icon-class is renamed to active-icon-class.',\n 'off-icon-class': 'off-icon-class is renamed to inactive-icon-class.'\n }\n };\n }\n },\n mounted: function mounted() {\n /* istanbul ignore if */\n this.coreWidth = this.width || 40;\n if (this.activeColor || this.inactiveColor) {\n this.setBackgroundColor();\n }\n this.$refs.input.checked = this.checked;\n }\n});\n// CONCATENATED MODULE: ./packages/switch/src/component.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_switch_src_componentvue_type_script_lang_js_ = (switch_src_componentvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/switch/src/component.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_component_component = normalizeComponent(\n packages_switch_src_componentvue_type_script_lang_js_,\n componentvue_type_template_id_2dcd8fbb_render,\n componentvue_type_template_id_2dcd8fbb_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_component_api; }\nsrc_component_component.options.__file = \"packages/switch/src/component.vue\"\n/* harmony default export */ var switch_src_component = (src_component_component.exports);\n// CONCATENATED MODULE: ./packages/switch/index.js\n\n\n/* istanbul ignore next */\nswitch_src_component.install = function (Vue) {\n Vue.component(switch_src_component.name, switch_src_component);\n};\n\n/* harmony default export */ var packages_switch = (switch_src_component);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\nvar selectvue_type_template_id_0e4aade6_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleClose,\n expression: \"handleClose\"\n }\n ],\n staticClass: \"el-select\",\n class: [_vm.selectSize ? \"el-select--\" + _vm.selectSize : \"\"],\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.toggleMenu($event)\n }\n }\n },\n [\n _vm.multiple\n ? _c(\n \"div\",\n {\n ref: \"tags\",\n staticClass: \"el-select__tags\",\n style: { \"max-width\": _vm.inputWidth - 32 + \"px\", width: \"100%\" }\n },\n [\n _vm.collapseTags && _vm.selected.length\n ? _c(\n \"span\",\n [\n _c(\n \"el-tag\",\n {\n attrs: {\n closable: !_vm.selectDisabled,\n size: _vm.collapseTagSize,\n hit: _vm.selected[0].hitState,\n type: \"info\",\n \"disable-transitions\": \"\"\n },\n on: {\n close: function($event) {\n _vm.deleteTag($event, _vm.selected[0])\n }\n }\n },\n [\n _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n _vm._v(_vm._s(_vm.selected[0].currentLabel))\n ])\n ]\n ),\n _vm.selected.length > 1\n ? _c(\n \"el-tag\",\n {\n attrs: {\n closable: false,\n size: _vm.collapseTagSize,\n type: \"info\",\n \"disable-transitions\": \"\"\n }\n },\n [\n _c(\n \"span\",\n { staticClass: \"el-select__tags-text\" },\n [_vm._v(\"+ \" + _vm._s(_vm.selected.length - 1))]\n )\n ]\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n !_vm.collapseTags\n ? _c(\n \"transition-group\",\n { on: { \"after-leave\": _vm.resetInputHeight } },\n _vm._l(_vm.selected, function(item) {\n return _c(\n \"el-tag\",\n {\n key: _vm.getValueKey(item),\n attrs: {\n closable: !_vm.selectDisabled,\n size: _vm.collapseTagSize,\n hit: item.hitState,\n type: \"info\",\n \"disable-transitions\": \"\"\n },\n on: {\n close: function($event) {\n _vm.deleteTag($event, item)\n }\n }\n },\n [\n _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n _vm._v(_vm._s(item.currentLabel))\n ])\n ]\n )\n }),\n 1\n )\n : _vm._e(),\n _vm.filterable\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.query,\n expression: \"query\"\n }\n ],\n ref: \"input\",\n staticClass: \"el-select__input\",\n class: [_vm.selectSize ? \"is-\" + _vm.selectSize : \"\"],\n style: {\n \"flex-grow\": \"1\",\n width: _vm.inputLength / (_vm.inputWidth - 32) + \"%\",\n \"max-width\": _vm.inputWidth - 42 + \"px\"\n },\n attrs: {\n type: \"text\",\n disabled: _vm.selectDisabled,\n autocomplete: _vm.autoComplete || _vm.autocomplete\n },\n domProps: { value: _vm.query },\n on: {\n focus: _vm.handleFocus,\n blur: function($event) {\n _vm.softFocus = false\n },\n keyup: _vm.managePlaceholder,\n keydown: [\n _vm.resetInputState,\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.handleNavigate(\"next\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.handleNavigate(\"prev\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.selectOption($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n \"Esc\",\n \"Escape\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.visible = false\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"delete\",\n [8, 46],\n $event.key,\n [\"Backspace\", \"Delete\", \"Del\"]\n )\n ) {\n return null\n }\n return _vm.deletePrevTag($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n _vm.visible = false\n }\n ],\n compositionstart: _vm.handleComposition,\n compositionupdate: _vm.handleComposition,\n compositionend: _vm.handleComposition,\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.query = $event.target.value\n },\n _vm.debouncedQueryChange\n ]\n }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"el-input\",\n {\n ref: \"reference\",\n class: { \"is-focus\": _vm.visible },\n attrs: {\n type: \"text\",\n placeholder: _vm.currentPlaceholder,\n name: _vm.name,\n id: _vm.id,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n size: _vm.selectSize,\n disabled: _vm.selectDisabled,\n readonly: _vm.readonly,\n \"validate-event\": false,\n tabindex: _vm.multiple && _vm.filterable ? \"-1\" : null\n },\n on: {\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n input: _vm.debouncedOnInputChange,\n compositionstart: _vm.handleComposition,\n compositionupdate: _vm.handleComposition,\n compositionend: _vm.handleComposition\n },\n nativeOn: {\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.handleNavigate(\"next\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.handleNavigate(\"prev\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.selectOption($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n \"Esc\",\n \"Escape\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.visible = false\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n _vm.visible = false\n }\n ],\n mouseenter: function($event) {\n _vm.inputHovering = true\n },\n mouseleave: function($event) {\n _vm.inputHovering = false\n }\n },\n model: {\n value: _vm.selectedLabel,\n callback: function($$v) {\n _vm.selectedLabel = $$v\n },\n expression: \"selectedLabel\"\n }\n },\n [\n _vm.$slots.prefix\n ? _c(\"template\", { slot: \"prefix\" }, [_vm._t(\"prefix\")], 2)\n : _vm._e(),\n _c(\"template\", { slot: \"suffix\" }, [\n _c(\"i\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showClose,\n expression: \"!showClose\"\n }\n ],\n class: [\n \"el-select__caret\",\n \"el-input__icon\",\n \"el-icon-\" + _vm.iconClass\n ]\n }),\n _vm.showClose\n ? _c(\"i\", {\n staticClass:\n \"el-select__caret el-input__icon el-icon-circle-close\",\n on: { click: _vm.handleClearClick }\n })\n : _vm._e()\n ])\n ],\n 2\n ),\n _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"before-enter\": _vm.handleMenuEnter,\n \"after-leave\": _vm.doDestroy\n }\n },\n [\n _c(\n \"el-select-menu\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible && _vm.emptyText !== false,\n expression: \"visible && emptyText !== false\"\n }\n ],\n ref: \"popper\",\n attrs: { \"append-to-body\": _vm.popperAppendToBody }\n },\n [\n _c(\n \"el-scrollbar\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.options.length > 0 && !_vm.loading,\n expression: \"options.length > 0 && !loading\"\n }\n ],\n ref: \"scrollbar\",\n class: {\n \"is-empty\":\n !_vm.allowCreate &&\n _vm.query &&\n _vm.filteredOptionsCount === 0\n },\n attrs: {\n tag: \"ul\",\n \"wrap-class\": \"el-select-dropdown__wrap\",\n \"view-class\": \"el-select-dropdown__list\"\n }\n },\n [\n _vm.showNewOption\n ? _c(\"el-option\", {\n attrs: { value: _vm.query, created: \"\" }\n })\n : _vm._e(),\n _vm._t(\"default\")\n ],\n 2\n ),\n _vm.emptyText &&\n (!_vm.allowCreate ||\n _vm.loading ||\n (_vm.allowCreate && _vm.options.length === 0))\n ? [\n _vm.$slots.empty\n ? _vm._t(\"empty\")\n : _c(\"p\", { staticClass: \"el-select-dropdown__empty\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.emptyText) +\n \"\\n \"\n )\n ])\n ]\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar selectvue_type_template_id_0e4aade6_staticRenderFns = []\nselectvue_type_template_id_0e4aade6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\nvar select_dropdownvue_type_template_id_06828748_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-select-dropdown el-popper\",\n class: [{ \"is-multiple\": _vm.$parent.multiple }, _vm.popperClass],\n style: { minWidth: _vm.minWidth }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar select_dropdownvue_type_template_id_06828748_staticRenderFns = []\nselect_dropdownvue_type_template_id_06828748_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var select_dropdownvue_type_script_lang_js_ = ({\n name: 'ElSelectDropdown',\n\n componentName: 'ElSelectDropdown',\n\n mixins: [vue_popper_default.a],\n\n props: {\n placement: {\n default: 'bottom-start'\n },\n\n boundariesPadding: {\n default: 0\n },\n\n popperOptions: {\n default: function _default() {\n return {\n gpuAcceleration: false\n };\n }\n },\n\n visibleArrow: {\n default: true\n },\n\n appendToBody: {\n type: Boolean,\n default: true\n }\n },\n\n data: function data() {\n return {\n minWidth: ''\n };\n },\n\n\n computed: {\n popperClass: function popperClass() {\n return this.$parent.popperClass;\n }\n },\n\n watch: {\n '$parent.inputWidth': function $parentInputWidth() {\n this.minWidth = this.$parent.$el.getBoundingClientRect().width + 'px';\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n this.referenceElm = this.$parent.$refs.reference.$el;\n this.$parent.popperElm = this.popperElm = this.$el;\n this.$on('updatePopper', function () {\n if (_this.$parent.visible) _this.updatePopper();\n });\n this.$on('destroyPopper', this.destroyPopper);\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_select_dropdownvue_type_script_lang_js_ = (select_dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue\n\n\n\n\n\n/* normalize component */\n\nvar select_dropdown_component = normalizeComponent(\n src_select_dropdownvue_type_script_lang_js_,\n select_dropdownvue_type_template_id_06828748_render,\n select_dropdownvue_type_template_id_06828748_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var select_dropdown_api; }\nselect_dropdown_component.options.__file = \"packages/select/src/select-dropdown.vue\"\n/* harmony default export */ var select_dropdown = (select_dropdown_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=template&id=7a44c642&\nvar optionvue_type_template_id_7a44c642_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-select-dropdown__item\",\n class: {\n selected: _vm.itemSelected,\n \"is-disabled\": _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n hover: _vm.hover\n },\n on: {\n mouseenter: _vm.hoverItem,\n click: function($event) {\n $event.stopPropagation()\n return _vm.selectOptionClick($event)\n }\n }\n },\n [_vm._t(\"default\", [_c(\"span\", [_vm._v(_vm._s(_vm.currentLabel))])])],\n 2\n )\n}\nvar optionvue_type_template_id_7a44c642_staticRenderFns = []\noptionvue_type_template_id_7a44c642_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=template&id=7a44c642&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=script&lang=js&\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var optionvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a],\n\n name: 'ElOption',\n\n componentName: 'ElOption',\n\n inject: ['select'],\n\n props: {\n value: {\n required: true\n },\n label: [String, Number],\n created: Boolean,\n disabled: {\n type: Boolean,\n default: false\n }\n },\n\n data: function data() {\n return {\n index: -1,\n groupDisabled: false,\n visible: true,\n hitState: false,\n hover: false\n };\n },\n\n\n computed: {\n isObject: function isObject() {\n return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n },\n currentLabel: function currentLabel() {\n return this.label || (this.isObject ? '' : this.value);\n },\n currentValue: function currentValue() {\n return this.value || this.label || '';\n },\n itemSelected: function itemSelected() {\n if (!this.select.multiple) {\n return this.isEqual(this.value, this.select.value);\n } else {\n return this.contains(this.select.value, this.value);\n }\n },\n limitReached: function limitReached() {\n if (this.select.multiple) {\n return !this.itemSelected && (this.select.value || []).length >= this.select.multipleLimit && this.select.multipleLimit > 0;\n } else {\n return false;\n }\n }\n },\n\n watch: {\n currentLabel: function currentLabel() {\n if (!this.created && !this.select.remote) this.dispatch('ElSelect', 'setSelected');\n },\n value: function value(val, oldVal) {\n var _select = this.select,\n remote = _select.remote,\n valueKey = _select.valueKey;\n\n if (!this.created && !remote) {\n if (valueKey && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && (typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) === 'object' && val[valueKey] === oldVal[valueKey]) {\n return;\n }\n this.dispatch('ElSelect', 'setSelected');\n }\n }\n },\n\n methods: {\n isEqual: function isEqual(a, b) {\n if (!this.isObject) {\n return a === b;\n } else {\n var valueKey = this.select.valueKey;\n return Object(util_[\"getValueByPath\"])(a, valueKey) === Object(util_[\"getValueByPath\"])(b, valueKey);\n }\n },\n contains: function contains() {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var target = arguments[1];\n\n if (!this.isObject) {\n return arr && arr.indexOf(target) > -1;\n } else {\n var valueKey = this.select.valueKey;\n return arr && arr.some(function (item) {\n return Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(target, valueKey);\n });\n }\n },\n handleGroupDisabled: function handleGroupDisabled(val) {\n this.groupDisabled = val;\n },\n hoverItem: function hoverItem() {\n if (!this.disabled && !this.groupDisabled) {\n this.select.hoverIndex = this.select.options.indexOf(this);\n }\n },\n selectOptionClick: function selectOptionClick() {\n if (this.disabled !== true && this.groupDisabled !== true) {\n this.dispatch('ElSelect', 'handleOptionClick', [this, true]);\n }\n },\n queryChange: function queryChange(query) {\n this.visible = new RegExp(Object(util_[\"escapeRegexpString\"])(query), 'i').test(this.currentLabel) || this.created;\n if (!this.visible) {\n this.select.filteredOptionsCount--;\n }\n }\n },\n\n created: function created() {\n this.select.options.push(this);\n this.select.cachedOptions.push(this);\n this.select.optionsCount++;\n this.select.filteredOptionsCount++;\n\n this.$on('queryChange', this.queryChange);\n this.$on('handleGroupDisabled', this.handleGroupDisabled);\n },\n beforeDestroy: function beforeDestroy() {\n var _select2 = this.select,\n selected = _select2.selected,\n multiple = _select2.multiple;\n\n var selectedOptions = multiple ? selected : [selected];\n var index = this.select.cachedOptions.indexOf(this);\n var selectedIndex = selectedOptions.indexOf(this);\n\n // if option is not selected, remove it from cache\n if (index > -1 && selectedIndex < 0) {\n this.select.cachedOptions.splice(index, 1);\n }\n this.select.onOptionDestroy(this.select.options.indexOf(this));\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_optionvue_type_script_lang_js_ = (optionvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/option.vue\n\n\n\n\n\n/* normalize component */\n\nvar option_component = normalizeComponent(\n src_optionvue_type_script_lang_js_,\n optionvue_type_template_id_7a44c642_render,\n optionvue_type_template_id_7a44c642_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var option_api; }\noption_component.options.__file = \"packages/select/src/option.vue\"\n/* harmony default export */ var src_option = (option_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/tag\"\nvar tag_ = __webpack_require__(29);\nvar tag_default = /*#__PURE__*/__webpack_require__.n(tag_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/resize-event\"\nvar resize_event_ = __webpack_require__(14);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scroll-into-view\"\nvar scroll_into_view_ = __webpack_require__(27);\nvar scroll_into_view_default = /*#__PURE__*/__webpack_require__.n(scroll_into_view_);\n\n// CONCATENATED MODULE: ./packages/select/src/navigation-mixin.js\n/* harmony default export */ var navigation_mixin = ({\n data: function data() {\n return {\n hoverOption: -1\n };\n },\n\n\n computed: {\n optionsAllDisabled: function optionsAllDisabled() {\n return this.options.filter(function (option) {\n return option.visible;\n }).every(function (option) {\n return option.disabled;\n });\n }\n },\n\n watch: {\n hoverIndex: function hoverIndex(val) {\n var _this = this;\n\n if (typeof val === 'number' && val > -1) {\n this.hoverOption = this.options[val] || {};\n }\n this.options.forEach(function (option) {\n option.hover = _this.hoverOption === option;\n });\n }\n },\n\n methods: {\n navigateOptions: function navigateOptions(direction) {\n var _this2 = this;\n\n if (!this.visible) {\n this.visible = true;\n return;\n }\n if (this.options.length === 0 || this.filteredOptionsCount === 0) return;\n if (!this.optionsAllDisabled) {\n if (direction === 'next') {\n this.hoverIndex++;\n if (this.hoverIndex === this.options.length) {\n this.hoverIndex = 0;\n }\n } else if (direction === 'prev') {\n this.hoverIndex--;\n if (this.hoverIndex < 0) {\n this.hoverIndex = this.options.length - 1;\n }\n }\n var option = this.options[this.hoverIndex];\n if (option.disabled === true || option.groupDisabled === true || !option.visible) {\n this.navigateOptions(direction);\n }\n this.$nextTick(function () {\n return _this2.scrollToOption(_this2.hoverOption);\n });\n }\n }\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var selectvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a, locale_default.a, focus_default()('reference'), navigation_mixin],\n\n name: 'ElSelect',\n\n componentName: 'ElSelect',\n\n inject: {\n elForm: {\n default: ''\n },\n\n elFormItem: {\n default: ''\n }\n },\n\n provide: function provide() {\n return {\n 'select': this\n };\n },\n\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n readonly: function readonly() {\n return !this.filterable || this.multiple || !Object(util_[\"isIE\"])() && !Object(util_[\"isEdge\"])() && !this.visible;\n },\n showClose: function showClose() {\n var hasValue = this.multiple ? Array.isArray(this.value) && this.value.length > 0 : this.value !== undefined && this.value !== null && this.value !== '';\n var criteria = this.clearable && !this.selectDisabled && this.inputHovering && hasValue;\n return criteria;\n },\n iconClass: function iconClass() {\n return this.remote && this.filterable ? '' : this.visible ? 'arrow-up is-reverse' : 'arrow-up';\n },\n debounce: function debounce() {\n return this.remote ? 300 : 0;\n },\n emptyText: function emptyText() {\n if (this.loading) {\n return this.loadingText || this.t('el.select.loading');\n } else {\n if (this.remote && this.query === '' && this.options.length === 0) return false;\n if (this.filterable && this.query && this.options.length > 0 && this.filteredOptionsCount === 0) {\n return this.noMatchText || this.t('el.select.noMatch');\n }\n if (this.options.length === 0) {\n return this.noDataText || this.t('el.select.noData');\n }\n }\n return null;\n },\n showNewOption: function showNewOption() {\n var _this = this;\n\n var hasExistingOption = this.options.filter(function (option) {\n return !option.created;\n }).some(function (option) {\n return option.currentLabel === _this.query;\n });\n return this.filterable && this.allowCreate && this.query !== '' && !hasExistingOption;\n },\n selectSize: function selectSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n selectDisabled: function selectDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n collapseTagSize: function collapseTagSize() {\n return ['small', 'mini'].indexOf(this.selectSize) > -1 ? 'mini' : 'small';\n },\n propPlaceholder: function propPlaceholder() {\n return typeof this.placeholder !== 'undefined' ? this.placeholder : this.t('el.select.placeholder');\n }\n },\n\n components: {\n ElInput: input_default.a,\n ElSelectMenu: select_dropdown,\n ElOption: src_option,\n ElTag: tag_default.a,\n ElScrollbar: scrollbar_default.a\n },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n props: {\n name: String,\n id: String,\n value: {\n required: true\n },\n autocomplete: {\n type: String,\n default: 'off'\n },\n /** @Deprecated in next major version */\n autoComplete: {\n type: String,\n validator: function validator(val) {\n false && false;\n return true;\n }\n },\n automaticDropdown: Boolean,\n size: String,\n disabled: Boolean,\n clearable: Boolean,\n filterable: Boolean,\n allowCreate: Boolean,\n loading: Boolean,\n popperClass: String,\n remote: Boolean,\n loadingText: String,\n noMatchText: String,\n noDataText: String,\n remoteMethod: Function,\n filterMethod: Function,\n multiple: Boolean,\n multipleLimit: {\n type: Number,\n default: 0\n },\n placeholder: {\n type: String,\n required: false\n },\n defaultFirstOption: Boolean,\n reserveKeyword: Boolean,\n valueKey: {\n type: String,\n default: 'value'\n },\n collapseTags: Boolean,\n popperAppendToBody: {\n type: Boolean,\n default: true\n }\n },\n\n data: function data() {\n return {\n options: [],\n cachedOptions: [],\n createdLabel: null,\n createdSelected: false,\n selected: this.multiple ? [] : {},\n inputLength: 20,\n inputWidth: 0,\n initialInputHeight: 0,\n cachedPlaceHolder: '',\n optionsCount: 0,\n filteredOptionsCount: 0,\n visible: false,\n softFocus: false,\n selectedLabel: '',\n hoverIndex: -1,\n query: '',\n previousQuery: null,\n inputHovering: false,\n currentPlaceholder: '',\n menuVisibleOnFocus: false,\n isOnComposition: false,\n isSilentBlur: false\n };\n },\n\n\n watch: {\n selectDisabled: function selectDisabled() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.resetInputHeight();\n });\n },\n propPlaceholder: function propPlaceholder(val) {\n this.cachedPlaceHolder = this.currentPlaceholder = val;\n },\n value: function value(val, oldVal) {\n if (this.multiple) {\n this.resetInputHeight();\n if (val && val.length > 0 || this.$refs.input && this.query !== '') {\n this.currentPlaceholder = '';\n } else {\n this.currentPlaceholder = this.cachedPlaceHolder;\n }\n if (this.filterable && !this.reserveKeyword) {\n this.query = '';\n this.handleQueryChange(this.query);\n }\n }\n this.setSelected();\n if (this.filterable && !this.multiple) {\n this.inputLength = 20;\n }\n if (!Object(util_[\"valueEquals\"])(val, oldVal)) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n },\n visible: function visible(val) {\n var _this3 = this;\n\n if (!val) {\n this.broadcast('ElSelectDropdown', 'destroyPopper');\n if (this.$refs.input) {\n this.$refs.input.blur();\n }\n this.query = '';\n this.previousQuery = null;\n this.selectedLabel = '';\n this.inputLength = 20;\n this.menuVisibleOnFocus = false;\n this.resetHoverIndex();\n this.$nextTick(function () {\n if (_this3.$refs.input && _this3.$refs.input.value === '' && _this3.selected.length === 0) {\n _this3.currentPlaceholder = _this3.cachedPlaceHolder;\n }\n });\n if (!this.multiple) {\n if (this.selected) {\n if (this.filterable && this.allowCreate && this.createdSelected && this.createdLabel) {\n this.selectedLabel = this.createdLabel;\n } else {\n this.selectedLabel = this.selected.currentLabel;\n }\n if (this.filterable) this.query = this.selectedLabel;\n }\n\n if (this.filterable) {\n this.currentPlaceholder = this.cachedPlaceHolder;\n }\n }\n } else {\n this.broadcast('ElSelectDropdown', 'updatePopper');\n if (this.filterable) {\n this.query = this.remote ? '' : this.selectedLabel;\n this.handleQueryChange(this.query);\n if (this.multiple) {\n this.$refs.input.focus();\n } else {\n if (!this.remote) {\n this.broadcast('ElOption', 'queryChange', '');\n this.broadcast('ElOptionGroup', 'queryChange');\n }\n\n if (this.selectedLabel) {\n this.currentPlaceholder = this.selectedLabel;\n this.selectedLabel = '';\n }\n }\n }\n }\n this.$emit('visible-change', val);\n },\n options: function options() {\n var _this4 = this;\n\n if (this.$isServer) return;\n this.$nextTick(function () {\n _this4.broadcast('ElSelectDropdown', 'updatePopper');\n });\n if (this.multiple) {\n this.resetInputHeight();\n }\n var inputs = this.$el.querySelectorAll('input');\n if ([].indexOf.call(inputs, document.activeElement) === -1) {\n this.setSelected();\n }\n if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n this.checkDefaultFirstOption();\n }\n }\n },\n\n methods: {\n handleNavigate: function handleNavigate(direction) {\n if (this.isOnComposition) return;\n\n this.navigateOptions(direction);\n },\n handleComposition: function handleComposition(event) {\n var _this5 = this;\n\n var text = event.target.value;\n if (event.type === 'compositionend') {\n this.isOnComposition = false;\n this.$nextTick(function (_) {\n return _this5.handleQueryChange(text);\n });\n } else {\n var lastCharacter = text[text.length - 1] || '';\n this.isOnComposition = !Object(shared_[\"isKorean\"])(lastCharacter);\n }\n },\n handleQueryChange: function handleQueryChange(val) {\n var _this6 = this;\n\n if (this.previousQuery === val || this.isOnComposition) return;\n if (this.previousQuery === null && (typeof this.filterMethod === 'function' || typeof this.remoteMethod === 'function')) {\n this.previousQuery = val;\n return;\n }\n this.previousQuery = val;\n this.$nextTick(function () {\n if (_this6.visible) _this6.broadcast('ElSelectDropdown', 'updatePopper');\n });\n this.hoverIndex = -1;\n if (this.multiple && this.filterable) {\n this.$nextTick(function () {\n var length = _this6.$refs.input.value.length * 15 + 20;\n _this6.inputLength = _this6.collapseTags ? Math.min(50, length) : length;\n _this6.managePlaceholder();\n _this6.resetInputHeight();\n });\n }\n if (this.remote && typeof this.remoteMethod === 'function') {\n this.hoverIndex = -1;\n this.remoteMethod(val);\n } else if (typeof this.filterMethod === 'function') {\n this.filterMethod(val);\n this.broadcast('ElOptionGroup', 'queryChange');\n } else {\n this.filteredOptionsCount = this.optionsCount;\n this.broadcast('ElOption', 'queryChange', val);\n this.broadcast('ElOptionGroup', 'queryChange');\n }\n if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n this.checkDefaultFirstOption();\n }\n },\n scrollToOption: function scrollToOption(option) {\n var target = Array.isArray(option) && option[0] ? option[0].$el : option.$el;\n if (this.$refs.popper && target) {\n var menu = this.$refs.popper.$el.querySelector('.el-select-dropdown__wrap');\n scroll_into_view_default()(menu, target);\n }\n this.$refs.scrollbar && this.$refs.scrollbar.handleScroll();\n },\n handleMenuEnter: function handleMenuEnter() {\n var _this7 = this;\n\n this.$nextTick(function () {\n return _this7.scrollToOption(_this7.selected);\n });\n },\n emitChange: function emitChange(val) {\n if (!Object(util_[\"valueEquals\"])(this.value, val)) {\n this.$emit('change', val);\n }\n },\n getOption: function getOption(value) {\n var option = void 0;\n var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n var isNull = Object.prototype.toString.call(value).toLowerCase() === '[object null]';\n var isUndefined = Object.prototype.toString.call(value).toLowerCase() === '[object undefined]';\n\n for (var i = this.cachedOptions.length - 1; i >= 0; i--) {\n var cachedOption = this.cachedOptions[i];\n var isEqual = isObject ? Object(util_[\"getValueByPath\"])(cachedOption.value, this.valueKey) === Object(util_[\"getValueByPath\"])(value, this.valueKey) : cachedOption.value === value;\n if (isEqual) {\n option = cachedOption;\n break;\n }\n }\n if (option) return option;\n var label = !isObject && !isNull && !isUndefined ? String(value) : '';\n var newOption = {\n value: value,\n currentLabel: label\n };\n if (this.multiple) {\n newOption.hitState = false;\n }\n return newOption;\n },\n setSelected: function setSelected() {\n var _this8 = this;\n\n if (!this.multiple) {\n var option = this.getOption(this.value);\n if (option.created) {\n this.createdLabel = option.currentLabel;\n this.createdSelected = true;\n } else {\n this.createdSelected = false;\n }\n this.selectedLabel = option.currentLabel;\n this.selected = option;\n if (this.filterable) this.query = this.selectedLabel;\n return;\n }\n var result = [];\n if (Array.isArray(this.value)) {\n this.value.forEach(function (value) {\n result.push(_this8.getOption(value));\n });\n }\n this.selected = result;\n this.$nextTick(function () {\n _this8.resetInputHeight();\n });\n },\n handleFocus: function handleFocus(event) {\n if (!this.softFocus) {\n if (this.automaticDropdown || this.filterable) {\n if (this.filterable && !this.visible) {\n this.menuVisibleOnFocus = true;\n }\n this.visible = true;\n }\n this.$emit('focus', event);\n } else {\n this.softFocus = false;\n }\n },\n blur: function blur() {\n this.visible = false;\n this.$refs.reference.blur();\n },\n handleBlur: function handleBlur(event) {\n var _this9 = this;\n\n setTimeout(function () {\n if (_this9.isSilentBlur) {\n _this9.isSilentBlur = false;\n } else {\n _this9.$emit('blur', event);\n }\n }, 50);\n this.softFocus = false;\n },\n handleClearClick: function handleClearClick(event) {\n this.deleteSelected(event);\n },\n doDestroy: function doDestroy() {\n this.$refs.popper && this.$refs.popper.doDestroy();\n },\n handleClose: function handleClose() {\n this.visible = false;\n },\n toggleLastOptionHitState: function toggleLastOptionHitState(hit) {\n if (!Array.isArray(this.selected)) return;\n var option = this.selected[this.selected.length - 1];\n if (!option) return;\n\n if (hit === true || hit === false) {\n option.hitState = hit;\n return hit;\n }\n\n option.hitState = !option.hitState;\n return option.hitState;\n },\n deletePrevTag: function deletePrevTag(e) {\n if (e.target.value.length <= 0 && !this.toggleLastOptionHitState()) {\n var value = this.value.slice();\n value.pop();\n this.$emit('input', value);\n this.emitChange(value);\n }\n },\n managePlaceholder: function managePlaceholder() {\n if (this.currentPlaceholder !== '') {\n this.currentPlaceholder = this.$refs.input.value ? '' : this.cachedPlaceHolder;\n }\n },\n resetInputState: function resetInputState(e) {\n if (e.keyCode !== 8) this.toggleLastOptionHitState(false);\n this.inputLength = this.$refs.input.value.length * 15 + 20;\n this.resetInputHeight();\n },\n resetInputHeight: function resetInputHeight() {\n var _this10 = this;\n\n if (this.collapseTags && !this.filterable) return;\n this.$nextTick(function () {\n if (!_this10.$refs.reference) return;\n var inputChildNodes = _this10.$refs.reference.$el.childNodes;\n var input = [].filter.call(inputChildNodes, function (item) {\n return item.tagName === 'INPUT';\n })[0];\n var tags = _this10.$refs.tags;\n var tagsHeight = tags ? Math.round(tags.getBoundingClientRect().height) : 0;\n var sizeInMap = _this10.initialInputHeight || 40;\n input.style.height = _this10.selected.length === 0 ? sizeInMap + 'px' : Math.max(tags ? tagsHeight + (tagsHeight > sizeInMap ? 6 : 0) : 0, sizeInMap) + 'px';\n if (_this10.visible && _this10.emptyText !== false) {\n _this10.broadcast('ElSelectDropdown', 'updatePopper');\n }\n });\n },\n resetHoverIndex: function resetHoverIndex() {\n var _this11 = this;\n\n setTimeout(function () {\n if (!_this11.multiple) {\n _this11.hoverIndex = _this11.options.indexOf(_this11.selected);\n } else {\n if (_this11.selected.length > 0) {\n _this11.hoverIndex = Math.min.apply(null, _this11.selected.map(function (item) {\n return _this11.options.indexOf(item);\n }));\n } else {\n _this11.hoverIndex = -1;\n }\n }\n }, 300);\n },\n handleOptionSelect: function handleOptionSelect(option, byClick) {\n var _this12 = this;\n\n if (this.multiple) {\n var value = (this.value || []).slice();\n var optionIndex = this.getValueIndex(value, option.value);\n if (optionIndex > -1) {\n value.splice(optionIndex, 1);\n } else if (this.multipleLimit <= 0 || value.length < this.multipleLimit) {\n value.push(option.value);\n }\n this.$emit('input', value);\n this.emitChange(value);\n if (option.created) {\n this.query = '';\n this.handleQueryChange('');\n this.inputLength = 20;\n }\n if (this.filterable) this.$refs.input.focus();\n } else {\n this.$emit('input', option.value);\n this.emitChange(option.value);\n this.visible = false;\n }\n this.isSilentBlur = byClick;\n this.setSoftFocus();\n if (this.visible) return;\n this.$nextTick(function () {\n _this12.scrollToOption(option);\n });\n },\n setSoftFocus: function setSoftFocus() {\n this.softFocus = true;\n var input = this.$refs.input || this.$refs.reference;\n if (input) {\n input.focus();\n }\n },\n getValueIndex: function getValueIndex() {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var value = arguments[1];\n\n var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n if (!isObject) {\n return arr.indexOf(value);\n } else {\n var valueKey = this.valueKey;\n var index = -1;\n arr.some(function (item, i) {\n if (Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(value, valueKey)) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n }\n },\n toggleMenu: function toggleMenu() {\n if (!this.selectDisabled) {\n if (this.menuVisibleOnFocus) {\n this.menuVisibleOnFocus = false;\n } else {\n this.visible = !this.visible;\n }\n if (this.visible) {\n (this.$refs.input || this.$refs.reference).focus();\n }\n }\n },\n selectOption: function selectOption() {\n if (!this.visible) {\n this.toggleMenu();\n } else {\n if (this.options[this.hoverIndex]) {\n this.handleOptionSelect(this.options[this.hoverIndex]);\n }\n }\n },\n deleteSelected: function deleteSelected(event) {\n event.stopPropagation();\n var value = this.multiple ? [] : '';\n this.$emit('input', value);\n this.emitChange(value);\n this.visible = false;\n this.$emit('clear');\n },\n deleteTag: function deleteTag(event, tag) {\n var index = this.selected.indexOf(tag);\n if (index > -1 && !this.selectDisabled) {\n var value = this.value.slice();\n value.splice(index, 1);\n this.$emit('input', value);\n this.emitChange(value);\n this.$emit('remove-tag', tag.value);\n }\n event.stopPropagation();\n },\n onInputChange: function onInputChange() {\n if (this.filterable && this.query !== this.selectedLabel) {\n this.query = this.selectedLabel;\n this.handleQueryChange(this.query);\n }\n },\n onOptionDestroy: function onOptionDestroy(index) {\n if (index > -1) {\n this.optionsCount--;\n this.filteredOptionsCount--;\n this.options.splice(index, 1);\n }\n },\n resetInputWidth: function resetInputWidth() {\n this.inputWidth = this.$refs.reference.$el.getBoundingClientRect().width;\n },\n handleResize: function handleResize() {\n this.resetInputWidth();\n if (this.multiple) this.resetInputHeight();\n },\n checkDefaultFirstOption: function checkDefaultFirstOption() {\n this.hoverIndex = -1;\n // highlight the created option\n var hasCreated = false;\n for (var i = this.options.length - 1; i >= 0; i--) {\n if (this.options[i].created) {\n hasCreated = true;\n this.hoverIndex = i;\n break;\n }\n }\n if (hasCreated) return;\n for (var _i = 0; _i !== this.options.length; ++_i) {\n var option = this.options[_i];\n if (this.query) {\n // highlight first options that passes the filter\n if (!option.disabled && !option.groupDisabled && option.visible) {\n this.hoverIndex = _i;\n break;\n }\n } else {\n // highlight currently selected option\n if (option.itemSelected) {\n this.hoverIndex = _i;\n break;\n }\n }\n }\n },\n getValueKey: function getValueKey(item) {\n if (Object.prototype.toString.call(item.value).toLowerCase() !== '[object object]') {\n return item.value;\n } else {\n return Object(util_[\"getValueByPath\"])(item.value, this.valueKey);\n }\n }\n },\n\n created: function created() {\n var _this13 = this;\n\n this.cachedPlaceHolder = this.currentPlaceholder = this.propPlaceholder;\n if (this.multiple && !Array.isArray(this.value)) {\n this.$emit('input', []);\n }\n if (!this.multiple && Array.isArray(this.value)) {\n this.$emit('input', '');\n }\n\n this.debouncedOnInputChange = debounce_default()(this.debounce, function () {\n _this13.onInputChange();\n });\n\n this.debouncedQueryChange = debounce_default()(this.debounce, function (e) {\n _this13.handleQueryChange(e.target.value);\n });\n\n this.$on('handleOptionClick', this.handleOptionSelect);\n this.$on('setSelected', this.setSelected);\n },\n mounted: function mounted() {\n var _this14 = this;\n\n if (this.multiple && Array.isArray(this.value) && this.value.length > 0) {\n this.currentPlaceholder = '';\n }\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.handleResize);\n\n var reference = this.$refs.reference;\n if (reference && reference.$el) {\n var sizeMap = {\n medium: 36,\n small: 32,\n mini: 28\n };\n var input = reference.$el.querySelector('input');\n this.initialInputHeight = input.getBoundingClientRect().height || sizeMap[this.selectSize];\n }\n if (this.remote && this.multiple) {\n this.resetInputHeight();\n }\n this.$nextTick(function () {\n if (reference && reference.$el) {\n _this14.inputWidth = reference.$el.getBoundingClientRect().width;\n }\n });\n this.setSelected();\n },\n beforeDestroy: function beforeDestroy() {\n if (this.$el && this.handleResize) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.handleResize);\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_selectvue_type_script_lang_js_ = (selectvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/select.vue\n\n\n\n\n\n/* normalize component */\n\nvar select_component = normalizeComponent(\n src_selectvue_type_script_lang_js_,\n selectvue_type_template_id_0e4aade6_render,\n selectvue_type_template_id_0e4aade6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var select_api; }\nselect_component.options.__file = \"packages/select/src/select.vue\"\n/* harmony default export */ var src_select = (select_component.exports);\n// CONCATENATED MODULE: ./packages/select/index.js\n\n\n/* istanbul ignore next */\nsrc_select.install = function (Vue) {\n Vue.component(src_select.name, src_select);\n};\n\n/* harmony default export */ var packages_select = (src_select);\n// CONCATENATED MODULE: ./packages/option/index.js\n\n\n/* istanbul ignore next */\nsrc_option.install = function (Vue) {\n Vue.component(src_option.name, src_option);\n};\n\n/* harmony default export */ var packages_option = (src_option);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option-group.vue?vue&type=template&id=6685e5de&\nvar option_groupvue_type_template_id_6685e5de_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"ul\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-select-group__wrap\"\n },\n [\n _c(\"li\", { staticClass: \"el-select-group__title\" }, [\n _vm._v(_vm._s(_vm.label))\n ]),\n _c(\"li\", [\n _c(\"ul\", { staticClass: \"el-select-group\" }, [_vm._t(\"default\")], 2)\n ])\n ]\n )\n}\nvar option_groupvue_type_template_id_6685e5de_staticRenderFns = []\noption_groupvue_type_template_id_6685e5de_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option-group.vue?vue&type=template&id=6685e5de&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var option_groupvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a],\n\n name: 'ElOptionGroup',\n\n componentName: 'ElOptionGroup',\n\n props: {\n label: String,\n disabled: {\n type: Boolean,\n default: false\n }\n },\n\n data: function data() {\n return {\n visible: true\n };\n },\n\n\n watch: {\n disabled: function disabled(val) {\n this.broadcast('ElOption', 'handleGroupDisabled', val);\n }\n },\n\n methods: {\n queryChange: function queryChange() {\n this.visible = this.$children && Array.isArray(this.$children) && this.$children.some(function (option) {\n return option.visible === true;\n });\n }\n },\n\n created: function created() {\n this.$on('queryChange', this.queryChange);\n },\n mounted: function mounted() {\n if (this.disabled) {\n this.broadcast('ElOption', 'handleGroupDisabled', this.disabled);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/option-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_option_groupvue_type_script_lang_js_ = (option_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/option-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar option_group_component = normalizeComponent(\n src_option_groupvue_type_script_lang_js_,\n option_groupvue_type_template_id_6685e5de_render,\n option_groupvue_type_template_id_6685e5de_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var option_group_api; }\noption_group_component.options.__file = \"packages/select/src/option-group.vue\"\n/* harmony default export */ var option_group = (option_group_component.exports);\n// CONCATENATED MODULE: ./packages/option-group/index.js\n\n\n/* istanbul ignore next */\noption_group.install = function (Vue) {\n Vue.component(option_group.name, option_group);\n};\n\n/* harmony default export */ var packages_option_group = (option_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\nvar buttonvue_type_template_id_ca859fb4_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"button\",\n {\n staticClass: \"el-button\",\n class: [\n _vm.type ? \"el-button--\" + _vm.type : \"\",\n _vm.buttonSize ? \"el-button--\" + _vm.buttonSize : \"\",\n {\n \"is-disabled\": _vm.buttonDisabled,\n \"is-loading\": _vm.loading,\n \"is-plain\": _vm.plain,\n \"is-round\": _vm.round,\n \"is-circle\": _vm.circle\n }\n ],\n attrs: {\n disabled: _vm.buttonDisabled || _vm.loading,\n autofocus: _vm.autofocus,\n type: _vm.nativeType\n },\n on: { click: _vm.handleClick }\n },\n [\n _vm.loading ? _c(\"i\", { staticClass: \"el-icon-loading\" }) : _vm._e(),\n _vm.icon && !_vm.loading ? _c(\"i\", { class: _vm.icon }) : _vm._e(),\n _vm.$slots.default ? _c(\"span\", [_vm._t(\"default\")], 2) : _vm._e()\n ]\n )\n}\nvar buttonvue_type_template_id_ca859fb4_staticRenderFns = []\nbuttonvue_type_template_id_ca859fb4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=template&id=ca859fb4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var buttonvue_type_script_lang_js_ = ({\n name: 'ElButton',\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n type: {\n type: String,\n default: 'default'\n },\n size: String,\n icon: {\n type: String,\n default: ''\n },\n nativeType: {\n type: String,\n default: 'button'\n },\n loading: Boolean,\n disabled: Boolean,\n plain: Boolean,\n autofocus: Boolean,\n round: Boolean,\n circle: Boolean\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n buttonSize: function buttonSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n buttonDisabled: function buttonDisabled() {\n return this.$options.propsData.hasOwnProperty('disabled') ? this.disabled : (this.elForm || {}).disabled;\n }\n },\n\n methods: {\n handleClick: function handleClick(evt) {\n this.$emit('click', evt);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/button/src/button.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_buttonvue_type_script_lang_js_ = (buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/button/src/button.vue\n\n\n\n\n\n/* normalize component */\n\nvar button_component = normalizeComponent(\n src_buttonvue_type_script_lang_js_,\n buttonvue_type_template_id_ca859fb4_render,\n buttonvue_type_template_id_ca859fb4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var button_api; }\nbutton_component.options.__file = \"packages/button/src/button.vue\"\n/* harmony default export */ var src_button = (button_component.exports);\n// CONCATENATED MODULE: ./packages/button/index.js\n\n\n/* istanbul ignore next */\nsrc_button.install = function (Vue) {\n Vue.component(src_button.name, src_button);\n};\n\n/* harmony default export */ var packages_button = (src_button);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\nvar button_groupvue_type_template_id_3d8661d0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-button-group\" }, [_vm._t(\"default\")], 2)\n}\nvar button_groupvue_type_template_id_3d8661d0_staticRenderFns = []\nbutton_groupvue_type_template_id_3d8661d0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=template&id=3d8661d0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/button/src/button-group.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var button_groupvue_type_script_lang_js_ = ({\n name: 'ElButtonGroup'\n});\n// CONCATENATED MODULE: ./packages/button/src/button-group.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_button_groupvue_type_script_lang_js_ = (button_groupvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/button/src/button-group.vue\n\n\n\n\n\n/* normalize component */\n\nvar button_group_component = normalizeComponent(\n src_button_groupvue_type_script_lang_js_,\n button_groupvue_type_template_id_3d8661d0_render,\n button_groupvue_type_template_id_3d8661d0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var button_group_api; }\nbutton_group_component.options.__file = \"packages/button/src/button-group.vue\"\n/* harmony default export */ var button_group = (button_group_component.exports);\n// CONCATENATED MODULE: ./packages/button-group/index.js\n\n\n/* istanbul ignore next */\nbutton_group.install = function (Vue) {\n Vue.component(button_group.name, button_group);\n};\n\n/* harmony default export */ var packages_button_group = (button_group);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/table.vue?vue&type=template&id=493fe34e&\nvar tablevue_type_template_id_493fe34e_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-table\",\n class: [\n {\n \"el-table--fit\": _vm.fit,\n \"el-table--striped\": _vm.stripe,\n \"el-table--border\": _vm.border || _vm.isGroup,\n \"el-table--hidden\": _vm.isHidden,\n \"el-table--group\": _vm.isGroup,\n \"el-table--fluid-height\": _vm.maxHeight,\n \"el-table--scrollable-x\": _vm.layout.scrollX,\n \"el-table--scrollable-y\": _vm.layout.scrollY,\n \"el-table--enable-row-hover\": !_vm.store.states.isComplex,\n \"el-table--enable-row-transition\":\n (_vm.store.states.data || []).length !== 0 &&\n (_vm.store.states.data || []).length < 100\n },\n _vm.tableSize ? \"el-table--\" + _vm.tableSize : \"\"\n ],\n on: {\n mouseleave: function($event) {\n _vm.handleMouseLeave($event)\n }\n }\n },\n [\n _c(\n \"div\",\n { ref: \"hiddenColumns\", staticClass: \"hidden-columns\" },\n [_vm._t(\"default\")],\n 2\n ),\n _vm.showHeader\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"mousewheel\",\n rawName: \"v-mousewheel\",\n value: _vm.handleHeaderFooterMousewheel,\n expression: \"handleHeaderFooterMousewheel\"\n }\n ],\n ref: \"headerWrapper\",\n staticClass: \"el-table__header-wrapper\"\n },\n [\n _c(\"table-header\", {\n ref: \"tableHeader\",\n style: {\n width: _vm.layout.bodyWidth ? _vm.layout.bodyWidth + \"px\" : \"\"\n },\n attrs: {\n store: _vm.store,\n border: _vm.border,\n \"default-sort\": _vm.defaultSort\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"div\",\n {\n ref: \"bodyWrapper\",\n staticClass: \"el-table__body-wrapper\",\n class: [\n _vm.layout.scrollX\n ? \"is-scrolling-\" + _vm.scrollPosition\n : \"is-scrolling-none\"\n ],\n style: [_vm.bodyHeight]\n },\n [\n _c(\"table-body\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n context: _vm.context,\n store: _vm.store,\n stripe: _vm.stripe,\n \"row-class-name\": _vm.rowClassName,\n \"row-style\": _vm.rowStyle,\n highlight: _vm.highlightCurrentRow\n }\n }),\n !_vm.data || _vm.data.length === 0\n ? _c(\n \"div\",\n {\n ref: \"emptyBlock\",\n staticClass: \"el-table__empty-block\",\n style: _vm.emptyBlockStyle\n },\n [\n _c(\n \"span\",\n { staticClass: \"el-table__empty-text\" },\n [\n _vm._t(\"empty\", [\n _vm._v(\n _vm._s(_vm.emptyText || _vm.t(\"el.table.emptyText\"))\n )\n ])\n ],\n 2\n )\n ]\n )\n : _vm._e(),\n _vm.$slots.append\n ? _c(\n \"div\",\n {\n ref: \"appendWrapper\",\n staticClass: \"el-table__append-wrapper\"\n },\n [_vm._t(\"append\")],\n 2\n )\n : _vm._e()\n ],\n 1\n ),\n _vm.showSummary\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.data && _vm.data.length > 0,\n expression: \"data && data.length > 0\"\n },\n {\n name: \"mousewheel\",\n rawName: \"v-mousewheel\",\n value: _vm.handleHeaderFooterMousewheel,\n expression: \"handleHeaderFooterMousewheel\"\n }\n ],\n ref: \"footerWrapper\",\n staticClass: \"el-table__footer-wrapper\"\n },\n [\n _c(\"table-footer\", {\n style: {\n width: _vm.layout.bodyWidth ? _vm.layout.bodyWidth + \"px\" : \"\"\n },\n attrs: {\n store: _vm.store,\n border: _vm.border,\n \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n \"summary-method\": _vm.summaryMethod,\n \"default-sort\": _vm.defaultSort\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm.fixedColumns.length > 0\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"mousewheel\",\n rawName: \"v-mousewheel\",\n value: _vm.handleFixedMousewheel,\n expression: \"handleFixedMousewheel\"\n }\n ],\n ref: \"fixedWrapper\",\n staticClass: \"el-table__fixed\",\n style: [\n {\n width: _vm.layout.fixedWidth\n ? _vm.layout.fixedWidth + \"px\"\n : \"\"\n },\n _vm.fixedHeight\n ]\n },\n [\n _vm.showHeader\n ? _c(\n \"div\",\n {\n ref: \"fixedHeaderWrapper\",\n staticClass: \"el-table__fixed-header-wrapper\"\n },\n [\n _c(\"table-header\", {\n ref: \"fixedTableHeader\",\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"left\",\n border: _vm.border,\n store: _vm.store\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"div\",\n {\n ref: \"fixedBodyWrapper\",\n staticClass: \"el-table__fixed-body-wrapper\",\n style: [\n {\n top: _vm.layout.headerHeight + \"px\"\n },\n _vm.fixedBodyHeight\n ]\n },\n [\n _c(\"table-body\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"left\",\n store: _vm.store,\n stripe: _vm.stripe,\n highlight: _vm.highlightCurrentRow,\n \"row-class-name\": _vm.rowClassName,\n \"row-style\": _vm.rowStyle\n }\n }),\n _vm.$slots.append\n ? _c(\"div\", {\n staticClass: \"el-table__append-gutter\",\n style: { height: _vm.layout.appendHeight + \"px\" }\n })\n : _vm._e()\n ],\n 1\n ),\n _vm.showSummary\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.data && _vm.data.length > 0,\n expression: \"data && data.length > 0\"\n }\n ],\n ref: \"fixedFooterWrapper\",\n staticClass: \"el-table__fixed-footer-wrapper\"\n },\n [\n _c(\"table-footer\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"left\",\n border: _vm.border,\n \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n \"summary-method\": _vm.summaryMethod,\n store: _vm.store\n }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n : _vm._e(),\n _vm.rightFixedColumns.length > 0\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"mousewheel\",\n rawName: \"v-mousewheel\",\n value: _vm.handleFixedMousewheel,\n expression: \"handleFixedMousewheel\"\n }\n ],\n ref: \"rightFixedWrapper\",\n staticClass: \"el-table__fixed-right\",\n style: [\n {\n width: _vm.layout.rightFixedWidth\n ? _vm.layout.rightFixedWidth + \"px\"\n : \"\",\n right: _vm.layout.scrollY\n ? (_vm.border\n ? _vm.layout.gutterWidth\n : _vm.layout.gutterWidth || 0) + \"px\"\n : \"\"\n },\n _vm.fixedHeight\n ]\n },\n [\n _vm.showHeader\n ? _c(\n \"div\",\n {\n ref: \"rightFixedHeaderWrapper\",\n staticClass: \"el-table__fixed-header-wrapper\"\n },\n [\n _c(\"table-header\", {\n ref: \"rightFixedTableHeader\",\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"right\",\n border: _vm.border,\n store: _vm.store\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"div\",\n {\n ref: \"rightFixedBodyWrapper\",\n staticClass: \"el-table__fixed-body-wrapper\",\n style: [\n {\n top: _vm.layout.headerHeight + \"px\"\n },\n _vm.fixedBodyHeight\n ]\n },\n [\n _c(\"table-body\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"right\",\n store: _vm.store,\n stripe: _vm.stripe,\n \"row-class-name\": _vm.rowClassName,\n \"row-style\": _vm.rowStyle,\n highlight: _vm.highlightCurrentRow\n }\n }),\n _vm.$slots.append\n ? _c(\"div\", {\n staticClass: \"el-table__append-gutter\",\n style: { height: _vm.layout.appendHeight + \"px\" }\n })\n : _vm._e()\n ],\n 1\n ),\n _vm.showSummary\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.data && _vm.data.length > 0,\n expression: \"data && data.length > 0\"\n }\n ],\n ref: \"rightFixedFooterWrapper\",\n staticClass: \"el-table__fixed-footer-wrapper\"\n },\n [\n _c(\"table-footer\", {\n style: {\n width: _vm.bodyWidth\n },\n attrs: {\n fixed: \"right\",\n border: _vm.border,\n \"sum-text\": _vm.sumText || _vm.t(\"el.table.sumText\"),\n \"summary-method\": _vm.summaryMethod,\n store: _vm.store\n }\n })\n ],\n 1\n )\n : _vm._e()\n ]\n )\n : _vm._e(),\n _vm.rightFixedColumns.length > 0\n ? _c(\"div\", {\n ref: \"rightFixedPatch\",\n staticClass: \"el-table__fixed-right-patch\",\n style: {\n width: _vm.layout.scrollY ? _vm.layout.gutterWidth + \"px\" : \"0\",\n height: _vm.layout.headerHeight + \"px\"\n }\n })\n : _vm._e(),\n _c(\"div\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.resizeProxyVisible,\n expression: \"resizeProxyVisible\"\n }\n ],\n ref: \"resizeProxy\",\n staticClass: \"el-table__column-resize-proxy\"\n })\n ]\n )\n}\nvar tablevue_type_template_id_493fe34e_staticRenderFns = []\ntablevue_type_template_id_493fe34e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/table/src/table.vue?vue&type=template&id=493fe34e&\n\n// EXTERNAL MODULE: external \"element-ui/lib/checkbox\"\nvar checkbox_ = __webpack_require__(17);\nvar checkbox_default = /*#__PURE__*/__webpack_require__.n(checkbox_);\n\n// EXTERNAL MODULE: external \"throttle-debounce\"\nvar external_throttle_debounce_ = __webpack_require__(35);\n\n// EXTERNAL MODULE: external \"normalize-wheel\"\nvar external_normalize_wheel_ = __webpack_require__(38);\nvar external_normalize_wheel_default = /*#__PURE__*/__webpack_require__.n(external_normalize_wheel_);\n\n// CONCATENATED MODULE: ./src/directives/mousewheel.js\n\n\nvar isFirefox = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nvar mousewheel_mousewheel = function mousewheel(element, callback) {\n if (element && element.addEventListener) {\n element.addEventListener(isFirefox ? 'DOMMouseScroll' : 'mousewheel', function (event) {\n var normalized = external_normalize_wheel_default()(event);\n callback && callback.apply(this, [event, normalized]);\n });\n }\n};\n\n/* harmony default export */ var directives_mousewheel = ({\n bind: function bind(el, binding) {\n mousewheel_mousewheel(el, binding.value);\n }\n});\n// EXTERNAL MODULE: external \"vue\"\nvar external_vue_ = __webpack_require__(6);\nvar external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);\n\n// CONCATENATED MODULE: ./packages/table/src/util.js\nvar util_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n\n\nvar getCell = function getCell(event) {\n var cell = event.target;\n\n while (cell && cell.tagName.toUpperCase() !== 'HTML') {\n if (cell.tagName.toUpperCase() === 'TD') {\n return cell;\n }\n cell = cell.parentNode;\n }\n\n return null;\n};\n\nvar util_isObject = function isObject(obj) {\n return obj !== null && (typeof obj === 'undefined' ? 'undefined' : util_typeof(obj)) === 'object';\n};\n\nvar util_orderBy = function orderBy(array, sortKey, reverse, sortMethod, sortBy) {\n if (!sortKey && !sortMethod && (!sortBy || Array.isArray(sortBy) && !sortBy.length)) {\n return array;\n }\n if (typeof reverse === 'string') {\n reverse = reverse === 'descending' ? -1 : 1;\n } else {\n reverse = reverse && reverse < 0 ? -1 : 1;\n }\n var getKey = sortMethod ? null : function (value, index) {\n if (sortBy) {\n if (!Array.isArray(sortBy)) {\n sortBy = [sortBy];\n }\n return sortBy.map(function (by) {\n if (typeof by === 'string') {\n return Object(util_[\"getValueByPath\"])(value, by);\n } else {\n return by(value, index, array);\n }\n });\n }\n if (sortKey !== '$key') {\n if (util_isObject(value) && '$value' in value) value = value.$value;\n }\n return [util_isObject(value) ? Object(util_[\"getValueByPath\"])(value, sortKey) : value];\n };\n var compare = function compare(a, b) {\n if (sortMethod) {\n return sortMethod(a.value, b.value);\n }\n for (var i = 0, len = a.key.length; i < len; i++) {\n if (a.key[i] < b.key[i]) {\n return -1;\n }\n if (a.key[i] > b.key[i]) {\n return 1;\n }\n }\n return 0;\n };\n return array.map(function (value, index) {\n return {\n value: value,\n index: index,\n key: getKey ? getKey(value, index) : null\n };\n }).sort(function (a, b) {\n var order = compare(a, b);\n if (!order) {\n // make stable https://en.wikipedia.org/wiki/Sorting_algorithm#Stability\n order = a.index - b.index;\n }\n return order * reverse;\n }).map(function (item) {\n return item.value;\n });\n};\n\nvar getColumnById = function getColumnById(table, columnId) {\n var column = null;\n table.columns.forEach(function (item) {\n if (item.id === columnId) {\n column = item;\n }\n });\n return column;\n};\n\nvar getColumnByKey = function getColumnByKey(table, columnKey) {\n var column = null;\n for (var i = 0; i < table.columns.length; i++) {\n var item = table.columns[i];\n if (item.columnKey === columnKey) {\n column = item;\n break;\n }\n }\n return column;\n};\n\nvar getColumnByCell = function getColumnByCell(table, cell) {\n var matches = (cell.className || '').match(/el-table_[^\\s]+/gm);\n if (matches) {\n return getColumnById(table, matches[0]);\n }\n return null;\n};\n\nvar getRowIdentity = function getRowIdentity(row, rowKey) {\n if (!row) throw new Error('row is required when get row identity');\n if (typeof rowKey === 'string') {\n if (rowKey.indexOf('.') < 0) {\n return row[rowKey];\n }\n var key = rowKey.split('.');\n var current = row;\n for (var i = 0; i < key.length; i++) {\n current = current[key[i]];\n }\n return current;\n } else if (typeof rowKey === 'function') {\n return rowKey.call(null, row);\n }\n};\n\nvar getKeysMap = function getKeysMap(array, rowKey) {\n var arrayMap = {};\n (array || []).forEach(function (row, index) {\n arrayMap[getRowIdentity(row, rowKey)] = { row: row, index: index };\n });\n return arrayMap;\n};\n\nfunction hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nfunction mergeOptions(defaults, config) {\n var options = {};\n var key = void 0;\n for (key in defaults) {\n options[key] = defaults[key];\n }\n for (key in config) {\n if (hasOwn(config, key)) {\n var value = config[key];\n if (typeof value !== 'undefined') {\n options[key] = value;\n }\n }\n }\n return options;\n}\n\nfunction parseWidth(width) {\n if (width !== undefined) {\n width = parseInt(width, 10);\n if (isNaN(width)) {\n width = null;\n }\n }\n return width;\n}\n\nfunction parseMinWidth(minWidth) {\n if (typeof minWidth !== 'undefined') {\n minWidth = parseWidth(minWidth);\n if (isNaN(minWidth)) {\n minWidth = 80;\n }\n }\n return minWidth;\n};\n\nfunction parseHeight(height) {\n if (typeof height === 'number') {\n return height;\n }\n if (typeof height === 'string') {\n if (/^\\d+(?:px)?$/.test(height)) {\n return parseInt(height, 10);\n } else {\n return height;\n }\n }\n return null;\n}\n\n// https://github.com/reduxjs/redux/blob/master/src/compose.js\nfunction compose() {\n for (var _len = arguments.length, funcs = Array(_len), _key = 0; _key < _len; _key++) {\n funcs[_key] = arguments[_key];\n }\n\n if (funcs.length === 0) {\n return function (arg) {\n return arg;\n };\n }\n if (funcs.length === 1) {\n return funcs[0];\n }\n return funcs.reduce(function (a, b) {\n return function () {\n return a(b.apply(undefined, arguments));\n };\n });\n}\n\nfunction toggleRowStatus(statusArr, row, newVal) {\n var changed = false;\n var index = statusArr.indexOf(row);\n var included = index !== -1;\n\n var addRow = function addRow() {\n statusArr.push(row);\n changed = true;\n };\n var removeRow = function removeRow() {\n statusArr.splice(index, 1);\n changed = true;\n };\n\n if (typeof newVal === 'boolean') {\n if (newVal && !included) {\n addRow();\n } else if (!newVal && included) {\n removeRow();\n }\n } else {\n if (included) {\n removeRow();\n } else {\n addRow();\n }\n }\n return changed;\n}\n\nfunction walkTreeNode(root, cb) {\n var childrenKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'children';\n var lazyKey = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'hasChildren';\n\n var isNil = function isNil(array) {\n return !(Array.isArray(array) && array.length);\n };\n\n function _walker(parent, children, level) {\n cb(parent, children, level);\n children.forEach(function (item) {\n if (item[lazyKey]) {\n cb(item, null, level + 1);\n return;\n }\n var children = item[childrenKey];\n if (!isNil(children)) {\n _walker(item, children, level + 1);\n }\n });\n }\n\n root.forEach(function (item) {\n if (item[lazyKey]) {\n cb(item, null, 0);\n return;\n }\n var children = item[childrenKey];\n if (!isNil(children)) {\n _walker(item, children, 0);\n }\n });\n}\n// CONCATENATED MODULE: ./packages/table/src/store/expand.js\n\n\n/* harmony default export */ var expand = ({\n data: function data() {\n return {\n states: {\n defaultExpandAll: false,\n expandRows: []\n }\n };\n },\n\n\n methods: {\n updateExpandRows: function updateExpandRows() {\n var _states = this.states,\n _states$data = _states.data,\n data = _states$data === undefined ? [] : _states$data,\n rowKey = _states.rowKey,\n defaultExpandAll = _states.defaultExpandAll,\n expandRows = _states.expandRows;\n\n if (defaultExpandAll) {\n this.states.expandRows = data.slice();\n } else if (rowKey) {\n // TODO:这里的代码可以优化\n var expandRowsMap = getKeysMap(expandRows, rowKey);\n this.states.expandRows = data.reduce(function (prev, row) {\n var rowId = getRowIdentity(row, rowKey);\n var rowInfo = expandRowsMap[rowId];\n if (rowInfo) {\n prev.push(row);\n }\n return prev;\n }, []);\n } else {\n this.states.expandRows = [];\n }\n },\n toggleRowExpansion: function toggleRowExpansion(row, expanded) {\n var changed = toggleRowStatus(this.states.expandRows, row, expanded);\n if (changed) {\n this.table.$emit('expand-change', row, this.states.expandRows.slice());\n this.scheduleLayout();\n }\n },\n setExpandRowKeys: function setExpandRowKeys(rowKeys) {\n this.assertRowKey();\n // TODO:这里的代码可以优化\n var _states2 = this.states,\n data = _states2.data,\n rowKey = _states2.rowKey;\n\n var keysMap = getKeysMap(data, rowKey);\n this.states.expandRows = rowKeys.reduce(function (prev, cur) {\n var info = keysMap[cur];\n if (info) {\n prev.push(info.row);\n }\n return prev;\n }, []);\n },\n isRowExpanded: function isRowExpanded(row) {\n var _states3 = this.states,\n _states3$expandRows = _states3.expandRows,\n expandRows = _states3$expandRows === undefined ? [] : _states3$expandRows,\n rowKey = _states3.rowKey;\n\n if (rowKey) {\n var expandMap = getKeysMap(expandRows, rowKey);\n return !!expandMap[getRowIdentity(row, rowKey)];\n }\n return expandRows.indexOf(row) !== -1;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/current.js\n\n\n\n/* harmony default export */ var store_current = ({\n data: function data() {\n return {\n states: {\n // 不可响应的,设置 currentRowKey 时,data 不一定存在,也许无法算出正确的 currentRow\n // 把该值缓存一下,当用户点击修改 currentRow 时,把该值重置为 null\n _currentRowKey: null,\n currentRow: null\n }\n };\n },\n\n\n methods: {\n setCurrentRowKey: function setCurrentRowKey(key) {\n this.assertRowKey();\n this.states._currentRowKey = key;\n this.setCurrentRowByKey(key);\n },\n restoreCurrentRowKey: function restoreCurrentRowKey() {\n this.states._currentRowKey = null;\n },\n setCurrentRowByKey: function setCurrentRowByKey(key) {\n var states = this.states;\n var _states$data = states.data,\n data = _states$data === undefined ? [] : _states$data,\n rowKey = states.rowKey;\n\n var currentRow = null;\n if (rowKey) {\n currentRow = Object(util_[\"arrayFind\"])(data, function (item) {\n return getRowIdentity(item, rowKey) === key;\n });\n }\n states.currentRow = currentRow;\n },\n updateCurrentRow: function updateCurrentRow(currentRow) {\n var states = this.states,\n table = this.table;\n\n var oldCurrentRow = states.currentRow;\n if (currentRow && currentRow !== oldCurrentRow) {\n states.currentRow = currentRow;\n table.$emit('current-change', currentRow, oldCurrentRow);\n return;\n }\n if (!currentRow && oldCurrentRow) {\n states.currentRow = null;\n table.$emit('current-change', null, oldCurrentRow);\n }\n },\n updateCurrentRowData: function updateCurrentRowData() {\n var states = this.states,\n table = this.table;\n var rowKey = states.rowKey,\n _currentRowKey = states._currentRowKey;\n // data 为 null 时,解构时的默认值会被忽略\n\n var data = states.data || [];\n var oldCurrentRow = states.currentRow;\n\n // 当 currentRow 不在 data 中时尝试更新数据\n if (data.indexOf(oldCurrentRow) === -1 && oldCurrentRow) {\n if (rowKey) {\n var currentRowKey = getRowIdentity(oldCurrentRow, rowKey);\n this.setCurrentRowByKey(currentRowKey);\n } else {\n states.currentRow = null;\n }\n if (states.currentRow === null) {\n table.$emit('current-change', null, oldCurrentRow);\n }\n } else if (_currentRowKey) {\n // 把初始时下设置的 rowKey 转化成 rowData\n this.setCurrentRowByKey(_currentRowKey);\n this.restoreCurrentRowKey();\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/tree.js\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n/* harmony default export */ var tree = ({\n data: function data() {\n return {\n states: {\n // defaultExpandAll 存在于 expand.js 中,这里不重复添加\n // 在展开行中,expandRowKeys 会被转化成 expandRows,expandRowKeys 这个属性只是记录了 TreeTable 行的展开\n // TODO: 拆分为独立的 TreeTable,统一用法\n expandRowKeys: [],\n treeData: {},\n indent: 16,\n lazy: false,\n lazyTreeNodeMap: {},\n lazyColumnIdentifier: 'hasChildren',\n childrenColumnName: 'children'\n }\n };\n },\n\n\n computed: {\n // 嵌入型的数据,watch 无法是检测到变化 https://github.com/ElemeFE/element/issues/14998\n // TODO: 使用 computed 解决该问题,是否会造成性能问题?\n // @return { id: { level, children } }\n normalizedData: function normalizedData() {\n if (!this.states.rowKey) return {};\n var data = this.states.data || [];\n return this.normalize(data);\n },\n\n // @return { id: { children } }\n // 针对懒加载的情形,不处理嵌套数据\n normalizedLazyNode: function normalizedLazyNode() {\n var _states = this.states,\n rowKey = _states.rowKey,\n lazyTreeNodeMap = _states.lazyTreeNodeMap,\n lazyColumnIdentifier = _states.lazyColumnIdentifier;\n\n var keys = Object.keys(lazyTreeNodeMap);\n var res = {};\n if (!keys.length) return res;\n keys.forEach(function (key) {\n if (lazyTreeNodeMap[key].length) {\n var item = { children: [] };\n lazyTreeNodeMap[key].forEach(function (row) {\n var currentRowKey = getRowIdentity(row, rowKey);\n item.children.push(currentRowKey);\n if (row[lazyColumnIdentifier] && !res[currentRowKey]) {\n res[currentRowKey] = { children: [] };\n }\n });\n res[key] = item;\n }\n });\n return res;\n }\n },\n\n watch: {\n normalizedData: 'updateTreeData',\n normalizedLazyNode: 'updateTreeData'\n },\n\n methods: {\n normalize: function normalize(data) {\n var _states2 = this.states,\n childrenColumnName = _states2.childrenColumnName,\n lazyColumnIdentifier = _states2.lazyColumnIdentifier,\n rowKey = _states2.rowKey,\n lazy = _states2.lazy;\n\n var res = {};\n walkTreeNode(data, function (parent, children, level) {\n var parentId = getRowIdentity(parent, rowKey);\n if (Array.isArray(children)) {\n res[parentId] = {\n children: children.map(function (row) {\n return getRowIdentity(row, rowKey);\n }),\n level: level\n };\n } else if (lazy) {\n // 当 children 不存在且 lazy 为 true,该节点即为懒加载的节点\n res[parentId] = {\n children: [],\n lazy: true,\n level: level\n };\n }\n }, childrenColumnName, lazyColumnIdentifier);\n return res;\n },\n updateTreeData: function updateTreeData() {\n var nested = this.normalizedData;\n var normalizedLazyNode = this.normalizedLazyNode;\n var keys = Object.keys(nested);\n var newTreeData = {};\n if (keys.length) {\n var _states3 = this.states,\n oldTreeData = _states3.treeData,\n defaultExpandAll = _states3.defaultExpandAll,\n expandRowKeys = _states3.expandRowKeys,\n lazy = _states3.lazy;\n\n var rootLazyRowKeys = [];\n var getExpanded = function getExpanded(oldValue, key) {\n var included = defaultExpandAll || expandRowKeys && expandRowKeys.indexOf(key) !== -1;\n return !!(oldValue && oldValue.expanded || included);\n };\n // 合并 expanded 与 display,确保数据刷新后,状态不变\n keys.forEach(function (key) {\n var oldValue = oldTreeData[key];\n var newValue = _extends({}, nested[key]);\n newValue.expanded = getExpanded(oldValue, key);\n if (newValue.lazy) {\n var _ref = oldValue || {},\n _ref$loaded = _ref.loaded,\n loaded = _ref$loaded === undefined ? false : _ref$loaded,\n _ref$loading = _ref.loading,\n loading = _ref$loading === undefined ? false : _ref$loading;\n\n newValue.loaded = !!loaded;\n newValue.loading = !!loading;\n rootLazyRowKeys.push(key);\n }\n newTreeData[key] = newValue;\n });\n // 根据懒加载数据更新 treeData\n var lazyKeys = Object.keys(normalizedLazyNode);\n if (lazy && lazyKeys.length && rootLazyRowKeys.length) {\n lazyKeys.forEach(function (key) {\n var oldValue = oldTreeData[key];\n var lazyNodeChildren = normalizedLazyNode[key].children;\n if (rootLazyRowKeys.indexOf(key) !== -1) {\n // 懒加载的 root 节点,更新一下原有的数据,原来的 children 一定是空数组\n if (newTreeData[key].children.length !== 0) {\n throw new Error('[ElTable]children must be an empty array.');\n }\n newTreeData[key].children = lazyNodeChildren;\n } else {\n var _ref2 = oldValue || {},\n _ref2$loaded = _ref2.loaded,\n loaded = _ref2$loaded === undefined ? false : _ref2$loaded,\n _ref2$loading = _ref2.loading,\n loading = _ref2$loading === undefined ? false : _ref2$loading;\n\n newTreeData[key] = {\n lazy: true,\n loaded: !!loaded,\n loading: !!loading,\n expanded: getExpanded(oldValue, key),\n children: lazyNodeChildren,\n level: ''\n };\n }\n });\n }\n }\n this.states.treeData = newTreeData;\n this.updateTableScrollY();\n },\n updateTreeExpandKeys: function updateTreeExpandKeys(value) {\n this.states.expandRowKeys = value;\n this.updateTreeData();\n },\n toggleTreeExpansion: function toggleTreeExpansion(row, expanded) {\n this.assertRowKey();\n\n var _states4 = this.states,\n rowKey = _states4.rowKey,\n treeData = _states4.treeData;\n\n var id = getRowIdentity(row, rowKey);\n var data = id && treeData[id];\n if (id && data && 'expanded' in data) {\n var oldExpanded = data.expanded;\n expanded = typeof expanded === 'undefined' ? !data.expanded : expanded;\n treeData[id].expanded = expanded;\n if (oldExpanded !== expanded) {\n this.table.$emit('expand-change', row, expanded);\n }\n this.updateTableScrollY();\n }\n },\n loadOrToggle: function loadOrToggle(row) {\n this.assertRowKey();\n var _states5 = this.states,\n lazy = _states5.lazy,\n treeData = _states5.treeData,\n rowKey = _states5.rowKey;\n\n var id = getRowIdentity(row, rowKey);\n var data = treeData[id];\n if (lazy && data && 'loaded' in data && !data.loaded) {\n this.loadData(row, id, data);\n } else {\n this.toggleTreeExpansion(row);\n }\n },\n loadData: function loadData(row, key, treeNode) {\n var _this = this;\n\n var load = this.table.load;\n var rawTreeData = this.states.treeData;\n\n if (load && !rawTreeData[key].loaded) {\n rawTreeData[key].loading = true;\n load(row, treeNode, function (data) {\n if (!Array.isArray(data)) {\n throw new Error('[ElTable] data must be an array');\n }\n var _states6 = _this.states,\n lazyTreeNodeMap = _states6.lazyTreeNodeMap,\n treeData = _states6.treeData;\n\n treeData[key].loading = false;\n treeData[key].loaded = true;\n treeData[key].expanded = true;\n if (data.length) {\n _this.$set(lazyTreeNodeMap, key, data);\n }\n _this.table.$emit('expand-change', row, true);\n });\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/store/watcher.js\n\n\n\n\n\n\n\nvar watcher_sortData = function sortData(data, states) {\n var sortingColumn = states.sortingColumn;\n if (!sortingColumn || typeof sortingColumn.sortable === 'string') {\n return data;\n }\n return util_orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy);\n};\n\nvar doFlattenColumns = function doFlattenColumns(columns) {\n var result = [];\n columns.forEach(function (column) {\n if (column.children) {\n result.push.apply(result, doFlattenColumns(column.children));\n } else {\n result.push(column);\n }\n });\n return result;\n};\n\n/* harmony default export */ var watcher = (external_vue_default.a.extend({\n data: function data() {\n return {\n states: {\n // 3.0 版本后要求必须设置该属性\n rowKey: null,\n\n // 渲染的数据来源,是对 table 中的 data 过滤排序后的结果\n data: [],\n\n // 是否包含固定列\n isComplex: false,\n\n // 列\n _columns: [], // 不可响应的\n originColumns: [],\n columns: [],\n fixedColumns: [],\n rightFixedColumns: [],\n leafColumns: [],\n fixedLeafColumns: [],\n rightFixedLeafColumns: [],\n leafColumnsLength: 0,\n fixedLeafColumnsLength: 0,\n rightFixedLeafColumnsLength: 0,\n\n // 选择\n isAllSelected: false,\n selection: [],\n reserveSelection: false,\n selectOnIndeterminate: false,\n selectable: null,\n\n // 过滤\n filters: {}, // 不可响应的\n filteredData: null,\n\n // 排序\n sortingColumn: null,\n sortProp: null,\n sortOrder: null,\n\n hoverRow: null\n }\n };\n },\n\n\n mixins: [expand, store_current, tree],\n\n methods: {\n // 检查 rowKey 是否存在\n assertRowKey: function assertRowKey() {\n var rowKey = this.states.rowKey;\n if (!rowKey) throw new Error('[ElTable] prop row-key is required');\n },\n\n\n // 更新列\n updateColumns: function updateColumns() {\n var states = this.states;\n var _columns = states._columns || [];\n states.fixedColumns = _columns.filter(function (column) {\n return column.fixed === true || column.fixed === 'left';\n });\n states.rightFixedColumns = _columns.filter(function (column) {\n return column.fixed === 'right';\n });\n\n if (states.fixedColumns.length > 0 && _columns[0] && _columns[0].type === 'selection' && !_columns[0].fixed) {\n _columns[0].fixed = true;\n states.fixedColumns.unshift(_columns[0]);\n }\n\n var notFixedColumns = _columns.filter(function (column) {\n return !column.fixed;\n });\n states.originColumns = [].concat(states.fixedColumns).concat(notFixedColumns).concat(states.rightFixedColumns);\n\n var leafColumns = doFlattenColumns(notFixedColumns);\n var fixedLeafColumns = doFlattenColumns(states.fixedColumns);\n var rightFixedLeafColumns = doFlattenColumns(states.rightFixedColumns);\n\n states.leafColumnsLength = leafColumns.length;\n states.fixedLeafColumnsLength = fixedLeafColumns.length;\n states.rightFixedLeafColumnsLength = rightFixedLeafColumns.length;\n\n states.columns = [].concat(fixedLeafColumns).concat(leafColumns).concat(rightFixedLeafColumns);\n states.isComplex = states.fixedColumns.length > 0 || states.rightFixedColumns.length > 0;\n },\n\n\n // 更新 DOM\n scheduleLayout: function scheduleLayout(needUpdateColumns) {\n if (needUpdateColumns) {\n this.updateColumns();\n }\n this.table.debouncedUpdateLayout();\n },\n\n\n // 选择\n isSelected: function isSelected(row) {\n var _states$selection = this.states.selection,\n selection = _states$selection === undefined ? [] : _states$selection;\n\n return selection.indexOf(row) > -1;\n },\n clearSelection: function clearSelection() {\n var states = this.states;\n states.isAllSelected = false;\n var oldSelection = states.selection;\n if (oldSelection.length) {\n states.selection = [];\n this.table.$emit('selection-change', []);\n }\n },\n cleanSelection: function cleanSelection() {\n var states = this.states;\n var data = states.data,\n rowKey = states.rowKey,\n selection = states.selection;\n\n var deleted = void 0;\n if (rowKey) {\n deleted = [];\n var selectedMap = getKeysMap(selection, rowKey);\n var dataMap = getKeysMap(data, rowKey);\n for (var key in selectedMap) {\n if (selectedMap.hasOwnProperty(key) && !dataMap[key]) {\n deleted.push(selectedMap[key].row);\n }\n }\n } else {\n deleted = selection.filter(function (item) {\n return data.indexOf(item) === -1;\n });\n }\n if (deleted.length) {\n var newSelection = selection.filter(function (item) {\n return deleted.indexOf(item) === -1;\n });\n states.selection = newSelection;\n this.table.$emit('selection-change', newSelection.slice());\n }\n },\n toggleRowSelection: function toggleRowSelection(row, selected) {\n var emitChange = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n var changed = toggleRowStatus(this.states.selection, row, selected);\n if (changed) {\n var newSelection = (this.states.selection || []).slice();\n // 调用 API 修改选中值,不触发 select 事件\n if (emitChange) {\n this.table.$emit('select', newSelection, row);\n }\n this.table.$emit('selection-change', newSelection);\n }\n },\n _toggleAllSelection: function _toggleAllSelection() {\n var states = this.states;\n var _states$data = states.data,\n data = _states$data === undefined ? [] : _states$data,\n selection = states.selection;\n // when only some rows are selected (but not all), select or deselect all of them\n // depending on the value of selectOnIndeterminate\n\n var value = states.selectOnIndeterminate ? !states.isAllSelected : !(states.isAllSelected || selection.length);\n states.isAllSelected = value;\n\n var selectionChanged = false;\n data.forEach(function (row, index) {\n if (states.selectable) {\n if (states.selectable.call(null, row, index) && toggleRowStatus(selection, row, value)) {\n selectionChanged = true;\n }\n } else {\n if (toggleRowStatus(selection, row, value)) {\n selectionChanged = true;\n }\n }\n });\n\n if (selectionChanged) {\n this.table.$emit('selection-change', selection ? selection.slice() : []);\n }\n this.table.$emit('select-all', selection);\n },\n updateSelectionByRowKey: function updateSelectionByRowKey() {\n var states = this.states;\n var selection = states.selection,\n rowKey = states.rowKey,\n data = states.data;\n\n var selectedMap = getKeysMap(selection, rowKey);\n data.forEach(function (row) {\n var rowId = getRowIdentity(row, rowKey);\n var rowInfo = selectedMap[rowId];\n if (rowInfo) {\n selection[rowInfo.index] = row;\n }\n });\n },\n updateAllSelected: function updateAllSelected() {\n var states = this.states;\n var selection = states.selection,\n rowKey = states.rowKey,\n selectable = states.selectable;\n // data 为 null 时,解构时的默认值会被忽略\n\n var data = states.data || [];\n if (data.length === 0) {\n states.isAllSelected = false;\n return;\n }\n\n var selectedMap = void 0;\n if (rowKey) {\n selectedMap = getKeysMap(selection, rowKey);\n }\n var isSelected = function isSelected(row) {\n if (selectedMap) {\n return !!selectedMap[getRowIdentity(row, rowKey)];\n } else {\n return selection.indexOf(row) !== -1;\n }\n };\n var isAllSelected = true;\n var selectedCount = 0;\n for (var i = 0, j = data.length; i < j; i++) {\n var item = data[i];\n var isRowSelectable = selectable && selectable.call(null, item, i);\n if (!isSelected(item)) {\n if (!selectable || isRowSelectable) {\n isAllSelected = false;\n break;\n }\n } else {\n selectedCount++;\n }\n }\n\n if (selectedCount === 0) isAllSelected = false;\n states.isAllSelected = isAllSelected;\n },\n\n\n // 过滤与排序\n updateFilters: function updateFilters(columns, values) {\n if (!Array.isArray(columns)) {\n columns = [columns];\n }\n var states = this.states;\n var filters = {};\n columns.forEach(function (col) {\n states.filters[col.id] = values;\n filters[col.columnKey || col.id] = values;\n });\n\n return filters;\n },\n updateSort: function updateSort(column, prop, order) {\n if (this.states.sortingColumn && this.states.sortingColumn !== column) {\n this.states.sortingColumn.order = null;\n }\n this.states.sortingColumn = column;\n this.states.sortProp = prop;\n this.states.sortOrder = order;\n },\n execFilter: function execFilter() {\n var _this = this;\n\n var states = this.states;\n var _data = states._data,\n filters = states.filters;\n\n var data = _data;\n\n Object.keys(filters).forEach(function (columnId) {\n var values = states.filters[columnId];\n if (!values || values.length === 0) return;\n var column = getColumnById(_this.states, columnId);\n if (column && column.filterMethod) {\n data = data.filter(function (row) {\n return values.some(function (value) {\n return column.filterMethod.call(null, value, row, column);\n });\n });\n }\n });\n\n states.filteredData = data;\n },\n execSort: function execSort() {\n var states = this.states;\n states.data = watcher_sortData(states.filteredData, states);\n },\n\n\n // 根据 filters 与 sort 去过滤 data\n execQuery: function execQuery(ignore) {\n if (!(ignore && ignore.filter)) {\n this.execFilter();\n }\n this.execSort();\n },\n clearFilter: function clearFilter(columnKeys) {\n var states = this.states;\n var _table$$refs = this.table.$refs,\n tableHeader = _table$$refs.tableHeader,\n fixedTableHeader = _table$$refs.fixedTableHeader,\n rightFixedTableHeader = _table$$refs.rightFixedTableHeader;\n\n\n var panels = {};\n if (tableHeader) panels = merge_default()(panels, tableHeader.filterPanels);\n if (fixedTableHeader) panels = merge_default()(panels, fixedTableHeader.filterPanels);\n if (rightFixedTableHeader) panels = merge_default()(panels, rightFixedTableHeader.filterPanels);\n\n var keys = Object.keys(panels);\n if (!keys.length) return;\n\n if (typeof columnKeys === 'string') {\n columnKeys = [columnKeys];\n }\n\n if (Array.isArray(columnKeys)) {\n var columns = columnKeys.map(function (key) {\n return getColumnByKey(states, key);\n });\n keys.forEach(function (key) {\n var column = columns.find(function (col) {\n return col.id === key;\n });\n if (column) {\n // TODO: 优化这里的代码\n panels[key].filteredValue = [];\n }\n });\n this.commit('filterChange', {\n column: columns,\n values: [],\n silent: true,\n multi: true\n });\n } else {\n keys.forEach(function (key) {\n // TODO: 优化这里的代码\n panels[key].filteredValue = [];\n });\n\n states.filters = {};\n this.commit('filterChange', {\n column: {},\n values: [],\n silent: true\n });\n }\n },\n clearSort: function clearSort() {\n var states = this.states;\n if (!states.sortingColumn) return;\n\n this.updateSort(null, null, null);\n this.commit('changeSortCondition', {\n silent: true\n });\n },\n\n\n // 适配层,expand-row-keys 在 Expand 与 TreeTable 中都有使用\n setExpandRowKeysAdapter: function setExpandRowKeysAdapter(val) {\n // 这里会触发额外的计算,但为了兼容性,暂时这么做\n this.setExpandRowKeys(val);\n this.updateTreeExpandKeys(val);\n },\n\n\n // 展开行与 TreeTable 都要使用\n toggleRowExpansionAdapter: function toggleRowExpansionAdapter(row, expanded) {\n var hasExpandColumn = this.states.columns.some(function (_ref) {\n var type = _ref.type;\n return type === 'expand';\n });\n if (hasExpandColumn) {\n this.toggleRowExpansion(row, expanded);\n } else {\n this.toggleTreeExpansion(row, expanded);\n }\n }\n }\n}));\n// CONCATENATED MODULE: ./packages/table/src/store/index.js\n\n\n\n\nwatcher.prototype.mutations = {\n setData: function setData(states, data) {\n var dataInstanceChanged = states._data !== data;\n states._data = data;\n\n this.execQuery();\n // 数据变化,更新部分数据。\n // 没有使用 computed,而是手动更新部分数据 https://github.com/vuejs/vue/issues/6660#issuecomment-331417140\n this.updateCurrentRowData();\n this.updateExpandRows();\n if (states.reserveSelection) {\n this.assertRowKey();\n this.updateSelectionByRowKey();\n } else {\n if (dataInstanceChanged) {\n this.clearSelection();\n } else {\n this.cleanSelection();\n }\n }\n this.updateAllSelected();\n\n this.updateTableScrollY();\n },\n insertColumn: function insertColumn(states, column, index, parent) {\n var array = states._columns;\n if (parent) {\n array = parent.children;\n if (!array) array = parent.children = [];\n }\n\n if (typeof index !== 'undefined') {\n array.splice(index, 0, column);\n } else {\n array.push(column);\n }\n\n if (column.type === 'selection') {\n states.selectable = column.selectable;\n states.reserveSelection = column.reserveSelection;\n }\n\n if (this.table.$ready) {\n this.updateColumns(); // hack for dynamics insert column\n this.scheduleLayout();\n }\n },\n removeColumn: function removeColumn(states, column, parent) {\n var array = states._columns;\n if (parent) {\n array = parent.children;\n if (!array) array = parent.children = [];\n }\n if (array) {\n array.splice(array.indexOf(column), 1);\n }\n\n if (this.table.$ready) {\n this.updateColumns(); // hack for dynamics remove column\n this.scheduleLayout();\n }\n },\n sort: function sort(states, options) {\n var prop = options.prop,\n order = options.order,\n init = options.init;\n\n if (prop) {\n var column = Object(util_[\"arrayFind\"])(states.columns, function (column) {\n return column.property === prop;\n });\n if (column) {\n column.order = order;\n this.updateSort(column, prop, order);\n this.commit('changeSortCondition', { init: init });\n }\n }\n },\n changeSortCondition: function changeSortCondition(states, options) {\n // 修复 pr https://github.com/ElemeFE/element/pull/15012 导致的 bug\n var column = states.sortingColumn,\n prop = states.sortProp,\n order = states.sortOrder;\n\n if (order === null) {\n states.sortingColumn = null;\n states.sortProp = null;\n }\n var ingore = { filter: true };\n this.execQuery(ingore);\n\n if (!options || !(options.silent || options.init)) {\n this.table.$emit('sort-change', {\n column: column,\n prop: prop,\n order: order\n });\n }\n\n this.updateTableScrollY();\n },\n filterChange: function filterChange(states, options) {\n var column = options.column,\n values = options.values,\n silent = options.silent;\n\n var newFilters = this.updateFilters(column, values);\n\n this.execQuery();\n\n if (!silent) {\n this.table.$emit('filter-change', newFilters);\n }\n\n this.updateTableScrollY();\n },\n toggleAllSelection: function toggleAllSelection() {\n this.toggleAllSelection();\n },\n rowSelectedChanged: function rowSelectedChanged(states, row) {\n this.toggleRowSelection(row);\n this.updateAllSelected();\n },\n setHoverRow: function setHoverRow(states, row) {\n states.hoverRow = row;\n },\n setCurrentRow: function setCurrentRow(states, row) {\n this.updateCurrentRow(row);\n }\n};\n\nwatcher.prototype.commit = function (name) {\n var mutations = this.mutations;\n if (mutations[name]) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n mutations[name].apply(this, [this.states].concat(args));\n } else {\n throw new Error('Action not found: ' + name);\n }\n};\n\nwatcher.prototype.updateTableScrollY = function () {\n external_vue_default.a.nextTick(this.table.updateScrollY);\n};\n\n/* harmony default export */ var src_store = (watcher);\n// CONCATENATED MODULE: ./packages/table/src/store/helper.js\n\n\n\nfunction createStore(table) {\n var initialState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!table) {\n throw new Error('Table is required.');\n }\n\n var store = new src_store();\n store.table = table;\n // fix https://github.com/ElemeFE/element/issues/14075\n // related pr https://github.com/ElemeFE/element/pull/14146\n store.toggleAllSelection = debounce_default()(10, store._toggleAllSelection);\n Object.keys(initialState).forEach(function (key) {\n store.states[key] = initialState[key];\n });\n return store;\n}\n\nfunction mapStates(mapper) {\n var res = {};\n Object.keys(mapper).forEach(function (key) {\n var value = mapper[key];\n var fn = void 0;\n if (typeof value === 'string') {\n fn = function fn() {\n return this.store.states[value];\n };\n } else if (typeof value === 'function') {\n fn = function fn() {\n return value.call(this, this.store.states);\n };\n } else {\n console.error('invalid value type');\n }\n if (fn) {\n res[key] = fn;\n }\n });\n return res;\n};\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scrollbar-width\"\nvar scrollbar_width_ = __webpack_require__(30);\nvar scrollbar_width_default = /*#__PURE__*/__webpack_require__.n(scrollbar_width_);\n\n// CONCATENATED MODULE: ./packages/table/src/table-layout.js\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar table_layout_TableLayout = function () {\n function TableLayout(options) {\n _classCallCheck(this, TableLayout);\n\n this.observers = [];\n this.table = null;\n this.store = null;\n this.columns = null;\n this.fit = true;\n this.showHeader = true;\n\n this.height = null;\n this.scrollX = false;\n this.scrollY = false;\n this.bodyWidth = null;\n this.fixedWidth = null;\n this.rightFixedWidth = null;\n this.tableHeight = null;\n this.headerHeight = 44; // Table Header Height\n this.appendHeight = 0; // Append Slot Height\n this.footerHeight = 44; // Table Footer Height\n this.viewportHeight = null; // Table Height - Scroll Bar Height\n this.bodyHeight = null; // Table Height - Table Header Height\n this.fixedBodyHeight = null; // Table Height - Table Header Height - Scroll Bar Height\n this.gutterWidth = scrollbar_width_default()();\n\n for (var name in options) {\n if (options.hasOwnProperty(name)) {\n this[name] = options[name];\n }\n }\n\n if (!this.table) {\n throw new Error('table is required for Table Layout');\n }\n if (!this.store) {\n throw new Error('store is required for Table Layout');\n }\n }\n\n TableLayout.prototype.updateScrollY = function updateScrollY() {\n var height = this.height;\n if (height === null) return false;\n var bodyWrapper = this.table.bodyWrapper;\n if (this.table.$el && bodyWrapper) {\n var body = bodyWrapper.querySelector('.el-table__body');\n var prevScrollY = this.scrollY;\n var scrollY = body.offsetHeight > this.bodyHeight;\n this.scrollY = scrollY;\n return prevScrollY !== scrollY;\n }\n return false;\n };\n\n TableLayout.prototype.setHeight = function setHeight(value) {\n var _this = this;\n\n var prop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'height';\n\n if (external_vue_default.a.prototype.$isServer) return;\n var el = this.table.$el;\n value = parseHeight(value);\n this.height = value;\n\n if (!el && (value || value === 0)) return external_vue_default.a.nextTick(function () {\n return _this.setHeight(value, prop);\n });\n\n if (typeof value === 'number') {\n el.style[prop] = value + 'px';\n this.updateElsHeight();\n } else if (typeof value === 'string') {\n el.style[prop] = value;\n this.updateElsHeight();\n }\n };\n\n TableLayout.prototype.setMaxHeight = function setMaxHeight(value) {\n this.setHeight(value, 'max-height');\n };\n\n TableLayout.prototype.getFlattenColumns = function getFlattenColumns() {\n var flattenColumns = [];\n var columns = this.table.columns;\n columns.forEach(function (column) {\n if (column.isColumnGroup) {\n flattenColumns.push.apply(flattenColumns, column.columns);\n } else {\n flattenColumns.push(column);\n }\n });\n\n return flattenColumns;\n };\n\n TableLayout.prototype.updateElsHeight = function updateElsHeight() {\n var _this2 = this;\n\n if (!this.table.$ready) return external_vue_default.a.nextTick(function () {\n return _this2.updateElsHeight();\n });\n var _table$$refs = this.table.$refs,\n headerWrapper = _table$$refs.headerWrapper,\n appendWrapper = _table$$refs.appendWrapper,\n footerWrapper = _table$$refs.footerWrapper;\n\n this.appendHeight = appendWrapper ? appendWrapper.offsetHeight : 0;\n\n if (this.showHeader && !headerWrapper) return;\n\n // fix issue (https://github.com/ElemeFE/element/pull/16956)\n var headerTrElm = headerWrapper ? headerWrapper.querySelector('.el-table__header tr') : null;\n var noneHeader = this.headerDisplayNone(headerTrElm);\n\n var headerHeight = this.headerHeight = !this.showHeader ? 0 : headerWrapper.offsetHeight;\n if (this.showHeader && !noneHeader && headerWrapper.offsetWidth > 0 && (this.table.columns || []).length > 0 && headerHeight < 2) {\n return external_vue_default.a.nextTick(function () {\n return _this2.updateElsHeight();\n });\n }\n var tableHeight = this.tableHeight = this.table.$el.clientHeight;\n var footerHeight = this.footerHeight = footerWrapper ? footerWrapper.offsetHeight : 0;\n if (this.height !== null) {\n this.bodyHeight = tableHeight - headerHeight - footerHeight + (footerWrapper ? 1 : 0);\n }\n this.fixedBodyHeight = this.scrollX ? this.bodyHeight - this.gutterWidth : this.bodyHeight;\n\n var noData = !(this.store.states.data && this.store.states.data.length);\n this.viewportHeight = this.scrollX ? tableHeight - (noData ? 0 : this.gutterWidth) : tableHeight;\n this.updateScrollY();\n this.notifyObservers('scrollable');\n };\n\n TableLayout.prototype.headerDisplayNone = function headerDisplayNone(elm) {\n if (!elm) return true;\n var headerChild = elm;\n while (headerChild.tagName !== 'DIV') {\n if (getComputedStyle(headerChild).display === 'none') {\n return true;\n }\n headerChild = headerChild.parentElement;\n }\n return false;\n };\n\n TableLayout.prototype.updateColumnsWidth = function updateColumnsWidth() {\n if (external_vue_default.a.prototype.$isServer) return;\n var fit = this.fit;\n var bodyWidth = this.table.$el.clientWidth;\n var bodyMinWidth = 0;\n\n var flattenColumns = this.getFlattenColumns();\n var flexColumns = flattenColumns.filter(function (column) {\n return typeof column.width !== 'number';\n });\n\n flattenColumns.forEach(function (column) {\n // Clean those columns whose width changed from flex to unflex\n if (typeof column.width === 'number' && column.realWidth) column.realWidth = null;\n });\n\n if (flexColumns.length > 0 && fit) {\n flattenColumns.forEach(function (column) {\n bodyMinWidth += column.width || column.minWidth || 80;\n });\n\n var scrollYWidth = this.scrollY ? this.gutterWidth : 0;\n\n if (bodyMinWidth <= bodyWidth - scrollYWidth) {\n // DON'T HAVE SCROLL BAR\n this.scrollX = false;\n\n var totalFlexWidth = bodyWidth - scrollYWidth - bodyMinWidth;\n\n if (flexColumns.length === 1) {\n flexColumns[0].realWidth = (flexColumns[0].minWidth || 80) + totalFlexWidth;\n } else {\n var allColumnsWidth = flexColumns.reduce(function (prev, column) {\n return prev + (column.minWidth || 80);\n }, 0);\n var flexWidthPerPixel = totalFlexWidth / allColumnsWidth;\n var noneFirstWidth = 0;\n\n flexColumns.forEach(function (column, index) {\n if (index === 0) return;\n var flexWidth = Math.floor((column.minWidth || 80) * flexWidthPerPixel);\n noneFirstWidth += flexWidth;\n column.realWidth = (column.minWidth || 80) + flexWidth;\n });\n\n flexColumns[0].realWidth = (flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth;\n }\n } else {\n // HAVE HORIZONTAL SCROLL BAR\n this.scrollX = true;\n flexColumns.forEach(function (column) {\n column.realWidth = column.minWidth;\n });\n }\n\n this.bodyWidth = Math.max(bodyMinWidth, bodyWidth);\n this.table.resizeState.width = this.bodyWidth;\n } else {\n flattenColumns.forEach(function (column) {\n if (!column.width && !column.minWidth) {\n column.realWidth = 80;\n } else {\n column.realWidth = column.width || column.minWidth;\n }\n\n bodyMinWidth += column.realWidth;\n });\n this.scrollX = bodyMinWidth > bodyWidth;\n\n this.bodyWidth = bodyMinWidth;\n }\n\n var fixedColumns = this.store.states.fixedColumns;\n\n if (fixedColumns.length > 0) {\n var fixedWidth = 0;\n fixedColumns.forEach(function (column) {\n fixedWidth += column.realWidth || column.width;\n });\n\n this.fixedWidth = fixedWidth;\n }\n\n var rightFixedColumns = this.store.states.rightFixedColumns;\n if (rightFixedColumns.length > 0) {\n var rightFixedWidth = 0;\n rightFixedColumns.forEach(function (column) {\n rightFixedWidth += column.realWidth || column.width;\n });\n\n this.rightFixedWidth = rightFixedWidth;\n }\n\n this.notifyObservers('columns');\n };\n\n TableLayout.prototype.addObserver = function addObserver(observer) {\n this.observers.push(observer);\n };\n\n TableLayout.prototype.removeObserver = function removeObserver(observer) {\n var index = this.observers.indexOf(observer);\n if (index !== -1) {\n this.observers.splice(index, 1);\n }\n };\n\n TableLayout.prototype.notifyObservers = function notifyObservers(event) {\n var _this3 = this;\n\n var observers = this.observers;\n observers.forEach(function (observer) {\n switch (event) {\n case 'columns':\n observer.onColumnsChange(_this3);\n break;\n case 'scrollable':\n observer.onScrollableChange(_this3);\n break;\n default:\n throw new Error('Table Layout don\\'t have event ' + event + '.');\n }\n });\n };\n\n return TableLayout;\n}();\n\n/* harmony default export */ var table_layout = (table_layout_TableLayout);\n// CONCATENATED MODULE: ./packages/table/src/layout-observer.js\n/* harmony default export */ var layout_observer = ({\n created: function created() {\n this.tableLayout.addObserver(this);\n },\n destroyed: function destroyed() {\n this.tableLayout.removeObserver(this);\n },\n\n\n computed: {\n tableLayout: function tableLayout() {\n var layout = this.layout;\n if (!layout && this.table) {\n layout = this.table.layout;\n }\n if (!layout) {\n throw new Error('Can not find table layout.');\n }\n return layout;\n }\n },\n\n mounted: function mounted() {\n this.onColumnsChange(this.tableLayout);\n this.onScrollableChange(this.tableLayout);\n },\n updated: function updated() {\n if (this.__updated__) return;\n this.onColumnsChange(this.tableLayout);\n this.onScrollableChange(this.tableLayout);\n this.__updated__ = true;\n },\n\n\n methods: {\n onColumnsChange: function onColumnsChange(layout) {\n var cols = this.$el.querySelectorAll('colgroup > col');\n if (!cols.length) return;\n var flattenColumns = layout.getFlattenColumns();\n var columnsMap = {};\n flattenColumns.forEach(function (column) {\n columnsMap[column.id] = column;\n });\n for (var i = 0, j = cols.length; i < j; i++) {\n var col = cols[i];\n var name = col.getAttribute('name');\n var column = columnsMap[name];\n if (column) {\n col.setAttribute('width', column.realWidth || column.width);\n }\n }\n },\n onScrollableChange: function onScrollableChange(layout) {\n var cols = this.$el.querySelectorAll('colgroup > col[name=gutter]');\n for (var i = 0, j = cols.length; i < j; i++) {\n var col = cols[i];\n col.setAttribute('width', layout.scrollY ? layout.gutterWidth : '0');\n }\n var ths = this.$el.querySelectorAll('th.gutter');\n for (var _i = 0, _j = ths.length; _i < _j; _i++) {\n var th = ths[_i];\n th.style.width = layout.scrollY ? layout.gutterWidth + 'px' : '0';\n th.style.display = layout.scrollY ? '' : 'none';\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/table-row.js\nvar table_row_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n/* harmony default export */ var table_row = ({\n name: 'ElTableRow',\n props: ['columns', 'row', 'index', 'isSelected', 'isExpanded', 'store', 'context', 'firstDefaultColumnIndex', 'treeRowData', 'treeIndent', 'columnsHidden', 'getSpan', 'getColspanRealWidth', 'getCellStyle', 'getCellClass', 'handleCellMouseLeave', 'handleCellMouseEnter', 'fixed'],\n render: function render() {\n var _this = this;\n\n var h = arguments[0];\n var columns = this.columns,\n row = this.row,\n $index = this.index,\n store = this.store,\n context = this.context,\n firstDefaultColumnIndex = this.firstDefaultColumnIndex,\n treeRowData = this.treeRowData,\n treeIndent = this.treeIndent,\n _columnsHidden = this.columnsHidden,\n columnsHidden = _columnsHidden === undefined ? [] : _columnsHidden,\n isSelected = this.isSelected,\n isExpanded = this.isExpanded;\n\n\n return h('tr', [columns.map(function (column, cellIndex) {\n var _getSpan = _this.getSpan(row, column, $index, cellIndex),\n rowspan = _getSpan.rowspan,\n colspan = _getSpan.colspan;\n\n if (!rowspan || !colspan) {\n return null;\n }\n var columnData = table_row_extends({}, column);\n columnData.realWidth = _this.getColspanRealWidth(columns, colspan, cellIndex);\n var data = {\n store: store,\n isSelected: isSelected,\n isExpanded: isExpanded,\n _self: context,\n column: columnData,\n row: row,\n $index: $index\n };\n if (cellIndex === firstDefaultColumnIndex && treeRowData) {\n data.treeNode = {\n indent: treeRowData.level * treeIndent,\n level: treeRowData.level\n };\n if (typeof treeRowData.expanded === 'boolean') {\n data.treeNode.expanded = treeRowData.expanded;\n // 表明是懒加载\n if ('loading' in treeRowData) {\n data.treeNode.loading = treeRowData.loading;\n }\n if ('noLazyChildren' in treeRowData) {\n data.treeNode.noLazyChildren = treeRowData.noLazyChildren;\n }\n }\n }\n return h(\n 'td',\n {\n style: _this.getCellStyle($index, cellIndex, row, column),\n 'class': _this.getCellClass($index, cellIndex, row, column),\n attrs: { rowspan: rowspan,\n colspan: colspan\n },\n on: {\n 'mouseenter': function mouseenter($event) {\n return _this.handleCellMouseEnter($event, row);\n },\n 'mouseleave': _this.handleCellMouseLeave\n }\n },\n [column.renderCell.call(_this._renderProxy, _this.$createElement, data, columnsHidden[cellIndex])]\n );\n })]);\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/table-body.js\nvar table_body_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar table_body_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var table_body = ({\n name: 'ElTableBody',\n\n mixins: [layout_observer],\n\n components: {\n ElCheckbox: checkbox_default.a,\n ElTooltip: tooltip_default.a,\n TableRow: table_row\n },\n\n props: {\n store: {\n required: true\n },\n stripe: Boolean,\n context: {},\n rowClassName: [String, Function],\n rowStyle: [Object, Function],\n fixed: String,\n highlight: Boolean\n },\n\n render: function render(h) {\n var _this = this;\n\n var data = this.data || [];\n return h(\n 'table',\n {\n 'class': 'el-table__body',\n attrs: { cellspacing: '0',\n cellpadding: '0',\n border: '0' }\n },\n [h('colgroup', [this.columns.map(function (column) {\n return h('col', {\n attrs: { name: column.id },\n key: column.id });\n })]), h('tbody', [data.reduce(function (acc, row) {\n return acc.concat(_this.wrappedRowRender(row, acc.length));\n }, []), h('el-tooltip', {\n attrs: { effect: this.table.tooltipEffect, placement: 'top', content: this.tooltipContent },\n ref: 'tooltip' })])]\n );\n },\n\n\n computed: table_body_extends({\n table: function table() {\n return this.$parent;\n }\n }, mapStates({\n data: 'data',\n columns: 'columns',\n treeIndent: 'indent',\n leftFixedLeafCount: 'fixedLeafColumnsLength',\n rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n columnsCount: function columnsCount(states) {\n return states.columns.length;\n },\n leftFixedCount: function leftFixedCount(states) {\n return states.fixedColumns.length;\n },\n rightFixedCount: function rightFixedCount(states) {\n return states.rightFixedColumns.length;\n },\n hasExpandColumn: function hasExpandColumn(states) {\n return states.columns.some(function (_ref) {\n var type = _ref.type;\n return type === 'expand';\n });\n }\n }), {\n columnsHidden: function columnsHidden() {\n var _this2 = this;\n\n return this.columns.map(function (column, index) {\n return _this2.isColumnHidden(index);\n });\n },\n firstDefaultColumnIndex: function firstDefaultColumnIndex() {\n return Object(util_[\"arrayFindIndex\"])(this.columns, function (_ref2) {\n var type = _ref2.type;\n return type === 'default';\n });\n }\n }),\n\n watch: {\n // don't trigger getter of currentRow in getCellClass. see https://jsfiddle.net/oe2b4hqt/\n // update DOM manually. see https://github.com/ElemeFE/element/pull/13954/files#diff-9b450c00d0a9dec0ffad5a3176972e40\n 'store.states.hoverRow': function storeStatesHoverRow(newVal, oldVal) {\n var _this3 = this;\n\n if (!this.store.states.isComplex || this.$isServer) return;\n var raf = window.requestAnimationFrame;\n if (!raf) {\n raf = function raf(fn) {\n return setTimeout(fn, 16);\n };\n }\n raf(function () {\n var rows = _this3.$el.querySelectorAll('.el-table__row');\n var oldRow = rows[oldVal];\n var newRow = rows[newVal];\n if (oldRow) {\n Object(dom_[\"removeClass\"])(oldRow, 'hover-row');\n }\n if (newRow) {\n Object(dom_[\"addClass\"])(newRow, 'hover-row');\n }\n });\n }\n },\n\n data: function data() {\n return {\n tooltipContent: ''\n };\n },\n created: function created() {\n this.activateTooltip = debounce_default()(50, function (tooltip) {\n return tooltip.handleShowPopper();\n });\n },\n\n\n methods: {\n getKeyOfRow: function getKeyOfRow(row, index) {\n var rowKey = this.table.rowKey;\n if (rowKey) {\n return getRowIdentity(row, rowKey);\n }\n return index;\n },\n isColumnHidden: function isColumnHidden(index) {\n if (this.fixed === true || this.fixed === 'left') {\n return index >= this.leftFixedLeafCount;\n } else if (this.fixed === 'right') {\n return index < this.columnsCount - this.rightFixedLeafCount;\n } else {\n return index < this.leftFixedLeafCount || index >= this.columnsCount - this.rightFixedLeafCount;\n }\n },\n getSpan: function getSpan(row, column, rowIndex, columnIndex) {\n var rowspan = 1;\n var colspan = 1;\n var fn = this.table.spanMethod;\n if (typeof fn === 'function') {\n var result = fn({\n row: row,\n column: column,\n rowIndex: rowIndex,\n columnIndex: columnIndex\n });\n if (Array.isArray(result)) {\n rowspan = result[0];\n colspan = result[1];\n } else if ((typeof result === 'undefined' ? 'undefined' : table_body_typeof(result)) === 'object') {\n rowspan = result.rowspan;\n colspan = result.colspan;\n }\n }\n return { rowspan: rowspan, colspan: colspan };\n },\n getRowStyle: function getRowStyle(row, rowIndex) {\n var rowStyle = this.table.rowStyle;\n if (typeof rowStyle === 'function') {\n return rowStyle.call(null, {\n row: row,\n rowIndex: rowIndex\n });\n }\n return rowStyle || null;\n },\n getRowClass: function getRowClass(row, rowIndex) {\n var classes = ['el-table__row'];\n if (this.table.highlightCurrentRow && row === this.store.states.currentRow) {\n classes.push('current-row');\n }\n\n if (this.stripe && rowIndex % 2 === 1) {\n classes.push('el-table__row--striped');\n }\n var rowClassName = this.table.rowClassName;\n if (typeof rowClassName === 'string') {\n classes.push(rowClassName);\n } else if (typeof rowClassName === 'function') {\n classes.push(rowClassName.call(null, {\n row: row,\n rowIndex: rowIndex\n }));\n }\n\n if (this.store.states.expandRows.indexOf(row) > -1) {\n classes.push('expanded');\n }\n\n return classes;\n },\n getCellStyle: function getCellStyle(rowIndex, columnIndex, row, column) {\n var cellStyle = this.table.cellStyle;\n if (typeof cellStyle === 'function') {\n return cellStyle.call(null, {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n row: row,\n column: column\n });\n }\n return cellStyle;\n },\n getCellClass: function getCellClass(rowIndex, columnIndex, row, column) {\n var classes = [column.id, column.align, column.className];\n\n if (this.isColumnHidden(columnIndex)) {\n classes.push('is-hidden');\n }\n\n var cellClassName = this.table.cellClassName;\n if (typeof cellClassName === 'string') {\n classes.push(cellClassName);\n } else if (typeof cellClassName === 'function') {\n classes.push(cellClassName.call(null, {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n row: row,\n column: column\n }));\n }\n\n classes.push('el-table__cell');\n\n return classes.join(' ');\n },\n getColspanRealWidth: function getColspanRealWidth(columns, colspan, index) {\n if (colspan < 1) {\n return columns[index].realWidth;\n }\n var widthArr = columns.map(function (_ref3) {\n var realWidth = _ref3.realWidth;\n return realWidth;\n }).slice(index, index + colspan);\n return widthArr.reduce(function (acc, width) {\n return acc + width;\n }, -1);\n },\n handleCellMouseEnter: function handleCellMouseEnter(event, row) {\n var table = this.table;\n var cell = getCell(event);\n\n if (cell) {\n var column = getColumnByCell(table, cell);\n var hoverState = table.hoverState = { cell: cell, column: column, row: row };\n table.$emit('cell-mouse-enter', hoverState.row, hoverState.column, hoverState.cell, event);\n }\n\n // 判断是否text-overflow, 如果是就显示tooltip\n var cellChild = event.target.querySelector('.cell');\n if (!(Object(dom_[\"hasClass\"])(cellChild, 'el-tooltip') && cellChild.childNodes.length)) {\n return;\n }\n // use range width instead of scrollWidth to determine whether the text is overflowing\n // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3\n var range = document.createRange();\n range.setStart(cellChild, 0);\n range.setEnd(cellChild, cellChild.childNodes.length);\n var rangeWidth = range.getBoundingClientRect().width;\n var padding = (parseInt(Object(dom_[\"getStyle\"])(cellChild, 'paddingLeft'), 10) || 0) + (parseInt(Object(dom_[\"getStyle\"])(cellChild, 'paddingRight'), 10) || 0);\n if ((rangeWidth + padding > cellChild.offsetWidth || cellChild.scrollWidth > cellChild.offsetWidth) && this.$refs.tooltip) {\n var tooltip = this.$refs.tooltip;\n // TODO 会引起整个 Table 的重新渲染,需要优化\n this.tooltipContent = cell.innerText || cell.textContent;\n tooltip.referenceElm = cell;\n tooltip.$refs.popper && (tooltip.$refs.popper.style.display = 'none');\n tooltip.doDestroy();\n tooltip.setExpectedState(true);\n this.activateTooltip(tooltip);\n }\n },\n handleCellMouseLeave: function handleCellMouseLeave(event) {\n var tooltip = this.$refs.tooltip;\n if (tooltip) {\n tooltip.setExpectedState(false);\n tooltip.handleClosePopper();\n }\n var cell = getCell(event);\n if (!cell) return;\n\n var oldHoverState = this.table.hoverState || {};\n this.table.$emit('cell-mouse-leave', oldHoverState.row, oldHoverState.column, oldHoverState.cell, event);\n },\n\n\n handleMouseEnter: debounce_default()(30, function (index) {\n this.store.commit('setHoverRow', index);\n }),\n\n handleMouseLeave: debounce_default()(30, function () {\n this.store.commit('setHoverRow', null);\n }),\n\n handleContextMenu: function handleContextMenu(event, row) {\n this.handleEvent(event, row, 'contextmenu');\n },\n handleDoubleClick: function handleDoubleClick(event, row) {\n this.handleEvent(event, row, 'dblclick');\n },\n handleClick: function handleClick(event, row) {\n this.store.commit('setCurrentRow', row);\n this.handleEvent(event, row, 'click');\n },\n handleEvent: function handleEvent(event, row, name) {\n var table = this.table;\n var cell = getCell(event);\n var column = void 0;\n if (cell) {\n column = getColumnByCell(table, cell);\n if (column) {\n table.$emit('cell-' + name, row, column, cell, event);\n }\n }\n table.$emit('row-' + name, row, column, event);\n },\n rowRender: function rowRender(row, $index, treeRowData) {\n var _this4 = this;\n\n var h = this.$createElement;\n var treeIndent = this.treeIndent,\n columns = this.columns,\n firstDefaultColumnIndex = this.firstDefaultColumnIndex;\n\n var rowClasses = this.getRowClass(row, $index);\n var display = true;\n if (treeRowData) {\n rowClasses.push('el-table__row--level-' + treeRowData.level);\n display = treeRowData.display;\n }\n // 指令 v-show 会覆盖 row-style 中 display\n // 使用 :style 代替 v-show https://github.com/ElemeFE/element/issues/16995\n var displayStyle = display ? null : {\n display: 'none'\n };\n return h(table_row, {\n style: [displayStyle, this.getRowStyle(row, $index)],\n 'class': rowClasses,\n key: this.getKeyOfRow(row, $index),\n nativeOn: {\n 'dblclick': function dblclick($event) {\n return _this4.handleDoubleClick($event, row);\n },\n 'click': function click($event) {\n return _this4.handleClick($event, row);\n },\n 'contextmenu': function contextmenu($event) {\n return _this4.handleContextMenu($event, row);\n },\n 'mouseenter': function mouseenter(_) {\n return _this4.handleMouseEnter($index);\n },\n 'mouseleave': this.handleMouseLeave\n },\n attrs: {\n columns: columns,\n row: row,\n index: $index,\n store: this.store,\n context: this.context || this.table.$vnode.context,\n firstDefaultColumnIndex: firstDefaultColumnIndex,\n treeRowData: treeRowData,\n treeIndent: treeIndent,\n columnsHidden: this.columnsHidden,\n getSpan: this.getSpan,\n getColspanRealWidth: this.getColspanRealWidth,\n getCellStyle: this.getCellStyle,\n getCellClass: this.getCellClass,\n handleCellMouseEnter: this.handleCellMouseEnter,\n handleCellMouseLeave: this.handleCellMouseLeave,\n isSelected: this.store.isSelected(row),\n isExpanded: this.store.states.expandRows.indexOf(row) > -1,\n fixed: this.fixed\n }\n });\n },\n wrappedRowRender: function wrappedRowRender(row, $index) {\n var _this5 = this;\n\n var h = this.$createElement;\n\n var store = this.store;\n var isRowExpanded = store.isRowExpanded,\n assertRowKey = store.assertRowKey;\n var _store$states = store.states,\n treeData = _store$states.treeData,\n lazyTreeNodeMap = _store$states.lazyTreeNodeMap,\n childrenColumnName = _store$states.childrenColumnName,\n rowKey = _store$states.rowKey;\n\n if (this.hasExpandColumn && isRowExpanded(row)) {\n var renderExpanded = this.table.renderExpanded;\n var tr = this.rowRender(row, $index);\n if (!renderExpanded) {\n console.error('[Element Error]renderExpanded is required.');\n return tr;\n }\n // 使用二维数组,避免修改 $index\n return [[tr, h(\n 'tr',\n { key: 'expanded-row__' + tr.key },\n [h(\n 'td',\n {\n attrs: { colspan: this.columnsCount },\n 'class': 'el-table__cell el-table__expanded-cell' },\n [renderExpanded(this.$createElement, { row: row, $index: $index, store: this.store })]\n )]\n )]];\n } else if (Object.keys(treeData).length) {\n assertRowKey();\n // TreeTable 时,rowKey 必须由用户设定,不使用 getKeyOfRow 计算\n // 在调用 rowRender 函数时,仍然会计算 rowKey,不太好的操作\n var key = getRowIdentity(row, rowKey);\n var cur = treeData[key];\n var treeRowData = null;\n if (cur) {\n treeRowData = {\n expanded: cur.expanded,\n level: cur.level,\n display: true\n };\n if (typeof cur.lazy === 'boolean') {\n if (typeof cur.loaded === 'boolean' && cur.loaded) {\n treeRowData.noLazyChildren = !(cur.children && cur.children.length);\n }\n treeRowData.loading = cur.loading;\n }\n }\n var tmp = [this.rowRender(row, $index, treeRowData)];\n // 渲染嵌套数据\n if (cur) {\n // currentRow 记录的是 index,所以还需主动增加 TreeTable 的 index\n var i = 0;\n var traverse = function traverse(children, parent) {\n if (!(children && children.length && parent)) return;\n children.forEach(function (node) {\n // 父节点的 display 状态影响子节点的显示状态\n var innerTreeRowData = {\n display: parent.display && parent.expanded,\n level: parent.level + 1\n };\n var childKey = getRowIdentity(node, rowKey);\n if (childKey === undefined || childKey === null) {\n throw new Error('for nested data item, row-key is required.');\n }\n cur = table_body_extends({}, treeData[childKey]);\n // 对于当前节点,分成有无子节点两种情况。\n // 如果包含子节点的,设置 expanded 属性。\n // 对于它子节点的 display 属性由它本身的 expanded 与 display 共同决定。\n if (cur) {\n innerTreeRowData.expanded = cur.expanded;\n // 懒加载的某些节点,level 未知\n cur.level = cur.level || innerTreeRowData.level;\n cur.display = !!(cur.expanded && innerTreeRowData.display);\n if (typeof cur.lazy === 'boolean') {\n if (typeof cur.loaded === 'boolean' && cur.loaded) {\n innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);\n }\n innerTreeRowData.loading = cur.loading;\n }\n }\n i++;\n tmp.push(_this5.rowRender(node, $index + i, innerTreeRowData));\n if (cur) {\n var _nodes = lazyTreeNodeMap[childKey] || node[childrenColumnName];\n traverse(_nodes, cur);\n }\n });\n };\n // 对于 root 节点,display 一定为 true\n cur.display = true;\n var nodes = lazyTreeNodeMap[key] || row[childrenColumnName];\n traverse(nodes, cur);\n }\n return tmp;\n } else {\n return this.rowRender(row, $index);\n }\n }\n }\n});\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/filter-panel.vue?vue&type=template&id=7f2c919f&\nvar filter_panelvue_type_template_id_7f2c919f_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"el-zoom-in-top\" } }, [\n _vm.multiple\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleOutsideClick,\n expression: \"handleOutsideClick\"\n },\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-table-filter\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-table-filter__content\" },\n [\n _c(\n \"el-scrollbar\",\n { attrs: { \"wrap-class\": \"el-table-filter__wrap\" } },\n [\n _c(\n \"el-checkbox-group\",\n {\n staticClass: \"el-table-filter__checkbox-group\",\n model: {\n value: _vm.filteredValue,\n callback: function($$v) {\n _vm.filteredValue = $$v\n },\n expression: \"filteredValue\"\n }\n },\n _vm._l(_vm.filters, function(filter) {\n return _c(\n \"el-checkbox\",\n { key: filter.value, attrs: { label: filter.value } },\n [_vm._v(_vm._s(filter.text))]\n )\n }),\n 1\n )\n ],\n 1\n )\n ],\n 1\n ),\n _c(\"div\", { staticClass: \"el-table-filter__bottom\" }, [\n _c(\n \"button\",\n {\n class: { \"is-disabled\": _vm.filteredValue.length === 0 },\n attrs: { disabled: _vm.filteredValue.length === 0 },\n on: { click: _vm.handleConfirm }\n },\n [_vm._v(_vm._s(_vm.t(\"el.table.confirmFilter\")))]\n ),\n _c(\"button\", { on: { click: _vm.handleReset } }, [\n _vm._v(_vm._s(_vm.t(\"el.table.resetFilter\")))\n ])\n ])\n ]\n )\n : _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleOutsideClick,\n expression: \"handleOutsideClick\"\n },\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-table-filter\"\n },\n [\n _c(\n \"ul\",\n { staticClass: \"el-table-filter__list\" },\n [\n _c(\n \"li\",\n {\n staticClass: \"el-table-filter__list-item\",\n class: {\n \"is-active\":\n _vm.filterValue === undefined ||\n _vm.filterValue === null\n },\n on: {\n click: function($event) {\n _vm.handleSelect(null)\n }\n }\n },\n [_vm._v(_vm._s(_vm.t(\"el.table.clearFilter\")))]\n ),\n _vm._l(_vm.filters, function(filter) {\n return _c(\n \"li\",\n {\n key: filter.value,\n staticClass: \"el-table-filter__list-item\",\n class: { \"is-active\": _vm.isActive(filter) },\n attrs: { label: filter.value },\n on: {\n click: function($event) {\n _vm.handleSelect(filter.value)\n }\n }\n },\n [_vm._v(_vm._s(filter.text))]\n )\n })\n ],\n 2\n )\n ]\n )\n ])\n}\nvar filter_panelvue_type_template_id_7f2c919f_staticRenderFns = []\nfilter_panelvue_type_template_id_7f2c919f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue?vue&type=template&id=7f2c919f&\n\n// CONCATENATED MODULE: ./packages/table/src/dropdown.js\n\nvar dropdowns = [];\n\n!external_vue_default.a.prototype.$isServer && document.addEventListener('click', function (event) {\n dropdowns.forEach(function (dropdown) {\n var target = event.target;\n if (!dropdown || !dropdown.$el) return;\n if (target === dropdown.$el || dropdown.$el.contains(target)) {\n return;\n }\n dropdown.handleOutsideClick && dropdown.handleOutsideClick(event);\n });\n});\n\n/* harmony default export */ var src_dropdown = ({\n open: function open(instance) {\n if (instance) {\n dropdowns.push(instance);\n }\n },\n close: function close(instance) {\n var index = dropdowns.indexOf(instance);\n if (index !== -1) {\n dropdowns.splice(instance, 1);\n }\n }\n});\n// EXTERNAL MODULE: external \"element-ui/lib/checkbox-group\"\nvar checkbox_group_ = __webpack_require__(31);\nvar checkbox_group_default = /*#__PURE__*/__webpack_require__.n(checkbox_group_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/filter-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var filter_panelvue_type_script_lang_js_ = ({\n name: 'ElTableFilterPanel',\n\n mixins: [vue_popper_default.a, locale_default.a],\n\n directives: {\n Clickoutside: clickoutside_default.a\n },\n\n components: {\n ElCheckbox: checkbox_default.a,\n ElCheckboxGroup: checkbox_group_default.a,\n ElScrollbar: scrollbar_default.a\n },\n\n props: {\n placement: {\n type: String,\n default: 'bottom-end'\n }\n },\n\n methods: {\n isActive: function isActive(filter) {\n return filter.value === this.filterValue;\n },\n handleOutsideClick: function handleOutsideClick() {\n var _this = this;\n\n setTimeout(function () {\n _this.showPopper = false;\n }, 16);\n },\n handleConfirm: function handleConfirm() {\n this.confirmFilter(this.filteredValue);\n this.handleOutsideClick();\n },\n handleReset: function handleReset() {\n this.filteredValue = [];\n this.confirmFilter(this.filteredValue);\n this.handleOutsideClick();\n },\n handleSelect: function handleSelect(filterValue) {\n this.filterValue = filterValue;\n\n if (typeof filterValue !== 'undefined' && filterValue !== null) {\n this.confirmFilter(this.filteredValue);\n } else {\n this.confirmFilter([]);\n }\n\n this.handleOutsideClick();\n },\n confirmFilter: function confirmFilter(filteredValue) {\n this.table.store.commit('filterChange', {\n column: this.column,\n values: filteredValue\n });\n this.table.store.updateAllSelected();\n }\n },\n\n data: function data() {\n return {\n table: null,\n cell: null,\n column: null\n };\n },\n\n\n computed: {\n filters: function filters() {\n return this.column && this.column.filters;\n },\n\n\n filterValue: {\n get: function get() {\n return (this.column.filteredValue || [])[0];\n },\n set: function set(value) {\n if (this.filteredValue) {\n if (typeof value !== 'undefined' && value !== null) {\n this.filteredValue.splice(0, 1, value);\n } else {\n this.filteredValue.splice(0, 1);\n }\n }\n }\n },\n\n filteredValue: {\n get: function get() {\n if (this.column) {\n return this.column.filteredValue || [];\n }\n return [];\n },\n set: function set(value) {\n if (this.column) {\n this.column.filteredValue = value;\n }\n }\n },\n\n multiple: function multiple() {\n if (this.column) {\n return this.column.filterMultiple;\n }\n return true;\n }\n },\n\n mounted: function mounted() {\n var _this2 = this;\n\n this.popperElm = this.$el;\n this.referenceElm = this.cell;\n this.table.bodyWrapper.addEventListener('scroll', function () {\n _this2.updatePopper();\n });\n\n this.$watch('showPopper', function (value) {\n if (_this2.column) _this2.column.filterOpened = value;\n if (value) {\n src_dropdown.open(_this2);\n } else {\n src_dropdown.close(_this2);\n }\n });\n },\n\n watch: {\n showPopper: function showPopper(val) {\n if (val === true && parseInt(this.popperJS._popper.style.zIndex, 10) < popup_[\"PopupManager\"].zIndex) {\n this.popperJS._popper.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_filter_panelvue_type_script_lang_js_ = (filter_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/table/src/filter-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar filter_panel_component = normalizeComponent(\n src_filter_panelvue_type_script_lang_js_,\n filter_panelvue_type_template_id_7f2c919f_render,\n filter_panelvue_type_template_id_7f2c919f_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var filter_panel_api; }\nfilter_panel_component.options.__file = \"packages/table/src/filter-panel.vue\"\n/* harmony default export */ var filter_panel = (filter_panel_component.exports);\n// CONCATENATED MODULE: ./packages/table/src/table-header.js\nvar table_header_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\n\n\nvar getAllColumns = function getAllColumns(columns) {\n var result = [];\n columns.forEach(function (column) {\n if (column.children) {\n result.push(column);\n result.push.apply(result, getAllColumns(column.children));\n } else {\n result.push(column);\n }\n });\n return result;\n};\n\nvar convertToRows = function convertToRows(originColumns) {\n var maxLevel = 1;\n var traverse = function traverse(column, parent) {\n if (parent) {\n column.level = parent.level + 1;\n if (maxLevel < column.level) {\n maxLevel = column.level;\n }\n }\n if (column.children) {\n var colSpan = 0;\n column.children.forEach(function (subColumn) {\n traverse(subColumn, column);\n colSpan += subColumn.colSpan;\n });\n column.colSpan = colSpan;\n } else {\n column.colSpan = 1;\n }\n };\n\n originColumns.forEach(function (column) {\n column.level = 1;\n traverse(column);\n });\n\n var rows = [];\n for (var i = 0; i < maxLevel; i++) {\n rows.push([]);\n }\n\n var allColumns = getAllColumns(originColumns);\n\n allColumns.forEach(function (column) {\n if (!column.children) {\n column.rowSpan = maxLevel - column.level + 1;\n } else {\n column.rowSpan = 1;\n }\n rows[column.level - 1].push(column);\n });\n\n return rows;\n};\n\n/* harmony default export */ var table_header = ({\n name: 'ElTableHeader',\n\n mixins: [layout_observer],\n\n render: function render(h) {\n var _this = this;\n\n var originColumns = this.store.states.originColumns;\n var columnRows = convertToRows(originColumns, this.columns);\n // 是否拥有多级表头\n var isGroup = columnRows.length > 1;\n if (isGroup) this.$parent.isGroup = true;\n return h(\n 'table',\n {\n 'class': 'el-table__header',\n attrs: { cellspacing: '0',\n cellpadding: '0',\n border: '0' }\n },\n [h('colgroup', [this.columns.map(function (column) {\n return h('col', {\n attrs: { name: column.id },\n key: column.id });\n }), this.hasGutter ? h('col', {\n attrs: { name: 'gutter' }\n }) : '']), h(\n 'thead',\n { 'class': [{ 'is-group': isGroup, 'has-gutter': this.hasGutter }] },\n [this._l(columnRows, function (columns, rowIndex) {\n return h(\n 'tr',\n {\n style: _this.getHeaderRowStyle(rowIndex),\n 'class': _this.getHeaderRowClass(rowIndex)\n },\n [columns.map(function (column, cellIndex) {\n return h(\n 'th',\n {\n attrs: {\n colspan: column.colSpan,\n rowspan: column.rowSpan\n },\n on: {\n 'mousemove': function mousemove($event) {\n return _this.handleMouseMove($event, column);\n },\n 'mouseout': _this.handleMouseOut,\n 'mousedown': function mousedown($event) {\n return _this.handleMouseDown($event, column);\n },\n 'click': function click($event) {\n return _this.handleHeaderClick($event, column);\n },\n 'contextmenu': function contextmenu($event) {\n return _this.handleHeaderContextMenu($event, column);\n }\n },\n\n style: _this.getHeaderCellStyle(rowIndex, cellIndex, columns, column),\n 'class': _this.getHeaderCellClass(rowIndex, cellIndex, columns, column),\n key: column.id },\n [h(\n 'div',\n { 'class': ['cell', column.filteredValue && column.filteredValue.length > 0 ? 'highlight' : '', column.labelClassName] },\n [column.renderHeader ? column.renderHeader.call(_this._renderProxy, h, { column: column, $index: cellIndex, store: _this.store, _self: _this.$parent.$vnode.context }) : column.label, column.sortable ? h(\n 'span',\n {\n 'class': 'caret-wrapper',\n on: {\n 'click': function click($event) {\n return _this.handleSortClick($event, column);\n }\n }\n },\n [h('i', { 'class': 'sort-caret ascending',\n on: {\n 'click': function click($event) {\n return _this.handleSortClick($event, column, 'ascending');\n }\n }\n }), h('i', { 'class': 'sort-caret descending',\n on: {\n 'click': function click($event) {\n return _this.handleSortClick($event, column, 'descending');\n }\n }\n })]\n ) : '', column.filterable ? h(\n 'span',\n {\n 'class': 'el-table__column-filter-trigger',\n on: {\n 'click': function click($event) {\n return _this.handleFilterClick($event, column);\n }\n }\n },\n [h('i', { 'class': ['el-icon-arrow-down', column.filterOpened ? 'el-icon-arrow-up' : ''] })]\n ) : '']\n )]\n );\n }), _this.hasGutter ? h('th', { 'class': 'el-table__cell gutter' }) : '']\n );\n })]\n )]\n );\n },\n\n\n props: {\n fixed: String,\n store: {\n required: true\n },\n border: Boolean,\n defaultSort: {\n type: Object,\n default: function _default() {\n return {\n prop: '',\n order: ''\n };\n }\n }\n },\n\n components: {\n ElCheckbox: checkbox_default.a\n },\n\n computed: table_header_extends({\n table: function table() {\n return this.$parent;\n },\n hasGutter: function hasGutter() {\n return !this.fixed && this.tableLayout.gutterWidth;\n }\n }, mapStates({\n columns: 'columns',\n isAllSelected: 'isAllSelected',\n leftFixedLeafCount: 'fixedLeafColumnsLength',\n rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n columnsCount: function columnsCount(states) {\n return states.columns.length;\n },\n leftFixedCount: function leftFixedCount(states) {\n return states.fixedColumns.length;\n },\n rightFixedCount: function rightFixedCount(states) {\n return states.rightFixedColumns.length;\n }\n })),\n\n created: function created() {\n this.filterPanels = {};\n },\n mounted: function mounted() {\n var _this2 = this;\n\n // nextTick 是有必要的 https://github.com/ElemeFE/element/pull/11311\n this.$nextTick(function () {\n var _defaultSort = _this2.defaultSort,\n prop = _defaultSort.prop,\n order = _defaultSort.order;\n\n var init = true;\n _this2.store.commit('sort', { prop: prop, order: order, init: init });\n });\n },\n beforeDestroy: function beforeDestroy() {\n var panels = this.filterPanels;\n for (var prop in panels) {\n if (panels.hasOwnProperty(prop) && panels[prop]) {\n panels[prop].$destroy(true);\n }\n }\n },\n\n\n methods: {\n isCellHidden: function isCellHidden(index, columns) {\n var start = 0;\n for (var i = 0; i < index; i++) {\n start += columns[i].colSpan;\n }\n var after = start + columns[index].colSpan - 1;\n if (this.fixed === true || this.fixed === 'left') {\n return after >= this.leftFixedLeafCount;\n } else if (this.fixed === 'right') {\n return start < this.columnsCount - this.rightFixedLeafCount;\n } else {\n return after < this.leftFixedLeafCount || start >= this.columnsCount - this.rightFixedLeafCount;\n }\n },\n getHeaderRowStyle: function getHeaderRowStyle(rowIndex) {\n var headerRowStyle = this.table.headerRowStyle;\n if (typeof headerRowStyle === 'function') {\n return headerRowStyle.call(null, { rowIndex: rowIndex });\n }\n return headerRowStyle;\n },\n getHeaderRowClass: function getHeaderRowClass(rowIndex) {\n var classes = [];\n\n var headerRowClassName = this.table.headerRowClassName;\n if (typeof headerRowClassName === 'string') {\n classes.push(headerRowClassName);\n } else if (typeof headerRowClassName === 'function') {\n classes.push(headerRowClassName.call(null, { rowIndex: rowIndex }));\n }\n\n return classes.join(' ');\n },\n getHeaderCellStyle: function getHeaderCellStyle(rowIndex, columnIndex, row, column) {\n var headerCellStyle = this.table.headerCellStyle;\n if (typeof headerCellStyle === 'function') {\n return headerCellStyle.call(null, {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n row: row,\n column: column\n });\n }\n return headerCellStyle;\n },\n getHeaderCellClass: function getHeaderCellClass(rowIndex, columnIndex, row, column) {\n var classes = [column.id, column.order, column.headerAlign, column.className, column.labelClassName];\n\n if (rowIndex === 0 && this.isCellHidden(columnIndex, row)) {\n classes.push('is-hidden');\n }\n\n if (!column.children) {\n classes.push('is-leaf');\n }\n\n if (column.sortable) {\n classes.push('is-sortable');\n }\n\n var headerCellClassName = this.table.headerCellClassName;\n if (typeof headerCellClassName === 'string') {\n classes.push(headerCellClassName);\n } else if (typeof headerCellClassName === 'function') {\n classes.push(headerCellClassName.call(null, {\n rowIndex: rowIndex,\n columnIndex: columnIndex,\n row: row,\n column: column\n }));\n }\n\n classes.push('el-table__cell');\n\n return classes.join(' ');\n },\n toggleAllSelection: function toggleAllSelection() {\n this.store.commit('toggleAllSelection');\n },\n handleFilterClick: function handleFilterClick(event, column) {\n event.stopPropagation();\n var target = event.target;\n var cell = target.tagName === 'TH' ? target : target.parentNode;\n if (Object(dom_[\"hasClass\"])(cell, 'noclick')) return;\n cell = cell.querySelector('.el-table__column-filter-trigger') || cell;\n var table = this.$parent;\n\n var filterPanel = this.filterPanels[column.id];\n\n if (filterPanel && column.filterOpened) {\n filterPanel.showPopper = false;\n return;\n }\n\n if (!filterPanel) {\n filterPanel = new external_vue_default.a(filter_panel);\n this.filterPanels[column.id] = filterPanel;\n if (column.filterPlacement) {\n filterPanel.placement = column.filterPlacement;\n }\n filterPanel.table = table;\n filterPanel.cell = cell;\n filterPanel.column = column;\n !this.$isServer && filterPanel.$mount(document.createElement('div'));\n }\n\n setTimeout(function () {\n filterPanel.showPopper = true;\n }, 16);\n },\n handleHeaderClick: function handleHeaderClick(event, column) {\n if (!column.filters && column.sortable) {\n this.handleSortClick(event, column);\n } else if (column.filterable && !column.sortable) {\n this.handleFilterClick(event, column);\n }\n\n this.$parent.$emit('header-click', column, event);\n },\n handleHeaderContextMenu: function handleHeaderContextMenu(event, column) {\n this.$parent.$emit('header-contextmenu', column, event);\n },\n handleMouseDown: function handleMouseDown(event, column) {\n var _this3 = this;\n\n if (this.$isServer) return;\n if (column.children && column.children.length > 0) return;\n /* istanbul ignore if */\n if (this.draggingColumn && this.border) {\n this.dragging = true;\n\n this.$parent.resizeProxyVisible = true;\n\n var table = this.$parent;\n var tableEl = table.$el;\n var tableLeft = tableEl.getBoundingClientRect().left;\n var columnEl = this.$el.querySelector('th.' + column.id);\n var columnRect = columnEl.getBoundingClientRect();\n var minLeft = columnRect.left - tableLeft + 30;\n\n Object(dom_[\"addClass\"])(columnEl, 'noclick');\n\n this.dragState = {\n startMouseLeft: event.clientX,\n startLeft: columnRect.right - tableLeft,\n startColumnLeft: columnRect.left - tableLeft,\n tableLeft: tableLeft\n };\n\n var resizeProxy = table.$refs.resizeProxy;\n resizeProxy.style.left = this.dragState.startLeft + 'px';\n\n document.onselectstart = function () {\n return false;\n };\n document.ondragstart = function () {\n return false;\n };\n\n var handleMouseMove = function handleMouseMove(event) {\n var deltaLeft = event.clientX - _this3.dragState.startMouseLeft;\n var proxyLeft = _this3.dragState.startLeft + deltaLeft;\n\n resizeProxy.style.left = Math.max(minLeft, proxyLeft) + 'px';\n };\n\n var handleMouseUp = function handleMouseUp() {\n if (_this3.dragging) {\n var _dragState = _this3.dragState,\n startColumnLeft = _dragState.startColumnLeft,\n startLeft = _dragState.startLeft;\n\n var finalLeft = parseInt(resizeProxy.style.left, 10);\n var columnWidth = finalLeft - startColumnLeft;\n column.width = column.realWidth = columnWidth;\n table.$emit('header-dragend', column.width, startLeft - startColumnLeft, column, event);\n\n _this3.store.scheduleLayout();\n\n document.body.style.cursor = '';\n _this3.dragging = false;\n _this3.draggingColumn = null;\n _this3.dragState = {};\n\n table.resizeProxyVisible = false;\n }\n\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.onselectstart = null;\n document.ondragstart = null;\n\n setTimeout(function () {\n Object(dom_[\"removeClass\"])(columnEl, 'noclick');\n }, 0);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n }\n },\n handleMouseMove: function handleMouseMove(event, column) {\n if (column.children && column.children.length > 0) return;\n var target = event.target;\n while (target && target.tagName !== 'TH') {\n target = target.parentNode;\n }\n\n if (!column || !column.resizable) return;\n\n if (!this.dragging && this.border) {\n var rect = target.getBoundingClientRect();\n\n var bodyStyle = document.body.style;\n if (rect.width > 12 && rect.right - event.pageX < 8) {\n bodyStyle.cursor = 'col-resize';\n if (Object(dom_[\"hasClass\"])(target, 'is-sortable')) {\n target.style.cursor = 'col-resize';\n }\n this.draggingColumn = column;\n } else if (!this.dragging) {\n bodyStyle.cursor = '';\n if (Object(dom_[\"hasClass\"])(target, 'is-sortable')) {\n target.style.cursor = 'pointer';\n }\n this.draggingColumn = null;\n }\n }\n },\n handleMouseOut: function handleMouseOut() {\n if (this.$isServer) return;\n document.body.style.cursor = '';\n },\n toggleOrder: function toggleOrder(_ref) {\n var order = _ref.order,\n sortOrders = _ref.sortOrders;\n\n if (order === '') return sortOrders[0];\n var index = sortOrders.indexOf(order || null);\n return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1];\n },\n handleSortClick: function handleSortClick(event, column, givenOrder) {\n event.stopPropagation();\n var order = column.order === givenOrder ? null : givenOrder || this.toggleOrder(column);\n\n var target = event.target;\n while (target && target.tagName !== 'TH') {\n target = target.parentNode;\n }\n\n if (target && target.tagName === 'TH') {\n if (Object(dom_[\"hasClass\"])(target, 'noclick')) {\n Object(dom_[\"removeClass\"])(target, 'noclick');\n return;\n }\n }\n\n if (!column.sortable) return;\n\n var states = this.store.states;\n var sortProp = states.sortProp;\n var sortOrder = void 0;\n var sortingColumn = states.sortingColumn;\n\n if (sortingColumn !== column || sortingColumn === column && sortingColumn.order === null) {\n if (sortingColumn) {\n sortingColumn.order = null;\n }\n states.sortingColumn = column;\n sortProp = column.property;\n }\n\n if (!order) {\n sortOrder = column.order = null;\n } else {\n sortOrder = column.order = order;\n }\n\n states.sortProp = sortProp;\n states.sortOrder = sortOrder;\n\n this.store.commit('changeSortCondition');\n }\n },\n\n data: function data() {\n return {\n draggingColumn: null,\n dragging: false,\n dragState: {}\n };\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/table-footer.js\nvar table_footer_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n/* harmony default export */ var table_footer = ({\n name: 'ElTableFooter',\n\n mixins: [layout_observer],\n\n render: function render(h) {\n var _this = this;\n\n var sums = [];\n if (this.summaryMethod) {\n sums = this.summaryMethod({ columns: this.columns, data: this.store.states.data });\n } else {\n this.columns.forEach(function (column, index) {\n if (index === 0) {\n sums[index] = _this.sumText;\n return;\n }\n var values = _this.store.states.data.map(function (item) {\n return Number(item[column.property]);\n });\n var precisions = [];\n var notNumber = true;\n values.forEach(function (value) {\n if (!isNaN(value)) {\n notNumber = false;\n var decimal = ('' + value).split('.')[1];\n precisions.push(decimal ? decimal.length : 0);\n }\n });\n var precision = Math.max.apply(null, precisions);\n if (!notNumber) {\n sums[index] = values.reduce(function (prev, curr) {\n var value = Number(curr);\n if (!isNaN(value)) {\n return parseFloat((prev + curr).toFixed(Math.min(precision, 20)));\n } else {\n return prev;\n }\n }, 0);\n } else {\n sums[index] = '';\n }\n });\n }\n\n return h(\n 'table',\n {\n 'class': 'el-table__footer',\n attrs: { cellspacing: '0',\n cellpadding: '0',\n border: '0' }\n },\n [h('colgroup', [this.columns.map(function (column) {\n return h('col', {\n attrs: { name: column.id },\n key: column.id });\n }), this.hasGutter ? h('col', {\n attrs: { name: 'gutter' }\n }) : '']), h(\n 'tbody',\n { 'class': [{ 'has-gutter': this.hasGutter }] },\n [h('tr', [this.columns.map(function (column, cellIndex) {\n return h(\n 'td',\n {\n key: cellIndex,\n attrs: { colspan: column.colSpan,\n rowspan: column.rowSpan\n },\n 'class': [].concat(_this.getRowClasses(column, cellIndex), ['el-table__cell']) },\n [h(\n 'div',\n { 'class': ['cell', column.labelClassName] },\n [sums[cellIndex]]\n )]\n );\n }), this.hasGutter ? h('th', { 'class': 'el-table__cell gutter' }) : ''])]\n )]\n );\n },\n\n\n props: {\n fixed: String,\n store: {\n required: true\n },\n summaryMethod: Function,\n sumText: String,\n border: Boolean,\n defaultSort: {\n type: Object,\n default: function _default() {\n return {\n prop: '',\n order: ''\n };\n }\n }\n },\n\n computed: table_footer_extends({\n table: function table() {\n return this.$parent;\n },\n hasGutter: function hasGutter() {\n return !this.fixed && this.tableLayout.gutterWidth;\n }\n }, mapStates({\n columns: 'columns',\n isAllSelected: 'isAllSelected',\n leftFixedLeafCount: 'fixedLeafColumnsLength',\n rightFixedLeafCount: 'rightFixedLeafColumnsLength',\n columnsCount: function columnsCount(states) {\n return states.columns.length;\n },\n leftFixedCount: function leftFixedCount(states) {\n return states.fixedColumns.length;\n },\n rightFixedCount: function rightFixedCount(states) {\n return states.rightFixedColumns.length;\n }\n })),\n\n methods: {\n isCellHidden: function isCellHidden(index, columns, column) {\n if (this.fixed === true || this.fixed === 'left') {\n return index >= this.leftFixedLeafCount;\n } else if (this.fixed === 'right') {\n var before = 0;\n for (var i = 0; i < index; i++) {\n before += columns[i].colSpan;\n }\n return before < this.columnsCount - this.rightFixedLeafCount;\n } else if (!this.fixed && column.fixed) {\n // hide cell when footer instance is not fixed and column is fixed\n return true;\n } else {\n return index < this.leftFixedCount || index >= this.columnsCount - this.rightFixedCount;\n }\n },\n getRowClasses: function getRowClasses(column, cellIndex) {\n var classes = [column.id, column.align, column.labelClassName];\n if (column.className) {\n classes.push(column.className);\n }\n if (this.isCellHidden(cellIndex, this.columns, column)) {\n classes.push('is-hidden');\n }\n if (!column.children) {\n classes.push('is-leaf');\n }\n return classes;\n }\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/table/src/table.vue?vue&type=script&lang=js&\nvar tablevue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar tableIdSeed = 1;\n\n/* harmony default export */ var tablevue_type_script_lang_js_ = ({\n name: 'ElTable',\n\n mixins: [locale_default.a, migrating_default.a],\n\n directives: {\n Mousewheel: directives_mousewheel\n },\n\n props: {\n data: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n\n size: String,\n\n width: [String, Number],\n\n height: [String, Number],\n\n maxHeight: [String, Number],\n\n fit: {\n type: Boolean,\n default: true\n },\n\n stripe: Boolean,\n\n border: Boolean,\n\n rowKey: [String, Function],\n\n context: {},\n\n showHeader: {\n type: Boolean,\n default: true\n },\n\n showSummary: Boolean,\n\n sumText: String,\n\n summaryMethod: Function,\n\n rowClassName: [String, Function],\n\n rowStyle: [Object, Function],\n\n cellClassName: [String, Function],\n\n cellStyle: [Object, Function],\n\n headerRowClassName: [String, Function],\n\n headerRowStyle: [Object, Function],\n\n headerCellClassName: [String, Function],\n\n headerCellStyle: [Object, Function],\n\n highlightCurrentRow: Boolean,\n\n currentRowKey: [String, Number],\n\n emptyText: String,\n\n expandRowKeys: Array,\n\n defaultExpandAll: Boolean,\n\n defaultSort: Object,\n\n tooltipEffect: String,\n\n spanMethod: Function,\n\n selectOnIndeterminate: {\n type: Boolean,\n default: true\n },\n\n indent: {\n type: Number,\n default: 16\n },\n\n treeProps: {\n type: Object,\n default: function _default() {\n return {\n hasChildren: 'hasChildren',\n children: 'children'\n };\n }\n },\n\n lazy: Boolean,\n\n load: Function\n },\n\n components: {\n TableHeader: table_header,\n TableFooter: table_footer,\n TableBody: table_body,\n ElCheckbox: checkbox_default.a\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n events: {\n expand: 'expand is renamed to expand-change'\n }\n };\n },\n setCurrentRow: function setCurrentRow(row) {\n this.store.commit('setCurrentRow', row);\n },\n toggleRowSelection: function toggleRowSelection(row, selected) {\n this.store.toggleRowSelection(row, selected, false);\n this.store.updateAllSelected();\n },\n toggleRowExpansion: function toggleRowExpansion(row, expanded) {\n this.store.toggleRowExpansionAdapter(row, expanded);\n },\n clearSelection: function clearSelection() {\n this.store.clearSelection();\n },\n clearFilter: function clearFilter(columnKeys) {\n this.store.clearFilter(columnKeys);\n },\n clearSort: function clearSort() {\n this.store.clearSort();\n },\n handleMouseLeave: function handleMouseLeave() {\n this.store.commit('setHoverRow', null);\n if (this.hoverState) this.hoverState = null;\n },\n updateScrollY: function updateScrollY() {\n var changed = this.layout.updateScrollY();\n if (changed) {\n this.layout.notifyObservers('scrollable');\n this.layout.updateColumnsWidth();\n }\n },\n handleFixedMousewheel: function handleFixedMousewheel(event, data) {\n var bodyWrapper = this.bodyWrapper;\n if (Math.abs(data.spinY) > 0) {\n var currentScrollTop = bodyWrapper.scrollTop;\n if (data.pixelY < 0 && currentScrollTop !== 0) {\n event.preventDefault();\n }\n if (data.pixelY > 0 && bodyWrapper.scrollHeight - bodyWrapper.clientHeight > currentScrollTop) {\n event.preventDefault();\n }\n bodyWrapper.scrollTop += Math.ceil(data.pixelY / 5);\n } else {\n bodyWrapper.scrollLeft += Math.ceil(data.pixelX / 5);\n }\n },\n handleHeaderFooterMousewheel: function handleHeaderFooterMousewheel(event, data) {\n var pixelX = data.pixelX,\n pixelY = data.pixelY;\n\n if (Math.abs(pixelX) >= Math.abs(pixelY)) {\n this.bodyWrapper.scrollLeft += data.pixelX / 5;\n }\n },\n\n\n // TODO 使用 CSS transform\n syncPostion: Object(external_throttle_debounce_[\"throttle\"])(20, function () {\n var _bodyWrapper = this.bodyWrapper,\n scrollLeft = _bodyWrapper.scrollLeft,\n scrollTop = _bodyWrapper.scrollTop,\n offsetWidth = _bodyWrapper.offsetWidth,\n scrollWidth = _bodyWrapper.scrollWidth;\n var _$refs = this.$refs,\n headerWrapper = _$refs.headerWrapper,\n footerWrapper = _$refs.footerWrapper,\n fixedBodyWrapper = _$refs.fixedBodyWrapper,\n rightFixedBodyWrapper = _$refs.rightFixedBodyWrapper;\n\n if (headerWrapper) headerWrapper.scrollLeft = scrollLeft;\n if (footerWrapper) footerWrapper.scrollLeft = scrollLeft;\n if (fixedBodyWrapper) fixedBodyWrapper.scrollTop = scrollTop;\n if (rightFixedBodyWrapper) rightFixedBodyWrapper.scrollTop = scrollTop;\n var maxScrollLeftPosition = scrollWidth - offsetWidth - 1;\n if (scrollLeft >= maxScrollLeftPosition) {\n this.scrollPosition = 'right';\n } else if (scrollLeft === 0) {\n this.scrollPosition = 'left';\n } else {\n this.scrollPosition = 'middle';\n }\n }),\n\n bindEvents: function bindEvents() {\n this.bodyWrapper.addEventListener('scroll', this.syncPostion, { passive: true });\n if (this.fit) {\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.resizeListener);\n }\n },\n unbindEvents: function unbindEvents() {\n this.bodyWrapper.removeEventListener('scroll', this.syncPostion, { passive: true });\n if (this.fit) {\n Object(resize_event_[\"removeResizeListener\"])(this.$el, this.resizeListener);\n }\n },\n resizeListener: function resizeListener() {\n if (!this.$ready) return;\n var shouldUpdateLayout = false;\n var el = this.$el;\n var _resizeState = this.resizeState,\n oldWidth = _resizeState.width,\n oldHeight = _resizeState.height;\n\n\n var width = el.offsetWidth;\n if (oldWidth !== width) {\n shouldUpdateLayout = true;\n }\n\n var height = el.offsetHeight;\n if ((this.height || this.shouldUpdateHeight) && oldHeight !== height) {\n shouldUpdateLayout = true;\n }\n\n if (shouldUpdateLayout) {\n this.resizeState.width = width;\n this.resizeState.height = height;\n this.doLayout();\n }\n },\n doLayout: function doLayout() {\n if (this.shouldUpdateHeight) {\n this.layout.updateElsHeight();\n }\n this.layout.updateColumnsWidth();\n },\n sort: function sort(prop, order) {\n this.store.commit('sort', { prop: prop, order: order });\n },\n toggleAllSelection: function toggleAllSelection() {\n this.store.commit('toggleAllSelection');\n }\n },\n\n computed: tablevue_type_script_lang_js_extends({\n tableSize: function tableSize() {\n return this.size || (this.$ELEMENT || {}).size;\n },\n bodyWrapper: function bodyWrapper() {\n return this.$refs.bodyWrapper;\n },\n shouldUpdateHeight: function shouldUpdateHeight() {\n return this.height || this.maxHeight || this.fixedColumns.length > 0 || this.rightFixedColumns.length > 0;\n },\n bodyWidth: function bodyWidth() {\n var _layout = this.layout,\n bodyWidth = _layout.bodyWidth,\n scrollY = _layout.scrollY,\n gutterWidth = _layout.gutterWidth;\n\n return bodyWidth ? bodyWidth - (scrollY ? gutterWidth : 0) + 'px' : '';\n },\n bodyHeight: function bodyHeight() {\n var _layout2 = this.layout,\n _layout2$headerHeight = _layout2.headerHeight,\n headerHeight = _layout2$headerHeight === undefined ? 0 : _layout2$headerHeight,\n bodyHeight = _layout2.bodyHeight,\n _layout2$footerHeight = _layout2.footerHeight,\n footerHeight = _layout2$footerHeight === undefined ? 0 : _layout2$footerHeight;\n\n if (this.height) {\n return {\n height: bodyHeight ? bodyHeight + 'px' : ''\n };\n } else if (this.maxHeight) {\n var maxHeight = parseHeight(this.maxHeight);\n if (typeof maxHeight === 'number') {\n return {\n 'max-height': maxHeight - footerHeight - (this.showHeader ? headerHeight : 0) + 'px'\n };\n }\n }\n return {};\n },\n fixedBodyHeight: function fixedBodyHeight() {\n if (this.height) {\n return {\n height: this.layout.fixedBodyHeight ? this.layout.fixedBodyHeight + 'px' : ''\n };\n } else if (this.maxHeight) {\n var maxHeight = parseHeight(this.maxHeight);\n if (typeof maxHeight === 'number') {\n maxHeight = this.layout.scrollX ? maxHeight - this.layout.gutterWidth : maxHeight;\n if (this.showHeader) {\n maxHeight -= this.layout.headerHeight;\n }\n maxHeight -= this.layout.footerHeight;\n return {\n 'max-height': maxHeight + 'px'\n };\n }\n }\n return {};\n },\n fixedHeight: function fixedHeight() {\n if (this.maxHeight) {\n if (this.showSummary) {\n return {\n bottom: 0\n };\n }\n return {\n bottom: this.layout.scrollX && this.data.length ? this.layout.gutterWidth + 'px' : ''\n };\n } else {\n if (this.showSummary) {\n return {\n height: this.layout.tableHeight ? this.layout.tableHeight + 'px' : ''\n };\n }\n return {\n height: this.layout.viewportHeight ? this.layout.viewportHeight + 'px' : ''\n };\n }\n },\n emptyBlockStyle: function emptyBlockStyle() {\n if (this.data && this.data.length) return null;\n var height = '100%';\n if (this.layout.appendHeight) {\n height = 'calc(100% - ' + this.layout.appendHeight + 'px)';\n }\n return {\n width: this.bodyWidth,\n height: height\n };\n }\n }, mapStates({\n selection: 'selection',\n columns: 'columns',\n tableData: 'data',\n fixedColumns: 'fixedColumns',\n rightFixedColumns: 'rightFixedColumns'\n })),\n\n watch: {\n height: {\n immediate: true,\n handler: function handler(value) {\n this.layout.setHeight(value);\n }\n },\n\n maxHeight: {\n immediate: true,\n handler: function handler(value) {\n this.layout.setMaxHeight(value);\n }\n },\n\n currentRowKey: {\n immediate: true,\n handler: function handler(value) {\n if (!this.rowKey) return;\n this.store.setCurrentRowKey(value);\n }\n },\n\n data: {\n immediate: true,\n handler: function handler(value) {\n this.store.commit('setData', value);\n }\n },\n\n expandRowKeys: {\n immediate: true,\n handler: function handler(newVal) {\n if (newVal) {\n this.store.setExpandRowKeysAdapter(newVal);\n }\n }\n }\n },\n\n created: function created() {\n var _this = this;\n\n this.tableId = 'el-table_' + tableIdSeed++;\n this.debouncedUpdateLayout = Object(external_throttle_debounce_[\"debounce\"])(50, function () {\n return _this.doLayout();\n });\n },\n mounted: function mounted() {\n var _this2 = this;\n\n this.bindEvents();\n this.store.updateColumns();\n this.doLayout();\n\n this.resizeState = {\n width: this.$el.offsetWidth,\n height: this.$el.offsetHeight\n };\n\n // init filters\n this.store.states.columns.forEach(function (column) {\n if (column.filteredValue && column.filteredValue.length) {\n _this2.store.commit('filterChange', {\n column: column,\n values: column.filteredValue,\n silent: true\n });\n }\n });\n\n this.$ready = true;\n },\n destroyed: function destroyed() {\n this.unbindEvents();\n },\n data: function data() {\n var _treeProps = this.treeProps,\n _treeProps$hasChildre = _treeProps.hasChildren,\n hasChildren = _treeProps$hasChildre === undefined ? 'hasChildren' : _treeProps$hasChildre,\n _treeProps$children = _treeProps.children,\n children = _treeProps$children === undefined ? 'children' : _treeProps$children;\n\n this.store = createStore(this, {\n rowKey: this.rowKey,\n defaultExpandAll: this.defaultExpandAll,\n selectOnIndeterminate: this.selectOnIndeterminate,\n // TreeTable 的相关配置\n indent: this.indent,\n lazy: this.lazy,\n lazyColumnIdentifier: hasChildren,\n childrenColumnName: children\n });\n var layout = new table_layout({\n store: this.store,\n table: this,\n fit: this.fit,\n showHeader: this.showHeader\n });\n return {\n layout: layout,\n isHidden: false,\n renderExpanded: null,\n resizeProxyVisible: false,\n resizeState: {\n width: null,\n height: null\n },\n // 是否拥有多级表头\n isGroup: false,\n scrollPosition: 'left'\n };\n }\n});\n// CONCATENATED MODULE: ./packages/table/src/table.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tablevue_type_script_lang_js_ = (tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/table/src/table.vue\n\n\n\n\n\n/* normalize component */\n\nvar table_component = normalizeComponent(\n src_tablevue_type_script_lang_js_,\n tablevue_type_template_id_493fe34e_render,\n tablevue_type_template_id_493fe34e_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var table_api; }\ntable_component.options.__file = \"packages/table/src/table.vue\"\n/* harmony default export */ var src_table = (table_component.exports);\n// CONCATENATED MODULE: ./packages/table/index.js\n\n\n/* istanbul ignore next */\nsrc_table.install = function (Vue) {\n Vue.component(src_table.name, src_table);\n};\n\n/* harmony default export */ var packages_table = (src_table);\n// CONCATENATED MODULE: ./packages/table/src/config.js\n\n\nvar cellStarts = {\n default: {\n order: ''\n },\n selection: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: '',\n className: 'el-table-column--selection'\n },\n expand: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: ''\n },\n index: {\n width: 48,\n minWidth: 48,\n realWidth: 48,\n order: ''\n }\n};\n\n// 这些选项不应该被覆盖\nvar cellForced = {\n selection: {\n renderHeader: function renderHeader(h, _ref) {\n var store = _ref.store;\n\n return h('el-checkbox', {\n attrs: {\n disabled: store.states.data && store.states.data.length === 0,\n indeterminate: store.states.selection.length > 0 && !this.isAllSelected,\n\n value: this.isAllSelected },\n on: {\n 'input': this.toggleAllSelection\n }\n });\n },\n renderCell: function renderCell(h, _ref2) {\n var row = _ref2.row,\n column = _ref2.column,\n isSelected = _ref2.isSelected,\n store = _ref2.store,\n $index = _ref2.$index;\n\n return h('el-checkbox', {\n nativeOn: {\n 'click': function click(event) {\n return event.stopPropagation();\n }\n },\n attrs: {\n value: isSelected,\n disabled: column.selectable ? !column.selectable.call(null, row, $index) : false\n },\n on: {\n 'input': function input() {\n store.commit('rowSelectedChanged', row);\n }\n }\n });\n },\n sortable: false,\n resizable: false\n },\n index: {\n renderHeader: function renderHeader(h, _ref3) {\n var column = _ref3.column;\n\n return column.label || '#';\n },\n renderCell: function renderCell(h, _ref4) {\n var $index = _ref4.$index,\n column = _ref4.column;\n\n var i = $index + 1;\n var index = column.index;\n\n if (typeof index === 'number') {\n i = $index + index;\n } else if (typeof index === 'function') {\n i = index($index);\n }\n\n return h('div', [i]);\n },\n sortable: false\n },\n expand: {\n renderHeader: function renderHeader(h, _ref5) {\n var column = _ref5.column;\n\n return column.label || '';\n },\n renderCell: function renderCell(h, _ref6) {\n var row = _ref6.row,\n store = _ref6.store,\n isExpanded = _ref6.isExpanded;\n\n var classes = ['el-table__expand-icon'];\n if (isExpanded) {\n classes.push('el-table__expand-icon--expanded');\n }\n var callback = function callback(e) {\n e.stopPropagation();\n store.toggleRowExpansion(row);\n };\n return h(\n 'div',\n { 'class': classes,\n on: {\n 'click': callback\n }\n },\n [h('i', { 'class': 'el-icon el-icon-arrow-right' })]\n );\n },\n sortable: false,\n resizable: false,\n className: 'el-table__expand-column'\n }\n};\n\nfunction defaultRenderCell(h, _ref7) {\n var row = _ref7.row,\n column = _ref7.column,\n $index = _ref7.$index;\n\n var property = column.property;\n var value = property && Object(util_[\"getPropByPath\"])(row, property).v;\n if (column && column.formatter) {\n return column.formatter(row, column, value, $index);\n }\n return value;\n}\n\nfunction treeCellPrefix(h, _ref8) {\n var row = _ref8.row,\n treeNode = _ref8.treeNode,\n store = _ref8.store;\n\n if (!treeNode) return null;\n var ele = [];\n var callback = function callback(e) {\n e.stopPropagation();\n store.loadOrToggle(row);\n };\n if (treeNode.indent) {\n ele.push(h('span', { 'class': 'el-table__indent', style: { 'padding-left': treeNode.indent + 'px' } }));\n }\n if (typeof treeNode.expanded === 'boolean' && !treeNode.noLazyChildren) {\n var expandClasses = ['el-table__expand-icon', treeNode.expanded ? 'el-table__expand-icon--expanded' : ''];\n var iconClasses = ['el-icon-arrow-right'];\n if (treeNode.loading) {\n iconClasses = ['el-icon-loading'];\n }\n ele.push(h(\n 'div',\n { 'class': expandClasses,\n on: {\n 'click': callback\n }\n },\n [h('i', { 'class': iconClasses })]\n ));\n } else {\n ele.push(h('span', { 'class': 'el-table__placeholder' }));\n }\n return ele;\n}\n// CONCATENATED MODULE: ./packages/table/src/table-column.js\nvar table_column_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\nvar columnIdSeed = 1;\n\n/* harmony default export */ var table_column = ({\n name: 'ElTableColumn',\n\n props: {\n type: {\n type: String,\n default: 'default'\n },\n label: String,\n className: String,\n labelClassName: String,\n property: String,\n prop: String,\n width: {},\n minWidth: {},\n renderHeader: Function,\n sortable: {\n type: [Boolean, String],\n default: false\n },\n sortMethod: Function,\n sortBy: [String, Function, Array],\n resizable: {\n type: Boolean,\n default: true\n },\n columnKey: String,\n align: String,\n headerAlign: String,\n showTooltipWhenOverflow: Boolean,\n showOverflowTooltip: Boolean,\n fixed: [Boolean, String],\n formatter: Function,\n selectable: Function,\n reserveSelection: Boolean,\n filterMethod: Function,\n filteredValue: Array,\n filters: Array,\n filterPlacement: String,\n filterMultiple: {\n type: Boolean,\n default: true\n },\n index: [Number, Function],\n sortOrders: {\n type: Array,\n default: function _default() {\n return ['ascending', 'descending', null];\n },\n validator: function validator(val) {\n return val.every(function (order) {\n return ['ascending', 'descending', null].indexOf(order) > -1;\n });\n }\n }\n },\n\n data: function data() {\n return {\n isSubColumn: false,\n columns: []\n };\n },\n\n\n computed: {\n owner: function owner() {\n var parent = this.$parent;\n while (parent && !parent.tableId) {\n parent = parent.$parent;\n }\n return parent;\n },\n columnOrTableParent: function columnOrTableParent() {\n var parent = this.$parent;\n while (parent && !parent.tableId && !parent.columnId) {\n parent = parent.$parent;\n }\n return parent;\n },\n realWidth: function realWidth() {\n return parseWidth(this.width);\n },\n realMinWidth: function realMinWidth() {\n return parseMinWidth(this.minWidth);\n },\n realAlign: function realAlign() {\n return this.align ? 'is-' + this.align : null;\n },\n realHeaderAlign: function realHeaderAlign() {\n return this.headerAlign ? 'is-' + this.headerAlign : this.realAlign;\n }\n },\n\n methods: {\n getPropsData: function getPropsData() {\n var _this = this;\n\n for (var _len = arguments.length, props = Array(_len), _key = 0; _key < _len; _key++) {\n props[_key] = arguments[_key];\n }\n\n return props.reduce(function (prev, cur) {\n if (Array.isArray(cur)) {\n cur.forEach(function (key) {\n prev[key] = _this[key];\n });\n }\n return prev;\n }, {});\n },\n getColumnElIndex: function getColumnElIndex(children, child) {\n return [].indexOf.call(children, child);\n },\n setColumnWidth: function setColumnWidth(column) {\n if (this.realWidth) {\n column.width = this.realWidth;\n }\n if (this.realMinWidth) {\n column.minWidth = this.realMinWidth;\n }\n if (!column.minWidth) {\n column.minWidth = 80;\n }\n column.realWidth = column.width === undefined ? column.minWidth : column.width;\n return column;\n },\n setColumnForcedProps: function setColumnForcedProps(column) {\n // 对于特定类型的 column,某些属性不允许设置\n var type = column.type;\n var source = cellForced[type] || {};\n Object.keys(source).forEach(function (prop) {\n var value = source[prop];\n if (value !== undefined) {\n column[prop] = prop === 'className' ? column[prop] + ' ' + value : value;\n }\n });\n return column;\n },\n setColumnRenders: function setColumnRenders(column) {\n var _this2 = this;\n\n var h = this.$createElement;\n\n // renderHeader 属性不推荐使用。\n if (this.renderHeader) {\n console.warn('[Element Warn][TableColumn]Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header.');\n } else if (column.type !== 'selection') {\n column.renderHeader = function (h, scope) {\n var renderHeader = _this2.$scopedSlots.header;\n return renderHeader ? renderHeader(scope) : column.label;\n };\n }\n\n var originRenderCell = column.renderCell;\n // TODO: 这里的实现调整\n if (column.type === 'expand') {\n // 对于展开行,renderCell 不允许配置的。在上一步中已经设置过,这里需要简单封装一下。\n column.renderCell = function (h, data) {\n return h(\n 'div',\n { 'class': 'cell' },\n [originRenderCell(h, data)]\n );\n };\n this.owner.renderExpanded = function (h, data) {\n return _this2.$scopedSlots.default ? _this2.$scopedSlots.default(data) : _this2.$slots.default;\n };\n } else {\n originRenderCell = originRenderCell || defaultRenderCell;\n // 对 renderCell 进行包装\n column.renderCell = function (h, data) {\n var children = null;\n if (_this2.$scopedSlots.default) {\n children = _this2.$scopedSlots.default(data);\n } else {\n children = originRenderCell(h, data);\n }\n var prefix = treeCellPrefix(h, data);\n var props = {\n class: 'cell',\n style: {}\n };\n if (column.showOverflowTooltip) {\n props.class += ' el-tooltip';\n props.style = { width: (data.column.realWidth || data.column.width) - 1 + 'px' };\n }\n return h(\n 'div',\n props,\n [prefix, children]\n );\n };\n }\n return column;\n },\n registerNormalWatchers: function registerNormalWatchers() {\n var _this3 = this;\n\n var props = ['label', 'property', 'filters', 'filterMultiple', 'sortable', 'index', 'formatter', 'className', 'labelClassName', 'showOverflowTooltip'];\n // 一些属性具有别名\n var aliases = {\n prop: 'property',\n realAlign: 'align',\n realHeaderAlign: 'headerAlign',\n realWidth: 'width'\n };\n var allAliases = props.reduce(function (prev, cur) {\n prev[cur] = cur;\n return prev;\n }, aliases);\n\n Object.keys(allAliases).forEach(function (key) {\n var columnKey = aliases[key];\n\n _this3.$watch(key, function (newVal) {\n _this3.columnConfig[columnKey] = newVal;\n });\n });\n },\n registerComplexWatchers: function registerComplexWatchers() {\n var _this4 = this;\n\n var props = ['fixed'];\n var aliases = {\n realWidth: 'width',\n realMinWidth: 'minWidth'\n };\n var allAliases = props.reduce(function (prev, cur) {\n prev[cur] = cur;\n return prev;\n }, aliases);\n\n Object.keys(allAliases).forEach(function (key) {\n var columnKey = aliases[key];\n\n _this4.$watch(key, function (newVal) {\n _this4.columnConfig[columnKey] = newVal;\n var updateColumns = columnKey === 'fixed';\n _this4.owner.store.scheduleLayout(updateColumns);\n });\n });\n }\n },\n\n components: {\n ElCheckbox: checkbox_default.a\n },\n\n beforeCreate: function beforeCreate() {\n this.row = {};\n this.column = {};\n this.$index = 0;\n this.columnId = '';\n },\n created: function created() {\n var parent = this.columnOrTableParent;\n this.isSubColumn = this.owner !== parent;\n this.columnId = (parent.tableId || parent.columnId) + '_column_' + columnIdSeed++;\n\n var type = this.type || 'default';\n var sortable = this.sortable === '' ? true : this.sortable;\n var defaults = table_column_extends({}, cellStarts[type], {\n id: this.columnId,\n type: type,\n property: this.prop || this.property,\n align: this.realAlign,\n headerAlign: this.realHeaderAlign,\n showOverflowTooltip: this.showOverflowTooltip || this.showTooltipWhenOverflow,\n // filter 相关属性\n filterable: this.filters || this.filterMethod,\n filteredValue: [],\n filterPlacement: '',\n isColumnGroup: false,\n filterOpened: false,\n // sort 相关属性\n sortable: sortable,\n // index 列\n index: this.index\n });\n\n var basicProps = ['columnKey', 'label', 'className', 'labelClassName', 'type', 'renderHeader', 'formatter', 'fixed', 'resizable'];\n var sortProps = ['sortMethod', 'sortBy', 'sortOrders'];\n var selectProps = ['selectable', 'reserveSelection'];\n var filterProps = ['filterMethod', 'filters', 'filterMultiple', 'filterOpened', 'filteredValue', 'filterPlacement'];\n\n var column = this.getPropsData(basicProps, sortProps, selectProps, filterProps);\n column = mergeOptions(defaults, column);\n\n // 注意 compose 中函数执行的顺序是从右到左\n var chains = compose(this.setColumnRenders, this.setColumnWidth, this.setColumnForcedProps);\n column = chains(column);\n\n this.columnConfig = column;\n\n // 注册 watcher\n this.registerNormalWatchers();\n this.registerComplexWatchers();\n },\n mounted: function mounted() {\n var owner = this.owner;\n var parent = this.columnOrTableParent;\n var children = this.isSubColumn ? parent.$el.children : parent.$refs.hiddenColumns.children;\n var columnIndex = this.getColumnElIndex(children, this.$el);\n\n owner.store.commit('insertColumn', this.columnConfig, columnIndex, this.isSubColumn ? parent.columnConfig : null);\n },\n destroyed: function destroyed() {\n if (!this.$parent) return;\n var parent = this.$parent;\n this.owner.store.commit('removeColumn', this.columnConfig, this.isSubColumn ? parent.columnConfig : null);\n },\n render: function render(h) {\n // slots 也要渲染,需要计算合并表头\n return h('div', this.$slots.default);\n }\n});\n// CONCATENATED MODULE: ./packages/table-column/index.js\n\n\n/* istanbul ignore next */\ntable_column.install = function (Vue) {\n Vue.component(table_column.name, table_column);\n};\n\n/* harmony default export */ var packages_table_column = (table_column);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/picker.vue?vue&type=template&id=79ae069f&\nvar pickervue_type_template_id_79ae069f_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return !_vm.ranged\n ? _c(\n \"el-input\",\n _vm._b(\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleClose,\n expression: \"handleClose\"\n }\n ],\n ref: \"reference\",\n staticClass: \"el-date-editor\",\n class: \"el-date-editor--\" + _vm.type,\n attrs: {\n readonly:\n !_vm.editable ||\n _vm.readonly ||\n _vm.type === \"dates\" ||\n _vm.type === \"week\",\n disabled: _vm.pickerDisabled,\n size: _vm.pickerSize,\n name: _vm.name,\n placeholder: _vm.placeholder,\n value: _vm.displayValue,\n validateEvent: false\n },\n on: {\n focus: _vm.handleFocus,\n input: function(value) {\n return (_vm.userInput = value)\n },\n change: _vm.handleChange\n },\n nativeOn: {\n keydown: function($event) {\n return _vm.handleKeydown($event)\n },\n mouseenter: function($event) {\n return _vm.handleMouseEnter($event)\n },\n mouseleave: function($event) {\n _vm.showClose = false\n }\n }\n },\n \"el-input\",\n _vm.firstInputId,\n false\n ),\n [\n _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: _vm.triggerClass,\n attrs: { slot: \"prefix\" },\n on: { click: _vm.handleFocus },\n slot: \"prefix\"\n }),\n _vm.haveTrigger\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: [_vm.showClose ? \"\" + _vm.clearIcon : \"\"],\n attrs: { slot: \"suffix\" },\n on: { click: _vm.handleClickIcon },\n slot: \"suffix\"\n })\n : _vm._e()\n ]\n )\n : _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleClose,\n expression: \"handleClose\"\n }\n ],\n ref: \"reference\",\n staticClass: \"el-date-editor el-range-editor el-input__inner\",\n class: [\n \"el-date-editor--\" + _vm.type,\n _vm.pickerSize ? \"el-range-editor--\" + _vm.pickerSize : \"\",\n _vm.pickerDisabled ? \"is-disabled\" : \"\",\n _vm.pickerVisible ? \"is-active\" : \"\"\n ],\n on: {\n click: _vm.handleRangeClick,\n mouseenter: _vm.handleMouseEnter,\n mouseleave: function($event) {\n _vm.showClose = false\n },\n keydown: _vm.handleKeydown\n }\n },\n [\n _c(\"i\", {\n class: [\"el-input__icon\", \"el-range__icon\", _vm.triggerClass]\n }),\n _c(\n \"input\",\n _vm._b(\n {\n staticClass: \"el-range-input\",\n attrs: {\n autocomplete: \"off\",\n placeholder: _vm.startPlaceholder,\n disabled: _vm.pickerDisabled,\n readonly: !_vm.editable || _vm.readonly,\n name: _vm.name && _vm.name[0]\n },\n domProps: { value: _vm.displayValue && _vm.displayValue[0] },\n on: {\n input: _vm.handleStartInput,\n change: _vm.handleStartChange,\n focus: _vm.handleFocus\n }\n },\n \"input\",\n _vm.firstInputId,\n false\n )\n ),\n _vm._t(\"range-separator\", [\n _c(\"span\", { staticClass: \"el-range-separator\" }, [\n _vm._v(_vm._s(_vm.rangeSeparator))\n ])\n ]),\n _c(\n \"input\",\n _vm._b(\n {\n staticClass: \"el-range-input\",\n attrs: {\n autocomplete: \"off\",\n placeholder: _vm.endPlaceholder,\n disabled: _vm.pickerDisabled,\n readonly: !_vm.editable || _vm.readonly,\n name: _vm.name && _vm.name[1]\n },\n domProps: { value: _vm.displayValue && _vm.displayValue[1] },\n on: {\n input: _vm.handleEndInput,\n change: _vm.handleEndChange,\n focus: _vm.handleFocus\n }\n },\n \"input\",\n _vm.secondInputId,\n false\n )\n ),\n _vm.haveTrigger\n ? _c(\"i\", {\n staticClass: \"el-input__icon el-range__close-icon\",\n class: [_vm.showClose ? \"\" + _vm.clearIcon : \"\"],\n on: { click: _vm.handleClickIcon }\n })\n : _vm._e()\n ],\n 2\n )\n}\nvar pickervue_type_template_id_79ae069f_staticRenderFns = []\npickervue_type_template_id_79ae069f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue?vue&type=template&id=79ae069f&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/date-util\"\nvar date_util_ = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/picker.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar NewPopper = {\n props: {\n appendToBody: vue_popper_default.a.props.appendToBody,\n offset: vue_popper_default.a.props.offset,\n boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n arrowOffset: vue_popper_default.a.props.arrowOffset\n },\n methods: vue_popper_default.a.methods,\n data: function data() {\n return merge_default()({ visibleArrow: true }, vue_popper_default.a.data);\n },\n\n beforeDestroy: vue_popper_default.a.beforeDestroy\n};\n\nvar DEFAULT_FORMATS = {\n date: 'yyyy-MM-dd',\n month: 'yyyy-MM',\n datetime: 'yyyy-MM-dd HH:mm:ss',\n time: 'HH:mm:ss',\n week: 'yyyywWW',\n timerange: 'HH:mm:ss',\n daterange: 'yyyy-MM-dd',\n monthrange: 'yyyy-MM',\n datetimerange: 'yyyy-MM-dd HH:mm:ss',\n year: 'yyyy'\n};\nvar HAVE_TRIGGER_TYPES = ['date', 'datetime', 'time', 'time-select', 'week', 'month', 'year', 'daterange', 'monthrange', 'timerange', 'datetimerange', 'dates'];\nvar pickervue_type_script_lang_js_DATE_FORMATTER = function DATE_FORMATTER(value, format) {\n if (format === 'timestamp') return value.getTime();\n return Object(date_util_[\"formatDate\"])(value, format);\n};\nvar pickervue_type_script_lang_js_DATE_PARSER = function DATE_PARSER(text, format) {\n if (format === 'timestamp') return new Date(Number(text));\n return Object(date_util_[\"parseDate\"])(text, format);\n};\nvar RANGE_FORMATTER = function RANGE_FORMATTER(value, format) {\n if (Array.isArray(value) && value.length === 2) {\n var start = value[0];\n var end = value[1];\n\n if (start && end) {\n return [pickervue_type_script_lang_js_DATE_FORMATTER(start, format), pickervue_type_script_lang_js_DATE_FORMATTER(end, format)];\n }\n }\n return '';\n};\nvar RANGE_PARSER = function RANGE_PARSER(array, format, separator) {\n if (!Array.isArray(array)) {\n array = array.split(separator);\n }\n if (array.length === 2) {\n var range1 = array[0];\n var range2 = array[1];\n\n return [pickervue_type_script_lang_js_DATE_PARSER(range1, format), pickervue_type_script_lang_js_DATE_PARSER(range2, format)];\n }\n return [];\n};\nvar TYPE_VALUE_RESOLVER_MAP = {\n default: {\n formatter: function formatter(value) {\n if (!value) return '';\n return '' + value;\n },\n parser: function parser(text) {\n if (text === undefined || text === '') return null;\n return text;\n }\n },\n week: {\n formatter: function formatter(value, format) {\n var week = Object(date_util_[\"getWeekNumber\"])(value);\n var month = value.getMonth();\n var trueDate = new Date(value);\n if (week === 1 && month === 11) {\n trueDate.setHours(0, 0, 0, 0);\n trueDate.setDate(trueDate.getDate() + 3 - (trueDate.getDay() + 6) % 7);\n }\n var date = Object(date_util_[\"formatDate\"])(trueDate, format);\n\n date = /WW/.test(date) ? date.replace(/WW/, week < 10 ? '0' + week : week) : date.replace(/W/, week);\n return date;\n },\n parser: function parser(text, format) {\n // parse as if a normal date\n return TYPE_VALUE_RESOLVER_MAP.date.parser(text, format);\n }\n },\n date: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n datetime: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n daterange: {\n formatter: RANGE_FORMATTER,\n parser: RANGE_PARSER\n },\n monthrange: {\n formatter: RANGE_FORMATTER,\n parser: RANGE_PARSER\n },\n datetimerange: {\n formatter: RANGE_FORMATTER,\n parser: RANGE_PARSER\n },\n timerange: {\n formatter: RANGE_FORMATTER,\n parser: RANGE_PARSER\n },\n time: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n month: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n year: {\n formatter: pickervue_type_script_lang_js_DATE_FORMATTER,\n parser: pickervue_type_script_lang_js_DATE_PARSER\n },\n number: {\n formatter: function formatter(value) {\n if (!value) return '';\n return '' + value;\n },\n parser: function parser(text) {\n var result = Number(text);\n\n if (!isNaN(text)) {\n return result;\n } else {\n return null;\n }\n }\n },\n dates: {\n formatter: function formatter(value, format) {\n return value.map(function (date) {\n return pickervue_type_script_lang_js_DATE_FORMATTER(date, format);\n });\n },\n parser: function parser(value, format) {\n return (typeof value === 'string' ? value.split(', ') : value).map(function (date) {\n return date instanceof Date ? date : pickervue_type_script_lang_js_DATE_PARSER(date, format);\n });\n }\n }\n};\nvar PLACEMENT_MAP = {\n left: 'bottom-start',\n center: 'bottom',\n right: 'bottom-end'\n};\n\nvar parseAsFormatAndType = function parseAsFormatAndType(value, customFormat, type) {\n var rangeSeparator = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '-';\n\n if (!value) return null;\n var parser = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).parser;\n var format = customFormat || DEFAULT_FORMATS[type];\n return parser(value, format, rangeSeparator);\n};\n\nvar formatAsFormatAndType = function formatAsFormatAndType(value, customFormat, type) {\n if (!value) return null;\n var formatter = (TYPE_VALUE_RESOLVER_MAP[type] || TYPE_VALUE_RESOLVER_MAP['default']).formatter;\n var format = customFormat || DEFAULT_FORMATS[type];\n return formatter(value, format);\n};\n\n/*\n * Considers:\n * 1. Date object\n * 2. date string\n * 3. array of 1 or 2\n */\nvar valueEquals = function valueEquals(a, b) {\n // considers Date object and string\n var dateEquals = function dateEquals(a, b) {\n var aIsDate = a instanceof Date;\n var bIsDate = b instanceof Date;\n if (aIsDate && bIsDate) {\n return a.getTime() === b.getTime();\n }\n if (!aIsDate && !bIsDate) {\n return a === b;\n }\n return false;\n };\n\n var aIsArray = a instanceof Array;\n var bIsArray = b instanceof Array;\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) {\n return false;\n }\n return a.every(function (item, index) {\n return dateEquals(item, b[index]);\n });\n }\n if (!aIsArray && !bIsArray) {\n return dateEquals(a, b);\n }\n return false;\n};\n\nvar isString = function isString(val) {\n return typeof val === 'string' || val instanceof String;\n};\n\nvar pickervue_type_script_lang_js_validator = function validator(val) {\n // either: String, Array of String, null / undefined\n return val === null || val === undefined || isString(val) || Array.isArray(val) && val.length === 2 && val.every(isString);\n};\n\n/* harmony default export */ var pickervue_type_script_lang_js_ = ({\n mixins: [emitter_default.a, NewPopper],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n props: {\n size: String,\n format: String,\n valueFormat: String,\n readonly: Boolean,\n placeholder: String,\n startPlaceholder: String,\n endPlaceholder: String,\n prefixIcon: String,\n clearIcon: {\n type: String,\n default: 'el-icon-circle-close'\n },\n name: {\n default: '',\n validator: pickervue_type_script_lang_js_validator\n },\n disabled: Boolean,\n clearable: {\n type: Boolean,\n default: true\n },\n id: {\n default: '',\n validator: pickervue_type_script_lang_js_validator\n },\n popperClass: String,\n editable: {\n type: Boolean,\n default: true\n },\n align: {\n type: String,\n default: 'left'\n },\n value: {},\n defaultValue: {},\n defaultTime: {},\n rangeSeparator: {\n default: '-'\n },\n pickerOptions: {},\n unlinkPanels: Boolean,\n validateEvent: {\n type: Boolean,\n default: true\n }\n },\n\n components: { ElInput: input_default.a },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n data: function data() {\n return {\n pickerVisible: false,\n showClose: false,\n userInput: null,\n valueOnOpen: null, // value when picker opens, used to determine whether to emit change\n unwatchPickerOptions: null\n };\n },\n\n\n watch: {\n pickerVisible: function pickerVisible(val) {\n if (this.readonly || this.pickerDisabled) return;\n if (val) {\n this.showPicker();\n this.valueOnOpen = Array.isArray(this.value) ? [].concat(this.value) : this.value;\n } else {\n this.hidePicker();\n this.emitChange(this.value);\n this.userInput = null;\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.blur');\n }\n this.$emit('blur', this);\n this.blur();\n }\n },\n\n parsedValue: {\n immediate: true,\n handler: function handler(val) {\n if (this.picker) {\n this.picker.value = val;\n }\n }\n },\n defaultValue: function defaultValue(val) {\n // NOTE: should eventually move to jsx style picker + panel ?\n if (this.picker) {\n this.picker.defaultValue = val;\n }\n },\n value: function value(val, oldVal) {\n if (!valueEquals(val, oldVal) && !this.pickerVisible && this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n }\n },\n\n computed: {\n ranged: function ranged() {\n return this.type.indexOf('range') > -1;\n },\n reference: function reference() {\n var reference = this.$refs.reference;\n return reference.$el || reference;\n },\n refInput: function refInput() {\n if (this.reference) {\n return [].slice.call(this.reference.querySelectorAll('input'));\n }\n return [];\n },\n valueIsEmpty: function valueIsEmpty() {\n var val = this.value;\n if (Array.isArray(val)) {\n for (var i = 0, len = val.length; i < len; i++) {\n if (val[i]) {\n return false;\n }\n }\n } else {\n if (val) {\n return false;\n }\n }\n return true;\n },\n triggerClass: function triggerClass() {\n return this.prefixIcon || (this.type.indexOf('time') !== -1 ? 'el-icon-time' : 'el-icon-date');\n },\n selectionMode: function selectionMode() {\n if (this.type === 'week') {\n return 'week';\n } else if (this.type === 'month') {\n return 'month';\n } else if (this.type === 'year') {\n return 'year';\n } else if (this.type === 'dates') {\n return 'dates';\n }\n\n return 'day';\n },\n haveTrigger: function haveTrigger() {\n if (typeof this.showTrigger !== 'undefined') {\n return this.showTrigger;\n }\n return HAVE_TRIGGER_TYPES.indexOf(this.type) !== -1;\n },\n displayValue: function displayValue() {\n var formattedValue = formatAsFormatAndType(this.parsedValue, this.format, this.type, this.rangeSeparator);\n if (Array.isArray(this.userInput)) {\n return [this.userInput[0] || formattedValue && formattedValue[0] || '', this.userInput[1] || formattedValue && formattedValue[1] || ''];\n } else if (this.userInput !== null) {\n return this.userInput;\n } else if (formattedValue) {\n return this.type === 'dates' ? formattedValue.join(', ') : formattedValue;\n } else {\n return '';\n }\n },\n parsedValue: function parsedValue() {\n if (!this.value) return this.value; // component value is not set\n if (this.type === 'time-select') return this.value; // time-select does not require parsing, this might change in next major version\n\n var valueIsDateObject = Object(date_util_[\"isDateObject\"])(this.value) || Array.isArray(this.value) && this.value.every(date_util_[\"isDateObject\"]);\n if (valueIsDateObject) {\n return this.value;\n }\n\n if (this.valueFormat) {\n return parseAsFormatAndType(this.value, this.valueFormat, this.type, this.rangeSeparator) || this.value;\n }\n\n // NOTE: deal with common but incorrect usage, should remove in next major version\n // user might provide string / timestamp without value-format, coerce them into date (or array of date)\n return Array.isArray(this.value) ? this.value.map(function (val) {\n return new Date(val);\n }) : new Date(this.value);\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n pickerSize: function pickerSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n pickerDisabled: function pickerDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n firstInputId: function firstInputId() {\n var obj = {};\n var id = void 0;\n if (this.ranged) {\n id = this.id && this.id[0];\n } else {\n id = this.id;\n }\n if (id) obj.id = id;\n return obj;\n },\n secondInputId: function secondInputId() {\n var obj = {};\n var id = void 0;\n if (this.ranged) {\n id = this.id && this.id[1];\n }\n if (id) obj.id = id;\n return obj;\n }\n },\n\n created: function created() {\n // vue-popper\n this.popperOptions = {\n boundariesPadding: 0,\n gpuAcceleration: false\n };\n this.placement = PLACEMENT_MAP[this.align] || PLACEMENT_MAP.left;\n\n this.$on('fieldReset', this.handleFieldReset);\n },\n\n\n methods: {\n focus: function focus() {\n if (!this.ranged) {\n this.$refs.reference.focus();\n } else {\n this.handleFocus();\n }\n },\n blur: function blur() {\n this.refInput.forEach(function (input) {\n return input.blur();\n });\n },\n\n\n // {parse, formatTo} Value deals maps component value with internal Date\n parseValue: function parseValue(value) {\n var isParsed = Object(date_util_[\"isDateObject\"])(value) || Array.isArray(value) && value.every(date_util_[\"isDateObject\"]);\n if (this.valueFormat && !isParsed) {\n return parseAsFormatAndType(value, this.valueFormat, this.type, this.rangeSeparator) || value;\n } else {\n return value;\n }\n },\n formatToValue: function formatToValue(date) {\n var isFormattable = Object(date_util_[\"isDateObject\"])(date) || Array.isArray(date) && date.every(date_util_[\"isDateObject\"]);\n if (this.valueFormat && isFormattable) {\n return formatAsFormatAndType(date, this.valueFormat, this.type, this.rangeSeparator);\n } else {\n return date;\n }\n },\n\n\n // {parse, formatTo} String deals with user input\n parseString: function parseString(value) {\n var type = Array.isArray(value) ? this.type : this.type.replace('range', '');\n return parseAsFormatAndType(value, this.format, type);\n },\n formatToString: function formatToString(value) {\n var type = Array.isArray(value) ? this.type : this.type.replace('range', '');\n return formatAsFormatAndType(value, this.format, type);\n },\n handleMouseEnter: function handleMouseEnter() {\n if (this.readonly || this.pickerDisabled) return;\n if (!this.valueIsEmpty && this.clearable) {\n this.showClose = true;\n }\n },\n handleChange: function handleChange() {\n if (this.userInput) {\n var value = this.parseString(this.displayValue);\n if (value) {\n this.picker.value = value;\n if (this.isValidValue(value)) {\n this.emitInput(value);\n this.userInput = null;\n }\n }\n }\n if (this.userInput === '') {\n this.emitInput(null);\n this.emitChange(null);\n this.userInput = null;\n }\n },\n handleStartInput: function handleStartInput(event) {\n if (this.userInput) {\n this.userInput = [event.target.value, this.userInput[1]];\n } else {\n this.userInput = [event.target.value, null];\n }\n },\n handleEndInput: function handleEndInput(event) {\n if (this.userInput) {\n this.userInput = [this.userInput[0], event.target.value];\n } else {\n this.userInput = [null, event.target.value];\n }\n },\n handleStartChange: function handleStartChange(event) {\n var value = this.parseString(this.userInput && this.userInput[0]);\n if (value) {\n this.userInput = [this.formatToString(value), this.displayValue[1]];\n var newValue = [value, this.picker.value && this.picker.value[1]];\n this.picker.value = newValue;\n if (this.isValidValue(newValue)) {\n this.emitInput(newValue);\n this.userInput = null;\n }\n }\n },\n handleEndChange: function handleEndChange(event) {\n var value = this.parseString(this.userInput && this.userInput[1]);\n if (value) {\n this.userInput = [this.displayValue[0], this.formatToString(value)];\n var newValue = [this.picker.value && this.picker.value[0], value];\n this.picker.value = newValue;\n if (this.isValidValue(newValue)) {\n this.emitInput(newValue);\n this.userInput = null;\n }\n }\n },\n handleClickIcon: function handleClickIcon(event) {\n if (this.readonly || this.pickerDisabled) return;\n if (this.showClose) {\n this.valueOnOpen = this.value;\n event.stopPropagation();\n this.emitInput(null);\n this.emitChange(null);\n this.showClose = false;\n if (this.picker && typeof this.picker.handleClear === 'function') {\n this.picker.handleClear();\n }\n } else {\n this.pickerVisible = !this.pickerVisible;\n }\n },\n handleClose: function handleClose() {\n if (!this.pickerVisible) return;\n this.pickerVisible = false;\n\n if (this.type === 'dates') {\n // restore to former value\n var oldValue = parseAsFormatAndType(this.valueOnOpen, this.valueFormat, this.type, this.rangeSeparator) || this.valueOnOpen;\n this.emitInput(oldValue);\n }\n },\n handleFieldReset: function handleFieldReset(initialValue) {\n this.userInput = initialValue === '' ? null : initialValue;\n },\n handleFocus: function handleFocus() {\n var type = this.type;\n\n if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {\n this.pickerVisible = true;\n }\n this.$emit('focus', this);\n },\n handleKeydown: function handleKeydown(event) {\n var _this = this;\n\n var keyCode = event.keyCode;\n\n // ESC\n if (keyCode === 27) {\n this.pickerVisible = false;\n event.stopPropagation();\n return;\n }\n\n // Tab\n if (keyCode === 9) {\n if (!this.ranged) {\n this.handleChange();\n this.pickerVisible = this.picker.visible = false;\n this.blur();\n event.stopPropagation();\n } else {\n // user may change focus between two input\n setTimeout(function () {\n if (_this.refInput.indexOf(document.activeElement) === -1) {\n _this.pickerVisible = false;\n _this.blur();\n event.stopPropagation();\n }\n }, 0);\n }\n return;\n }\n\n // Enter\n if (keyCode === 13) {\n if (this.userInput === '' || this.isValidValue(this.parseString(this.displayValue))) {\n this.handleChange();\n this.pickerVisible = this.picker.visible = false;\n this.blur();\n }\n event.stopPropagation();\n return;\n }\n\n // if user is typing, do not let picker handle key input\n if (this.userInput) {\n event.stopPropagation();\n return;\n }\n\n // delegate other keys to panel\n if (this.picker && this.picker.handleKeydown) {\n this.picker.handleKeydown(event);\n }\n },\n handleRangeClick: function handleRangeClick() {\n var type = this.type;\n\n if (HAVE_TRIGGER_TYPES.indexOf(type) !== -1 && !this.pickerVisible) {\n this.pickerVisible = true;\n }\n this.$emit('focus', this);\n },\n hidePicker: function hidePicker() {\n if (this.picker) {\n this.picker.resetView && this.picker.resetView();\n this.pickerVisible = this.picker.visible = false;\n this.destroyPopper();\n }\n },\n showPicker: function showPicker() {\n var _this2 = this;\n\n if (this.$isServer) return;\n if (!this.picker) {\n this.mountPicker();\n }\n this.pickerVisible = this.picker.visible = true;\n\n this.updatePopper();\n\n this.picker.value = this.parsedValue;\n this.picker.resetView && this.picker.resetView();\n\n this.$nextTick(function () {\n _this2.picker.adjustSpinners && _this2.picker.adjustSpinners();\n });\n },\n mountPicker: function mountPicker() {\n var _this3 = this;\n\n this.picker = new external_vue_default.a(this.panel).$mount();\n this.picker.defaultValue = this.defaultValue;\n this.picker.defaultTime = this.defaultTime;\n this.picker.popperClass = this.popperClass;\n this.popperElm = this.picker.$el;\n this.picker.width = this.reference.getBoundingClientRect().width;\n this.picker.showTime = this.type === 'datetime' || this.type === 'datetimerange';\n this.picker.selectionMode = this.selectionMode;\n this.picker.unlinkPanels = this.unlinkPanels;\n this.picker.arrowControl = this.arrowControl || this.timeArrowControl || false;\n this.$watch('format', function (format) {\n _this3.picker.format = format;\n });\n\n var updateOptions = function updateOptions() {\n var options = _this3.pickerOptions;\n\n if (options && options.selectableRange) {\n var ranges = options.selectableRange;\n var parser = TYPE_VALUE_RESOLVER_MAP.datetimerange.parser;\n var format = DEFAULT_FORMATS.timerange;\n\n ranges = Array.isArray(ranges) ? ranges : [ranges];\n _this3.picker.selectableRange = ranges.map(function (range) {\n return parser(range, format, _this3.rangeSeparator);\n });\n }\n\n for (var option in options) {\n if (options.hasOwnProperty(option) &&\n // 忽略 time-picker 的该配置项\n option !== 'selectableRange') {\n _this3.picker[option] = options[option];\n }\n }\n\n // main format must prevail over undocumented pickerOptions.format\n if (_this3.format) {\n _this3.picker.format = _this3.format;\n }\n };\n updateOptions();\n this.unwatchPickerOptions = this.$watch('pickerOptions', function () {\n return updateOptions();\n }, { deep: true });\n this.$el.appendChild(this.picker.$el);\n this.picker.resetView && this.picker.resetView();\n\n this.picker.$on('dodestroy', this.doDestroy);\n this.picker.$on('pick', function () {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var visible = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n _this3.userInput = null;\n _this3.pickerVisible = _this3.picker.visible = visible;\n _this3.emitInput(date);\n _this3.picker.resetView && _this3.picker.resetView();\n });\n\n this.picker.$on('select-range', function (start, end, pos) {\n if (_this3.refInput.length === 0) return;\n if (!pos || pos === 'min') {\n _this3.refInput[0].setSelectionRange(start, end);\n _this3.refInput[0].focus();\n } else if (pos === 'max') {\n _this3.refInput[1].setSelectionRange(start, end);\n _this3.refInput[1].focus();\n }\n });\n },\n unmountPicker: function unmountPicker() {\n if (this.picker) {\n this.picker.$destroy();\n this.picker.$off();\n if (typeof this.unwatchPickerOptions === 'function') {\n this.unwatchPickerOptions();\n }\n this.picker.$el.parentNode.removeChild(this.picker.$el);\n }\n },\n emitChange: function emitChange(val) {\n // determine user real change only\n if (!valueEquals(val, this.valueOnOpen)) {\n this.$emit('change', val);\n this.valueOnOpen = val;\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n }\n },\n emitInput: function emitInput(val) {\n var formatted = this.formatToValue(val);\n if (!valueEquals(this.value, formatted)) {\n this.$emit('input', formatted);\n }\n },\n isValidValue: function isValidValue(value) {\n if (!this.picker) {\n this.mountPicker();\n }\n if (this.picker.isValidValue) {\n return value && this.picker.isValidValue(value);\n } else {\n return true;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_pickervue_type_script_lang_js_ = (pickervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/picker.vue\n\n\n\n\n\n/* normalize component */\n\nvar picker_component = normalizeComponent(\n src_pickervue_type_script_lang_js_,\n pickervue_type_template_id_79ae069f_render,\n pickervue_type_template_id_79ae069f_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var picker_api; }\npicker_component.options.__file = \"packages/date-picker/src/picker.vue\"\n/* harmony default export */ var picker = (picker_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date.vue?vue&type=template&id=2440d4ea&\nvar datevue_type_template_id_2440d4ea_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: { \"after-enter\": _vm.handleEnter, \"after-leave\": _vm.handleLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-picker-panel el-date-picker el-popper\",\n class: [\n {\n \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts,\n \"has-time\": _vm.showTime\n },\n _vm.popperClass\n ]\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-picker-panel__body-wrapper\" },\n [\n _vm._t(\"sidebar\"),\n _vm.shortcuts\n ? _c(\n \"div\",\n { staticClass: \"el-picker-panel__sidebar\" },\n _vm._l(_vm.shortcuts, function(shortcut, key) {\n return _c(\n \"button\",\n {\n key: key,\n staticClass: \"el-picker-panel__shortcut\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleShortcutClick(shortcut)\n }\n }\n },\n [_vm._v(_vm._s(shortcut.text))]\n )\n }),\n 0\n )\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n _vm.showTime\n ? _c(\"div\", { staticClass: \"el-date-picker__time-header\" }, [\n _c(\n \"span\",\n { staticClass: \"el-date-picker__editor-wrap\" },\n [\n _c(\"el-input\", {\n attrs: {\n placeholder: _vm.t(\"el.datepicker.selectDate\"),\n value: _vm.visibleDate,\n size: \"small\"\n },\n on: {\n input: function(val) {\n return (_vm.userInputDate = val)\n },\n change: _vm.handleVisibleDateChange\n }\n })\n ],\n 1\n ),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleTimePickClose,\n expression: \"handleTimePickClose\"\n }\n ],\n staticClass: \"el-date-picker__editor-wrap\"\n },\n [\n _c(\"el-input\", {\n ref: \"input\",\n attrs: {\n placeholder: _vm.t(\"el.datepicker.selectTime\"),\n value: _vm.visibleTime,\n size: \"small\"\n },\n on: {\n focus: function($event) {\n _vm.timePickerVisible = true\n },\n input: function(val) {\n return (_vm.userInputTime = val)\n },\n change: _vm.handleVisibleTimeChange\n }\n }),\n _c(\"time-picker\", {\n ref: \"timepicker\",\n attrs: {\n \"time-arrow-control\": _vm.arrowControl,\n visible: _vm.timePickerVisible\n },\n on: {\n pick: _vm.handleTimePick,\n mounted: _vm.proxyTimePickerDataProperties\n }\n })\n ],\n 1\n )\n ])\n : _vm._e(),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView !== \"time\",\n expression: \"currentView !== 'time'\"\n }\n ],\n staticClass: \"el-date-picker__header\",\n class: {\n \"el-date-picker__header--bordered\":\n _vm.currentView === \"year\" ||\n _vm.currentView === \"month\"\n }\n },\n [\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-d-arrow-left\",\n attrs: {\n type: \"button\",\n \"aria-label\": _vm.t(\"el.datepicker.prevYear\")\n },\n on: { click: _vm.prevYear }\n }),\n _c(\"button\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"date\",\n expression: \"currentView === 'date'\"\n }\n ],\n staticClass:\n \"el-picker-panel__icon-btn el-date-picker__prev-btn el-icon-arrow-left\",\n attrs: {\n type: \"button\",\n \"aria-label\": _vm.t(\"el.datepicker.prevMonth\")\n },\n on: { click: _vm.prevMonth }\n }),\n _c(\n \"span\",\n {\n staticClass: \"el-date-picker__header-label\",\n attrs: { role: \"button\" },\n on: { click: _vm.showYearPicker }\n },\n [_vm._v(_vm._s(_vm.yearLabel))]\n ),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"date\",\n expression: \"currentView === 'date'\"\n }\n ],\n staticClass: \"el-date-picker__header-label\",\n class: { active: _vm.currentView === \"month\" },\n attrs: { role: \"button\" },\n on: { click: _vm.showMonthPicker }\n },\n [\n _vm._v(\n _vm._s(_vm.t(\"el.datepicker.month\" + (_vm.month + 1)))\n )\n ]\n ),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-d-arrow-right\",\n attrs: {\n type: \"button\",\n \"aria-label\": _vm.t(\"el.datepicker.nextYear\")\n },\n on: { click: _vm.nextYear }\n }),\n _c(\"button\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"date\",\n expression: \"currentView === 'date'\"\n }\n ],\n staticClass:\n \"el-picker-panel__icon-btn el-date-picker__next-btn el-icon-arrow-right\",\n attrs: {\n type: \"button\",\n \"aria-label\": _vm.t(\"el.datepicker.nextMonth\")\n },\n on: { click: _vm.nextMonth }\n })\n ]\n ),\n _c(\n \"div\",\n { staticClass: \"el-picker-panel__content\" },\n [\n _c(\"date-table\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"date\",\n expression: \"currentView === 'date'\"\n }\n ],\n attrs: {\n \"selection-mode\": _vm.selectionMode,\n \"first-day-of-week\": _vm.firstDayOfWeek,\n value: _vm.value,\n \"default-value\": _vm.defaultValue\n ? new Date(_vm.defaultValue)\n : null,\n date: _vm.date,\n \"cell-class-name\": _vm.cellClassName,\n \"disabled-date\": _vm.disabledDate\n },\n on: { pick: _vm.handleDatePick }\n }),\n _c(\"year-table\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"year\",\n expression: \"currentView === 'year'\"\n }\n ],\n attrs: {\n value: _vm.value,\n \"default-value\": _vm.defaultValue\n ? new Date(_vm.defaultValue)\n : null,\n date: _vm.date,\n \"disabled-date\": _vm.disabledDate\n },\n on: { pick: _vm.handleYearPick }\n }),\n _c(\"month-table\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.currentView === \"month\",\n expression: \"currentView === 'month'\"\n }\n ],\n attrs: {\n value: _vm.value,\n \"default-value\": _vm.defaultValue\n ? new Date(_vm.defaultValue)\n : null,\n date: _vm.date,\n \"disabled-date\": _vm.disabledDate\n },\n on: { pick: _vm.handleMonthPick }\n })\n ],\n 1\n )\n ])\n ],\n 2\n ),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.footerVisible && _vm.currentView === \"date\",\n expression: \"footerVisible && currentView === 'date'\"\n }\n ],\n staticClass: \"el-picker-panel__footer\"\n },\n [\n _c(\n \"el-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.selectionMode !== \"dates\",\n expression: \"selectionMode !== 'dates'\"\n }\n ],\n staticClass: \"el-picker-panel__link-btn\",\n attrs: { size: \"mini\", type: \"text\" },\n on: { click: _vm.changeToNow }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.now\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n staticClass: \"el-picker-panel__link-btn\",\n attrs: { plain: \"\", size: \"mini\" },\n on: { click: _vm.confirm }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.confirm\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]\n )\n ]\n )\n}\nvar datevue_type_template_id_2440d4ea_staticRenderFns = []\ndatevue_type_template_id_2440d4ea_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue?vue&type=template&id=2440d4ea&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time.vue?vue&type=template&id=3d939089&\nvar timevue_type_template_id_3d939089_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-time-panel el-popper\",\n class: _vm.popperClass\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-time-panel__content\",\n class: { \"has-seconds\": _vm.showSeconds }\n },\n [\n _c(\"time-spinner\", {\n ref: \"spinner\",\n attrs: {\n \"arrow-control\": _vm.useArrow,\n \"show-seconds\": _vm.showSeconds,\n \"am-pm-mode\": _vm.amPmMode,\n date: _vm.date\n },\n on: {\n change: _vm.handleChange,\n \"select-range\": _vm.setSelectionRange\n }\n })\n ],\n 1\n ),\n _c(\"div\", { staticClass: \"el-time-panel__footer\" }, [\n _c(\n \"button\",\n {\n staticClass: \"el-time-panel__btn cancel\",\n attrs: { type: \"button\" },\n on: { click: _vm.handleCancel }\n },\n [_vm._v(_vm._s(_vm.t(\"el.datepicker.cancel\")))]\n ),\n _c(\n \"button\",\n {\n staticClass: \"el-time-panel__btn\",\n class: { confirm: !_vm.disabled },\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleConfirm()\n }\n }\n },\n [_vm._v(_vm._s(_vm.t(\"el.datepicker.confirm\")))]\n )\n ])\n ]\n )\n ]\n )\n}\nvar timevue_type_template_id_3d939089_staticRenderFns = []\ntimevue_type_template_id_3d939089_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue?vue&type=template&id=3d939089&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/time-spinner.vue?vue&type=template&id=1facadeb&\nvar time_spinnervue_type_template_id_1facadeb_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-time-spinner\",\n class: { \"has-seconds\": _vm.showSeconds }\n },\n [\n !_vm.arrowControl\n ? [\n _c(\n \"el-scrollbar\",\n {\n ref: \"hours\",\n staticClass: \"el-time-spinner__wrapper\",\n attrs: {\n \"wrap-style\": \"max-height: inherit;\",\n \"view-class\": \"el-time-spinner__list\",\n noresize: \"\",\n tag: \"ul\"\n },\n nativeOn: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"hours\")\n },\n mousemove: function($event) {\n _vm.adjustCurrentSpinner(\"hours\")\n }\n }\n },\n _vm._l(_vm.hoursList, function(disabled, hour) {\n return _c(\n \"li\",\n {\n key: hour,\n staticClass: \"el-time-spinner__item\",\n class: { active: hour === _vm.hours, disabled: disabled },\n on: {\n click: function($event) {\n _vm.handleClick(\"hours\", {\n value: hour,\n disabled: disabled\n })\n }\n }\n },\n [\n _vm._v(\n _vm._s(\n (\"0\" + (_vm.amPmMode ? hour % 12 || 12 : hour)).slice(\n -2\n )\n ) + _vm._s(_vm.amPm(hour))\n )\n ]\n )\n }),\n 0\n ),\n _c(\n \"el-scrollbar\",\n {\n ref: \"minutes\",\n staticClass: \"el-time-spinner__wrapper\",\n attrs: {\n \"wrap-style\": \"max-height: inherit;\",\n \"view-class\": \"el-time-spinner__list\",\n noresize: \"\",\n tag: \"ul\"\n },\n nativeOn: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"minutes\")\n },\n mousemove: function($event) {\n _vm.adjustCurrentSpinner(\"minutes\")\n }\n }\n },\n _vm._l(_vm.minutesList, function(enabled, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: { active: key === _vm.minutes, disabled: !enabled },\n on: {\n click: function($event) {\n _vm.handleClick(\"minutes\", {\n value: key,\n disabled: false\n })\n }\n }\n },\n [_vm._v(_vm._s((\"0\" + key).slice(-2)))]\n )\n }),\n 0\n ),\n _c(\n \"el-scrollbar\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showSeconds,\n expression: \"showSeconds\"\n }\n ],\n ref: \"seconds\",\n staticClass: \"el-time-spinner__wrapper\",\n attrs: {\n \"wrap-style\": \"max-height: inherit;\",\n \"view-class\": \"el-time-spinner__list\",\n noresize: \"\",\n tag: \"ul\"\n },\n nativeOn: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"seconds\")\n },\n mousemove: function($event) {\n _vm.adjustCurrentSpinner(\"seconds\")\n }\n }\n },\n _vm._l(60, function(second, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: { active: key === _vm.seconds },\n on: {\n click: function($event) {\n _vm.handleClick(\"seconds\", {\n value: key,\n disabled: false\n })\n }\n }\n },\n [_vm._v(_vm._s((\"0\" + key).slice(-2)))]\n )\n }),\n 0\n )\n ]\n : _vm._e(),\n _vm.arrowControl\n ? [\n _c(\n \"div\",\n {\n staticClass: \"el-time-spinner__wrapper is-arrow\",\n on: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"hours\")\n }\n }\n },\n [\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n }),\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n }),\n _c(\n \"ul\",\n { ref: \"hours\", staticClass: \"el-time-spinner__list\" },\n _vm._l(_vm.arrowHourList, function(hour, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: {\n active: hour === _vm.hours,\n disabled: _vm.hoursList[hour]\n }\n },\n [\n _vm._v(\n _vm._s(\n hour === undefined\n ? \"\"\n : (\n \"0\" + (_vm.amPmMode ? hour % 12 || 12 : hour)\n ).slice(-2) + _vm.amPm(hour)\n )\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"el-time-spinner__wrapper is-arrow\",\n on: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"minutes\")\n }\n }\n },\n [\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n }),\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n }),\n _c(\n \"ul\",\n { ref: \"minutes\", staticClass: \"el-time-spinner__list\" },\n _vm._l(_vm.arrowMinuteList, function(minute, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: { active: minute === _vm.minutes }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n minute === undefined\n ? \"\"\n : (\"0\" + minute).slice(-2)\n ) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n ),\n _vm.showSeconds\n ? _c(\n \"div\",\n {\n staticClass: \"el-time-spinner__wrapper is-arrow\",\n on: {\n mouseenter: function($event) {\n _vm.emitSelectRange(\"seconds\")\n }\n }\n },\n [\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-up\"\n }),\n _c(\"i\", {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-time-spinner__arrow el-icon-arrow-down\"\n }),\n _c(\n \"ul\",\n { ref: \"seconds\", staticClass: \"el-time-spinner__list\" },\n _vm._l(_vm.arrowSecondList, function(second, key) {\n return _c(\n \"li\",\n {\n key: key,\n staticClass: \"el-time-spinner__item\",\n class: { active: second === _vm.seconds }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n second === undefined\n ? \"\"\n : (\"0\" + second).slice(-2)\n ) +\n \"\\n \"\n )\n ]\n )\n }),\n 0\n )\n ]\n )\n : _vm._e()\n ]\n : _vm._e()\n ],\n 2\n )\n}\nvar time_spinnervue_type_template_id_1facadeb_staticRenderFns = []\ntime_spinnervue_type_template_id_1facadeb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue?vue&type=template&id=1facadeb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/time-spinner.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var time_spinnervue_type_script_lang_js_ = ({\n components: { ElScrollbar: scrollbar_default.a },\n\n directives: {\n repeatClick: repeat_click\n },\n\n props: {\n date: {},\n defaultValue: {}, // reserved for future use\n showSeconds: {\n type: Boolean,\n default: true\n },\n arrowControl: Boolean,\n amPmMode: {\n type: String,\n default: '' // 'a': am/pm; 'A': AM/PM\n }\n },\n\n computed: {\n hours: function hours() {\n return this.date.getHours();\n },\n minutes: function minutes() {\n return this.date.getMinutes();\n },\n seconds: function seconds() {\n return this.date.getSeconds();\n },\n hoursList: function hoursList() {\n return Object(date_util_[\"getRangeHours\"])(this.selectableRange);\n },\n minutesList: function minutesList() {\n return Object(date_util_[\"getRangeMinutes\"])(this.selectableRange, this.hours);\n },\n arrowHourList: function arrowHourList() {\n var hours = this.hours;\n return [hours > 0 ? hours - 1 : undefined, hours, hours < 23 ? hours + 1 : undefined];\n },\n arrowMinuteList: function arrowMinuteList() {\n var minutes = this.minutes;\n return [minutes > 0 ? minutes - 1 : undefined, minutes, minutes < 59 ? minutes + 1 : undefined];\n },\n arrowSecondList: function arrowSecondList() {\n var seconds = this.seconds;\n return [seconds > 0 ? seconds - 1 : undefined, seconds, seconds < 59 ? seconds + 1 : undefined];\n }\n },\n\n data: function data() {\n return {\n selectableRange: [],\n currentScrollbar: null\n };\n },\n mounted: function mounted() {\n var _this = this;\n\n this.$nextTick(function () {\n !_this.arrowControl && _this.bindScrollEvent();\n });\n },\n\n\n methods: {\n increase: function increase() {\n this.scrollDown(1);\n },\n decrease: function decrease() {\n this.scrollDown(-1);\n },\n modifyDateField: function modifyDateField(type, value) {\n switch (type) {\n case 'hours':\n this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, value, this.minutes, this.seconds));break;\n case 'minutes':\n this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, this.hours, value, this.seconds));break;\n case 'seconds':\n this.$emit('change', Object(date_util_[\"modifyTime\"])(this.date, this.hours, this.minutes, value));break;\n }\n },\n handleClick: function handleClick(type, _ref) {\n var value = _ref.value,\n disabled = _ref.disabled;\n\n if (!disabled) {\n this.modifyDateField(type, value);\n this.emitSelectRange(type);\n this.adjustSpinner(type, value);\n }\n },\n emitSelectRange: function emitSelectRange(type) {\n if (type === 'hours') {\n this.$emit('select-range', 0, 2);\n } else if (type === 'minutes') {\n this.$emit('select-range', 3, 5);\n } else if (type === 'seconds') {\n this.$emit('select-range', 6, 8);\n }\n this.currentScrollbar = type;\n },\n bindScrollEvent: function bindScrollEvent() {\n var _this2 = this;\n\n var bindFunction = function bindFunction(type) {\n _this2.$refs[type].wrap.onscroll = function (e) {\n // TODO: scroll is emitted when set scrollTop programatically\n // should find better solutions in the future!\n _this2.handleScroll(type, e);\n };\n };\n bindFunction('hours');\n bindFunction('minutes');\n bindFunction('seconds');\n },\n handleScroll: function handleScroll(type) {\n var value = Math.min(Math.round((this.$refs[type].wrap.scrollTop - (this.scrollBarHeight(type) * 0.5 - 10) / this.typeItemHeight(type) + 3) / this.typeItemHeight(type)), type === 'hours' ? 23 : 59);\n this.modifyDateField(type, value);\n },\n\n\n // NOTE: used by datetime / date-range panel\n // renamed from adjustScrollTop\n // should try to refactory it\n adjustSpinners: function adjustSpinners() {\n this.adjustSpinner('hours', this.hours);\n this.adjustSpinner('minutes', this.minutes);\n this.adjustSpinner('seconds', this.seconds);\n },\n adjustCurrentSpinner: function adjustCurrentSpinner(type) {\n this.adjustSpinner(type, this[type]);\n },\n adjustSpinner: function adjustSpinner(type, value) {\n if (this.arrowControl) return;\n var el = this.$refs[type].wrap;\n if (el) {\n el.scrollTop = Math.max(0, value * this.typeItemHeight(type));\n }\n },\n scrollDown: function scrollDown(step) {\n var _this3 = this;\n\n if (!this.currentScrollbar) {\n this.emitSelectRange('hours');\n }\n\n var label = this.currentScrollbar;\n var hoursList = this.hoursList;\n var now = this[label];\n\n if (this.currentScrollbar === 'hours') {\n var total = Math.abs(step);\n step = step > 0 ? 1 : -1;\n var length = hoursList.length;\n while (length-- && total) {\n now = (now + step + hoursList.length) % hoursList.length;\n if (hoursList[now]) {\n continue;\n }\n total--;\n }\n if (hoursList[now]) return;\n } else {\n now = (now + step + 60) % 60;\n }\n\n this.modifyDateField(label, now);\n this.adjustSpinner(label, now);\n this.$nextTick(function () {\n return _this3.emitSelectRange(_this3.currentScrollbar);\n });\n },\n amPm: function amPm(hour) {\n var shouldShowAmPm = this.amPmMode.toLowerCase() === 'a';\n if (!shouldShowAmPm) return '';\n var isCapital = this.amPmMode === 'A';\n var content = hour < 12 ? ' am' : ' pm';\n if (isCapital) content = content.toUpperCase();\n return content;\n },\n typeItemHeight: function typeItemHeight(type) {\n return this.$refs[type].$el.querySelector('li').offsetHeight;\n },\n scrollBarHeight: function scrollBarHeight(type) {\n return this.$refs[type].$el.offsetHeight;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_time_spinnervue_type_script_lang_js_ = (time_spinnervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/time-spinner.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_spinner_component = normalizeComponent(\n basic_time_spinnervue_type_script_lang_js_,\n time_spinnervue_type_template_id_1facadeb_render,\n time_spinnervue_type_template_id_1facadeb_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var time_spinner_api; }\ntime_spinner_component.options.__file = \"packages/date-picker/src/basic/time-spinner.vue\"\n/* harmony default export */ var time_spinner = (time_spinner_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var timevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n components: {\n TimeSpinner: time_spinner\n },\n\n props: {\n visible: Boolean,\n timeArrowControl: Boolean\n },\n\n watch: {\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n this.oldValue = this.value;\n this.$nextTick(function () {\n return _this.$refs.spinner.emitSelectRange('hours');\n });\n } else {\n this.needInitAdjust = true;\n }\n },\n value: function value(newVal) {\n var _this2 = this;\n\n var date = void 0;\n if (newVal instanceof Date) {\n date = Object(date_util_[\"limitTimeRange\"])(newVal, this.selectableRange, this.format);\n } else if (!newVal) {\n date = this.defaultValue ? new Date(this.defaultValue) : new Date();\n }\n\n this.date = date;\n if (this.visible && this.needInitAdjust) {\n this.$nextTick(function (_) {\n return _this2.adjustSpinners();\n });\n this.needInitAdjust = false;\n }\n },\n selectableRange: function selectableRange(val) {\n this.$refs.spinner.selectableRange = val;\n },\n defaultValue: function defaultValue(val) {\n if (!Object(date_util_[\"isDate\"])(this.value)) {\n this.date = val ? new Date(val) : new Date();\n }\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n format: 'HH:mm:ss',\n value: '',\n defaultValue: null,\n date: new Date(),\n oldValue: new Date(),\n selectableRange: [],\n selectionRange: [0, 2],\n disabled: false,\n arrowControl: false,\n needInitAdjust: true\n };\n },\n\n\n computed: {\n showSeconds: function showSeconds() {\n return (this.format || '').indexOf('ss') !== -1;\n },\n useArrow: function useArrow() {\n return this.arrowControl || this.timeArrowControl || false;\n },\n amPmMode: function amPmMode() {\n if ((this.format || '').indexOf('A') !== -1) return 'A';\n if ((this.format || '').indexOf('a') !== -1) return 'a';\n return '';\n }\n },\n\n methods: {\n handleCancel: function handleCancel() {\n this.$emit('pick', this.oldValue, false);\n },\n handleChange: function handleChange(date) {\n // this.visible avoids edge cases, when use scrolls during panel closing animation\n if (this.visible) {\n this.date = Object(date_util_[\"clearMilliseconds\"])(date);\n // if date is out of range, do not emit\n if (this.isValidValue(this.date)) {\n this.$emit('pick', this.date, true);\n }\n }\n },\n setSelectionRange: function setSelectionRange(start, end) {\n this.$emit('select-range', start, end);\n this.selectionRange = [start, end];\n },\n handleConfirm: function handleConfirm() {\n var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var first = arguments[1];\n\n if (first) return;\n var date = Object(date_util_[\"clearMilliseconds\"])(Object(date_util_[\"limitTimeRange\"])(this.date, this.selectableRange, this.format));\n this.$emit('pick', date, visible, first);\n },\n handleKeydown: function handleKeydown(event) {\n var keyCode = event.keyCode;\n var mapping = { 38: -1, 40: 1, 37: -1, 39: 1 };\n\n // Left or Right\n if (keyCode === 37 || keyCode === 39) {\n var step = mapping[keyCode];\n this.changeSelectionRange(step);\n event.preventDefault();\n return;\n }\n\n // Up or Down\n if (keyCode === 38 || keyCode === 40) {\n var _step = mapping[keyCode];\n this.$refs.spinner.scrollDown(_step);\n event.preventDefault();\n return;\n }\n },\n isValidValue: function isValidValue(date) {\n return Object(date_util_[\"timeWithinRange\"])(date, this.selectableRange, this.format);\n },\n adjustSpinners: function adjustSpinners() {\n return this.$refs.spinner.adjustSpinners();\n },\n changeSelectionRange: function changeSelectionRange(step) {\n var list = [0, 3].concat(this.showSeconds ? [6] : []);\n var mapping = ['hours', 'minutes'].concat(this.showSeconds ? ['seconds'] : []);\n var index = list.indexOf(this.selectionRange[0]);\n var next = (index + step + list.length) % list.length;\n this.$refs.spinner.emitSelectRange(mapping[next]);\n }\n },\n\n mounted: function mounted() {\n var _this3 = this;\n\n this.$nextTick(function () {\n return _this3.handleConfirm(true, true);\n });\n this.$emit('mounted');\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_timevue_type_script_lang_js_ = (timevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_component = normalizeComponent(\n panel_timevue_type_script_lang_js_,\n timevue_type_template_id_3d939089_render,\n timevue_type_template_id_3d939089_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var time_api; }\ntime_component.options.__file = \"packages/date-picker/src/panel/time.vue\"\n/* harmony default export */ var panel_time = (time_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/year-table.vue?vue&type=template&id=c86ab5e0&\nvar year_tablevue_type_template_id_c86ab5e0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n { staticClass: \"el-year-table\", on: { click: _vm.handleYearTableClick } },\n [\n _c(\"tbody\", [\n _c(\"tr\", [\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 0)\n },\n [_c(\"a\", { staticClass: \"cell\" }, [_vm._v(_vm._s(_vm.startYear))])]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 1)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 1))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 2)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 2))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 3)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 3))\n ])\n ]\n )\n ]),\n _c(\"tr\", [\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 4)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 4))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 5)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 5))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 6)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 6))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 7)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 7))\n ])\n ]\n )\n ]),\n _c(\"tr\", [\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 8)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 8))\n ])\n ]\n ),\n _c(\n \"td\",\n {\n staticClass: \"available\",\n class: _vm.getCellStyle(_vm.startYear + 9)\n },\n [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(_vm._s(_vm.startYear + 9))\n ])\n ]\n ),\n _c(\"td\"),\n _c(\"td\")\n ])\n ])\n ]\n )\n}\nvar year_tablevue_type_template_id_c86ab5e0_staticRenderFns = []\nyear_tablevue_type_template_id_c86ab5e0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue?vue&type=template&id=c86ab5e0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/year-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar year_tablevue_type_script_lang_js_datesInYear = function datesInYear(year) {\n var numOfDays = Object(date_util_[\"getDayCountOfYear\"])(year);\n var firstDay = new Date(year, 0, 1);\n return Object(date_util_[\"range\"])(numOfDays).map(function (n) {\n return Object(date_util_[\"nextDate\"])(firstDay, n);\n });\n};\n\n/* harmony default export */ var year_tablevue_type_script_lang_js_ = ({\n props: {\n disabledDate: {},\n value: {},\n defaultValue: {\n validator: function validator(val) {\n // null or valid Date Object\n return val === null || val instanceof Date && Object(date_util_[\"isDate\"])(val);\n }\n },\n date: {}\n },\n\n computed: {\n startYear: function startYear() {\n return Math.floor(this.date.getFullYear() / 10) * 10;\n }\n },\n\n methods: {\n getCellStyle: function getCellStyle(year) {\n var style = {};\n var today = new Date();\n\n style.disabled = typeof this.disabledDate === 'function' ? year_tablevue_type_script_lang_js_datesInYear(year).every(this.disabledDate) : false;\n style.current = Object(util_[\"arrayFindIndex\"])(Object(util_[\"coerceTruthyValueToArray\"])(this.value), function (date) {\n return date.getFullYear() === year;\n }) >= 0;\n style.today = today.getFullYear() === year;\n style.default = this.defaultValue && this.defaultValue.getFullYear() === year;\n\n return style;\n },\n handleYearTableClick: function handleYearTableClick(event) {\n var target = event.target;\n if (target.tagName === 'A') {\n if (Object(dom_[\"hasClass\"])(target.parentNode, 'disabled')) return;\n var year = target.textContent || target.innerText;\n this.$emit('pick', Number(year));\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_year_tablevue_type_script_lang_js_ = (year_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/year-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar year_table_component = normalizeComponent(\n basic_year_tablevue_type_script_lang_js_,\n year_tablevue_type_template_id_c86ab5e0_render,\n year_tablevue_type_template_id_c86ab5e0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var year_table_api; }\nyear_table_component.options.__file = \"packages/date-picker/src/basic/year-table.vue\"\n/* harmony default export */ var year_table = (year_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/month-table.vue?vue&type=template&id=654d4f42&\nvar month_tablevue_type_template_id_654d4f42_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n {\n staticClass: \"el-month-table\",\n on: { click: _vm.handleMonthTableClick, mousemove: _vm.handleMouseMove }\n },\n [\n _c(\n \"tbody\",\n _vm._l(_vm.rows, function(row, key) {\n return _c(\n \"tr\",\n { key: key },\n _vm._l(row, function(cell, key) {\n return _c(\"td\", { key: key, class: _vm.getCellStyle(cell) }, [\n _c(\"div\", [\n _c(\"a\", { staticClass: \"cell\" }, [\n _vm._v(\n _vm._s(\n _vm.t(\"el.datepicker.months.\" + _vm.months[cell.text])\n )\n )\n ])\n ])\n ])\n }),\n 0\n )\n }),\n 0\n )\n ]\n )\n}\nvar month_tablevue_type_template_id_654d4f42_staticRenderFns = []\nmonth_tablevue_type_template_id_654d4f42_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue?vue&type=template&id=654d4f42&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/month-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\nvar month_tablevue_type_script_lang_js_datesInMonth = function datesInMonth(year, month) {\n var numOfDays = Object(date_util_[\"getDayCountOfMonth\"])(year, month);\n var firstDay = new Date(year, month, 1);\n return Object(date_util_[\"range\"])(numOfDays).map(function (n) {\n return Object(date_util_[\"nextDate\"])(firstDay, n);\n });\n};\n\nvar clearDate = function clearDate(date) {\n return new Date(date.getFullYear(), date.getMonth());\n};\n\nvar getMonthTimestamp = function getMonthTimestamp(time) {\n if (typeof time === 'number' || typeof time === 'string') {\n return clearDate(new Date(time)).getTime();\n } else if (time instanceof Date) {\n return clearDate(time).getTime();\n } else {\n return NaN;\n }\n};\n/* harmony default export */ var month_tablevue_type_script_lang_js_ = ({\n props: {\n disabledDate: {},\n value: {},\n selectionMode: {\n default: 'month'\n },\n minDate: {},\n\n maxDate: {},\n defaultValue: {\n validator: function validator(val) {\n // null or valid Date Object\n return val === null || Object(date_util_[\"isDate\"])(val) || Array.isArray(val) && val.every(date_util_[\"isDate\"]);\n }\n },\n date: {},\n rangeState: {\n default: function _default() {\n return {\n endDate: null,\n selecting: false\n };\n }\n }\n },\n\n mixins: [locale_default.a],\n\n watch: {\n 'rangeState.endDate': function rangeStateEndDate(newVal) {\n this.markRange(this.minDate, newVal);\n },\n minDate: function minDate(newVal, oldVal) {\n if (getMonthTimestamp(newVal) !== getMonthTimestamp(oldVal)) {\n this.markRange(this.minDate, this.maxDate);\n }\n },\n maxDate: function maxDate(newVal, oldVal) {\n if (getMonthTimestamp(newVal) !== getMonthTimestamp(oldVal)) {\n this.markRange(this.minDate, this.maxDate);\n }\n }\n },\n\n data: function data() {\n return {\n months: ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],\n tableRows: [[], [], []],\n lastRow: null,\n lastColumn: null\n };\n },\n\n\n methods: {\n cellMatchesDate: function cellMatchesDate(cell, date) {\n var value = new Date(date);\n return this.date.getFullYear() === value.getFullYear() && Number(cell.text) === value.getMonth();\n },\n getCellStyle: function getCellStyle(cell) {\n var _this = this;\n\n var style = {};\n var year = this.date.getFullYear();\n var today = new Date();\n var month = cell.text;\n var defaultValue = this.defaultValue ? Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue] : [];\n style.disabled = typeof this.disabledDate === 'function' ? month_tablevue_type_script_lang_js_datesInMonth(year, month).every(this.disabledDate) : false;\n style.current = Object(util_[\"arrayFindIndex\"])(Object(util_[\"coerceTruthyValueToArray\"])(this.value), function (date) {\n return date.getFullYear() === year && date.getMonth() === month;\n }) >= 0;\n style.today = today.getFullYear() === year && today.getMonth() === month;\n style.default = defaultValue.some(function (date) {\n return _this.cellMatchesDate(cell, date);\n });\n\n if (cell.inRange) {\n style['in-range'] = true;\n\n if (cell.start) {\n style['start-date'] = true;\n }\n\n if (cell.end) {\n style['end-date'] = true;\n }\n }\n return style;\n },\n getMonthOfCell: function getMonthOfCell(month) {\n var year = this.date.getFullYear();\n return new Date(year, month, 1);\n },\n markRange: function markRange(minDate, maxDate) {\n minDate = getMonthTimestamp(minDate);\n maxDate = getMonthTimestamp(maxDate) || minDate;\n var _ref = [Math.min(minDate, maxDate), Math.max(minDate, maxDate)];\n minDate = _ref[0];\n maxDate = _ref[1];\n\n var rows = this.rows;\n for (var i = 0, k = rows.length; i < k; i++) {\n var row = rows[i];\n for (var j = 0, l = row.length; j < l; j++) {\n\n var cell = row[j];\n var index = i * 4 + j;\n var time = new Date(this.date.getFullYear(), index).getTime();\n\n cell.inRange = minDate && time >= minDate && time <= maxDate;\n cell.start = minDate && time === minDate;\n cell.end = maxDate && time === maxDate;\n }\n }\n },\n handleMouseMove: function handleMouseMove(event) {\n if (!this.rangeState.selecting) return;\n\n var target = event.target;\n if (target.tagName === 'A') {\n target = target.parentNode.parentNode;\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode;\n }\n if (target.tagName !== 'TD') return;\n\n var row = target.parentNode.rowIndex;\n var column = target.cellIndex;\n // can not select disabled date\n if (this.rows[row][column].disabled) return;\n\n // only update rangeState when mouse moves to a new cell\n // this avoids frequent Date object creation and improves performance\n if (row !== this.lastRow || column !== this.lastColumn) {\n this.lastRow = row;\n this.lastColumn = column;\n this.$emit('changerange', {\n minDate: this.minDate,\n maxDate: this.maxDate,\n rangeState: {\n selecting: true,\n endDate: this.getMonthOfCell(row * 4 + column)\n }\n });\n }\n },\n handleMonthTableClick: function handleMonthTableClick(event) {\n var target = event.target;\n if (target.tagName === 'A') {\n target = target.parentNode.parentNode;\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode;\n }\n if (target.tagName !== 'TD') return;\n if (Object(dom_[\"hasClass\"])(target, 'disabled')) return;\n var column = target.cellIndex;\n var row = target.parentNode.rowIndex;\n var month = row * 4 + column;\n var newDate = this.getMonthOfCell(month);\n if (this.selectionMode === 'range') {\n if (!this.rangeState.selecting) {\n this.$emit('pick', { minDate: newDate, maxDate: null });\n this.rangeState.selecting = true;\n } else {\n if (newDate >= this.minDate) {\n this.$emit('pick', { minDate: this.minDate, maxDate: newDate });\n } else {\n this.$emit('pick', { minDate: newDate, maxDate: this.minDate });\n }\n this.rangeState.selecting = false;\n }\n } else {\n this.$emit('pick', month);\n }\n }\n },\n\n computed: {\n rows: function rows() {\n var _this2 = this;\n\n // TODO: refactory rows / getCellClasses\n var rows = this.tableRows;\n var disabledDate = this.disabledDate;\n var selectedDate = [];\n var now = getMonthTimestamp(new Date());\n\n for (var i = 0; i < 3; i++) {\n var row = rows[i];\n\n var _loop = function _loop(j) {\n var cell = row[j];\n if (!cell) {\n cell = { row: i, column: j, type: 'normal', inRange: false, start: false, end: false };\n }\n\n cell.type = 'normal';\n\n var index = i * 4 + j;\n var time = new Date(_this2.date.getFullYear(), index).getTime();\n cell.inRange = time >= getMonthTimestamp(_this2.minDate) && time <= getMonthTimestamp(_this2.maxDate);\n cell.start = _this2.minDate && time === getMonthTimestamp(_this2.minDate);\n cell.end = _this2.maxDate && time === getMonthTimestamp(_this2.maxDate);\n var isToday = time === now;\n\n if (isToday) {\n cell.type = 'today';\n }\n cell.text = index;\n var cellDate = new Date(time);\n cell.disabled = typeof disabledDate === 'function' && disabledDate(cellDate);\n cell.selected = Object(util_[\"arrayFind\"])(selectedDate, function (date) {\n return date.getTime() === cellDate.getTime();\n });\n\n _this2.$set(row, j, cell);\n };\n\n for (var j = 0; j < 4; j++) {\n _loop(j);\n }\n }\n return rows;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_month_tablevue_type_script_lang_js_ = (month_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/month-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar month_table_component = normalizeComponent(\n basic_month_tablevue_type_script_lang_js_,\n month_tablevue_type_template_id_654d4f42_render,\n month_tablevue_type_template_id_654d4f42_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var month_table_api; }\nmonth_table_component.options.__file = \"packages/date-picker/src/basic/month-table.vue\"\n/* harmony default export */ var month_table = (month_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/date-table.vue?vue&type=template&id=5d1f3341&\nvar date_tablevue_type_template_id_5d1f3341_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"table\",\n {\n staticClass: \"el-date-table\",\n class: { \"is-week-mode\": _vm.selectionMode === \"week\" },\n attrs: { cellspacing: \"0\", cellpadding: \"0\" },\n on: { click: _vm.handleClick, mousemove: _vm.handleMouseMove }\n },\n [\n _c(\n \"tbody\",\n [\n _c(\n \"tr\",\n [\n _vm.showWeekNumber\n ? _c(\"th\", [_vm._v(_vm._s(_vm.t(\"el.datepicker.week\")))])\n : _vm._e(),\n _vm._l(_vm.WEEKS, function(week, key) {\n return _c(\"th\", { key: key }, [\n _vm._v(_vm._s(_vm.t(\"el.datepicker.weeks.\" + week)))\n ])\n })\n ],\n 2\n ),\n _vm._l(_vm.rows, function(row, key) {\n return _c(\n \"tr\",\n {\n key: key,\n staticClass: \"el-date-table__row\",\n class: { current: _vm.isWeekActive(row[1]) }\n },\n _vm._l(row, function(cell, key) {\n return _c(\"td\", { key: key, class: _vm.getCellClasses(cell) }, [\n _c(\"div\", [\n _c(\"span\", [\n _vm._v(\"\\n \" + _vm._s(cell.text) + \"\\n \")\n ])\n ])\n ])\n }),\n 0\n )\n })\n ],\n 2\n )\n ]\n )\n}\nvar date_tablevue_type_template_id_5d1f3341_staticRenderFns = []\ndate_tablevue_type_template_id_5d1f3341_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue?vue&type=template&id=5d1f3341&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/basic/date-table.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar _WEEKS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nvar date_tablevue_type_script_lang_js_getDateTimestamp = function getDateTimestamp(time) {\n if (typeof time === 'number' || typeof time === 'string') {\n return Object(date_util_[\"clearTime\"])(new Date(time)).getTime();\n } else if (time instanceof Date) {\n return Object(date_util_[\"clearTime\"])(time).getTime();\n } else {\n return NaN;\n }\n};\n\n// remove the first element that satisfies `pred` from arr\n// return a new array if modification occurs\n// return the original array otherwise\nvar date_tablevue_type_script_lang_js_removeFromArray = function removeFromArray(arr, pred) {\n var idx = typeof pred === 'function' ? Object(util_[\"arrayFindIndex\"])(arr, pred) : arr.indexOf(pred);\n return idx >= 0 ? [].concat(arr.slice(0, idx), arr.slice(idx + 1)) : arr;\n};\n\n/* harmony default export */ var date_tablevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n props: {\n firstDayOfWeek: {\n default: 7,\n type: Number,\n validator: function validator(val) {\n return val >= 1 && val <= 7;\n }\n },\n\n value: {},\n\n defaultValue: {\n validator: function validator(val) {\n // either: null, valid Date object, Array of valid Date objects\n return val === null || Object(date_util_[\"isDate\"])(val) || Array.isArray(val) && val.every(date_util_[\"isDate\"]);\n }\n },\n\n date: {},\n\n selectionMode: {\n default: 'day'\n },\n\n showWeekNumber: {\n type: Boolean,\n default: false\n },\n\n disabledDate: {},\n\n cellClassName: {},\n\n minDate: {},\n\n maxDate: {},\n\n rangeState: {\n default: function _default() {\n return {\n endDate: null,\n selecting: false\n };\n }\n }\n },\n\n computed: {\n offsetDay: function offsetDay() {\n var week = this.firstDayOfWeek;\n // 周日为界限,左右偏移的天数,3217654 例如周一就是 -1,目的是调整前两行日期的位置\n return week > 3 ? 7 - week : -week;\n },\n WEEKS: function WEEKS() {\n var week = this.firstDayOfWeek;\n return _WEEKS.concat(_WEEKS).slice(week, week + 7);\n },\n year: function year() {\n return this.date.getFullYear();\n },\n month: function month() {\n return this.date.getMonth();\n },\n startDate: function startDate() {\n return Object(date_util_[\"getStartDateOfMonth\"])(this.year, this.month);\n },\n rows: function rows() {\n var _this = this;\n\n // TODO: refactory rows / getCellClasses\n var date = new Date(this.year, this.month, 1);\n var day = Object(date_util_[\"getFirstDayOfMonth\"])(date); // day of first day\n var dateCountOfMonth = Object(date_util_[\"getDayCountOfMonth\"])(date.getFullYear(), date.getMonth());\n var dateCountOfLastMonth = Object(date_util_[\"getDayCountOfMonth\"])(date.getFullYear(), date.getMonth() === 0 ? 11 : date.getMonth() - 1);\n\n day = day === 0 ? 7 : day;\n\n var offset = this.offsetDay;\n var rows = this.tableRows;\n var count = 1;\n\n var startDate = this.startDate;\n var disabledDate = this.disabledDate;\n var cellClassName = this.cellClassName;\n var selectedDate = this.selectionMode === 'dates' ? Object(util_[\"coerceTruthyValueToArray\"])(this.value) : [];\n var now = date_tablevue_type_script_lang_js_getDateTimestamp(new Date());\n\n for (var i = 0; i < 6; i++) {\n var row = rows[i];\n\n if (this.showWeekNumber) {\n if (!row[0]) {\n row[0] = { type: 'week', text: Object(date_util_[\"getWeekNumber\"])(Object(date_util_[\"nextDate\"])(startDate, i * 7 + 1)) };\n }\n }\n\n var _loop = function _loop(j) {\n var cell = row[_this.showWeekNumber ? j + 1 : j];\n if (!cell) {\n cell = { row: i, column: j, type: 'normal', inRange: false, start: false, end: false };\n }\n\n cell.type = 'normal';\n\n var index = i * 7 + j;\n var time = Object(date_util_[\"nextDate\"])(startDate, index - offset).getTime();\n cell.inRange = time >= date_tablevue_type_script_lang_js_getDateTimestamp(_this.minDate) && time <= date_tablevue_type_script_lang_js_getDateTimestamp(_this.maxDate);\n cell.start = _this.minDate && time === date_tablevue_type_script_lang_js_getDateTimestamp(_this.minDate);\n cell.end = _this.maxDate && time === date_tablevue_type_script_lang_js_getDateTimestamp(_this.maxDate);\n var isToday = time === now;\n\n if (isToday) {\n cell.type = 'today';\n }\n\n if (i >= 0 && i <= 1) {\n var numberOfDaysFromPreviousMonth = day + offset < 0 ? 7 + day + offset : day + offset;\n\n if (j + i * 7 >= numberOfDaysFromPreviousMonth) {\n cell.text = count++;\n } else {\n cell.text = dateCountOfLastMonth - (numberOfDaysFromPreviousMonth - j % 7) + 1 + i * 7;\n cell.type = 'prev-month';\n }\n } else {\n if (count <= dateCountOfMonth) {\n cell.text = count++;\n } else {\n cell.text = count++ - dateCountOfMonth;\n cell.type = 'next-month';\n }\n }\n\n var cellDate = new Date(time);\n cell.disabled = typeof disabledDate === 'function' && disabledDate(cellDate);\n cell.selected = Object(util_[\"arrayFind\"])(selectedDate, function (date) {\n return date.getTime() === cellDate.getTime();\n });\n cell.customClass = typeof cellClassName === 'function' && cellClassName(cellDate);\n _this.$set(row, _this.showWeekNumber ? j + 1 : j, cell);\n };\n\n for (var j = 0; j < 7; j++) {\n _loop(j);\n }\n\n if (this.selectionMode === 'week') {\n var start = this.showWeekNumber ? 1 : 0;\n var end = this.showWeekNumber ? 7 : 6;\n var isWeekActive = this.isWeekActive(row[start + 1]);\n\n row[start].inRange = isWeekActive;\n row[start].start = isWeekActive;\n row[end].inRange = isWeekActive;\n row[end].end = isWeekActive;\n }\n }\n\n return rows;\n }\n },\n\n watch: {\n 'rangeState.endDate': function rangeStateEndDate(newVal) {\n this.markRange(this.minDate, newVal);\n },\n minDate: function minDate(newVal, oldVal) {\n if (date_tablevue_type_script_lang_js_getDateTimestamp(newVal) !== date_tablevue_type_script_lang_js_getDateTimestamp(oldVal)) {\n this.markRange(this.minDate, this.maxDate);\n }\n },\n maxDate: function maxDate(newVal, oldVal) {\n if (date_tablevue_type_script_lang_js_getDateTimestamp(newVal) !== date_tablevue_type_script_lang_js_getDateTimestamp(oldVal)) {\n this.markRange(this.minDate, this.maxDate);\n }\n }\n },\n\n data: function data() {\n return {\n tableRows: [[], [], [], [], [], []],\n lastRow: null,\n lastColumn: null\n };\n },\n\n\n methods: {\n cellMatchesDate: function cellMatchesDate(cell, date) {\n var value = new Date(date);\n return this.year === value.getFullYear() && this.month === value.getMonth() && Number(cell.text) === value.getDate();\n },\n getCellClasses: function getCellClasses(cell) {\n var _this2 = this;\n\n var selectionMode = this.selectionMode;\n var defaultValue = this.defaultValue ? Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue] : [];\n\n var classes = [];\n if ((cell.type === 'normal' || cell.type === 'today') && !cell.disabled) {\n classes.push('available');\n if (cell.type === 'today') {\n classes.push('today');\n }\n } else {\n classes.push(cell.type);\n }\n\n if (cell.type === 'normal' && defaultValue.some(function (date) {\n return _this2.cellMatchesDate(cell, date);\n })) {\n classes.push('default');\n }\n\n if (selectionMode === 'day' && (cell.type === 'normal' || cell.type === 'today') && this.cellMatchesDate(cell, this.value)) {\n classes.push('current');\n }\n\n if (cell.inRange && (cell.type === 'normal' || cell.type === 'today' || this.selectionMode === 'week')) {\n classes.push('in-range');\n\n if (cell.start) {\n classes.push('start-date');\n }\n\n if (cell.end) {\n classes.push('end-date');\n }\n }\n\n if (cell.disabled) {\n classes.push('disabled');\n }\n\n if (cell.selected) {\n classes.push('selected');\n }\n\n if (cell.customClass) {\n classes.push(cell.customClass);\n }\n\n return classes.join(' ');\n },\n getDateOfCell: function getDateOfCell(row, column) {\n var offsetFromStart = row * 7 + (column - (this.showWeekNumber ? 1 : 0)) - this.offsetDay;\n return Object(date_util_[\"nextDate\"])(this.startDate, offsetFromStart);\n },\n isWeekActive: function isWeekActive(cell) {\n if (this.selectionMode !== 'week') return false;\n var newDate = new Date(this.year, this.month, 1);\n var year = newDate.getFullYear();\n var month = newDate.getMonth();\n\n if (cell.type === 'prev-month') {\n newDate.setMonth(month === 0 ? 11 : month - 1);\n newDate.setFullYear(month === 0 ? year - 1 : year);\n }\n\n if (cell.type === 'next-month') {\n newDate.setMonth(month === 11 ? 0 : month + 1);\n newDate.setFullYear(month === 11 ? year + 1 : year);\n }\n\n newDate.setDate(parseInt(cell.text, 10));\n\n if (Object(date_util_[\"isDate\"])(this.value)) {\n var dayOffset = (this.value.getDay() - this.firstDayOfWeek + 7) % 7 - 1;\n var weekDate = Object(date_util_[\"prevDate\"])(this.value, dayOffset);\n return weekDate.getTime() === newDate.getTime();\n }\n return false;\n },\n markRange: function markRange(minDate, maxDate) {\n minDate = date_tablevue_type_script_lang_js_getDateTimestamp(minDate);\n maxDate = date_tablevue_type_script_lang_js_getDateTimestamp(maxDate) || minDate;\n var _ref = [Math.min(minDate, maxDate), Math.max(minDate, maxDate)];\n minDate = _ref[0];\n maxDate = _ref[1];\n\n\n var startDate = this.startDate;\n var rows = this.rows;\n for (var i = 0, k = rows.length; i < k; i++) {\n var row = rows[i];\n for (var j = 0, l = row.length; j < l; j++) {\n if (this.showWeekNumber && j === 0) continue;\n\n var _cell = row[j];\n var index = i * 7 + j + (this.showWeekNumber ? -1 : 0);\n var time = Object(date_util_[\"nextDate\"])(startDate, index - this.offsetDay).getTime();\n\n _cell.inRange = minDate && time >= minDate && time <= maxDate;\n _cell.start = minDate && time === minDate;\n _cell.end = maxDate && time === maxDate;\n }\n }\n },\n handleMouseMove: function handleMouseMove(event) {\n if (!this.rangeState.selecting) return;\n\n var target = event.target;\n if (target.tagName === 'SPAN') {\n target = target.parentNode.parentNode;\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode;\n }\n if (target.tagName !== 'TD') return;\n\n var row = target.parentNode.rowIndex - 1;\n var column = target.cellIndex;\n\n // can not select disabled date\n if (this.rows[row][column].disabled) return;\n\n // only update rangeState when mouse moves to a new cell\n // this avoids frequent Date object creation and improves performance\n if (row !== this.lastRow || column !== this.lastColumn) {\n this.lastRow = row;\n this.lastColumn = column;\n this.$emit('changerange', {\n minDate: this.minDate,\n maxDate: this.maxDate,\n rangeState: {\n selecting: true,\n endDate: this.getDateOfCell(row, column)\n }\n });\n }\n },\n handleClick: function handleClick(event) {\n var target = event.target;\n if (target.tagName === 'SPAN') {\n target = target.parentNode.parentNode;\n }\n if (target.tagName === 'DIV') {\n target = target.parentNode;\n }\n\n if (target.tagName !== 'TD') return;\n\n var row = target.parentNode.rowIndex - 1;\n var column = this.selectionMode === 'week' ? 1 : target.cellIndex;\n var cell = this.rows[row][column];\n\n if (cell.disabled || cell.type === 'week') return;\n\n var newDate = this.getDateOfCell(row, column);\n\n if (this.selectionMode === 'range') {\n if (!this.rangeState.selecting) {\n this.$emit('pick', { minDate: newDate, maxDate: null });\n this.rangeState.selecting = true;\n } else {\n if (newDate >= this.minDate) {\n this.$emit('pick', { minDate: this.minDate, maxDate: newDate });\n } else {\n this.$emit('pick', { minDate: newDate, maxDate: this.minDate });\n }\n this.rangeState.selecting = false;\n }\n } else if (this.selectionMode === 'day') {\n this.$emit('pick', newDate);\n } else if (this.selectionMode === 'week') {\n var weekNumber = Object(date_util_[\"getWeekNumber\"])(newDate);\n var value = newDate.getFullYear() + 'w' + weekNumber;\n this.$emit('pick', {\n year: newDate.getFullYear(),\n week: weekNumber,\n value: value,\n date: newDate\n });\n } else if (this.selectionMode === 'dates') {\n var _value = this.value || [];\n var newValue = cell.selected ? date_tablevue_type_script_lang_js_removeFromArray(_value, function (date) {\n return date.getTime() === newDate.getTime();\n }) : [].concat(_value, [newDate]);\n this.$emit('pick', newValue);\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var basic_date_tablevue_type_script_lang_js_ = (date_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/basic/date-table.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_table_component = normalizeComponent(\n basic_date_tablevue_type_script_lang_js_,\n date_tablevue_type_template_id_5d1f3341_render,\n date_tablevue_type_template_id_5d1f3341_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var date_table_api; }\ndate_table_component.options.__file = \"packages/date-picker/src/basic/date-table.vue\"\n/* harmony default export */ var date_table = (date_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var datevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n directives: { Clickoutside: clickoutside_default.a },\n\n watch: {\n showTime: function showTime(val) {\n var _this = this;\n\n /* istanbul ignore if */\n if (!val) return;\n this.$nextTick(function (_) {\n var inputElm = _this.$refs.input.$el;\n if (inputElm) {\n _this.pickerWidth = inputElm.getBoundingClientRect().width + 10;\n }\n });\n },\n value: function value(val) {\n if (this.selectionMode === 'dates' && this.value) return;\n if (Object(date_util_[\"isDate\"])(val)) {\n this.date = new Date(val);\n } else {\n this.date = this.getDefaultValue();\n }\n },\n defaultValue: function defaultValue(val) {\n if (!Object(date_util_[\"isDate\"])(this.value)) {\n this.date = val ? new Date(val) : new Date();\n }\n },\n timePickerVisible: function timePickerVisible(val) {\n var _this2 = this;\n\n if (val) this.$nextTick(function () {\n return _this2.$refs.timepicker.adjustSpinners();\n });\n },\n selectionMode: function selectionMode(newVal) {\n if (newVal === 'month') {\n /* istanbul ignore next */\n if (this.currentView !== 'year' || this.currentView !== 'month') {\n this.currentView = 'month';\n }\n } else if (newVal === 'dates') {\n this.currentView = 'date';\n }\n }\n },\n\n methods: {\n proxyTimePickerDataProperties: function proxyTimePickerDataProperties() {\n var _this3 = this;\n\n var format = function format(timeFormat) {\n _this3.$refs.timepicker.format = timeFormat;\n };\n var value = function value(_value) {\n _this3.$refs.timepicker.value = _value;\n };\n var date = function date(_date) {\n _this3.$refs.timepicker.date = _date;\n };\n var selectableRange = function selectableRange(_selectableRange) {\n _this3.$refs.timepicker.selectableRange = _selectableRange;\n };\n\n this.$watch('value', value);\n this.$watch('date', date);\n this.$watch('selectableRange', selectableRange);\n\n format(this.timeFormat);\n value(this.value);\n date(this.date);\n selectableRange(this.selectableRange);\n },\n handleClear: function handleClear() {\n this.date = this.getDefaultValue();\n this.$emit('pick', null);\n },\n emit: function emit(value) {\n var _this4 = this;\n\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (!value) {\n this.$emit.apply(this, ['pick', value].concat(args));\n } else if (Array.isArray(value)) {\n var dates = value.map(function (date) {\n return _this4.showTime ? Object(date_util_[\"clearMilliseconds\"])(date) : Object(date_util_[\"clearTime\"])(date);\n });\n this.$emit.apply(this, ['pick', dates].concat(args));\n } else {\n this.$emit.apply(this, ['pick', this.showTime ? Object(date_util_[\"clearMilliseconds\"])(value) : Object(date_util_[\"clearTime\"])(value)].concat(args));\n }\n this.userInputDate = null;\n this.userInputTime = null;\n },\n\n\n // resetDate() {\n // this.date = new Date(this.date);\n // },\n\n showMonthPicker: function showMonthPicker() {\n this.currentView = 'month';\n },\n showYearPicker: function showYearPicker() {\n this.currentView = 'year';\n },\n\n\n // XXX: 没用到\n // handleLabelClick() {\n // if (this.currentView === 'date') {\n // this.showMonthPicker();\n // } else if (this.currentView === 'month') {\n // this.showYearPicker();\n // }\n // },\n\n prevMonth: function prevMonth() {\n this.date = Object(date_util_[\"prevMonth\"])(this.date);\n },\n nextMonth: function nextMonth() {\n this.date = Object(date_util_[\"nextMonth\"])(this.date);\n },\n prevYear: function prevYear() {\n if (this.currentView === 'year') {\n this.date = Object(date_util_[\"prevYear\"])(this.date, 10);\n } else {\n this.date = Object(date_util_[\"prevYear\"])(this.date);\n }\n },\n nextYear: function nextYear() {\n if (this.currentView === 'year') {\n this.date = Object(date_util_[\"nextYear\"])(this.date, 10);\n } else {\n this.date = Object(date_util_[\"nextYear\"])(this.date);\n }\n },\n handleShortcutClick: function handleShortcutClick(shortcut) {\n if (shortcut.onClick) {\n shortcut.onClick(this);\n }\n },\n handleTimePick: function handleTimePick(value, visible, first) {\n if (Object(date_util_[\"isDate\"])(value)) {\n var newDate = this.value ? Object(date_util_[\"modifyTime\"])(this.value, value.getHours(), value.getMinutes(), value.getSeconds()) : Object(date_util_[\"modifyWithTimeString\"])(this.getDefaultValue(), this.defaultTime);\n this.date = newDate;\n this.emit(this.date, true);\n } else {\n this.emit(value, true);\n }\n if (!first) {\n this.timePickerVisible = visible;\n }\n },\n handleTimePickClose: function handleTimePickClose() {\n this.timePickerVisible = false;\n },\n handleMonthPick: function handleMonthPick(month) {\n if (this.selectionMode === 'month') {\n this.date = Object(date_util_[\"modifyDate\"])(this.date, this.year, month, 1);\n this.emit(this.date);\n } else {\n this.date = Object(date_util_[\"changeYearMonthAndClampDate\"])(this.date, this.year, month);\n // TODO: should emit intermediate value ??\n // this.emit(this.date);\n this.currentView = 'date';\n }\n },\n handleDatePick: function handleDatePick(value) {\n if (this.selectionMode === 'day') {\n var newDate = this.value ? Object(date_util_[\"modifyDate\"])(this.value, value.getFullYear(), value.getMonth(), value.getDate()) : Object(date_util_[\"modifyWithTimeString\"])(value, this.defaultTime);\n // change default time while out of selectableRange\n if (!this.checkDateWithinRange(newDate)) {\n newDate = Object(date_util_[\"modifyDate\"])(this.selectableRange[0][0], value.getFullYear(), value.getMonth(), value.getDate());\n }\n this.date = newDate;\n this.emit(this.date, this.showTime);\n } else if (this.selectionMode === 'week') {\n this.emit(value.date);\n } else if (this.selectionMode === 'dates') {\n this.emit(value, true); // set false to keep panel open\n }\n },\n handleYearPick: function handleYearPick(year) {\n if (this.selectionMode === 'year') {\n this.date = Object(date_util_[\"modifyDate\"])(this.date, year, 0, 1);\n this.emit(this.date);\n } else {\n this.date = Object(date_util_[\"changeYearMonthAndClampDate\"])(this.date, year, this.month);\n // TODO: should emit intermediate value ??\n // this.emit(this.date, true);\n this.currentView = 'month';\n }\n },\n changeToNow: function changeToNow() {\n // NOTE: not a permanent solution\n // consider disable \"now\" button in the future\n if ((!this.disabledDate || !this.disabledDate(new Date())) && this.checkDateWithinRange(new Date())) {\n this.date = new Date();\n this.emit(this.date);\n }\n },\n confirm: function confirm() {\n if (this.selectionMode === 'dates') {\n this.emit(this.value);\n } else {\n // value were emitted in handle{Date,Time}Pick, nothing to update here\n // deal with the scenario where: user opens the picker, then confirm without doing anything\n var value = this.value ? this.value : Object(date_util_[\"modifyWithTimeString\"])(this.getDefaultValue(), this.defaultTime);\n this.date = new Date(value); // refresh date\n this.emit(value);\n }\n },\n resetView: function resetView() {\n if (this.selectionMode === 'month') {\n this.currentView = 'month';\n } else if (this.selectionMode === 'year') {\n this.currentView = 'year';\n } else {\n this.currentView = 'date';\n }\n },\n handleEnter: function handleEnter() {\n document.body.addEventListener('keydown', this.handleKeydown);\n },\n handleLeave: function handleLeave() {\n this.$emit('dodestroy');\n document.body.removeEventListener('keydown', this.handleKeydown);\n },\n handleKeydown: function handleKeydown(event) {\n var keyCode = event.keyCode;\n var list = [38, 40, 37, 39];\n if (this.visible && !this.timePickerVisible) {\n if (list.indexOf(keyCode) !== -1) {\n this.handleKeyControl(keyCode);\n event.stopPropagation();\n event.preventDefault();\n }\n if (keyCode === 13 && this.userInputDate === null && this.userInputTime === null) {\n // Enter\n this.emit(this.date, false);\n }\n }\n },\n handleKeyControl: function handleKeyControl(keyCode) {\n var mapping = {\n 'year': {\n 38: -4, 40: 4, 37: -1, 39: 1, offset: function offset(date, step) {\n return date.setFullYear(date.getFullYear() + step);\n }\n },\n 'month': {\n 38: -4, 40: 4, 37: -1, 39: 1, offset: function offset(date, step) {\n return date.setMonth(date.getMonth() + step);\n }\n },\n 'week': {\n 38: -1, 40: 1, 37: -1, 39: 1, offset: function offset(date, step) {\n return date.setDate(date.getDate() + step * 7);\n }\n },\n 'day': {\n 38: -7, 40: 7, 37: -1, 39: 1, offset: function offset(date, step) {\n return date.setDate(date.getDate() + step);\n }\n }\n };\n var mode = this.selectionMode;\n var year = 3.1536e10;\n var now = this.date.getTime();\n var newDate = new Date(this.date.getTime());\n while (Math.abs(now - newDate.getTime()) <= year) {\n var map = mapping[mode];\n map.offset(newDate, map[keyCode]);\n if (typeof this.disabledDate === 'function' && this.disabledDate(newDate)) {\n continue;\n }\n this.date = newDate;\n this.$emit('pick', newDate, true);\n break;\n }\n },\n handleVisibleTimeChange: function handleVisibleTimeChange(value) {\n var time = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n if (time && this.checkDateWithinRange(time)) {\n this.date = Object(date_util_[\"modifyDate\"])(time, this.year, this.month, this.monthDate);\n this.userInputTime = null;\n this.$refs.timepicker.value = this.date;\n this.timePickerVisible = false;\n this.emit(this.date, true);\n }\n },\n handleVisibleDateChange: function handleVisibleDateChange(value) {\n var date = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n if (date) {\n if (typeof this.disabledDate === 'function' && this.disabledDate(date)) {\n return;\n }\n this.date = Object(date_util_[\"modifyTime\"])(date, this.date.getHours(), this.date.getMinutes(), this.date.getSeconds());\n this.userInputDate = null;\n this.resetView();\n this.emit(this.date, true);\n }\n },\n isValidValue: function isValidValue(value) {\n return value && !isNaN(value) && (typeof this.disabledDate === 'function' ? !this.disabledDate(value) : true) && this.checkDateWithinRange(value);\n },\n getDefaultValue: function getDefaultValue() {\n // if default-value is set, return it\n // otherwise, return now (the moment this method gets called)\n return this.defaultValue ? new Date(this.defaultValue) : new Date();\n },\n checkDateWithinRange: function checkDateWithinRange(date) {\n return this.selectableRange.length > 0 ? Object(date_util_[\"timeWithinRange\"])(date, this.selectableRange, this.format || 'HH:mm:ss') : true;\n }\n },\n\n components: {\n TimePicker: panel_time, YearTable: year_table, MonthTable: month_table, DateTable: date_table, ElInput: input_default.a, ElButton: button_default.a\n },\n\n data: function data() {\n return {\n popperClass: '',\n date: new Date(),\n value: '',\n defaultValue: null, // use getDefaultValue() for time computation\n defaultTime: null,\n showTime: false,\n selectionMode: 'day',\n shortcuts: '',\n visible: false,\n currentView: 'date',\n disabledDate: '',\n cellClassName: '',\n selectableRange: [],\n firstDayOfWeek: 7,\n showWeekNumber: false,\n timePickerVisible: false,\n format: '',\n arrowControl: false,\n userInputDate: null,\n userInputTime: null\n };\n },\n\n\n computed: {\n year: function year() {\n return this.date.getFullYear();\n },\n month: function month() {\n return this.date.getMonth();\n },\n week: function week() {\n return Object(date_util_[\"getWeekNumber\"])(this.date);\n },\n monthDate: function monthDate() {\n return this.date.getDate();\n },\n footerVisible: function footerVisible() {\n return this.showTime || this.selectionMode === 'dates';\n },\n visibleTime: function visibleTime() {\n if (this.userInputTime !== null) {\n return this.userInputTime;\n } else {\n return Object(date_util_[\"formatDate\"])(this.value || this.defaultValue, this.timeFormat);\n }\n },\n visibleDate: function visibleDate() {\n if (this.userInputDate !== null) {\n return this.userInputDate;\n } else {\n return Object(date_util_[\"formatDate\"])(this.value || this.defaultValue, this.dateFormat);\n }\n },\n yearLabel: function yearLabel() {\n var yearTranslation = this.t('el.datepicker.year');\n if (this.currentView === 'year') {\n var startYear = Math.floor(this.year / 10) * 10;\n if (yearTranslation) {\n return startYear + ' ' + yearTranslation + ' - ' + (startYear + 9) + ' ' + yearTranslation;\n }\n return startYear + ' - ' + (startYear + 9);\n }\n return this.year + ' ' + yearTranslation;\n },\n timeFormat: function timeFormat() {\n if (this.format) {\n return Object(date_util_[\"extractTimeFormat\"])(this.format);\n } else {\n return 'HH:mm:ss';\n }\n },\n dateFormat: function dateFormat() {\n if (this.format) {\n return Object(date_util_[\"extractDateFormat\"])(this.format);\n } else {\n return 'yyyy-MM-dd';\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_datevue_type_script_lang_js_ = (datevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_component = normalizeComponent(\n panel_datevue_type_script_lang_js_,\n datevue_type_template_id_2440d4ea_render,\n datevue_type_template_id_2440d4ea_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var date_api; }\ndate_component.options.__file = \"packages/date-picker/src/panel/date.vue\"\n/* harmony default export */ var panel_date = (date_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date-range.vue?vue&type=template&id=2652849a&\nvar date_rangevue_type_template_id_2652849a_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-picker-panel el-date-range-picker el-popper\",\n class: [\n {\n \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts,\n \"has-time\": _vm.showTime\n },\n _vm.popperClass\n ]\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-picker-panel__body-wrapper\" },\n [\n _vm._t(\"sidebar\"),\n _vm.shortcuts\n ? _c(\n \"div\",\n { staticClass: \"el-picker-panel__sidebar\" },\n _vm._l(_vm.shortcuts, function(shortcut, key) {\n return _c(\n \"button\",\n {\n key: key,\n staticClass: \"el-picker-panel__shortcut\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleShortcutClick(shortcut)\n }\n }\n },\n [_vm._v(_vm._s(shortcut.text))]\n )\n }),\n 0\n )\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n _vm.showTime\n ? _c(\n \"div\",\n { staticClass: \"el-date-range-picker__time-header\" },\n [\n _c(\n \"span\",\n { staticClass: \"el-date-range-picker__editors-wrap\" },\n [\n _c(\n \"span\",\n {\n staticClass:\n \"el-date-range-picker__time-picker-wrap\"\n },\n [\n _c(\"el-input\", {\n ref: \"minInput\",\n staticClass: \"el-date-range-picker__editor\",\n attrs: {\n size: \"small\",\n disabled: _vm.rangeState.selecting,\n placeholder: _vm.t(\n \"el.datepicker.startDate\"\n ),\n value: _vm.minVisibleDate\n },\n on: {\n input: function(val) {\n return _vm.handleDateInput(val, \"min\")\n },\n change: function(val) {\n return _vm.handleDateChange(val, \"min\")\n }\n }\n })\n ],\n 1\n ),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleMinTimeClose,\n expression: \"handleMinTimeClose\"\n }\n ],\n staticClass:\n \"el-date-range-picker__time-picker-wrap\"\n },\n [\n _c(\"el-input\", {\n staticClass: \"el-date-range-picker__editor\",\n attrs: {\n size: \"small\",\n disabled: _vm.rangeState.selecting,\n placeholder: _vm.t(\n \"el.datepicker.startTime\"\n ),\n value: _vm.minVisibleTime\n },\n on: {\n focus: function($event) {\n _vm.minTimePickerVisible = true\n },\n input: function(val) {\n return _vm.handleTimeInput(val, \"min\")\n },\n change: function(val) {\n return _vm.handleTimeChange(val, \"min\")\n }\n }\n }),\n _c(\"time-picker\", {\n ref: \"minTimePicker\",\n attrs: {\n \"time-arrow-control\": _vm.arrowControl,\n visible: _vm.minTimePickerVisible\n },\n on: {\n pick: _vm.handleMinTimePick,\n mounted: function($event) {\n _vm.$refs.minTimePicker.format =\n _vm.timeFormat\n }\n }\n })\n ],\n 1\n )\n ]\n ),\n _c(\"span\", { staticClass: \"el-icon-arrow-right\" }),\n _c(\n \"span\",\n {\n staticClass:\n \"el-date-range-picker__editors-wrap is-right\"\n },\n [\n _c(\n \"span\",\n {\n staticClass:\n \"el-date-range-picker__time-picker-wrap\"\n },\n [\n _c(\"el-input\", {\n staticClass: \"el-date-range-picker__editor\",\n attrs: {\n size: \"small\",\n disabled: _vm.rangeState.selecting,\n placeholder: _vm.t(\"el.datepicker.endDate\"),\n value: _vm.maxVisibleDate,\n readonly: !_vm.minDate\n },\n on: {\n input: function(val) {\n return _vm.handleDateInput(val, \"max\")\n },\n change: function(val) {\n return _vm.handleDateChange(val, \"max\")\n }\n }\n })\n ],\n 1\n ),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleMaxTimeClose,\n expression: \"handleMaxTimeClose\"\n }\n ],\n staticClass:\n \"el-date-range-picker__time-picker-wrap\"\n },\n [\n _c(\"el-input\", {\n staticClass: \"el-date-range-picker__editor\",\n attrs: {\n size: \"small\",\n disabled: _vm.rangeState.selecting,\n placeholder: _vm.t(\"el.datepicker.endTime\"),\n value: _vm.maxVisibleTime,\n readonly: !_vm.minDate\n },\n on: {\n focus: function($event) {\n _vm.minDate &&\n (_vm.maxTimePickerVisible = true)\n },\n input: function(val) {\n return _vm.handleTimeInput(val, \"max\")\n },\n change: function(val) {\n return _vm.handleTimeChange(val, \"max\")\n }\n }\n }),\n _c(\"time-picker\", {\n ref: \"maxTimePicker\",\n attrs: {\n \"time-arrow-control\": _vm.arrowControl,\n visible: _vm.maxTimePickerVisible\n },\n on: {\n pick: _vm.handleMaxTimePick,\n mounted: function($event) {\n _vm.$refs.maxTimePicker.format =\n _vm.timeFormat\n }\n }\n })\n ],\n 1\n )\n ]\n )\n ]\n )\n : _vm._e(),\n _c(\n \"div\",\n {\n staticClass:\n \"el-picker-panel__content el-date-range-picker__content is-left\"\n },\n [\n _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n attrs: { type: \"button\" },\n on: { click: _vm.leftPrevYear }\n }),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-arrow-left\",\n attrs: { type: \"button\" },\n on: { click: _vm.leftPrevMonth }\n }),\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n class: { \"is-disabled\": !_vm.enableYearArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableYearArrow\n },\n on: { click: _vm.leftNextYear }\n })\n : _vm._e(),\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-arrow-right\",\n class: { \"is-disabled\": !_vm.enableMonthArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableMonthArrow\n },\n on: { click: _vm.leftNextMonth }\n })\n : _vm._e(),\n _c(\"div\", [_vm._v(_vm._s(_vm.leftLabel))])\n ]),\n _c(\"date-table\", {\n attrs: {\n \"selection-mode\": \"range\",\n date: _vm.leftDate,\n \"default-value\": _vm.defaultValue,\n \"min-date\": _vm.minDate,\n \"max-date\": _vm.maxDate,\n \"range-state\": _vm.rangeState,\n \"disabled-date\": _vm.disabledDate,\n \"cell-class-name\": _vm.cellClassName,\n \"first-day-of-week\": _vm.firstDayOfWeek\n },\n on: {\n changerange: _vm.handleChangeRange,\n pick: _vm.handleRangePick\n }\n })\n ],\n 1\n ),\n _c(\n \"div\",\n {\n staticClass:\n \"el-picker-panel__content el-date-range-picker__content is-right\"\n },\n [\n _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n class: { \"is-disabled\": !_vm.enableYearArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableYearArrow\n },\n on: { click: _vm.rightPrevYear }\n })\n : _vm._e(),\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-arrow-left\",\n class: { \"is-disabled\": !_vm.enableMonthArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableMonthArrow\n },\n on: { click: _vm.rightPrevMonth }\n })\n : _vm._e(),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n attrs: { type: \"button\" },\n on: { click: _vm.rightNextYear }\n }),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-arrow-right\",\n attrs: { type: \"button\" },\n on: { click: _vm.rightNextMonth }\n }),\n _c(\"div\", [_vm._v(_vm._s(_vm.rightLabel))])\n ]),\n _c(\"date-table\", {\n attrs: {\n \"selection-mode\": \"range\",\n date: _vm.rightDate,\n \"default-value\": _vm.defaultValue,\n \"min-date\": _vm.minDate,\n \"max-date\": _vm.maxDate,\n \"range-state\": _vm.rangeState,\n \"disabled-date\": _vm.disabledDate,\n \"cell-class-name\": _vm.cellClassName,\n \"first-day-of-week\": _vm.firstDayOfWeek\n },\n on: {\n changerange: _vm.handleChangeRange,\n pick: _vm.handleRangePick\n }\n })\n ],\n 1\n )\n ])\n ],\n 2\n ),\n _vm.showTime\n ? _c(\n \"div\",\n { staticClass: \"el-picker-panel__footer\" },\n [\n _c(\n \"el-button\",\n {\n staticClass: \"el-picker-panel__link-btn\",\n attrs: { size: \"mini\", type: \"text\" },\n on: { click: _vm.handleClear }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.clear\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n staticClass: \"el-picker-panel__link-btn\",\n attrs: {\n plain: \"\",\n size: \"mini\",\n disabled: _vm.btnDisabled\n },\n on: {\n click: function($event) {\n _vm.handleConfirm(false)\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.confirm\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n : _vm._e()\n ]\n )\n ]\n )\n}\nvar date_rangevue_type_template_id_2652849a_staticRenderFns = []\ndate_rangevue_type_template_id_2652849a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue?vue&type=template&id=2652849a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/date-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar date_rangevue_type_script_lang_js_calcDefaultValue = function calcDefaultValue(defaultValue) {\n if (Array.isArray(defaultValue)) {\n return [new Date(defaultValue[0]), new Date(defaultValue[1])];\n } else if (defaultValue) {\n return [new Date(defaultValue), Object(date_util_[\"nextDate\"])(new Date(defaultValue), 1)];\n } else {\n return [new Date(), Object(date_util_[\"nextDate\"])(new Date(), 1)];\n }\n};\n\n/* harmony default export */ var date_rangevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n directives: { Clickoutside: clickoutside_default.a },\n\n computed: {\n btnDisabled: function btnDisabled() {\n return !(this.minDate && this.maxDate && !this.selecting && this.isValidValue([this.minDate, this.maxDate]));\n },\n leftLabel: function leftLabel() {\n return this.leftDate.getFullYear() + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + (this.leftDate.getMonth() + 1));\n },\n rightLabel: function rightLabel() {\n return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + (this.rightDate.getMonth() + 1));\n },\n leftYear: function leftYear() {\n return this.leftDate.getFullYear();\n },\n leftMonth: function leftMonth() {\n return this.leftDate.getMonth();\n },\n leftMonthDate: function leftMonthDate() {\n return this.leftDate.getDate();\n },\n rightYear: function rightYear() {\n return this.rightDate.getFullYear();\n },\n rightMonth: function rightMonth() {\n return this.rightDate.getMonth();\n },\n rightMonthDate: function rightMonthDate() {\n return this.rightDate.getDate();\n },\n minVisibleDate: function minVisibleDate() {\n if (this.dateUserInput.min !== null) return this.dateUserInput.min;\n if (this.minDate) return Object(date_util_[\"formatDate\"])(this.minDate, this.dateFormat);\n return '';\n },\n maxVisibleDate: function maxVisibleDate() {\n if (this.dateUserInput.max !== null) return this.dateUserInput.max;\n if (this.maxDate || this.minDate) return Object(date_util_[\"formatDate\"])(this.maxDate || this.minDate, this.dateFormat);\n return '';\n },\n minVisibleTime: function minVisibleTime() {\n if (this.timeUserInput.min !== null) return this.timeUserInput.min;\n if (this.minDate) return Object(date_util_[\"formatDate\"])(this.minDate, this.timeFormat);\n return '';\n },\n maxVisibleTime: function maxVisibleTime() {\n if (this.timeUserInput.max !== null) return this.timeUserInput.max;\n if (this.maxDate || this.minDate) return Object(date_util_[\"formatDate\"])(this.maxDate || this.minDate, this.timeFormat);\n return '';\n },\n timeFormat: function timeFormat() {\n if (this.format) {\n return Object(date_util_[\"extractTimeFormat\"])(this.format);\n } else {\n return 'HH:mm:ss';\n }\n },\n dateFormat: function dateFormat() {\n if (this.format) {\n return Object(date_util_[\"extractDateFormat\"])(this.format);\n } else {\n return 'yyyy-MM-dd';\n }\n },\n enableMonthArrow: function enableMonthArrow() {\n var nextMonth = (this.leftMonth + 1) % 12;\n var yearOffset = this.leftMonth + 1 >= 12 ? 1 : 0;\n return this.unlinkPanels && new Date(this.leftYear + yearOffset, nextMonth) < new Date(this.rightYear, this.rightMonth);\n },\n enableYearArrow: function enableYearArrow() {\n return this.unlinkPanels && this.rightYear * 12 + this.rightMonth - (this.leftYear * 12 + this.leftMonth + 1) >= 12;\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n value: [],\n defaultValue: null,\n defaultTime: null,\n minDate: '',\n maxDate: '',\n leftDate: new Date(),\n rightDate: Object(date_util_[\"nextMonth\"])(new Date()),\n rangeState: {\n endDate: null,\n selecting: false,\n row: null,\n column: null\n },\n showTime: false,\n shortcuts: '',\n visible: '',\n disabledDate: '',\n cellClassName: '',\n firstDayOfWeek: 7,\n minTimePickerVisible: false,\n maxTimePickerVisible: false,\n format: '',\n arrowControl: false,\n unlinkPanels: false,\n dateUserInput: {\n min: null,\n max: null\n },\n timeUserInput: {\n min: null,\n max: null\n }\n };\n },\n\n\n watch: {\n minDate: function minDate(val) {\n var _this = this;\n\n this.dateUserInput.min = null;\n this.timeUserInput.min = null;\n this.$nextTick(function () {\n if (_this.$refs.maxTimePicker && _this.maxDate && _this.maxDate < _this.minDate) {\n var format = 'HH:mm:ss';\n _this.$refs.maxTimePicker.selectableRange = [[Object(date_util_[\"parseDate\"])(Object(date_util_[\"formatDate\"])(_this.minDate, format), format), Object(date_util_[\"parseDate\"])('23:59:59', format)]];\n }\n });\n if (val && this.$refs.minTimePicker) {\n this.$refs.minTimePicker.date = val;\n this.$refs.minTimePicker.value = val;\n }\n },\n maxDate: function maxDate(val) {\n this.dateUserInput.max = null;\n this.timeUserInput.max = null;\n if (val && this.$refs.maxTimePicker) {\n this.$refs.maxTimePicker.date = val;\n this.$refs.maxTimePicker.value = val;\n }\n },\n minTimePickerVisible: function minTimePickerVisible(val) {\n var _this2 = this;\n\n if (val) {\n this.$nextTick(function () {\n _this2.$refs.minTimePicker.date = _this2.minDate;\n _this2.$refs.minTimePicker.value = _this2.minDate;\n _this2.$refs.minTimePicker.adjustSpinners();\n });\n }\n },\n maxTimePickerVisible: function maxTimePickerVisible(val) {\n var _this3 = this;\n\n if (val) {\n this.$nextTick(function () {\n _this3.$refs.maxTimePicker.date = _this3.maxDate;\n _this3.$refs.maxTimePicker.value = _this3.maxDate;\n _this3.$refs.maxTimePicker.adjustSpinners();\n });\n }\n },\n value: function value(newVal) {\n if (!newVal) {\n this.minDate = null;\n this.maxDate = null;\n } else if (Array.isArray(newVal)) {\n this.minDate = Object(date_util_[\"isDate\"])(newVal[0]) ? new Date(newVal[0]) : null;\n this.maxDate = Object(date_util_[\"isDate\"])(newVal[1]) ? new Date(newVal[1]) : null;\n if (this.minDate) {\n this.leftDate = this.minDate;\n if (this.unlinkPanels && this.maxDate) {\n var minDateYear = this.minDate.getFullYear();\n var minDateMonth = this.minDate.getMonth();\n var maxDateYear = this.maxDate.getFullYear();\n var maxDateMonth = this.maxDate.getMonth();\n this.rightDate = minDateYear === maxDateYear && minDateMonth === maxDateMonth ? Object(date_util_[\"nextMonth\"])(this.maxDate) : this.maxDate;\n } else {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n } else {\n this.leftDate = date_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n }\n },\n defaultValue: function defaultValue(val) {\n if (!Array.isArray(this.value)) {\n var _calcDefaultValue = date_rangevue_type_script_lang_js_calcDefaultValue(val),\n left = _calcDefaultValue[0],\n right = _calcDefaultValue[1];\n\n this.leftDate = left;\n this.rightDate = val && val[1] && this.unlinkPanels ? right : Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n }\n },\n\n methods: {\n handleClear: function handleClear() {\n this.minDate = null;\n this.maxDate = null;\n this.leftDate = date_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n this.$emit('pick', null);\n },\n handleChangeRange: function handleChangeRange(val) {\n this.minDate = val.minDate;\n this.maxDate = val.maxDate;\n this.rangeState = val.rangeState;\n },\n handleDateInput: function handleDateInput(value, type) {\n this.dateUserInput[type] = value;\n if (value.length !== this.dateFormat.length) return;\n var parsedValue = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n\n if (parsedValue) {\n if (typeof this.disabledDate === 'function' && this.disabledDate(new Date(parsedValue))) {\n return;\n }\n if (type === 'min') {\n this.minDate = Object(date_util_[\"modifyDate\"])(this.minDate || new Date(), parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n this.leftDate = new Date(parsedValue);\n if (!this.unlinkPanels) {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n } else {\n this.maxDate = Object(date_util_[\"modifyDate\"])(this.maxDate || new Date(), parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n this.rightDate = new Date(parsedValue);\n if (!this.unlinkPanels) {\n this.leftDate = Object(date_util_[\"prevMonth\"])(parsedValue);\n }\n }\n }\n },\n handleDateChange: function handleDateChange(value, type) {\n var parsedValue = Object(date_util_[\"parseDate\"])(value, this.dateFormat);\n if (parsedValue) {\n if (type === 'min') {\n this.minDate = Object(date_util_[\"modifyDate\"])(this.minDate, parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n if (this.minDate > this.maxDate) {\n this.maxDate = this.minDate;\n }\n } else {\n this.maxDate = Object(date_util_[\"modifyDate\"])(this.maxDate, parsedValue.getFullYear(), parsedValue.getMonth(), parsedValue.getDate());\n if (this.maxDate < this.minDate) {\n this.minDate = this.maxDate;\n }\n }\n }\n },\n handleTimeInput: function handleTimeInput(value, type) {\n var _this4 = this;\n\n this.timeUserInput[type] = value;\n if (value.length !== this.timeFormat.length) return;\n var parsedValue = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n\n if (parsedValue) {\n if (type === 'min') {\n this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n this.$nextTick(function (_) {\n return _this4.$refs.minTimePicker.adjustSpinners();\n });\n } else {\n this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n this.$nextTick(function (_) {\n return _this4.$refs.maxTimePicker.adjustSpinners();\n });\n }\n }\n },\n handleTimeChange: function handleTimeChange(value, type) {\n var parsedValue = Object(date_util_[\"parseDate\"])(value, this.timeFormat);\n if (parsedValue) {\n if (type === 'min') {\n this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n if (this.minDate > this.maxDate) {\n this.maxDate = this.minDate;\n }\n this.$refs.minTimePicker.value = this.minDate;\n this.minTimePickerVisible = false;\n } else {\n this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, parsedValue.getHours(), parsedValue.getMinutes(), parsedValue.getSeconds());\n if (this.maxDate < this.minDate) {\n this.minDate = this.maxDate;\n }\n this.$refs.maxTimePicker.value = this.minDate;\n this.maxTimePickerVisible = false;\n }\n }\n },\n handleRangePick: function handleRangePick(val) {\n var _this5 = this;\n\n var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var defaultTime = this.defaultTime || [];\n var minDate = Object(date_util_[\"modifyWithTimeString\"])(val.minDate, defaultTime[0]);\n var maxDate = Object(date_util_[\"modifyWithTimeString\"])(val.maxDate, defaultTime[1]);\n\n if (this.maxDate === maxDate && this.minDate === minDate) {\n return;\n }\n this.onPick && this.onPick(val);\n this.maxDate = maxDate;\n this.minDate = minDate;\n\n // workaround for https://github.com/ElemeFE/element/issues/7539, should remove this block when we don't have to care about Chromium 55 - 57\n setTimeout(function () {\n _this5.maxDate = maxDate;\n _this5.minDate = minDate;\n }, 10);\n if (!close || this.showTime) return;\n this.handleConfirm();\n },\n handleShortcutClick: function handleShortcutClick(shortcut) {\n if (shortcut.onClick) {\n shortcut.onClick(this);\n }\n },\n handleMinTimePick: function handleMinTimePick(value, visible, first) {\n this.minDate = this.minDate || new Date();\n if (value) {\n this.minDate = Object(date_util_[\"modifyTime\"])(this.minDate, value.getHours(), value.getMinutes(), value.getSeconds());\n }\n\n if (!first) {\n this.minTimePickerVisible = visible;\n }\n\n if (!this.maxDate || this.maxDate && this.maxDate.getTime() < this.minDate.getTime()) {\n this.maxDate = new Date(this.minDate);\n }\n },\n handleMinTimeClose: function handleMinTimeClose() {\n this.minTimePickerVisible = false;\n },\n handleMaxTimePick: function handleMaxTimePick(value, visible, first) {\n if (this.maxDate && value) {\n this.maxDate = Object(date_util_[\"modifyTime\"])(this.maxDate, value.getHours(), value.getMinutes(), value.getSeconds());\n }\n\n if (!first) {\n this.maxTimePickerVisible = visible;\n }\n\n if (this.maxDate && this.minDate && this.minDate.getTime() > this.maxDate.getTime()) {\n this.minDate = new Date(this.maxDate);\n }\n },\n handleMaxTimeClose: function handleMaxTimeClose() {\n this.maxTimePickerVisible = false;\n },\n\n\n // leftPrev*, rightNext* need to take care of `unlinkPanels`\n leftPrevYear: function leftPrevYear() {\n this.leftDate = Object(date_util_[\"prevYear\"])(this.leftDate);\n if (!this.unlinkPanels) {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n },\n leftPrevMonth: function leftPrevMonth() {\n this.leftDate = Object(date_util_[\"prevMonth\"])(this.leftDate);\n if (!this.unlinkPanels) {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n }\n },\n rightNextYear: function rightNextYear() {\n if (!this.unlinkPanels) {\n this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n } else {\n this.rightDate = Object(date_util_[\"nextYear\"])(this.rightDate);\n }\n },\n rightNextMonth: function rightNextMonth() {\n if (!this.unlinkPanels) {\n this.leftDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n } else {\n this.rightDate = Object(date_util_[\"nextMonth\"])(this.rightDate);\n }\n },\n\n\n // leftNext*, rightPrev* are called when `unlinkPanels` is true\n leftNextYear: function leftNextYear() {\n this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n },\n leftNextMonth: function leftNextMonth() {\n this.leftDate = Object(date_util_[\"nextMonth\"])(this.leftDate);\n },\n rightPrevYear: function rightPrevYear() {\n this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n },\n rightPrevMonth: function rightPrevMonth() {\n this.rightDate = Object(date_util_[\"prevMonth\"])(this.rightDate);\n },\n handleConfirm: function handleConfirm() {\n var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.isValidValue([this.minDate, this.maxDate])) {\n this.$emit('pick', [this.minDate, this.maxDate], visible);\n }\n },\n isValidValue: function isValidValue(value) {\n return Array.isArray(value) && value && value[0] && value[1] && Object(date_util_[\"isDate\"])(value[0]) && Object(date_util_[\"isDate\"])(value[1]) && value[0].getTime() <= value[1].getTime() && (typeof this.disabledDate === 'function' ? !this.disabledDate(value[0]) && !this.disabledDate(value[1]) : true);\n },\n resetView: function resetView() {\n // NOTE: this is a hack to reset {min, max}Date on picker open.\n // TODO: correct way of doing so is to refactor {min, max}Date to be dependent on value and internal selection state\n // an alternative would be resetView whenever picker becomes visible, should also investigate date-panel's resetView\n if (this.minDate && this.maxDate == null) this.rangeState.selecting = false;\n this.minDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[0]) : null;\n this.maxDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[1]) : null;\n }\n },\n\n components: { TimePicker: panel_time, DateTable: date_table, ElInput: input_default.a, ElButton: button_default.a }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_date_rangevue_type_script_lang_js_ = (date_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/date-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar date_range_component = normalizeComponent(\n panel_date_rangevue_type_script_lang_js_,\n date_rangevue_type_template_id_2652849a_render,\n date_rangevue_type_template_id_2652849a_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var date_range_api; }\ndate_range_component.options.__file = \"packages/date-picker/src/panel/date-range.vue\"\n/* harmony default export */ var date_range = (date_range_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/month-range.vue?vue&type=template&id=f2645fb8&\nvar month_rangevue_type_template_id_f2645fb8_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-picker-panel el-date-range-picker el-popper\",\n class: [\n {\n \"has-sidebar\": _vm.$slots.sidebar || _vm.shortcuts\n },\n _vm.popperClass\n ]\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-picker-panel__body-wrapper\" },\n [\n _vm._t(\"sidebar\"),\n _vm.shortcuts\n ? _c(\n \"div\",\n { staticClass: \"el-picker-panel__sidebar\" },\n _vm._l(_vm.shortcuts, function(shortcut, key) {\n return _c(\n \"button\",\n {\n key: key,\n staticClass: \"el-picker-panel__shortcut\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleShortcutClick(shortcut)\n }\n }\n },\n [_vm._v(_vm._s(shortcut.text))]\n )\n }),\n 0\n )\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-picker-panel__body\" }, [\n _c(\n \"div\",\n {\n staticClass:\n \"el-picker-panel__content el-date-range-picker__content is-left\"\n },\n [\n _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n attrs: { type: \"button\" },\n on: { click: _vm.leftPrevYear }\n }),\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n class: { \"is-disabled\": !_vm.enableYearArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableYearArrow\n },\n on: { click: _vm.leftNextYear }\n })\n : _vm._e(),\n _c(\"div\", [_vm._v(_vm._s(_vm.leftLabel))])\n ]),\n _c(\"month-table\", {\n attrs: {\n \"selection-mode\": \"range\",\n date: _vm.leftDate,\n \"default-value\": _vm.defaultValue,\n \"min-date\": _vm.minDate,\n \"max-date\": _vm.maxDate,\n \"range-state\": _vm.rangeState,\n \"disabled-date\": _vm.disabledDate\n },\n on: {\n changerange: _vm.handleChangeRange,\n pick: _vm.handleRangePick\n }\n })\n ],\n 1\n ),\n _c(\n \"div\",\n {\n staticClass:\n \"el-picker-panel__content el-date-range-picker__content is-right\"\n },\n [\n _c(\"div\", { staticClass: \"el-date-range-picker__header\" }, [\n _vm.unlinkPanels\n ? _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-left\",\n class: { \"is-disabled\": !_vm.enableYearArrow },\n attrs: {\n type: \"button\",\n disabled: !_vm.enableYearArrow\n },\n on: { click: _vm.rightPrevYear }\n })\n : _vm._e(),\n _c(\"button\", {\n staticClass:\n \"el-picker-panel__icon-btn el-icon-d-arrow-right\",\n attrs: { type: \"button\" },\n on: { click: _vm.rightNextYear }\n }),\n _c(\"div\", [_vm._v(_vm._s(_vm.rightLabel))])\n ]),\n _c(\"month-table\", {\n attrs: {\n \"selection-mode\": \"range\",\n date: _vm.rightDate,\n \"default-value\": _vm.defaultValue,\n \"min-date\": _vm.minDate,\n \"max-date\": _vm.maxDate,\n \"range-state\": _vm.rangeState,\n \"disabled-date\": _vm.disabledDate\n },\n on: {\n changerange: _vm.handleChangeRange,\n pick: _vm.handleRangePick\n }\n })\n ],\n 1\n )\n ])\n ],\n 2\n )\n ]\n )\n ]\n )\n}\nvar month_rangevue_type_template_id_f2645fb8_staticRenderFns = []\nmonth_rangevue_type_template_id_f2645fb8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue?vue&type=template&id=f2645fb8&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/month-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar month_rangevue_type_script_lang_js_calcDefaultValue = function calcDefaultValue(defaultValue) {\n if (Array.isArray(defaultValue)) {\n return [new Date(defaultValue[0]), new Date(defaultValue[1])];\n } else if (defaultValue) {\n return [new Date(defaultValue), Object(date_util_[\"nextMonth\"])(new Date(defaultValue))];\n } else {\n return [new Date(), Object(date_util_[\"nextMonth\"])(new Date())];\n }\n};\n/* harmony default export */ var month_rangevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n directives: { Clickoutside: clickoutside_default.a },\n\n computed: {\n btnDisabled: function btnDisabled() {\n return !(this.minDate && this.maxDate && !this.selecting && this.isValidValue([this.minDate, this.maxDate]));\n },\n leftLabel: function leftLabel() {\n return this.leftDate.getFullYear() + ' ' + this.t('el.datepicker.year');\n },\n rightLabel: function rightLabel() {\n return this.rightDate.getFullYear() + ' ' + this.t('el.datepicker.year');\n },\n leftYear: function leftYear() {\n return this.leftDate.getFullYear();\n },\n rightYear: function rightYear() {\n return this.rightDate.getFullYear() === this.leftDate.getFullYear() ? this.leftDate.getFullYear() + 1 : this.rightDate.getFullYear();\n },\n enableYearArrow: function enableYearArrow() {\n return this.unlinkPanels && this.rightYear > this.leftYear + 1;\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n value: [],\n defaultValue: null,\n defaultTime: null,\n minDate: '',\n maxDate: '',\n leftDate: new Date(),\n rightDate: Object(date_util_[\"nextYear\"])(new Date()),\n rangeState: {\n endDate: null,\n selecting: false,\n row: null,\n column: null\n },\n shortcuts: '',\n visible: '',\n disabledDate: '',\n format: '',\n arrowControl: false,\n unlinkPanels: false\n };\n },\n\n\n watch: {\n value: function value(newVal) {\n if (!newVal) {\n this.minDate = null;\n this.maxDate = null;\n } else if (Array.isArray(newVal)) {\n this.minDate = Object(date_util_[\"isDate\"])(newVal[0]) ? new Date(newVal[0]) : null;\n this.maxDate = Object(date_util_[\"isDate\"])(newVal[1]) ? new Date(newVal[1]) : null;\n if (this.minDate) {\n this.leftDate = this.minDate;\n if (this.unlinkPanels && this.maxDate) {\n var minDateYear = this.minDate.getFullYear();\n var maxDateYear = this.maxDate.getFullYear();\n this.rightDate = minDateYear === maxDateYear ? Object(date_util_[\"nextYear\"])(this.maxDate) : this.maxDate;\n } else {\n this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n }\n } else {\n this.leftDate = month_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n }\n }\n },\n defaultValue: function defaultValue(val) {\n if (!Array.isArray(this.value)) {\n var _calcDefaultValue = month_rangevue_type_script_lang_js_calcDefaultValue(val),\n left = _calcDefaultValue[0],\n right = _calcDefaultValue[1];\n\n this.leftDate = left;\n this.rightDate = val && val[1] && left.getFullYear() !== right.getFullYear() && this.unlinkPanels ? right : Object(date_util_[\"nextYear\"])(this.leftDate);\n }\n }\n },\n\n methods: {\n handleClear: function handleClear() {\n this.minDate = null;\n this.maxDate = null;\n this.leftDate = month_rangevue_type_script_lang_js_calcDefaultValue(this.defaultValue)[0];\n this.rightDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n this.$emit('pick', null);\n },\n handleChangeRange: function handleChangeRange(val) {\n this.minDate = val.minDate;\n this.maxDate = val.maxDate;\n this.rangeState = val.rangeState;\n },\n handleRangePick: function handleRangePick(val) {\n var _this = this;\n\n var close = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var defaultTime = this.defaultTime || [];\n var minDate = Object(date_util_[\"modifyWithTimeString\"])(val.minDate, defaultTime[0]);\n var maxDate = Object(date_util_[\"modifyWithTimeString\"])(val.maxDate, defaultTime[1]);\n if (this.maxDate === maxDate && this.minDate === minDate) {\n return;\n }\n this.onPick && this.onPick(val);\n this.maxDate = maxDate;\n this.minDate = minDate;\n\n // workaround for https://github.com/ElemeFE/element/issues/7539, should remove this block when we don't have to care about Chromium 55 - 57\n setTimeout(function () {\n _this.maxDate = maxDate;\n _this.minDate = minDate;\n }, 10);\n if (!close) return;\n this.handleConfirm();\n },\n handleShortcutClick: function handleShortcutClick(shortcut) {\n if (shortcut.onClick) {\n shortcut.onClick(this);\n }\n },\n\n\n // leftPrev*, rightNext* need to take care of `unlinkPanels`\n leftPrevYear: function leftPrevYear() {\n this.leftDate = Object(date_util_[\"prevYear\"])(this.leftDate);\n if (!this.unlinkPanels) {\n this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n }\n },\n rightNextYear: function rightNextYear() {\n if (!this.unlinkPanels) {\n this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n }\n this.rightDate = Object(date_util_[\"nextYear\"])(this.rightDate);\n },\n\n\n // leftNext*, rightPrev* are called when `unlinkPanels` is true\n leftNextYear: function leftNextYear() {\n this.leftDate = Object(date_util_[\"nextYear\"])(this.leftDate);\n },\n rightPrevYear: function rightPrevYear() {\n this.rightDate = Object(date_util_[\"prevYear\"])(this.rightDate);\n },\n handleConfirm: function handleConfirm() {\n var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.isValidValue([this.minDate, this.maxDate])) {\n this.$emit('pick', [this.minDate, this.maxDate], visible);\n }\n },\n isValidValue: function isValidValue(value) {\n return Array.isArray(value) && value && value[0] && value[1] && Object(date_util_[\"isDate\"])(value[0]) && Object(date_util_[\"isDate\"])(value[1]) && value[0].getTime() <= value[1].getTime() && (typeof this.disabledDate === 'function' ? !this.disabledDate(value[0]) && !this.disabledDate(value[1]) : true);\n },\n resetView: function resetView() {\n // NOTE: this is a hack to reset {min, max}Date on picker open.\n // TODO: correct way of doing so is to refactor {min, max}Date to be dependent on value and internal selection state\n // an alternative would be resetView whenever picker becomes visible, should also investigate date-panel's resetView\n this.minDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[0]) : null;\n this.maxDate = this.value && Object(date_util_[\"isDate\"])(this.value[0]) ? new Date(this.value[1]) : null;\n }\n },\n\n components: { MonthTable: month_table, ElInput: input_default.a, ElButton: button_default.a }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_month_rangevue_type_script_lang_js_ = (month_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/month-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar month_range_component = normalizeComponent(\n panel_month_rangevue_type_script_lang_js_,\n month_rangevue_type_template_id_f2645fb8_render,\n month_rangevue_type_template_id_f2645fb8_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var month_range_api; }\nmonth_range_component.options.__file = \"packages/date-picker/src/panel/month-range.vue\"\n/* harmony default export */ var month_range = (month_range_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/date-picker.js\n\n\n\n\n\nvar date_picker_getPanel = function getPanel(type) {\n if (type === 'daterange' || type === 'datetimerange') {\n return date_range;\n } else if (type === 'monthrange') {\n return month_range;\n }\n return panel_date;\n};\n\n/* harmony default export */ var date_picker = ({\n mixins: [picker],\n\n name: 'ElDatePicker',\n\n props: {\n type: {\n type: String,\n default: 'date'\n },\n timeArrowControl: Boolean\n },\n\n watch: {\n type: function type(_type) {\n if (this.picker) {\n this.unmountPicker();\n this.panel = date_picker_getPanel(_type);\n this.mountPicker();\n } else {\n this.panel = date_picker_getPanel(_type);\n }\n }\n },\n\n created: function created() {\n this.panel = date_picker_getPanel(this.type);\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/index.js\n\n\n/* istanbul ignore next */\ndate_picker.install = function install(Vue) {\n Vue.component(date_picker.name, date_picker);\n};\n\n/* harmony default export */ var packages_date_picker = (date_picker);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-select.vue?vue&type=template&id=51ab9320&\nvar time_selectvue_type_template_id_51ab9320_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"before-enter\": _vm.handleMenuEnter,\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n ref: \"popper\",\n staticClass: \"el-picker-panel time-select el-popper\",\n class: _vm.popperClass,\n style: { width: _vm.width + \"px\" }\n },\n [\n _c(\n \"el-scrollbar\",\n {\n attrs: { noresize: \"\", \"wrap-class\": \"el-picker-panel__content\" }\n },\n _vm._l(_vm.items, function(item) {\n return _c(\n \"div\",\n {\n key: item.value,\n staticClass: \"time-select-item\",\n class: {\n selected: _vm.value === item.value,\n disabled: item.disabled,\n default: item.value === _vm.defaultValue\n },\n attrs: { disabled: item.disabled },\n on: {\n click: function($event) {\n _vm.handleClick(item)\n }\n }\n },\n [_vm._v(_vm._s(item.value))]\n )\n }),\n 0\n )\n ],\n 1\n )\n ]\n )\n}\nvar time_selectvue_type_template_id_51ab9320_staticRenderFns = []\ntime_selectvue_type_template_id_51ab9320_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue?vue&type=template&id=51ab9320&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-select.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\nvar parseTime = function parseTime(time) {\n var values = (time || '').split(':');\n if (values.length >= 2) {\n var hours = parseInt(values[0], 10);\n var minutes = parseInt(values[1], 10);\n\n return {\n hours: hours,\n minutes: minutes\n };\n }\n /* istanbul ignore next */\n return null;\n};\n\nvar compareTime = function compareTime(time1, time2) {\n var value1 = parseTime(time1);\n var value2 = parseTime(time2);\n\n var minutes1 = value1.minutes + value1.hours * 60;\n var minutes2 = value2.minutes + value2.hours * 60;\n\n if (minutes1 === minutes2) {\n return 0;\n }\n\n return minutes1 > minutes2 ? 1 : -1;\n};\n\nvar formatTime = function formatTime(time) {\n return (time.hours < 10 ? '0' + time.hours : time.hours) + ':' + (time.minutes < 10 ? '0' + time.minutes : time.minutes);\n};\n\nvar nextTime = function nextTime(time, step) {\n var timeValue = parseTime(time);\n var stepValue = parseTime(step);\n\n var next = {\n hours: timeValue.hours,\n minutes: timeValue.minutes\n };\n\n next.minutes += stepValue.minutes;\n next.hours += stepValue.hours;\n\n next.hours += Math.floor(next.minutes / 60);\n next.minutes = next.minutes % 60;\n\n return formatTime(next);\n};\n\n/* harmony default export */ var time_selectvue_type_script_lang_js_ = ({\n components: { ElScrollbar: scrollbar_default.a },\n\n watch: {\n value: function value(val) {\n var _this = this;\n\n if (!val) return;\n this.$nextTick(function () {\n return _this.scrollToOption();\n });\n }\n },\n\n methods: {\n handleClick: function handleClick(item) {\n if (!item.disabled) {\n this.$emit('pick', item.value);\n }\n },\n handleClear: function handleClear() {\n this.$emit('pick', null);\n },\n scrollToOption: function scrollToOption() {\n var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '.selected';\n\n var menu = this.$refs.popper.querySelector('.el-picker-panel__content');\n scroll_into_view_default()(menu, menu.querySelector(selector));\n },\n handleMenuEnter: function handleMenuEnter() {\n var _this2 = this;\n\n var selected = this.items.map(function (item) {\n return item.value;\n }).indexOf(this.value) !== -1;\n var hasDefault = this.items.map(function (item) {\n return item.value;\n }).indexOf(this.defaultValue) !== -1;\n var option = selected && '.selected' || hasDefault && '.default' || '.time-select-item:not(.disabled)';\n this.$nextTick(function () {\n return _this2.scrollToOption(option);\n });\n },\n scrollDown: function scrollDown(step) {\n var items = this.items;\n var length = items.length;\n var total = items.length;\n var index = items.map(function (item) {\n return item.value;\n }).indexOf(this.value);\n while (total--) {\n index = (index + step + length) % length;\n if (!items[index].disabled) {\n this.$emit('pick', items[index].value, true);\n return;\n }\n }\n },\n isValidValue: function isValidValue(date) {\n return this.items.filter(function (item) {\n return !item.disabled;\n }).map(function (item) {\n return item.value;\n }).indexOf(date) !== -1;\n },\n handleKeydown: function handleKeydown(event) {\n var keyCode = event.keyCode;\n if (keyCode === 38 || keyCode === 40) {\n var mapping = { 40: 1, 38: -1 };\n var offset = mapping[keyCode.toString()];\n this.scrollDown(offset);\n event.stopPropagation();\n return;\n }\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n start: '09:00',\n end: '18:00',\n step: '00:30',\n value: '',\n defaultValue: '',\n visible: false,\n minTime: '',\n maxTime: '',\n width: 0\n };\n },\n\n\n computed: {\n items: function items() {\n var start = this.start;\n var end = this.end;\n var step = this.step;\n\n var result = [];\n\n if (start && end && step) {\n var current = start;\n while (compareTime(current, end) <= 0) {\n result.push({\n value: current,\n disabled: compareTime(current, this.minTime || '-1:-1') <= 0 || compareTime(current, this.maxTime || '100:100') >= 0\n });\n current = nextTime(current, step);\n }\n }\n\n return result;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_time_selectvue_type_script_lang_js_ = (time_selectvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-select.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_select_component = normalizeComponent(\n panel_time_selectvue_type_script_lang_js_,\n time_selectvue_type_template_id_51ab9320_render,\n time_selectvue_type_template_id_51ab9320_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var time_select_api; }\ntime_select_component.options.__file = \"packages/date-picker/src/panel/time-select.vue\"\n/* harmony default export */ var time_select = (time_select_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/time-select.js\n\n\n\n/* harmony default export */ var picker_time_select = ({\n mixins: [picker],\n\n name: 'ElTimeSelect',\n\n componentName: 'ElTimeSelect',\n\n props: {\n type: {\n type: String,\n default: 'time-select'\n }\n },\n\n beforeCreate: function beforeCreate() {\n this.panel = time_select;\n }\n});\n// CONCATENATED MODULE: ./packages/time-select/index.js\n\n\n/* istanbul ignore next */\npicker_time_select.install = function (Vue) {\n Vue.component(picker_time_select.name, picker_time_select);\n};\n\n/* harmony default export */ var packages_time_select = (picker_time_select);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-range.vue?vue&type=template&id=fb28660e&\nvar time_rangevue_type_template_id_fb28660e_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"after-leave\": function($event) {\n _vm.$emit(\"dodestroy\")\n }\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-time-range-picker el-picker-panel el-popper\",\n class: _vm.popperClass\n },\n [\n _c(\"div\", { staticClass: \"el-time-range-picker__content\" }, [\n _c(\"div\", { staticClass: \"el-time-range-picker__cell\" }, [\n _c(\"div\", { staticClass: \"el-time-range-picker__header\" }, [\n _vm._v(_vm._s(_vm.t(\"el.datepicker.startTime\")))\n ]),\n _c(\n \"div\",\n {\n staticClass:\n \"el-time-range-picker__body el-time-panel__content\",\n class: {\n \"has-seconds\": _vm.showSeconds,\n \"is-arrow\": _vm.arrowControl\n }\n },\n [\n _c(\"time-spinner\", {\n ref: \"minSpinner\",\n attrs: {\n \"show-seconds\": _vm.showSeconds,\n \"am-pm-mode\": _vm.amPmMode,\n \"arrow-control\": _vm.arrowControl,\n date: _vm.minDate\n },\n on: {\n change: _vm.handleMinChange,\n \"select-range\": _vm.setMinSelectionRange\n }\n })\n ],\n 1\n )\n ]),\n _c(\"div\", { staticClass: \"el-time-range-picker__cell\" }, [\n _c(\"div\", { staticClass: \"el-time-range-picker__header\" }, [\n _vm._v(_vm._s(_vm.t(\"el.datepicker.endTime\")))\n ]),\n _c(\n \"div\",\n {\n staticClass:\n \"el-time-range-picker__body el-time-panel__content\",\n class: {\n \"has-seconds\": _vm.showSeconds,\n \"is-arrow\": _vm.arrowControl\n }\n },\n [\n _c(\"time-spinner\", {\n ref: \"maxSpinner\",\n attrs: {\n \"show-seconds\": _vm.showSeconds,\n \"am-pm-mode\": _vm.amPmMode,\n \"arrow-control\": _vm.arrowControl,\n date: _vm.maxDate\n },\n on: {\n change: _vm.handleMaxChange,\n \"select-range\": _vm.setMaxSelectionRange\n }\n })\n ],\n 1\n )\n ])\n ]),\n _c(\"div\", { staticClass: \"el-time-panel__footer\" }, [\n _c(\n \"button\",\n {\n staticClass: \"el-time-panel__btn cancel\",\n attrs: { type: \"button\" },\n on: {\n click: function($event) {\n _vm.handleCancel()\n }\n }\n },\n [_vm._v(_vm._s(_vm.t(\"el.datepicker.cancel\")))]\n ),\n _c(\n \"button\",\n {\n staticClass: \"el-time-panel__btn confirm\",\n attrs: { type: \"button\", disabled: _vm.btnDisabled },\n on: {\n click: function($event) {\n _vm.handleConfirm()\n }\n }\n },\n [_vm._v(_vm._s(_vm.t(\"el.datepicker.confirm\")))]\n )\n ])\n ]\n )\n ]\n )\n}\nvar time_rangevue_type_template_id_fb28660e_staticRenderFns = []\ntime_rangevue_type_template_id_fb28660e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue?vue&type=template&id=fb28660e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/date-picker/src/panel/time-range.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar MIN_TIME = Object(date_util_[\"parseDate\"])('00:00:00', 'HH:mm:ss');\nvar MAX_TIME = Object(date_util_[\"parseDate\"])('23:59:59', 'HH:mm:ss');\n\nvar time_rangevue_type_script_lang_js_minTimeOfDay = function minTimeOfDay(date) {\n return Object(date_util_[\"modifyDate\"])(MIN_TIME, date.getFullYear(), date.getMonth(), date.getDate());\n};\n\nvar time_rangevue_type_script_lang_js_maxTimeOfDay = function maxTimeOfDay(date) {\n return Object(date_util_[\"modifyDate\"])(MAX_TIME, date.getFullYear(), date.getMonth(), date.getDate());\n};\n\n// increase time by amount of milliseconds, but within the range of day\nvar advanceTime = function advanceTime(date, amount) {\n return new Date(Math.min(date.getTime() + amount, time_rangevue_type_script_lang_js_maxTimeOfDay(date).getTime()));\n};\n\n/* harmony default export */ var time_rangevue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n components: { TimeSpinner: time_spinner },\n\n computed: {\n showSeconds: function showSeconds() {\n return (this.format || '').indexOf('ss') !== -1;\n },\n offset: function offset() {\n return this.showSeconds ? 11 : 8;\n },\n spinner: function spinner() {\n return this.selectionRange[0] < this.offset ? this.$refs.minSpinner : this.$refs.maxSpinner;\n },\n btnDisabled: function btnDisabled() {\n return this.minDate.getTime() > this.maxDate.getTime();\n },\n amPmMode: function amPmMode() {\n if ((this.format || '').indexOf('A') !== -1) return 'A';\n if ((this.format || '').indexOf('a') !== -1) return 'a';\n return '';\n }\n },\n\n data: function data() {\n return {\n popperClass: '',\n minDate: new Date(),\n maxDate: new Date(),\n value: [],\n oldValue: [new Date(), new Date()],\n defaultValue: null,\n format: 'HH:mm:ss',\n visible: false,\n selectionRange: [0, 2],\n arrowControl: false\n };\n },\n\n\n watch: {\n value: function value(_value) {\n if (Array.isArray(_value)) {\n this.minDate = new Date(_value[0]);\n this.maxDate = new Date(_value[1]);\n } else {\n if (Array.isArray(this.defaultValue)) {\n this.minDate = new Date(this.defaultValue[0]);\n this.maxDate = new Date(this.defaultValue[1]);\n } else if (this.defaultValue) {\n this.minDate = new Date(this.defaultValue);\n this.maxDate = advanceTime(new Date(this.defaultValue), 60 * 60 * 1000);\n } else {\n this.minDate = new Date();\n this.maxDate = advanceTime(new Date(), 60 * 60 * 1000);\n }\n }\n },\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n this.oldValue = this.value;\n this.$nextTick(function () {\n return _this.$refs.minSpinner.emitSelectRange('hours');\n });\n }\n }\n },\n\n methods: {\n handleClear: function handleClear() {\n this.$emit('pick', null);\n },\n handleCancel: function handleCancel() {\n this.$emit('pick', this.oldValue);\n },\n handleMinChange: function handleMinChange(date) {\n this.minDate = Object(date_util_[\"clearMilliseconds\"])(date);\n this.handleChange();\n },\n handleMaxChange: function handleMaxChange(date) {\n this.maxDate = Object(date_util_[\"clearMilliseconds\"])(date);\n this.handleChange();\n },\n handleChange: function handleChange() {\n if (this.isValidValue([this.minDate, this.maxDate])) {\n this.$refs.minSpinner.selectableRange = [[time_rangevue_type_script_lang_js_minTimeOfDay(this.minDate), this.maxDate]];\n this.$refs.maxSpinner.selectableRange = [[this.minDate, time_rangevue_type_script_lang_js_maxTimeOfDay(this.maxDate)]];\n this.$emit('pick', [this.minDate, this.maxDate], true);\n }\n },\n setMinSelectionRange: function setMinSelectionRange(start, end) {\n this.$emit('select-range', start, end, 'min');\n this.selectionRange = [start, end];\n },\n setMaxSelectionRange: function setMaxSelectionRange(start, end) {\n this.$emit('select-range', start, end, 'max');\n this.selectionRange = [start + this.offset, end + this.offset];\n },\n handleConfirm: function handleConfirm() {\n var visible = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n var minSelectableRange = this.$refs.minSpinner.selectableRange;\n var maxSelectableRange = this.$refs.maxSpinner.selectableRange;\n\n this.minDate = Object(date_util_[\"limitTimeRange\"])(this.minDate, minSelectableRange, this.format);\n this.maxDate = Object(date_util_[\"limitTimeRange\"])(this.maxDate, maxSelectableRange, this.format);\n\n this.$emit('pick', [this.minDate, this.maxDate], visible);\n },\n adjustSpinners: function adjustSpinners() {\n this.$refs.minSpinner.adjustSpinners();\n this.$refs.maxSpinner.adjustSpinners();\n },\n changeSelectionRange: function changeSelectionRange(step) {\n var list = this.showSeconds ? [0, 3, 6, 11, 14, 17] : [0, 3, 8, 11];\n var mapping = ['hours', 'minutes'].concat(this.showSeconds ? ['seconds'] : []);\n var index = list.indexOf(this.selectionRange[0]);\n var next = (index + step + list.length) % list.length;\n var half = list.length / 2;\n if (next < half) {\n this.$refs.minSpinner.emitSelectRange(mapping[next]);\n } else {\n this.$refs.maxSpinner.emitSelectRange(mapping[next - half]);\n }\n },\n isValidValue: function isValidValue(date) {\n return Array.isArray(date) && Object(date_util_[\"timeWithinRange\"])(this.minDate, this.$refs.minSpinner.selectableRange) && Object(date_util_[\"timeWithinRange\"])(this.maxDate, this.$refs.maxSpinner.selectableRange);\n },\n handleKeydown: function handleKeydown(event) {\n var keyCode = event.keyCode;\n var mapping = { 38: -1, 40: 1, 37: -1, 39: 1 };\n\n // Left or Right\n if (keyCode === 37 || keyCode === 39) {\n var step = mapping[keyCode];\n this.changeSelectionRange(step);\n event.preventDefault();\n return;\n }\n\n // Up or Down\n if (keyCode === 38 || keyCode === 40) {\n var _step = mapping[keyCode];\n this.spinner.scrollDown(_step);\n event.preventDefault();\n return;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue?vue&type=script&lang=js&\n /* harmony default export */ var panel_time_rangevue_type_script_lang_js_ = (time_rangevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/date-picker/src/panel/time-range.vue\n\n\n\n\n\n/* normalize component */\n\nvar time_range_component = normalizeComponent(\n panel_time_rangevue_type_script_lang_js_,\n time_rangevue_type_template_id_fb28660e_render,\n time_rangevue_type_template_id_fb28660e_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var time_range_api; }\ntime_range_component.options.__file = \"packages/date-picker/src/panel/time-range.vue\"\n/* harmony default export */ var time_range = (time_range_component.exports);\n// CONCATENATED MODULE: ./packages/date-picker/src/picker/time-picker.js\n\n\n\n\n/* harmony default export */ var time_picker = ({\n mixins: [picker],\n\n name: 'ElTimePicker',\n\n props: {\n isRange: Boolean,\n arrowControl: Boolean\n },\n\n data: function data() {\n return {\n type: ''\n };\n },\n\n\n watch: {\n isRange: function isRange(_isRange) {\n if (this.picker) {\n this.unmountPicker();\n this.type = _isRange ? 'timerange' : 'time';\n this.panel = _isRange ? time_range : panel_time;\n this.mountPicker();\n } else {\n this.type = _isRange ? 'timerange' : 'time';\n this.panel = _isRange ? time_range : panel_time;\n }\n }\n },\n\n created: function created() {\n this.type = this.isRange ? 'timerange' : 'time';\n this.panel = this.isRange ? time_range : panel_time;\n }\n});\n// CONCATENATED MODULE: ./packages/time-picker/index.js\n\n\n/* istanbul ignore next */\ntime_picker.install = function (Vue) {\n Vue.component(time_picker.name, time_picker);\n};\n\n/* harmony default export */ var packages_time_picker = (time_picker);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=template&id=52060272&\nvar mainvue_type_template_id_52060272_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n [\n _c(\n \"transition\",\n {\n attrs: { name: _vm.transition },\n on: {\n \"after-enter\": _vm.handleAfterEnter,\n \"after-leave\": _vm.handleAfterLeave\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.disabled && _vm.showPopper,\n expression: \"!disabled && showPopper\"\n }\n ],\n ref: \"popper\",\n staticClass: \"el-popover el-popper\",\n class: [_vm.popperClass, _vm.content && \"el-popover--plain\"],\n style: { width: _vm.width + \"px\" },\n attrs: {\n role: \"tooltip\",\n id: _vm.tooltipId,\n \"aria-hidden\":\n _vm.disabled || !_vm.showPopper ? \"true\" : \"false\"\n }\n },\n [\n _vm.title\n ? _c(\"div\", {\n staticClass: \"el-popover__title\",\n domProps: { textContent: _vm._s(_vm.title) }\n })\n : _vm._e(),\n _vm._t(\"default\", [_vm._v(_vm._s(_vm.content))])\n ],\n 2\n )\n ]\n ),\n _c(\n \"span\",\n { ref: \"wrapper\", staticClass: \"el-popover__reference-wrapper\" },\n [_vm._t(\"reference\")],\n 2\n )\n ],\n 1\n )\n}\nvar mainvue_type_template_id_52060272_staticRenderFns = []\nmainvue_type_template_id_52060272_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=template&id=52060272&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var mainvue_type_script_lang_js_ = ({\n name: 'ElPopover',\n\n mixins: [vue_popper_default.a],\n\n props: {\n trigger: {\n type: String,\n default: 'click',\n validator: function validator(value) {\n return ['click', 'focus', 'hover', 'manual'].indexOf(value) > -1;\n }\n },\n openDelay: {\n type: Number,\n default: 0\n },\n closeDelay: {\n type: Number,\n default: 200\n },\n title: String,\n disabled: Boolean,\n content: String,\n reference: {},\n popperClass: String,\n width: {},\n visibleArrow: {\n default: true\n },\n arrowOffset: {\n type: Number,\n default: 0\n },\n transition: {\n type: String,\n default: 'fade-in-linear'\n },\n tabindex: {\n type: Number,\n default: 0\n }\n },\n\n computed: {\n tooltipId: function tooltipId() {\n return 'el-popover-' + Object(util_[\"generateId\"])();\n }\n },\n watch: {\n showPopper: function showPopper(val) {\n if (this.disabled) {\n return;\n }\n val ? this.$emit('show') : this.$emit('hide');\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var reference = this.referenceElm = this.reference || this.$refs.reference;\n var popper = this.popper || this.$refs.popper;\n\n if (!reference && this.$refs.wrapper.children) {\n reference = this.referenceElm = this.$refs.wrapper.children[0];\n }\n // 可访问性\n if (reference) {\n Object(dom_[\"addClass\"])(reference, 'el-popover__reference');\n reference.setAttribute('aria-describedby', this.tooltipId);\n reference.setAttribute('tabindex', this.tabindex); // tab序列\n popper.setAttribute('tabindex', 0);\n\n if (this.trigger !== 'click') {\n Object(dom_[\"on\"])(reference, 'focusin', function () {\n _this.handleFocus();\n var instance = reference.__vue__;\n if (instance && typeof instance.focus === 'function') {\n instance.focus();\n }\n });\n Object(dom_[\"on\"])(popper, 'focusin', this.handleFocus);\n Object(dom_[\"on\"])(reference, 'focusout', this.handleBlur);\n Object(dom_[\"on\"])(popper, 'focusout', this.handleBlur);\n }\n Object(dom_[\"on\"])(reference, 'keydown', this.handleKeydown);\n Object(dom_[\"on\"])(reference, 'click', this.handleClick);\n }\n if (this.trigger === 'click') {\n Object(dom_[\"on\"])(reference, 'click', this.doToggle);\n Object(dom_[\"on\"])(document, 'click', this.handleDocumentClick);\n } else if (this.trigger === 'hover') {\n Object(dom_[\"on\"])(reference, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"on\"])(popper, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"on\"])(reference, 'mouseleave', this.handleMouseLeave);\n Object(dom_[\"on\"])(popper, 'mouseleave', this.handleMouseLeave);\n } else if (this.trigger === 'focus') {\n if (this.tabindex < 0) {\n console.warn('[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key');\n }\n if (reference.querySelector('input, textarea')) {\n Object(dom_[\"on\"])(reference, 'focusin', this.doShow);\n Object(dom_[\"on\"])(reference, 'focusout', this.doClose);\n } else {\n Object(dom_[\"on\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"on\"])(reference, 'mouseup', this.doClose);\n }\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.cleanup();\n },\n deactivated: function deactivated() {\n this.cleanup();\n },\n\n\n methods: {\n doToggle: function doToggle() {\n this.showPopper = !this.showPopper;\n },\n doShow: function doShow() {\n this.showPopper = true;\n },\n doClose: function doClose() {\n this.showPopper = false;\n },\n handleFocus: function handleFocus() {\n Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = true;\n },\n handleClick: function handleClick() {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n },\n handleBlur: function handleBlur() {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = false;\n },\n handleMouseEnter: function handleMouseEnter() {\n var _this2 = this;\n\n clearTimeout(this._timer);\n if (this.openDelay) {\n this._timer = setTimeout(function () {\n _this2.showPopper = true;\n }, this.openDelay);\n } else {\n this.showPopper = true;\n }\n },\n handleKeydown: function handleKeydown(ev) {\n if (ev.keyCode === 27 && this.trigger !== 'manual') {\n // esc\n this.doClose();\n }\n },\n handleMouseLeave: function handleMouseLeave() {\n var _this3 = this;\n\n clearTimeout(this._timer);\n if (this.closeDelay) {\n this._timer = setTimeout(function () {\n _this3.showPopper = false;\n }, this.closeDelay);\n } else {\n this.showPopper = false;\n }\n },\n handleDocumentClick: function handleDocumentClick(e) {\n var reference = this.reference || this.$refs.reference;\n var popper = this.popper || this.$refs.popper;\n\n if (!reference && this.$refs.wrapper.children) {\n reference = this.referenceElm = this.$refs.wrapper.children[0];\n }\n if (!this.$el || !reference || this.$el.contains(e.target) || reference.contains(e.target) || !popper || popper.contains(e.target)) return;\n this.showPopper = false;\n },\n handleAfterEnter: function handleAfterEnter() {\n this.$emit('after-enter');\n },\n handleAfterLeave: function handleAfterLeave() {\n this.$emit('after-leave');\n this.doDestroy();\n },\n cleanup: function cleanup() {\n if (this.openDelay || this.closeDelay) {\n clearTimeout(this._timer);\n }\n }\n },\n\n destroyed: function destroyed() {\n var reference = this.reference;\n\n Object(dom_[\"off\"])(reference, 'click', this.doToggle);\n Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"off\"])(reference, 'focusin', this.doShow);\n Object(dom_[\"off\"])(reference, 'focusout', this.doClose);\n Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n Object(dom_[\"off\"])(reference, 'mouseleave', this.handleMouseLeave);\n Object(dom_[\"off\"])(reference, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"off\"])(document, 'click', this.handleDocumentClick);\n }\n});\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_mainvue_type_script_lang_js_ = (mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/popover/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar main_component = normalizeComponent(\n src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_52060272_render,\n mainvue_type_template_id_52060272_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var main_api; }\nmain_component.options.__file = \"packages/popover/src/main.vue\"\n/* harmony default export */ var main = (main_component.exports);\n// CONCATENATED MODULE: ./packages/popover/src/directive.js\nvar getReference = function getReference(el, binding, vnode) {\n var _ref = binding.expression ? binding.value : binding.arg;\n var popper = vnode.context.$refs[_ref];\n if (popper) {\n if (Array.isArray(popper)) {\n popper[0].$refs.reference = el;\n } else {\n popper.$refs.reference = el;\n }\n }\n};\n\n/* harmony default export */ var directive = ({\n bind: function bind(el, binding, vnode) {\n getReference(el, binding, vnode);\n },\n inserted: function inserted(el, binding, vnode) {\n getReference(el, binding, vnode);\n }\n});\n// CONCATENATED MODULE: ./packages/popover/index.js\n\n\n\n\nexternal_vue_default.a.directive('popover', directive);\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n Vue.directive('popover', directive);\n Vue.component(main.name, main);\n};\nmain.directive = directive;\n\n/* harmony default export */ var popover = (main);\n// CONCATENATED MODULE: ./packages/tooltip/src/main.js\n\n\n\n\n\n\n/* harmony default export */ var src_main = ({\n name: 'ElTooltip',\n\n mixins: [vue_popper_default.a],\n\n props: {\n openDelay: {\n type: Number,\n default: 0\n },\n disabled: Boolean,\n manual: Boolean,\n effect: {\n type: String,\n default: 'dark'\n },\n arrowOffset: {\n type: Number,\n default: 0\n },\n popperClass: String,\n content: String,\n visibleArrow: {\n default: true\n },\n transition: {\n type: String,\n default: 'el-fade-in-linear'\n },\n popperOptions: {\n default: function _default() {\n return {\n boundariesPadding: 10,\n gpuAcceleration: false\n };\n }\n },\n enterable: {\n type: Boolean,\n default: true\n },\n hideAfter: {\n type: Number,\n default: 0\n },\n tabindex: {\n type: Number,\n default: 0\n }\n },\n\n data: function data() {\n return {\n tooltipId: 'el-tooltip-' + Object(util_[\"generateId\"])(),\n timeoutPending: null,\n focusing: false\n };\n },\n beforeCreate: function beforeCreate() {\n var _this = this;\n\n if (this.$isServer) return;\n\n this.popperVM = new external_vue_default.a({\n data: { node: '' },\n render: function render(h) {\n return this.node;\n }\n }).$mount();\n\n this.debounceClose = debounce_default()(200, function () {\n return _this.handleClosePopper();\n });\n },\n render: function render(h) {\n var _this2 = this;\n\n if (this.popperVM) {\n this.popperVM.node = h(\n 'transition',\n {\n attrs: {\n name: this.transition\n },\n on: {\n 'afterLeave': this.doDestroy\n }\n },\n [h(\n 'div',\n {\n on: {\n 'mouseleave': function mouseleave() {\n _this2.setExpectedState(false);_this2.debounceClose();\n },\n 'mouseenter': function mouseenter() {\n _this2.setExpectedState(true);\n }\n },\n\n ref: 'popper',\n attrs: { role: 'tooltip',\n id: this.tooltipId,\n 'aria-hidden': this.disabled || !this.showPopper ? 'true' : 'false'\n },\n directives: [{\n name: 'show',\n value: !this.disabled && this.showPopper\n }],\n\n 'class': ['el-tooltip__popper', 'is-' + this.effect, this.popperClass] },\n [this.$slots.content || this.content]\n )]\n );\n }\n\n var firstElement = this.getFirstElement();\n if (!firstElement) return null;\n\n var data = firstElement.data = firstElement.data || {};\n data.staticClass = this.addTooltipClass(data.staticClass);\n\n return firstElement;\n },\n mounted: function mounted() {\n var _this3 = this;\n\n this.referenceElm = this.$el;\n if (this.$el.nodeType === 1) {\n this.$el.setAttribute('aria-describedby', this.tooltipId);\n this.$el.setAttribute('tabindex', this.tabindex);\n Object(dom_[\"on\"])(this.referenceElm, 'mouseenter', this.show);\n Object(dom_[\"on\"])(this.referenceElm, 'mouseleave', this.hide);\n Object(dom_[\"on\"])(this.referenceElm, 'focus', function () {\n if (!_this3.$slots.default || !_this3.$slots.default.length) {\n _this3.handleFocus();\n return;\n }\n var instance = _this3.$slots.default[0].componentInstance;\n if (instance && instance.focus) {\n instance.focus();\n } else {\n _this3.handleFocus();\n }\n });\n Object(dom_[\"on\"])(this.referenceElm, 'blur', this.handleBlur);\n Object(dom_[\"on\"])(this.referenceElm, 'click', this.removeFocusing);\n }\n // fix issue https://github.com/ElemeFE/element/issues/14424\n if (this.value && this.popperVM) {\n this.popperVM.$nextTick(function () {\n if (_this3.value) {\n _this3.updatePopper();\n }\n });\n }\n },\n\n watch: {\n focusing: function focusing(val) {\n if (val) {\n Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n } else {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n }\n }\n },\n methods: {\n show: function show() {\n this.setExpectedState(true);\n this.handleShowPopper();\n },\n hide: function hide() {\n this.setExpectedState(false);\n this.debounceClose();\n },\n handleFocus: function handleFocus() {\n this.focusing = true;\n this.show();\n },\n handleBlur: function handleBlur() {\n this.focusing = false;\n this.hide();\n },\n removeFocusing: function removeFocusing() {\n this.focusing = false;\n },\n addTooltipClass: function addTooltipClass(prev) {\n if (!prev) {\n return 'el-tooltip';\n } else {\n return 'el-tooltip ' + prev.replace('el-tooltip', '');\n }\n },\n handleShowPopper: function handleShowPopper() {\n var _this4 = this;\n\n if (!this.expectedState || this.manual) return;\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this4.showPopper = true;\n }, this.openDelay);\n\n if (this.hideAfter > 0) {\n this.timeoutPending = setTimeout(function () {\n _this4.showPopper = false;\n }, this.hideAfter);\n }\n },\n handleClosePopper: function handleClosePopper() {\n if (this.enterable && this.expectedState || this.manual) return;\n clearTimeout(this.timeout);\n\n if (this.timeoutPending) {\n clearTimeout(this.timeoutPending);\n }\n this.showPopper = false;\n\n if (this.disabled) {\n this.doDestroy();\n }\n },\n setExpectedState: function setExpectedState(expectedState) {\n if (expectedState === false) {\n clearTimeout(this.timeoutPending);\n }\n this.expectedState = expectedState;\n },\n getFirstElement: function getFirstElement() {\n var slots = this.$slots.default;\n if (!Array.isArray(slots)) return null;\n var element = null;\n for (var index = 0; index < slots.length; index++) {\n if (slots[index] && slots[index].tag) {\n element = slots[index];\n };\n }\n return element;\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.popperVM && this.popperVM.$destroy();\n },\n destroyed: function destroyed() {\n var reference = this.referenceElm;\n if (reference.nodeType === 1) {\n Object(dom_[\"off\"])(reference, 'mouseenter', this.show);\n Object(dom_[\"off\"])(reference, 'mouseleave', this.hide);\n Object(dom_[\"off\"])(reference, 'focus', this.handleFocus);\n Object(dom_[\"off\"])(reference, 'blur', this.handleBlur);\n Object(dom_[\"off\"])(reference, 'click', this.removeFocusing);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/tooltip/index.js\n\n\n/* istanbul ignore next */\nsrc_main.install = function (Vue) {\n Vue.component(src_main.name, src_main);\n};\n\n/* harmony default export */ var packages_tooltip = (src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/message-box/src/main.vue?vue&type=template&id=6b29b012&\nvar mainvue_type_template_id_6b29b012_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"msgbox-fade\" } }, [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-message-box__wrapper\",\n attrs: {\n tabindex: \"-1\",\n role: \"dialog\",\n \"aria-modal\": \"true\",\n \"aria-label\": _vm.title || \"dialog\"\n },\n on: {\n click: function($event) {\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.handleWrapperClick($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-message-box\",\n class: [_vm.customClass, _vm.center && \"el-message-box--center\"]\n },\n [\n _vm.title !== null\n ? _c(\"div\", { staticClass: \"el-message-box__header\" }, [\n _c(\"div\", { staticClass: \"el-message-box__title\" }, [\n _vm.icon && _vm.center\n ? _c(\"div\", {\n class: [\"el-message-box__status\", _vm.icon]\n })\n : _vm._e(),\n _c(\"span\", [_vm._v(_vm._s(_vm.title))])\n ]),\n _vm.showClose\n ? _c(\n \"button\",\n {\n staticClass: \"el-message-box__headerbtn\",\n attrs: { type: \"button\", \"aria-label\": \"Close\" },\n on: {\n click: function($event) {\n _vm.handleAction(\n _vm.distinguishCancelAndClose\n ? \"close\"\n : \"cancel\"\n )\n },\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n _vm.handleAction(\n _vm.distinguishCancelAndClose\n ? \"close\"\n : \"cancel\"\n )\n }\n }\n },\n [\n _c(\"i\", {\n staticClass: \"el-message-box__close el-icon-close\"\n })\n ]\n )\n : _vm._e()\n ])\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-message-box__content\" }, [\n _c(\"div\", { staticClass: \"el-message-box__container\" }, [\n _vm.icon && !_vm.center && _vm.message !== \"\"\n ? _c(\"div\", { class: [\"el-message-box__status\", _vm.icon] })\n : _vm._e(),\n _vm.message !== \"\"\n ? _c(\n \"div\",\n { staticClass: \"el-message-box__message\" },\n [\n _vm._t(\"default\", [\n !_vm.dangerouslyUseHTMLString\n ? _c(\"p\", [_vm._v(_vm._s(_vm.message))])\n : _c(\"p\", {\n domProps: { innerHTML: _vm._s(_vm.message) }\n })\n ])\n ],\n 2\n )\n : _vm._e()\n ]),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showInput,\n expression: \"showInput\"\n }\n ],\n staticClass: \"el-message-box__input\"\n },\n [\n _c(\"el-input\", {\n ref: \"input\",\n attrs: {\n type: _vm.inputType,\n placeholder: _vm.inputPlaceholder\n },\n nativeOn: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n return _vm.handleInputEnter($event)\n }\n },\n model: {\n value: _vm.inputValue,\n callback: function($$v) {\n _vm.inputValue = $$v\n },\n expression: \"inputValue\"\n }\n }),\n _c(\n \"div\",\n {\n staticClass: \"el-message-box__errormsg\",\n style: {\n visibility: !!_vm.editorErrorMessage\n ? \"visible\"\n : \"hidden\"\n }\n },\n [_vm._v(_vm._s(_vm.editorErrorMessage))]\n )\n ],\n 1\n )\n ]),\n _c(\n \"div\",\n { staticClass: \"el-message-box__btns\" },\n [\n _vm.showCancelButton\n ? _c(\n \"el-button\",\n {\n class: [_vm.cancelButtonClasses],\n attrs: {\n loading: _vm.cancelButtonLoading,\n round: _vm.roundButton,\n size: \"small\"\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n _vm.handleAction(\"cancel\")\n }\n },\n nativeOn: {\n click: function($event) {\n _vm.handleAction(\"cancel\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.cancelButtonText ||\n _vm.t(\"el.messagebox.cancel\")\n ) +\n \"\\n \"\n )\n ]\n )\n : _vm._e(),\n _c(\n \"el-button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showConfirmButton,\n expression: \"showConfirmButton\"\n }\n ],\n ref: \"confirm\",\n class: [_vm.confirmButtonClasses],\n attrs: {\n loading: _vm.confirmButtonLoading,\n round: _vm.roundButton,\n size: \"small\"\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n _vm.handleAction(\"confirm\")\n }\n },\n nativeOn: {\n click: function($event) {\n _vm.handleAction(\"confirm\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(\n _vm.confirmButtonText ||\n _vm.t(\"el.messagebox.confirm\")\n ) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]\n )\n ]\n )\n ])\n}\nvar mainvue_type_template_id_6b29b012_staticRenderFns = []\nmainvue_type_template_id_6b29b012_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/message-box/src/main.vue?vue&type=template&id=6b29b012&\n\n// EXTERNAL MODULE: external \"element-ui/lib/locale\"\nvar lib_locale_ = __webpack_require__(12);\nvar lib_locale_default = /*#__PURE__*/__webpack_require__.n(lib_locale_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/aria-dialog\"\nvar aria_dialog_ = __webpack_require__(39);\nvar aria_dialog_default = /*#__PURE__*/__webpack_require__.n(aria_dialog_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/message-box/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\nvar messageBox = void 0;\nvar typeMap = {\n success: 'success',\n info: 'info',\n warning: 'warning',\n error: 'error'\n};\n\n/* harmony default export */ var message_box_src_mainvue_type_script_lang_js_ = ({\n mixins: [popup_default.a, locale_default.a],\n\n props: {\n modal: {\n default: true\n },\n lockScroll: {\n default: true\n },\n showClose: {\n type: Boolean,\n default: true\n },\n closeOnClickModal: {\n default: true\n },\n closeOnPressEscape: {\n default: true\n },\n closeOnHashChange: {\n default: true\n },\n center: {\n default: false,\n type: Boolean\n },\n roundButton: {\n default: false,\n type: Boolean\n }\n },\n\n components: {\n ElInput: input_default.a,\n ElButton: button_default.a\n },\n\n computed: {\n icon: function icon() {\n var type = this.type,\n iconClass = this.iconClass;\n\n return iconClass || (type && typeMap[type] ? 'el-icon-' + typeMap[type] : '');\n },\n confirmButtonClasses: function confirmButtonClasses() {\n return 'el-button--primary ' + this.confirmButtonClass;\n },\n cancelButtonClasses: function cancelButtonClasses() {\n return '' + this.cancelButtonClass;\n }\n },\n\n methods: {\n getSafeClose: function getSafeClose() {\n var _this = this;\n\n var currentId = this.uid;\n return function () {\n _this.$nextTick(function () {\n if (currentId === _this.uid) _this.doClose();\n });\n };\n },\n doClose: function doClose() {\n var _this2 = this;\n\n if (!this.visible) return;\n this.visible = false;\n this._closing = true;\n\n this.onClose && this.onClose();\n messageBox.closeDialog(); // 解绑\n if (this.lockScroll) {\n setTimeout(this.restoreBodyStyle, 200);\n }\n this.opened = false;\n this.doAfterClose();\n setTimeout(function () {\n if (_this2.action) _this2.callback(_this2.action, _this2);\n });\n },\n handleWrapperClick: function handleWrapperClick() {\n if (this.closeOnClickModal) {\n this.handleAction(this.distinguishCancelAndClose ? 'close' : 'cancel');\n }\n },\n handleInputEnter: function handleInputEnter() {\n if (this.inputType !== 'textarea') {\n return this.handleAction('confirm');\n }\n },\n handleAction: function handleAction(action) {\n if (this.$type === 'prompt' && action === 'confirm' && !this.validate()) {\n return;\n }\n this.action = action;\n if (typeof this.beforeClose === 'function') {\n this.close = this.getSafeClose();\n this.beforeClose(action, this, this.close);\n } else {\n this.doClose();\n }\n },\n validate: function validate() {\n if (this.$type === 'prompt') {\n var inputPattern = this.inputPattern;\n if (inputPattern && !inputPattern.test(this.inputValue || '')) {\n this.editorErrorMessage = this.inputErrorMessage || Object(lib_locale_[\"t\"])('el.messagebox.error');\n Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n return false;\n }\n var inputValidator = this.inputValidator;\n if (typeof inputValidator === 'function') {\n var validateResult = inputValidator(this.inputValue);\n if (validateResult === false) {\n this.editorErrorMessage = this.inputErrorMessage || Object(lib_locale_[\"t\"])('el.messagebox.error');\n Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n return false;\n }\n if (typeof validateResult === 'string') {\n this.editorErrorMessage = validateResult;\n Object(dom_[\"addClass\"])(this.getInputElement(), 'invalid');\n return false;\n }\n }\n }\n this.editorErrorMessage = '';\n Object(dom_[\"removeClass\"])(this.getInputElement(), 'invalid');\n return true;\n },\n getFirstFocus: function getFirstFocus() {\n var btn = this.$el.querySelector('.el-message-box__btns .el-button');\n var title = this.$el.querySelector('.el-message-box__btns .el-message-box__title');\n return btn || title;\n },\n getInputElement: function getInputElement() {\n var inputRefs = this.$refs.input.$refs;\n return inputRefs.input || inputRefs.textarea;\n },\n handleClose: function handleClose() {\n this.handleAction('close');\n }\n },\n\n watch: {\n inputValue: {\n immediate: true,\n handler: function handler(val) {\n var _this3 = this;\n\n this.$nextTick(function (_) {\n if (_this3.$type === 'prompt' && val !== null) {\n _this3.validate();\n }\n });\n }\n },\n\n visible: function visible(val) {\n var _this4 = this;\n\n if (val) {\n this.uid++;\n if (this.$type === 'alert' || this.$type === 'confirm') {\n this.$nextTick(function () {\n _this4.$refs.confirm.$el.focus();\n });\n }\n this.focusAfterClosed = document.activeElement;\n messageBox = new aria_dialog_default.a(this.$el, this.focusAfterClosed, this.getFirstFocus());\n }\n\n // prompt\n if (this.$type !== 'prompt') return;\n if (val) {\n setTimeout(function () {\n if (_this4.$refs.input && _this4.$refs.input.$el) {\n _this4.getInputElement().focus();\n }\n }, 500);\n } else {\n this.editorErrorMessage = '';\n Object(dom_[\"removeClass\"])(this.getInputElement(), 'invalid');\n }\n }\n },\n\n mounted: function mounted() {\n var _this5 = this;\n\n this.$nextTick(function () {\n if (_this5.closeOnHashChange) {\n window.addEventListener('hashchange', _this5.close);\n }\n });\n },\n beforeDestroy: function beforeDestroy() {\n if (this.closeOnHashChange) {\n window.removeEventListener('hashchange', this.close);\n }\n setTimeout(function () {\n messageBox.closeDialog();\n });\n },\n data: function data() {\n return {\n uid: 1,\n title: undefined,\n message: '',\n type: '',\n iconClass: '',\n customClass: '',\n showInput: false,\n inputValue: null,\n inputPlaceholder: '',\n inputType: 'text',\n inputPattern: null,\n inputValidator: null,\n inputErrorMessage: '',\n showConfirmButton: true,\n showCancelButton: false,\n action: '',\n confirmButtonText: '',\n cancelButtonText: '',\n confirmButtonLoading: false,\n cancelButtonLoading: false,\n confirmButtonClass: '',\n confirmButtonDisabled: false,\n cancelButtonClass: '',\n editorErrorMessage: null,\n callback: null,\n dangerouslyUseHTMLString: false,\n focusAfterClosed: null,\n isOnComposition: false,\n distinguishCancelAndClose: false\n };\n }\n});\n// CONCATENATED MODULE: ./packages/message-box/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_message_box_src_mainvue_type_script_lang_js_ = (message_box_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/message-box/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_main_component = normalizeComponent(\n packages_message_box_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_6b29b012_render,\n mainvue_type_template_id_6b29b012_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_main_api; }\nsrc_main_component.options.__file = \"packages/message-box/src/main.vue\"\n/* harmony default export */ var message_box_src_main = (src_main_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vdom\"\nvar vdom_ = __webpack_require__(22);\n\n// CONCATENATED MODULE: ./packages/message-box/src/main.js\nvar main_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar main_defaults = {\n title: null,\n message: '',\n type: '',\n iconClass: '',\n showInput: false,\n showClose: true,\n modalFade: true,\n lockScroll: true,\n closeOnClickModal: true,\n closeOnPressEscape: true,\n closeOnHashChange: true,\n inputValue: null,\n inputPlaceholder: '',\n inputType: 'text',\n inputPattern: null,\n inputValidator: null,\n inputErrorMessage: '',\n showConfirmButton: true,\n showCancelButton: false,\n confirmButtonPosition: 'right',\n confirmButtonHighlight: false,\n cancelButtonHighlight: false,\n confirmButtonText: '',\n cancelButtonText: '',\n confirmButtonClass: '',\n cancelButtonClass: '',\n customClass: '',\n beforeClose: null,\n dangerouslyUseHTMLString: false,\n center: false,\n roundButton: false,\n distinguishCancelAndClose: false\n};\n\n\n\n\n\n\nvar MessageBoxConstructor = external_vue_default.a.extend(message_box_src_main);\n\nvar currentMsg = void 0,\n main_instance = void 0;\nvar msgQueue = [];\n\nvar defaultCallback = function defaultCallback(action) {\n if (currentMsg) {\n var callback = currentMsg.callback;\n if (typeof callback === 'function') {\n if (main_instance.showInput) {\n callback(main_instance.inputValue, action);\n } else {\n callback(action);\n }\n }\n if (currentMsg.resolve) {\n if (action === 'confirm') {\n if (main_instance.showInput) {\n currentMsg.resolve({ value: main_instance.inputValue, action: action });\n } else {\n currentMsg.resolve(action);\n }\n } else if (currentMsg.reject && (action === 'cancel' || action === 'close')) {\n currentMsg.reject(action);\n }\n }\n }\n};\n\nvar initInstance = function initInstance() {\n main_instance = new MessageBoxConstructor({\n el: document.createElement('div')\n });\n\n main_instance.callback = defaultCallback;\n};\n\nvar main_showNextMsg = function showNextMsg() {\n if (!main_instance) {\n initInstance();\n }\n main_instance.action = '';\n\n if (!main_instance.visible || main_instance.closeTimer) {\n if (msgQueue.length > 0) {\n currentMsg = msgQueue.shift();\n\n var options = currentMsg.options;\n for (var prop in options) {\n if (options.hasOwnProperty(prop)) {\n main_instance[prop] = options[prop];\n }\n }\n if (options.callback === undefined) {\n main_instance.callback = defaultCallback;\n }\n\n var oldCb = main_instance.callback;\n main_instance.callback = function (action, instance) {\n oldCb(action, instance);\n showNextMsg();\n };\n if (Object(vdom_[\"isVNode\"])(main_instance.message)) {\n main_instance.$slots.default = [main_instance.message];\n main_instance.message = null;\n } else {\n delete main_instance.$slots.default;\n }\n ['modal', 'showClose', 'closeOnClickModal', 'closeOnPressEscape', 'closeOnHashChange'].forEach(function (prop) {\n if (main_instance[prop] === undefined) {\n main_instance[prop] = true;\n }\n });\n document.body.appendChild(main_instance.$el);\n\n external_vue_default.a.nextTick(function () {\n main_instance.visible = true;\n });\n }\n }\n};\n\nvar main_MessageBox = function MessageBox(options, callback) {\n if (external_vue_default.a.prototype.$isServer) return;\n if (typeof options === 'string' || Object(vdom_[\"isVNode\"])(options)) {\n options = {\n message: options\n };\n if (typeof arguments[1] === 'string') {\n options.title = arguments[1];\n }\n } else if (options.callback && !callback) {\n callback = options.callback;\n }\n\n if (typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n // eslint-disable-line\n msgQueue.push({\n options: merge_default()({}, main_defaults, MessageBox.defaults, options),\n callback: callback,\n resolve: resolve,\n reject: reject\n });\n\n main_showNextMsg();\n });\n } else {\n msgQueue.push({\n options: merge_default()({}, main_defaults, MessageBox.defaults, options),\n callback: callback\n });\n\n main_showNextMsg();\n }\n};\n\nmain_MessageBox.setDefaults = function (defaults) {\n main_MessageBox.defaults = defaults;\n};\n\nmain_MessageBox.alert = function (message, title, options) {\n if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n options = title;\n title = '';\n } else if (title === undefined) {\n title = '';\n }\n return main_MessageBox(merge_default()({\n title: title,\n message: message,\n $type: 'alert',\n closeOnPressEscape: false,\n closeOnClickModal: false\n }, options));\n};\n\nmain_MessageBox.confirm = function (message, title, options) {\n if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n options = title;\n title = '';\n } else if (title === undefined) {\n title = '';\n }\n return main_MessageBox(merge_default()({\n title: title,\n message: message,\n $type: 'confirm',\n showCancelButton: true\n }, options));\n};\n\nmain_MessageBox.prompt = function (message, title, options) {\n if ((typeof title === 'undefined' ? 'undefined' : main_typeof(title)) === 'object') {\n options = title;\n title = '';\n } else if (title === undefined) {\n title = '';\n }\n return main_MessageBox(merge_default()({\n title: title,\n message: message,\n showCancelButton: true,\n showInput: true,\n $type: 'prompt'\n }, options));\n};\n\nmain_MessageBox.close = function () {\n main_instance.doClose();\n main_instance.visible = false;\n msgQueue = [];\n currentMsg = null;\n};\n\n/* harmony default export */ var packages_message_box_src_main = (main_MessageBox);\n\n// CONCATENATED MODULE: ./packages/message-box/index.js\n\n/* harmony default export */ var message_box = (packages_message_box_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb.vue?vue&type=template&id=4b464c06&\nvar breadcrumbvue_type_template_id_4b464c06_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-breadcrumb\",\n attrs: { \"aria-label\": \"Breadcrumb\", role: \"navigation\" }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar breadcrumbvue_type_template_id_4b464c06_staticRenderFns = []\nbreadcrumbvue_type_template_id_4b464c06_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue?vue&type=template&id=4b464c06&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var breadcrumbvue_type_script_lang_js_ = ({\n name: 'ElBreadcrumb',\n\n props: {\n separator: {\n type: String,\n default: '/'\n },\n separatorClass: {\n type: String,\n default: ''\n }\n },\n\n provide: function provide() {\n return {\n elBreadcrumb: this\n };\n },\n mounted: function mounted() {\n var items = this.$el.querySelectorAll('.el-breadcrumb__item');\n if (items.length) {\n items[items.length - 1].setAttribute('aria-current', 'page');\n }\n }\n});\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_breadcrumbvue_type_script_lang_js_ = (breadcrumbvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb.vue\n\n\n\n\n\n/* normalize component */\n\nvar breadcrumb_component = normalizeComponent(\n src_breadcrumbvue_type_script_lang_js_,\n breadcrumbvue_type_template_id_4b464c06_render,\n breadcrumbvue_type_template_id_4b464c06_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var breadcrumb_api; }\nbreadcrumb_component.options.__file = \"packages/breadcrumb/src/breadcrumb.vue\"\n/* harmony default export */ var breadcrumb = (breadcrumb_component.exports);\n// CONCATENATED MODULE: ./packages/breadcrumb/index.js\n\n\n/* istanbul ignore next */\nbreadcrumb.install = function (Vue) {\n Vue.component(breadcrumb.name, breadcrumb);\n};\n\n/* harmony default export */ var packages_breadcrumb = (breadcrumb);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=template&id=fcf9eaac&\nvar breadcrumb_itemvue_type_template_id_fcf9eaac_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticClass: \"el-breadcrumb__item\" }, [\n _c(\n \"span\",\n {\n ref: \"link\",\n class: [\"el-breadcrumb__inner\", _vm.to ? \"is-link\" : \"\"],\n attrs: { role: \"link\" }\n },\n [_vm._t(\"default\")],\n 2\n ),\n _vm.separatorClass\n ? _c(\"i\", {\n staticClass: \"el-breadcrumb__separator\",\n class: _vm.separatorClass\n })\n : _c(\n \"span\",\n {\n staticClass: \"el-breadcrumb__separator\",\n attrs: { role: \"presentation\" }\n },\n [_vm._v(_vm._s(_vm.separator))]\n )\n ])\n}\nvar breadcrumb_itemvue_type_template_id_fcf9eaac_staticRenderFns = []\nbreadcrumb_itemvue_type_template_id_fcf9eaac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=template&id=fcf9eaac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var breadcrumb_itemvue_type_script_lang_js_ = ({\n name: 'ElBreadcrumbItem',\n props: {\n to: {},\n replace: Boolean\n },\n data: function data() {\n return {\n separator: '',\n separatorClass: ''\n };\n },\n\n\n inject: ['elBreadcrumb'],\n\n mounted: function mounted() {\n var _this = this;\n\n this.separator = this.elBreadcrumb.separator;\n this.separatorClass = this.elBreadcrumb.separatorClass;\n var link = this.$refs.link;\n link.setAttribute('role', 'link');\n link.addEventListener('click', function (_) {\n var to = _this.to,\n $router = _this.$router;\n\n if (!to || !$router) return;\n _this.replace ? $router.replace(to) : $router.push(to);\n });\n }\n});\n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_breadcrumb_itemvue_type_script_lang_js_ = (breadcrumb_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/breadcrumb/src/breadcrumb-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar breadcrumb_item_component = normalizeComponent(\n src_breadcrumb_itemvue_type_script_lang_js_,\n breadcrumb_itemvue_type_template_id_fcf9eaac_render,\n breadcrumb_itemvue_type_template_id_fcf9eaac_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var breadcrumb_item_api; }\nbreadcrumb_item_component.options.__file = \"packages/breadcrumb/src/breadcrumb-item.vue\"\n/* harmony default export */ var breadcrumb_item = (breadcrumb_item_component.exports);\n// CONCATENATED MODULE: ./packages/breadcrumb-item/index.js\n\n\n/* istanbul ignore next */\nbreadcrumb_item.install = function (Vue) {\n Vue.component(breadcrumb_item.name, breadcrumb_item);\n};\n\n/* harmony default export */ var packages_breadcrumb_item = (breadcrumb_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form.vue?vue&type=template&id=a1b5ff34&\nvar formvue_type_template_id_a1b5ff34_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"form\",\n {\n staticClass: \"el-form\",\n class: [\n _vm.labelPosition ? \"el-form--label-\" + _vm.labelPosition : \"\",\n { \"el-form--inline\": _vm.inline }\n ]\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar formvue_type_template_id_a1b5ff34_staticRenderFns = []\nformvue_type_template_id_a1b5ff34_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/form/src/form.vue?vue&type=template&id=a1b5ff34&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var formvue_type_script_lang_js_ = ({\n name: 'ElForm',\n\n componentName: 'ElForm',\n\n provide: function provide() {\n return {\n elForm: this\n };\n },\n\n\n props: {\n model: Object,\n rules: Object,\n labelPosition: String,\n labelWidth: String,\n labelSuffix: {\n type: String,\n default: ''\n },\n inline: Boolean,\n inlineMessage: Boolean,\n statusIcon: Boolean,\n showMessage: {\n type: Boolean,\n default: true\n },\n size: String,\n disabled: Boolean,\n validateOnRuleChange: {\n type: Boolean,\n default: true\n },\n hideRequiredAsterisk: {\n type: Boolean,\n default: false\n }\n },\n watch: {\n rules: function rules() {\n // remove then add event listeners on form-item after form rules change\n this.fields.forEach(function (field) {\n field.removeValidateEvents();\n field.addValidateEvents();\n });\n\n if (this.validateOnRuleChange) {\n this.validate(function () {});\n }\n }\n },\n computed: {\n autoLabelWidth: function autoLabelWidth() {\n if (!this.potentialLabelWidthArr.length) return 0;\n var max = Math.max.apply(Math, this.potentialLabelWidthArr);\n return max ? max + 'px' : '';\n }\n },\n data: function data() {\n return {\n fields: [],\n potentialLabelWidthArr: [] // use this array to calculate auto width\n };\n },\n created: function created() {\n var _this = this;\n\n this.$on('el.form.addField', function (field) {\n if (field) {\n _this.fields.push(field);\n }\n });\n /* istanbul ignore next */\n this.$on('el.form.removeField', function (field) {\n if (field.prop) {\n _this.fields.splice(_this.fields.indexOf(field), 1);\n }\n });\n },\n\n methods: {\n resetFields: function resetFields() {\n if (!this.model) {\n console.warn('[Element Warn][Form]model is required for resetFields to work.');\n return;\n }\n this.fields.forEach(function (field) {\n field.resetField();\n });\n },\n clearValidate: function clearValidate() {\n var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n var fields = props.length ? typeof props === 'string' ? this.fields.filter(function (field) {\n return props === field.prop;\n }) : this.fields.filter(function (field) {\n return props.indexOf(field.prop) > -1;\n }) : this.fields;\n fields.forEach(function (field) {\n field.clearValidate();\n });\n },\n validate: function validate(callback) {\n var _this2 = this;\n\n if (!this.model) {\n console.warn('[Element Warn][Form]model is required for validate to work!');\n return;\n }\n\n var promise = void 0;\n // if no callback, return promise\n if (typeof callback !== 'function' && window.Promise) {\n promise = new window.Promise(function (resolve, reject) {\n callback = function callback(valid, invalidFields) {\n valid ? resolve(valid) : reject(invalidFields);\n };\n });\n }\n\n var valid = true;\n var count = 0;\n // 如果需要验证的fields为空,调用验证时立刻返回callback\n if (this.fields.length === 0 && callback) {\n callback(true);\n }\n var invalidFields = {};\n this.fields.forEach(function (field) {\n field.validate('', function (message, field) {\n if (message) {\n valid = false;\n }\n invalidFields = merge_default()({}, invalidFields, field);\n if (typeof callback === 'function' && ++count === _this2.fields.length) {\n callback(valid, invalidFields);\n }\n });\n });\n\n if (promise) {\n return promise;\n }\n },\n validateField: function validateField(props, cb) {\n props = [].concat(props);\n var fields = this.fields.filter(function (field) {\n return props.indexOf(field.prop) !== -1;\n });\n if (!fields.length) {\n console.warn('[Element Warn]please pass correct props!');\n return;\n }\n\n fields.forEach(function (field) {\n field.validate('', cb);\n });\n },\n getLabelWidthIndex: function getLabelWidthIndex(width) {\n var index = this.potentialLabelWidthArr.indexOf(width);\n // it's impossible\n if (index === -1) {\n throw new Error('[ElementForm]unpected width ', width);\n }\n return index;\n },\n registerLabelWidth: function registerLabelWidth(val, oldVal) {\n if (val && oldVal) {\n var index = this.getLabelWidthIndex(oldVal);\n this.potentialLabelWidthArr.splice(index, 1, val);\n } else if (val) {\n this.potentialLabelWidthArr.push(val);\n }\n },\n deregisterLabelWidth: function deregisterLabelWidth(val) {\n var index = this.getLabelWidthIndex(val);\n this.potentialLabelWidthArr.splice(index, 1);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/form/src/form.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_formvue_type_script_lang_js_ = (formvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/form.vue\n\n\n\n\n\n/* normalize component */\n\nvar form_component = normalizeComponent(\n src_formvue_type_script_lang_js_,\n formvue_type_template_id_a1b5ff34_render,\n formvue_type_template_id_a1b5ff34_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var form_api; }\nform_component.options.__file = \"packages/form/src/form.vue\"\n/* harmony default export */ var src_form = (form_component.exports);\n// CONCATENATED MODULE: ./packages/form/index.js\n\n\n/* istanbul ignore next */\nsrc_form.install = function (Vue) {\n Vue.component(src_form.name, src_form);\n};\n\n/* harmony default export */ var packages_form = (src_form);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form-item.vue?vue&type=template&id=b6f3db6c&\nvar form_itemvue_type_template_id_b6f3db6c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-form-item\",\n class: [\n {\n \"el-form-item--feedback\": _vm.elForm && _vm.elForm.statusIcon,\n \"is-error\": _vm.validateState === \"error\",\n \"is-validating\": _vm.validateState === \"validating\",\n \"is-success\": _vm.validateState === \"success\",\n \"is-required\": _vm.isRequired || _vm.required,\n \"is-no-asterisk\": _vm.elForm && _vm.elForm.hideRequiredAsterisk\n },\n _vm.sizeClass ? \"el-form-item--\" + _vm.sizeClass : \"\"\n ]\n },\n [\n _c(\n \"label-wrap\",\n {\n attrs: {\n \"is-auto-width\": _vm.labelStyle && _vm.labelStyle.width === \"auto\",\n \"update-all\": _vm.form.labelWidth === \"auto\"\n }\n },\n [\n _vm.label || _vm.$slots.label\n ? _c(\n \"label\",\n {\n staticClass: \"el-form-item__label\",\n style: _vm.labelStyle,\n attrs: { for: _vm.labelFor }\n },\n [\n _vm._t(\"label\", [\n _vm._v(_vm._s(_vm.label + _vm.form.labelSuffix))\n ])\n ],\n 2\n )\n : _vm._e()\n ]\n ),\n _c(\n \"div\",\n { staticClass: \"el-form-item__content\", style: _vm.contentStyle },\n [\n _vm._t(\"default\"),\n _c(\n \"transition\",\n { attrs: { name: \"el-zoom-in-top\" } },\n [\n _vm.validateState === \"error\" &&\n _vm.showMessage &&\n _vm.form.showMessage\n ? _vm._t(\n \"error\",\n [\n _c(\n \"div\",\n {\n staticClass: \"el-form-item__error\",\n class: {\n \"el-form-item__error--inline\":\n typeof _vm.inlineMessage === \"boolean\"\n ? _vm.inlineMessage\n : (_vm.elForm && _vm.elForm.inlineMessage) ||\n false\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.validateMessage) +\n \"\\n \"\n )\n ]\n )\n ],\n { error: _vm.validateMessage }\n )\n : _vm._e()\n ],\n 2\n )\n ],\n 2\n )\n ],\n 1\n )\n}\nvar form_itemvue_type_template_id_b6f3db6c_staticRenderFns = []\nform_itemvue_type_template_id_b6f3db6c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/form/src/form-item.vue?vue&type=template&id=b6f3db6c&\n\n// EXTERNAL MODULE: external \"async-validator\"\nvar external_async_validator_ = __webpack_require__(40);\nvar external_async_validator_default = /*#__PURE__*/__webpack_require__.n(external_async_validator_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/label-wrap.vue?vue&type=script&lang=js&\n\n\n/* harmony default export */ var label_wrapvue_type_script_lang_js_ = ({\n props: {\n isAutoWidth: Boolean,\n updateAll: Boolean\n },\n\n inject: ['elForm', 'elFormItem'],\n\n render: function render() {\n var h = arguments[0];\n\n var slots = this.$slots.default;\n if (!slots) return null;\n if (this.isAutoWidth) {\n var autoLabelWidth = this.elForm.autoLabelWidth;\n var style = {};\n if (autoLabelWidth && autoLabelWidth !== 'auto') {\n var marginLeft = parseInt(autoLabelWidth, 10) - this.computedWidth;\n if (marginLeft) {\n style.marginLeft = marginLeft + 'px';\n }\n }\n return h(\n 'div',\n { 'class': 'el-form-item__label-wrap', style: style },\n [slots]\n );\n } else {\n return slots[0];\n }\n },\n\n\n methods: {\n getLabelWidth: function getLabelWidth() {\n if (this.$el && this.$el.firstElementChild) {\n var computedWidth = window.getComputedStyle(this.$el.firstElementChild).width;\n return Math.ceil(parseFloat(computedWidth));\n } else {\n return 0;\n }\n },\n updateLabelWidth: function updateLabelWidth() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'update';\n\n if (this.$slots.default && this.isAutoWidth && this.$el.firstElementChild) {\n if (action === 'update') {\n this.computedWidth = this.getLabelWidth();\n } else if (action === 'remove') {\n this.elForm.deregisterLabelWidth(this.computedWidth);\n }\n }\n }\n },\n\n watch: {\n computedWidth: function computedWidth(val, oldVal) {\n if (this.updateAll) {\n this.elForm.registerLabelWidth(val, oldVal);\n this.elFormItem.updateComputedLabelWidth(val);\n }\n }\n },\n\n data: function data() {\n return {\n computedWidth: 0\n };\n },\n mounted: function mounted() {\n this.updateLabelWidth('update');\n },\n updated: function updated() {\n this.updateLabelWidth('update');\n },\n beforeDestroy: function beforeDestroy() {\n this.updateLabelWidth('remove');\n }\n});\n// CONCATENATED MODULE: ./packages/form/src/label-wrap.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_label_wrapvue_type_script_lang_js_ = (label_wrapvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/label-wrap.vue\nvar label_wrap_render, label_wrap_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar label_wrap_component = normalizeComponent(\n src_label_wrapvue_type_script_lang_js_,\n label_wrap_render,\n label_wrap_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var label_wrap_api; }\nlabel_wrap_component.options.__file = \"packages/form/src/label-wrap.vue\"\n/* harmony default export */ var label_wrap = (label_wrap_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/form/src/form-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var form_itemvue_type_script_lang_js_ = ({\n name: 'ElFormItem',\n\n componentName: 'ElFormItem',\n\n mixins: [emitter_default.a],\n\n provide: function provide() {\n return {\n elFormItem: this\n };\n },\n\n\n inject: ['elForm'],\n\n props: {\n label: String,\n labelWidth: String,\n prop: String,\n required: {\n type: Boolean,\n default: undefined\n },\n rules: [Object, Array],\n error: String,\n validateStatus: String,\n for: String,\n inlineMessage: {\n type: [String, Boolean],\n default: ''\n },\n showMessage: {\n type: Boolean,\n default: true\n },\n size: String\n },\n components: {\n // use this component to calculate auto width\n LabelWrap: label_wrap\n },\n watch: {\n error: {\n immediate: true,\n handler: function handler(value) {\n this.validateMessage = value;\n this.validateState = value ? 'error' : '';\n }\n },\n validateStatus: function validateStatus(value) {\n this.validateState = value;\n }\n },\n computed: {\n labelFor: function labelFor() {\n return this.for || this.prop;\n },\n labelStyle: function labelStyle() {\n var ret = {};\n if (this.form.labelPosition === 'top') return ret;\n var labelWidth = this.labelWidth || this.form.labelWidth;\n if (labelWidth) {\n ret.width = labelWidth;\n }\n return ret;\n },\n contentStyle: function contentStyle() {\n var ret = {};\n var label = this.label;\n if (this.form.labelPosition === 'top' || this.form.inline) return ret;\n if (!label && !this.labelWidth && this.isNested) return ret;\n var labelWidth = this.labelWidth || this.form.labelWidth;\n if (labelWidth === 'auto') {\n if (this.labelWidth === 'auto') {\n ret.marginLeft = this.computedLabelWidth;\n } else if (this.form.labelWidth === 'auto') {\n ret.marginLeft = this.elForm.autoLabelWidth;\n }\n } else {\n ret.marginLeft = labelWidth;\n }\n return ret;\n },\n form: function form() {\n var parent = this.$parent;\n var parentName = parent.$options.componentName;\n while (parentName !== 'ElForm') {\n if (parentName === 'ElFormItem') {\n this.isNested = true;\n }\n parent = parent.$parent;\n parentName = parent.$options.componentName;\n }\n return parent;\n },\n fieldValue: function fieldValue() {\n var model = this.form.model;\n if (!model || !this.prop) {\n return;\n }\n\n var path = this.prop;\n if (path.indexOf(':') !== -1) {\n path = path.replace(/:/, '.');\n }\n\n return Object(util_[\"getPropByPath\"])(model, path, true).v;\n },\n isRequired: function isRequired() {\n var rules = this.getRules();\n var isRequired = false;\n\n if (rules && rules.length) {\n rules.every(function (rule) {\n if (rule.required) {\n isRequired = true;\n return false;\n }\n return true;\n });\n }\n return isRequired;\n },\n _formSize: function _formSize() {\n return this.elForm.size;\n },\n elFormItemSize: function elFormItemSize() {\n return this.size || this._formSize;\n },\n sizeClass: function sizeClass() {\n return this.elFormItemSize || (this.$ELEMENT || {}).size;\n }\n },\n data: function data() {\n return {\n validateState: '',\n validateMessage: '',\n validateDisabled: false,\n validator: {},\n isNested: false,\n computedLabelWidth: ''\n };\n },\n\n methods: {\n validate: function validate(trigger) {\n var _this = this;\n\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : util_[\"noop\"];\n\n this.validateDisabled = false;\n var rules = this.getFilteredRule(trigger);\n if ((!rules || rules.length === 0) && this.required === undefined) {\n callback();\n return true;\n }\n\n this.validateState = 'validating';\n\n var descriptor = {};\n if (rules && rules.length > 0) {\n rules.forEach(function (rule) {\n delete rule.trigger;\n });\n }\n descriptor[this.prop] = rules;\n\n var validator = new external_async_validator_default.a(descriptor);\n var model = {};\n\n model[this.prop] = this.fieldValue;\n\n validator.validate(model, { firstFields: true }, function (errors, invalidFields) {\n _this.validateState = !errors ? 'success' : 'error';\n _this.validateMessage = errors ? errors[0].message : '';\n\n callback(_this.validateMessage, invalidFields);\n _this.elForm && _this.elForm.$emit('validate', _this.prop, !errors, _this.validateMessage || null);\n });\n },\n clearValidate: function clearValidate() {\n this.validateState = '';\n this.validateMessage = '';\n this.validateDisabled = false;\n },\n resetField: function resetField() {\n var _this2 = this;\n\n this.validateState = '';\n this.validateMessage = '';\n\n var model = this.form.model;\n var value = this.fieldValue;\n var path = this.prop;\n if (path.indexOf(':') !== -1) {\n path = path.replace(/:/, '.');\n }\n\n var prop = Object(util_[\"getPropByPath\"])(model, path, true);\n\n this.validateDisabled = true;\n if (Array.isArray(value)) {\n prop.o[prop.k] = [].concat(this.initialValue);\n } else {\n prop.o[prop.k] = this.initialValue;\n }\n\n // reset validateDisabled after onFieldChange triggered\n this.$nextTick(function () {\n _this2.validateDisabled = false;\n });\n\n this.broadcast('ElTimeSelect', 'fieldReset', this.initialValue);\n },\n getRules: function getRules() {\n var formRules = this.form.rules;\n var selfRules = this.rules;\n var requiredRule = this.required !== undefined ? { required: !!this.required } : [];\n\n var prop = Object(util_[\"getPropByPath\"])(formRules, this.prop || '');\n formRules = formRules ? prop.o[this.prop || ''] || prop.v : [];\n\n return [].concat(selfRules || formRules || []).concat(requiredRule);\n },\n getFilteredRule: function getFilteredRule(trigger) {\n var rules = this.getRules();\n\n return rules.filter(function (rule) {\n if (!rule.trigger || trigger === '') return true;\n if (Array.isArray(rule.trigger)) {\n return rule.trigger.indexOf(trigger) > -1;\n } else {\n return rule.trigger === trigger;\n }\n }).map(function (rule) {\n return merge_default()({}, rule);\n });\n },\n onFieldBlur: function onFieldBlur() {\n this.validate('blur');\n },\n onFieldChange: function onFieldChange() {\n if (this.validateDisabled) {\n this.validateDisabled = false;\n return;\n }\n\n this.validate('change');\n },\n updateComputedLabelWidth: function updateComputedLabelWidth(width) {\n this.computedLabelWidth = width ? width + 'px' : '';\n },\n addValidateEvents: function addValidateEvents() {\n var rules = this.getRules();\n\n if (rules.length || this.required !== undefined) {\n this.$on('el.form.blur', this.onFieldBlur);\n this.$on('el.form.change', this.onFieldChange);\n }\n },\n removeValidateEvents: function removeValidateEvents() {\n this.$off();\n }\n },\n mounted: function mounted() {\n if (this.prop) {\n this.dispatch('ElForm', 'el.form.addField', [this]);\n\n var initialValue = this.fieldValue;\n if (Array.isArray(initialValue)) {\n initialValue = [].concat(initialValue);\n }\n Object.defineProperty(this, 'initialValue', {\n value: initialValue\n });\n\n this.addValidateEvents();\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.dispatch('ElForm', 'el.form.removeField', [this]);\n }\n});\n// CONCATENATED MODULE: ./packages/form/src/form-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_form_itemvue_type_script_lang_js_ = (form_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/form/src/form-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar form_item_component = normalizeComponent(\n src_form_itemvue_type_script_lang_js_,\n form_itemvue_type_template_id_b6f3db6c_render,\n form_itemvue_type_template_id_b6f3db6c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var form_item_api; }\nform_item_component.options.__file = \"packages/form/src/form-item.vue\"\n/* harmony default export */ var form_item = (form_item_component.exports);\n// CONCATENATED MODULE: ./packages/form-item/index.js\n\n\n/* istanbul ignore next */\nform_item.install = function (Vue) {\n Vue.component(form_item.name, form_item);\n};\n\n/* harmony default export */ var packages_form_item = (form_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=template&id=2031f33a&\nvar tab_barvue_type_template_id_2031f33a_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", {\n staticClass: \"el-tabs__active-bar\",\n class: \"is-\" + _vm.rootTabs.tabPosition,\n style: _vm.barStyle\n })\n}\nvar tab_barvue_type_template_id_2031f33a_staticRenderFns = []\ntab_barvue_type_template_id_2031f33a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=template&id=2031f33a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&\n//\n//\n//\n\n\n/* harmony default export */ var tab_barvue_type_script_lang_js_ = ({\n name: 'TabBar',\n\n props: {\n tabs: Array\n },\n\n inject: ['rootTabs'],\n\n computed: {\n barStyle: {\n get: function get() {\n var _this = this;\n\n var style = {};\n var offset = 0;\n var tabSize = 0;\n var sizeName = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'width' : 'height';\n var sizeDir = sizeName === 'width' ? 'x' : 'y';\n var firstUpperCase = function firstUpperCase(str) {\n return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {\n return L.toUpperCase();\n });\n };\n this.tabs.every(function (tab, index) {\n var $el = Object(util_[\"arrayFind\"])(_this.$parent.$refs.tabs || [], function (t) {\n return t.id.replace('tab-', '') === tab.paneName;\n });\n if (!$el) {\n return false;\n }\n\n if (!tab.active) {\n offset += $el['client' + firstUpperCase(sizeName)];\n return true;\n } else {\n tabSize = $el['client' + firstUpperCase(sizeName)];\n var tabStyles = window.getComputedStyle($el);\n if (sizeName === 'width' && _this.tabs.length > 1) {\n tabSize -= parseFloat(tabStyles.paddingLeft) + parseFloat(tabStyles.paddingRight);\n }\n if (sizeName === 'width') {\n offset += parseFloat(tabStyles.paddingLeft);\n }\n return false;\n }\n });\n\n var transform = 'translate' + firstUpperCase(sizeDir) + '(' + offset + 'px)';\n style[sizeName] = tabSize + 'px';\n style.transform = transform;\n style.msTransform = transform;\n style.webkitTransform = transform;\n\n return style;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_barvue_type_script_lang_js_ = (tab_barvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-bar.vue\n\n\n\n\n\n/* normalize component */\n\nvar tab_bar_component = normalizeComponent(\n src_tab_barvue_type_script_lang_js_,\n tab_barvue_type_template_id_2031f33a_render,\n tab_barvue_type_template_id_2031f33a_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tab_bar_api; }\ntab_bar_component.options.__file = \"packages/tabs/src/tab-bar.vue\"\n/* harmony default export */ var tab_bar = (tab_bar_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&\n\n\n\n\nfunction noop() {}\nvar tab_navvue_type_script_lang_js_firstUpperCase = function firstUpperCase(str) {\n return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) {\n return L.toUpperCase();\n });\n};\n\n/* harmony default export */ var tab_navvue_type_script_lang_js_ = ({\n name: 'TabNav',\n\n components: {\n TabBar: tab_bar\n },\n\n inject: ['rootTabs'],\n\n props: {\n panes: Array,\n currentName: String,\n editable: Boolean,\n onTabClick: {\n type: Function,\n default: noop\n },\n onTabRemove: {\n type: Function,\n default: noop\n },\n type: String,\n stretch: Boolean\n },\n\n data: function data() {\n return {\n scrollable: false,\n navOffset: 0,\n isFocus: false,\n focusable: true\n };\n },\n\n\n computed: {\n navStyle: function navStyle() {\n var dir = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'X' : 'Y';\n return {\n transform: 'translate' + dir + '(-' + this.navOffset + 'px)'\n };\n },\n sizeName: function sizeName() {\n return ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'width' : 'height';\n }\n },\n\n methods: {\n scrollPrev: function scrollPrev() {\n var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n var currentOffset = this.navOffset;\n\n if (!currentOffset) return;\n\n var newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0;\n\n this.navOffset = newOffset;\n },\n scrollNext: function scrollNext() {\n var navSize = this.$refs.nav['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(this.sizeName)];\n var currentOffset = this.navOffset;\n\n if (navSize - currentOffset <= containerSize) return;\n\n var newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize;\n\n this.navOffset = newOffset;\n },\n scrollToActiveTab: function scrollToActiveTab() {\n if (!this.scrollable) return;\n var nav = this.$refs.nav;\n var activeTab = this.$el.querySelector('.is-active');\n if (!activeTab) return;\n var navScroll = this.$refs.navScroll;\n var isHorizontal = ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1;\n var activeTabBounding = activeTab.getBoundingClientRect();\n var navScrollBounding = navScroll.getBoundingClientRect();\n var maxOffset = isHorizontal ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height;\n var currentOffset = this.navOffset;\n var newOffset = currentOffset;\n\n if (isHorizontal) {\n if (activeTabBounding.left < navScrollBounding.left) {\n newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left);\n }\n if (activeTabBounding.right > navScrollBounding.right) {\n newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right;\n }\n } else {\n if (activeTabBounding.top < navScrollBounding.top) {\n newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top);\n }\n if (activeTabBounding.bottom > navScrollBounding.bottom) {\n newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom);\n }\n }\n newOffset = Math.max(newOffset, 0);\n this.navOffset = Math.min(newOffset, maxOffset);\n },\n update: function update() {\n if (!this.$refs.nav) return;\n var sizeName = this.sizeName;\n var navSize = this.$refs.nav['offset' + tab_navvue_type_script_lang_js_firstUpperCase(sizeName)];\n var containerSize = this.$refs.navScroll['offset' + tab_navvue_type_script_lang_js_firstUpperCase(sizeName)];\n var currentOffset = this.navOffset;\n\n if (containerSize < navSize) {\n var _currentOffset = this.navOffset;\n this.scrollable = this.scrollable || {};\n this.scrollable.prev = _currentOffset;\n this.scrollable.next = _currentOffset + containerSize < navSize;\n if (navSize - _currentOffset < containerSize) {\n this.navOffset = navSize - containerSize;\n }\n } else {\n this.scrollable = false;\n if (currentOffset > 0) {\n this.navOffset = 0;\n }\n }\n },\n changeTab: function changeTab(e) {\n var keyCode = e.keyCode;\n var nextIndex = void 0;\n var currentIndex = void 0,\n tabList = void 0;\n if ([37, 38, 39, 40].indexOf(keyCode) !== -1) {\n // 左右上下键更换tab\n tabList = e.currentTarget.querySelectorAll('[role=tab]');\n currentIndex = Array.prototype.indexOf.call(tabList, e.target);\n } else {\n return;\n }\n if (keyCode === 37 || keyCode === 38) {\n // left\n if (currentIndex === 0) {\n // first\n nextIndex = tabList.length - 1;\n } else {\n nextIndex = currentIndex - 1;\n }\n } else {\n // right\n if (currentIndex < tabList.length - 1) {\n // not last\n nextIndex = currentIndex + 1;\n } else {\n nextIndex = 0;\n }\n }\n tabList[nextIndex].focus(); // 改变焦点元素\n tabList[nextIndex].click(); // 选中下一个tab\n this.setFocus();\n },\n setFocus: function setFocus() {\n if (this.focusable) {\n this.isFocus = true;\n }\n },\n removeFocus: function removeFocus() {\n this.isFocus = false;\n },\n visibilityChangeHandler: function visibilityChangeHandler() {\n var _this = this;\n\n var visibility = document.visibilityState;\n if (visibility === 'hidden') {\n this.focusable = false;\n } else if (visibility === 'visible') {\n setTimeout(function () {\n _this.focusable = true;\n }, 50);\n }\n },\n windowBlurHandler: function windowBlurHandler() {\n this.focusable = false;\n },\n windowFocusHandler: function windowFocusHandler() {\n var _this2 = this;\n\n setTimeout(function () {\n _this2.focusable = true;\n }, 50);\n }\n },\n\n updated: function updated() {\n this.update();\n },\n render: function render(h) {\n var _this3 = this;\n\n var type = this.type,\n panes = this.panes,\n editable = this.editable,\n stretch = this.stretch,\n onTabClick = this.onTabClick,\n onTabRemove = this.onTabRemove,\n navStyle = this.navStyle,\n scrollable = this.scrollable,\n scrollNext = this.scrollNext,\n scrollPrev = this.scrollPrev,\n changeTab = this.changeTab,\n setFocus = this.setFocus,\n removeFocus = this.removeFocus;\n\n var scrollBtn = scrollable ? [h(\n 'span',\n { 'class': ['el-tabs__nav-prev', scrollable.prev ? '' : 'is-disabled'], on: {\n 'click': scrollPrev\n }\n },\n [h('i', { 'class': 'el-icon-arrow-left' })]\n ), h(\n 'span',\n { 'class': ['el-tabs__nav-next', scrollable.next ? '' : 'is-disabled'], on: {\n 'click': scrollNext\n }\n },\n [h('i', { 'class': 'el-icon-arrow-right' })]\n )] : null;\n\n var tabs = this._l(panes, function (pane, index) {\n var _ref;\n\n var tabName = pane.name || pane.index || index;\n var closable = pane.isClosable || editable;\n\n pane.index = '' + index;\n\n var btnClose = closable ? h('span', { 'class': 'el-icon-close', on: {\n 'click': function click(ev) {\n onTabRemove(pane, ev);\n }\n }\n }) : null;\n\n var tabLabelContent = pane.$slots.label || pane.label;\n var tabindex = pane.active ? 0 : -1;\n return h(\n 'div',\n {\n 'class': (_ref = {\n 'el-tabs__item': true\n }, _ref['is-' + _this3.rootTabs.tabPosition] = true, _ref['is-active'] = pane.active, _ref['is-disabled'] = pane.disabled, _ref['is-closable'] = closable, _ref['is-focus'] = _this3.isFocus, _ref),\n attrs: { id: 'tab-' + tabName,\n\n 'aria-controls': 'pane-' + tabName,\n role: 'tab',\n 'aria-selected': pane.active,\n\n tabindex: tabindex\n },\n key: 'tab-' + tabName, ref: 'tabs', refInFor: true,\n on: {\n 'focus': function focus() {\n setFocus();\n },\n 'blur': function blur() {\n removeFocus();\n },\n 'click': function click(ev) {\n removeFocus();onTabClick(pane, tabName, ev);\n },\n 'keydown': function keydown(ev) {\n if (closable && (ev.keyCode === 46 || ev.keyCode === 8)) {\n onTabRemove(pane, ev);\n }\n }\n }\n },\n [tabLabelContent, btnClose]\n );\n });\n return h(\n 'div',\n { 'class': ['el-tabs__nav-wrap', scrollable ? 'is-scrollable' : '', 'is-' + this.rootTabs.tabPosition] },\n [scrollBtn, h(\n 'div',\n { 'class': ['el-tabs__nav-scroll'], ref: 'navScroll' },\n [h(\n 'div',\n {\n 'class': ['el-tabs__nav', 'is-' + this.rootTabs.tabPosition, stretch && ['top', 'bottom'].indexOf(this.rootTabs.tabPosition) !== -1 ? 'is-stretch' : ''],\n ref: 'nav',\n style: navStyle,\n attrs: { role: 'tablist'\n },\n on: {\n 'keydown': changeTab\n }\n },\n [!type ? h('tab-bar', {\n attrs: { tabs: panes }\n }) : null, tabs]\n )]\n )]\n );\n },\n mounted: function mounted() {\n var _this4 = this;\n\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.update);\n document.addEventListener('visibilitychange', this.visibilityChangeHandler);\n window.addEventListener('blur', this.windowBlurHandler);\n window.addEventListener('focus', this.windowFocusHandler);\n setTimeout(function () {\n _this4.scrollToActiveTab();\n }, 0);\n },\n beforeDestroy: function beforeDestroy() {\n if (this.$el && this.update) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.update);\n document.removeEventListener('visibilitychange', this.visibilityChangeHandler);\n window.removeEventListener('blur', this.windowBlurHandler);\n window.removeEventListener('focus', this.windowFocusHandler);\n }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_navvue_type_script_lang_js_ = (tab_navvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-nav.vue\nvar tab_nav_render, tab_nav_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tab_nav_component = normalizeComponent(\n src_tab_navvue_type_script_lang_js_,\n tab_nav_render,\n tab_nav_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tab_nav_api; }\ntab_nav_component.options.__file = \"packages/tabs/src/tab-nav.vue\"\n/* harmony default export */ var tab_nav = (tab_nav_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tabs.vue?vue&type=script&lang=js&\n\n\n\n/* harmony default export */ var tabsvue_type_script_lang_js_ = ({\n name: 'ElTabs',\n\n components: {\n TabNav: tab_nav\n },\n\n props: {\n type: String,\n activeName: String,\n closable: Boolean,\n addable: Boolean,\n value: {},\n editable: Boolean,\n tabPosition: {\n type: String,\n default: 'top'\n },\n beforeLeave: Function,\n stretch: Boolean\n },\n\n provide: function provide() {\n return {\n rootTabs: this\n };\n },\n data: function data() {\n return {\n currentName: this.value || this.activeName,\n panes: []\n };\n },\n\n\n watch: {\n activeName: function activeName(value) {\n this.setCurrentName(value);\n },\n value: function value(_value) {\n this.setCurrentName(_value);\n },\n currentName: function currentName(value) {\n var _this = this;\n\n if (this.$refs.nav) {\n this.$nextTick(function () {\n _this.$refs.nav.$nextTick(function (_) {\n _this.$refs.nav.scrollToActiveTab();\n });\n });\n }\n }\n },\n\n methods: {\n calcPaneInstances: function calcPaneInstances() {\n var _this2 = this;\n\n var isForceUpdate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (this.$slots.default) {\n var paneSlots = this.$slots.default.filter(function (vnode) {\n return vnode.tag && vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'ElTabPane';\n });\n // update indeed\n var panes = paneSlots.map(function (_ref) {\n var componentInstance = _ref.componentInstance;\n return componentInstance;\n });\n var panesChanged = !(panes.length === this.panes.length && panes.every(function (pane, index) {\n return pane === _this2.panes[index];\n }));\n if (isForceUpdate || panesChanged) {\n this.panes = panes;\n }\n } else if (this.panes.length !== 0) {\n this.panes = [];\n }\n },\n handleTabClick: function handleTabClick(tab, tabName, event) {\n if (tab.disabled) return;\n this.setCurrentName(tabName);\n this.$emit('tab-click', tab, event);\n },\n handleTabRemove: function handleTabRemove(pane, ev) {\n if (pane.disabled) return;\n ev.stopPropagation();\n this.$emit('edit', pane.name, 'remove');\n this.$emit('tab-remove', pane.name);\n },\n handleTabAdd: function handleTabAdd() {\n this.$emit('edit', null, 'add');\n this.$emit('tab-add');\n },\n setCurrentName: function setCurrentName(value) {\n var _this3 = this;\n\n var changeCurrentName = function changeCurrentName() {\n _this3.currentName = value;\n _this3.$emit('input', value);\n };\n if (this.currentName !== value && this.beforeLeave) {\n var before = this.beforeLeave(value, this.currentName);\n if (before && before.then) {\n before.then(function () {\n changeCurrentName();\n _this3.$refs.nav && _this3.$refs.nav.removeFocus();\n }, function () {\n // https://github.com/ElemeFE/element/pull/14816\n // ignore promise rejection in `before-leave` hook\n });\n } else if (before !== false) {\n changeCurrentName();\n }\n } else {\n changeCurrentName();\n }\n }\n },\n\n render: function render(h) {\n var _ref2;\n\n var type = this.type,\n handleTabClick = this.handleTabClick,\n handleTabRemove = this.handleTabRemove,\n handleTabAdd = this.handleTabAdd,\n currentName = this.currentName,\n panes = this.panes,\n editable = this.editable,\n addable = this.addable,\n tabPosition = this.tabPosition,\n stretch = this.stretch;\n\n\n var newButton = editable || addable ? h(\n 'span',\n {\n 'class': 'el-tabs__new-tab',\n on: {\n 'click': handleTabAdd,\n 'keydown': function keydown(ev) {\n if (ev.keyCode === 13) {\n handleTabAdd();\n }\n }\n },\n attrs: {\n tabindex: '0'\n }\n },\n [h('i', { 'class': 'el-icon-plus' })]\n ) : null;\n\n var navData = {\n props: {\n currentName: currentName,\n onTabClick: handleTabClick,\n onTabRemove: handleTabRemove,\n editable: editable,\n type: type,\n panes: panes,\n stretch: stretch\n },\n ref: 'nav'\n };\n var header = h(\n 'div',\n { 'class': ['el-tabs__header', 'is-' + tabPosition] },\n [newButton, h('tab-nav', navData)]\n );\n var panels = h(\n 'div',\n { 'class': 'el-tabs__content' },\n [this.$slots.default]\n );\n\n return h(\n 'div',\n { 'class': (_ref2 = {\n 'el-tabs': true,\n 'el-tabs--card': type === 'card'\n }, _ref2['el-tabs--' + tabPosition] = true, _ref2['el-tabs--border-card'] = type === 'border-card', _ref2) },\n [tabPosition !== 'bottom' ? [header, panels] : [panels, header]]\n );\n },\n created: function created() {\n if (!this.currentName) {\n this.setCurrentName('0');\n }\n\n this.$on('tab-nav-update', this.calcPaneInstances.bind(null, true));\n },\n mounted: function mounted() {\n this.calcPaneInstances();\n },\n updated: function updated() {\n this.calcPaneInstances();\n }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tabsvue_type_script_lang_js_ = (tabsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tabs.vue\nvar tabs_render, tabs_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tabs_component = normalizeComponent(\n src_tabsvue_type_script_lang_js_,\n tabs_render,\n tabs_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tabs_api; }\ntabs_component.options.__file = \"packages/tabs/src/tabs.vue\"\n/* harmony default export */ var tabs = (tabs_component.exports);\n// CONCATENATED MODULE: ./packages/tabs/index.js\n\n\n/* istanbul ignore next */\ntabs.install = function (Vue) {\n Vue.component(tabs.name, tabs);\n};\n\n/* harmony default export */ var packages_tabs = (tabs);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-pane.vue?vue&type=template&id=9145a070&\nvar tab_panevue_type_template_id_9145a070_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return !_vm.lazy || _vm.loaded || _vm.active\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.active,\n expression: \"active\"\n }\n ],\n staticClass: \"el-tab-pane\",\n attrs: {\n role: \"tabpanel\",\n \"aria-hidden\": !_vm.active,\n id: \"pane-\" + _vm.paneName,\n \"aria-labelledby\": \"tab-\" + _vm.paneName\n }\n },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n}\nvar tab_panevue_type_template_id_9145a070_staticRenderFns = []\ntab_panevue_type_template_id_9145a070_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue?vue&type=template&id=9145a070&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tabs/src/tab-pane.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var tab_panevue_type_script_lang_js_ = ({\n name: 'ElTabPane',\n\n componentName: 'ElTabPane',\n\n props: {\n label: String,\n labelContent: Function,\n name: String,\n closable: Boolean,\n disabled: Boolean,\n lazy: Boolean\n },\n\n data: function data() {\n return {\n index: null,\n loaded: false\n };\n },\n\n\n computed: {\n isClosable: function isClosable() {\n return this.closable || this.$parent.closable;\n },\n active: function active() {\n var active = this.$parent.currentName === (this.name || this.index);\n if (active) {\n this.loaded = true;\n }\n return active;\n },\n paneName: function paneName() {\n return this.name || this.index;\n }\n },\n\n updated: function updated() {\n this.$parent.$emit('tab-nav-update');\n }\n});\n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tab_panevue_type_script_lang_js_ = (tab_panevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tabs/src/tab-pane.vue\n\n\n\n\n\n/* normalize component */\n\nvar tab_pane_component = normalizeComponent(\n src_tab_panevue_type_script_lang_js_,\n tab_panevue_type_template_id_9145a070_render,\n tab_panevue_type_template_id_9145a070_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tab_pane_api; }\ntab_pane_component.options.__file = \"packages/tabs/src/tab-pane.vue\"\n/* harmony default export */ var tab_pane = (tab_pane_component.exports);\n// CONCATENATED MODULE: ./packages/tab-pane/index.js\n\n\n/* istanbul ignore next */\ntab_pane.install = function (Vue) {\n Vue.component(tab_pane.name, tab_pane);\n};\n\n/* harmony default export */ var packages_tab_pane = (tab_pane);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tag/src/tag.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var tagvue_type_script_lang_js_ = ({\n name: 'ElTag',\n props: {\n text: String,\n closable: Boolean,\n type: String,\n hit: Boolean,\n disableTransitions: Boolean,\n color: String,\n size: String,\n effect: {\n type: String,\n default: 'light',\n validator: function validator(val) {\n return ['dark', 'light', 'plain'].indexOf(val) !== -1;\n }\n }\n },\n methods: {\n handleClose: function handleClose(event) {\n event.stopPropagation();\n this.$emit('close', event);\n },\n handleClick: function handleClick(event) {\n this.$emit('click', event);\n }\n },\n computed: {\n tagSize: function tagSize() {\n return this.size || (this.$ELEMENT || {}).size;\n }\n },\n render: function render(h) {\n var type = this.type,\n tagSize = this.tagSize,\n hit = this.hit,\n effect = this.effect;\n\n var classes = ['el-tag', type ? 'el-tag--' + type : '', tagSize ? 'el-tag--' + tagSize : '', effect ? 'el-tag--' + effect : '', hit && 'is-hit'];\n var tagEl = h(\n 'span',\n {\n 'class': classes,\n style: { backgroundColor: this.color },\n on: {\n 'click': this.handleClick\n }\n },\n [this.$slots.default, this.closable && h('i', { 'class': 'el-tag__close el-icon-close', on: {\n 'click': this.handleClose\n }\n })]\n );\n\n return this.disableTransitions ? tagEl : h(\n 'transition',\n {\n attrs: { name: 'el-zoom-in-center' }\n },\n [tagEl]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/tag/src/tag.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tagvue_type_script_lang_js_ = (tagvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tag/src/tag.vue\nvar tag_render, tag_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar tag_component = normalizeComponent(\n src_tagvue_type_script_lang_js_,\n tag_render,\n tag_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tag_api; }\ntag_component.options.__file = \"packages/tag/src/tag.vue\"\n/* harmony default export */ var src_tag = (tag_component.exports);\n// CONCATENATED MODULE: ./packages/tag/index.js\n\n\n/* istanbul ignore next */\nsrc_tag.install = function (Vue) {\n Vue.component(src_tag.name, src_tag);\n};\n\n/* harmony default export */ var packages_tag = (src_tag);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree.vue?vue&type=template&id=547575a6&\nvar treevue_type_template_id_547575a6_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-tree\",\n class: {\n \"el-tree--highlight-current\": _vm.highlightCurrent,\n \"is-dragging\": !!_vm.dragState.draggingNode,\n \"is-drop-not-allow\": !_vm.dragState.allowDrop,\n \"is-drop-inner\": _vm.dragState.dropType === \"inner\"\n },\n attrs: { role: \"tree\" }\n },\n [\n _vm._l(_vm.root.childNodes, function(child) {\n return _c(\"el-tree-node\", {\n key: _vm.getNodeKey(child),\n attrs: {\n node: child,\n props: _vm.props,\n \"render-after-expand\": _vm.renderAfterExpand,\n \"show-checkbox\": _vm.showCheckbox,\n \"render-content\": _vm.renderContent\n },\n on: { \"node-expand\": _vm.handleNodeExpand }\n })\n }),\n _vm.isEmpty\n ? _c(\"div\", { staticClass: \"el-tree__empty-block\" }, [\n _c(\"span\", { staticClass: \"el-tree__empty-text\" }, [\n _vm._v(_vm._s(_vm.emptyText))\n ])\n ])\n : _vm._e(),\n _c(\"div\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.dragState.showDropIndicator,\n expression: \"dragState.showDropIndicator\"\n }\n ],\n ref: \"dropIndicator\",\n staticClass: \"el-tree__drop-indicator\"\n })\n ],\n 2\n )\n}\nvar treevue_type_template_id_547575a6_staticRenderFns = []\ntreevue_type_template_id_547575a6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tree/src/tree.vue?vue&type=template&id=547575a6&\n\n// CONCATENATED MODULE: ./packages/tree/src/model/util.js\nvar NODE_KEY = '$treeNodeId';\n\nvar markNodeData = function markNodeData(node, data) {\n if (!data || data[NODE_KEY]) return;\n Object.defineProperty(data, NODE_KEY, {\n value: node.id,\n enumerable: false,\n configurable: false,\n writable: false\n });\n};\n\nvar util_getNodeKey = function getNodeKey(key, data) {\n if (!key) return data[NODE_KEY];\n return data[key];\n};\n\nvar findNearestComponent = function findNearestComponent(element, componentName) {\n var target = element;\n while (target && target.tagName !== 'BODY') {\n if (target.__vue__ && target.__vue__.$options.name === componentName) {\n return target.__vue__;\n }\n target = target.parentNode;\n }\n return null;\n};\n// CONCATENATED MODULE: ./packages/tree/src/model/node.js\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction node_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\n\nvar getChildState = function getChildState(node) {\n var all = true;\n var none = true;\n var allWithoutDisable = true;\n for (var i = 0, j = node.length; i < j; i++) {\n var n = node[i];\n if (n.checked !== true || n.indeterminate) {\n all = false;\n if (!n.disabled) {\n allWithoutDisable = false;\n }\n }\n if (n.checked !== false || n.indeterminate) {\n none = false;\n }\n }\n\n return { all: all, none: none, allWithoutDisable: allWithoutDisable, half: !all && !none };\n};\n\nvar reInitChecked = function reInitChecked(node) {\n if (node.childNodes.length === 0) return;\n\n var _getChildState = getChildState(node.childNodes),\n all = _getChildState.all,\n none = _getChildState.none,\n half = _getChildState.half;\n\n if (all) {\n node.checked = true;\n node.indeterminate = false;\n } else if (half) {\n node.checked = false;\n node.indeterminate = true;\n } else if (none) {\n node.checked = false;\n node.indeterminate = false;\n }\n\n var parent = node.parent;\n if (!parent || parent.level === 0) return;\n\n if (!node.store.checkStrictly) {\n reInitChecked(parent);\n }\n};\n\nvar getPropertyFromData = function getPropertyFromData(node, prop) {\n var props = node.store.props;\n var data = node.data || {};\n var config = props[prop];\n\n if (typeof config === 'function') {\n return config(data, node);\n } else if (typeof config === 'string') {\n return data[config];\n } else if (typeof config === 'undefined') {\n var dataProp = data[prop];\n return dataProp === undefined ? '' : dataProp;\n }\n};\n\nvar nodeIdSeed = 0;\n\nvar node_Node = function () {\n function Node(options) {\n node_classCallCheck(this, Node);\n\n this.id = nodeIdSeed++;\n this.text = null;\n this.checked = false;\n this.indeterminate = false;\n this.data = null;\n this.expanded = false;\n this.parent = null;\n this.visible = true;\n this.isCurrent = false;\n\n for (var name in options) {\n if (options.hasOwnProperty(name)) {\n this[name] = options[name];\n }\n }\n\n // internal\n this.level = 0;\n this.loaded = false;\n this.childNodes = [];\n this.loading = false;\n\n if (this.parent) {\n this.level = this.parent.level + 1;\n }\n\n var store = this.store;\n if (!store) {\n throw new Error('[Node]store is required!');\n }\n store.registerNode(this);\n\n var props = store.props;\n if (props && typeof props.isLeaf !== 'undefined') {\n var isLeaf = getPropertyFromData(this, 'isLeaf');\n if (typeof isLeaf === 'boolean') {\n this.isLeafByUser = isLeaf;\n }\n }\n\n if (store.lazy !== true && this.data) {\n this.setData(this.data);\n\n if (store.defaultExpandAll) {\n this.expanded = true;\n }\n } else if (this.level > 0 && store.lazy && store.defaultExpandAll) {\n this.expand();\n }\n if (!Array.isArray(this.data)) {\n markNodeData(this, this.data);\n }\n if (!this.data) return;\n var defaultExpandedKeys = store.defaultExpandedKeys;\n var key = store.key;\n if (key && defaultExpandedKeys && defaultExpandedKeys.indexOf(this.key) !== -1) {\n this.expand(null, store.autoExpandParent);\n }\n\n if (key && store.currentNodeKey !== undefined && this.key === store.currentNodeKey) {\n store.currentNode = this;\n store.currentNode.isCurrent = true;\n }\n\n if (store.lazy) {\n store._initDefaultCheckedNode(this);\n }\n\n this.updateLeafState();\n }\n\n Node.prototype.setData = function setData(data) {\n if (!Array.isArray(data)) {\n markNodeData(this, data);\n }\n\n this.data = data;\n this.childNodes = [];\n\n var children = void 0;\n if (this.level === 0 && this.data instanceof Array) {\n children = this.data;\n } else {\n children = getPropertyFromData(this, 'children') || [];\n }\n\n for (var i = 0, j = children.length; i < j; i++) {\n this.insertChild({ data: children[i] });\n }\n };\n\n Node.prototype.contains = function contains(target) {\n var deep = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var walk = function walk(parent) {\n var children = parent.childNodes || [];\n var result = false;\n for (var i = 0, j = children.length; i < j; i++) {\n var child = children[i];\n if (child === target || deep && walk(child)) {\n result = true;\n break;\n }\n }\n return result;\n };\n\n return walk(this);\n };\n\n Node.prototype.remove = function remove() {\n var parent = this.parent;\n if (parent) {\n parent.removeChild(this);\n }\n };\n\n Node.prototype.insertChild = function insertChild(child, index, batch) {\n if (!child) throw new Error('insertChild error: child is required.');\n\n if (!(child instanceof Node)) {\n if (!batch) {\n var children = this.getChildren(true) || [];\n if (children.indexOf(child.data) === -1) {\n if (typeof index === 'undefined' || index < 0) {\n children.push(child.data);\n } else {\n children.splice(index, 0, child.data);\n }\n }\n }\n merge_default()(child, {\n parent: this,\n store: this.store\n });\n child = new Node(child);\n }\n\n child.level = this.level + 1;\n\n if (typeof index === 'undefined' || index < 0) {\n this.childNodes.push(child);\n } else {\n this.childNodes.splice(index, 0, child);\n }\n\n this.updateLeafState();\n };\n\n Node.prototype.insertBefore = function insertBefore(child, ref) {\n var index = void 0;\n if (ref) {\n index = this.childNodes.indexOf(ref);\n }\n this.insertChild(child, index);\n };\n\n Node.prototype.insertAfter = function insertAfter(child, ref) {\n var index = void 0;\n if (ref) {\n index = this.childNodes.indexOf(ref);\n if (index !== -1) index += 1;\n }\n this.insertChild(child, index);\n };\n\n Node.prototype.removeChild = function removeChild(child) {\n var children = this.getChildren() || [];\n var dataIndex = children.indexOf(child.data);\n if (dataIndex > -1) {\n children.splice(dataIndex, 1);\n }\n\n var index = this.childNodes.indexOf(child);\n\n if (index > -1) {\n this.store && this.store.deregisterNode(child);\n child.parent = null;\n this.childNodes.splice(index, 1);\n }\n\n this.updateLeafState();\n };\n\n Node.prototype.removeChildByData = function removeChildByData(data) {\n var targetNode = null;\n\n for (var i = 0; i < this.childNodes.length; i++) {\n if (this.childNodes[i].data === data) {\n targetNode = this.childNodes[i];\n break;\n }\n }\n\n if (targetNode) {\n this.removeChild(targetNode);\n }\n };\n\n Node.prototype.expand = function expand(callback, expandParent) {\n var _this = this;\n\n var done = function done() {\n if (expandParent) {\n var parent = _this.parent;\n while (parent.level > 0) {\n parent.expanded = true;\n parent = parent.parent;\n }\n }\n _this.expanded = true;\n if (callback) callback();\n };\n\n if (this.shouldLoadData()) {\n this.loadData(function (data) {\n if (data instanceof Array) {\n if (_this.checked) {\n _this.setChecked(true, true);\n } else if (!_this.store.checkStrictly) {\n reInitChecked(_this);\n }\n done();\n }\n });\n } else {\n done();\n }\n };\n\n Node.prototype.doCreateChildren = function doCreateChildren(array) {\n var _this2 = this;\n\n var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n array.forEach(function (item) {\n _this2.insertChild(merge_default()({ data: item }, defaultProps), undefined, true);\n });\n };\n\n Node.prototype.collapse = function collapse() {\n this.expanded = false;\n };\n\n Node.prototype.shouldLoadData = function shouldLoadData() {\n return this.store.lazy === true && this.store.load && !this.loaded;\n };\n\n Node.prototype.updateLeafState = function updateLeafState() {\n if (this.store.lazy === true && this.loaded !== true && typeof this.isLeafByUser !== 'undefined') {\n this.isLeaf = this.isLeafByUser;\n return;\n }\n var childNodes = this.childNodes;\n if (!this.store.lazy || this.store.lazy === true && this.loaded === true) {\n this.isLeaf = !childNodes || childNodes.length === 0;\n return;\n }\n this.isLeaf = false;\n };\n\n Node.prototype.setChecked = function setChecked(value, deep, recursion, passValue) {\n var _this3 = this;\n\n this.indeterminate = value === 'half';\n this.checked = value === true;\n\n if (this.store.checkStrictly) return;\n\n if (!(this.shouldLoadData() && !this.store.checkDescendants)) {\n var _getChildState2 = getChildState(this.childNodes),\n all = _getChildState2.all,\n allWithoutDisable = _getChildState2.allWithoutDisable;\n\n if (!this.isLeaf && !all && allWithoutDisable) {\n this.checked = false;\n value = false;\n }\n\n var handleDescendants = function handleDescendants() {\n if (deep) {\n var childNodes = _this3.childNodes;\n for (var i = 0, j = childNodes.length; i < j; i++) {\n var child = childNodes[i];\n passValue = passValue || value !== false;\n var isCheck = child.disabled ? child.checked : passValue;\n child.setChecked(isCheck, deep, true, passValue);\n }\n\n var _getChildState3 = getChildState(childNodes),\n half = _getChildState3.half,\n _all = _getChildState3.all;\n\n if (!_all) {\n _this3.checked = _all;\n _this3.indeterminate = half;\n }\n }\n };\n\n if (this.shouldLoadData()) {\n // Only work on lazy load data.\n this.loadData(function () {\n handleDescendants();\n reInitChecked(_this3);\n }, {\n checked: value !== false\n });\n return;\n } else {\n handleDescendants();\n }\n }\n\n var parent = this.parent;\n if (!parent || parent.level === 0) return;\n\n if (!recursion) {\n reInitChecked(parent);\n }\n };\n\n Node.prototype.getChildren = function getChildren() {\n var forceInit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n // this is data\n if (this.level === 0) return this.data;\n var data = this.data;\n if (!data) return null;\n\n var props = this.store.props;\n var children = 'children';\n if (props) {\n children = props.children || 'children';\n }\n\n if (data[children] === undefined) {\n data[children] = null;\n }\n\n if (forceInit && !data[children]) {\n data[children] = [];\n }\n\n return data[children];\n };\n\n Node.prototype.updateChildren = function updateChildren() {\n var _this4 = this;\n\n var newData = this.getChildren() || [];\n var oldData = this.childNodes.map(function (node) {\n return node.data;\n });\n\n var newDataMap = {};\n var newNodes = [];\n\n newData.forEach(function (item, index) {\n var key = item[NODE_KEY];\n var isNodeExists = !!key && Object(util_[\"arrayFindIndex\"])(oldData, function (data) {\n return data[NODE_KEY] === key;\n }) >= 0;\n if (isNodeExists) {\n newDataMap[key] = { index: index, data: item };\n } else {\n newNodes.push({ index: index, data: item });\n }\n });\n\n if (!this.store.lazy) {\n oldData.forEach(function (item) {\n if (!newDataMap[item[NODE_KEY]]) _this4.removeChildByData(item);\n });\n }\n\n newNodes.forEach(function (_ref) {\n var index = _ref.index,\n data = _ref.data;\n\n _this4.insertChild({ data: data }, index);\n });\n\n this.updateLeafState();\n };\n\n Node.prototype.loadData = function loadData(callback) {\n var _this5 = this;\n\n var defaultProps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.store.lazy === true && this.store.load && !this.loaded && (!this.loading || Object.keys(defaultProps).length)) {\n this.loading = true;\n\n var resolve = function resolve(children) {\n _this5.loaded = true;\n _this5.loading = false;\n _this5.childNodes = [];\n\n _this5.doCreateChildren(children, defaultProps);\n\n _this5.updateLeafState();\n if (callback) {\n callback.call(_this5, children);\n }\n };\n\n this.store.load(this, resolve);\n } else {\n if (callback) {\n callback.call(this);\n }\n }\n };\n\n _createClass(Node, [{\n key: 'label',\n get: function get() {\n return getPropertyFromData(this, 'label');\n }\n }, {\n key: 'key',\n get: function get() {\n var nodeKey = this.store.key;\n if (this.data) return this.data[nodeKey];\n return null;\n }\n }, {\n key: 'disabled',\n get: function get() {\n return getPropertyFromData(this, 'disabled');\n }\n }, {\n key: 'nextSibling',\n get: function get() {\n var parent = this.parent;\n if (parent) {\n var index = parent.childNodes.indexOf(this);\n if (index > -1) {\n return parent.childNodes[index + 1];\n }\n }\n return null;\n }\n }, {\n key: 'previousSibling',\n get: function get() {\n var parent = this.parent;\n if (parent) {\n var index = parent.childNodes.indexOf(this);\n if (index > -1) {\n return index > 0 ? parent.childNodes[index - 1] : null;\n }\n }\n return null;\n }\n }]);\n\n return Node;\n}();\n\n/* harmony default export */ var model_node = (node_Node);\n// CONCATENATED MODULE: ./packages/tree/src/model/tree-store.js\nvar tree_store_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction tree_store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar tree_store_TreeStore = function () {\n function TreeStore(options) {\n var _this = this;\n\n tree_store_classCallCheck(this, TreeStore);\n\n this.currentNode = null;\n this.currentNodeKey = null;\n\n for (var option in options) {\n if (options.hasOwnProperty(option)) {\n this[option] = options[option];\n }\n }\n\n this.nodesMap = {};\n\n this.root = new model_node({\n data: this.data,\n store: this\n });\n\n if (this.lazy && this.load) {\n var loadFn = this.load;\n loadFn(this.root, function (data) {\n _this.root.doCreateChildren(data);\n _this._initDefaultCheckedNodes();\n });\n } else {\n this._initDefaultCheckedNodes();\n }\n }\n\n TreeStore.prototype.filter = function filter(value) {\n var filterNodeMethod = this.filterNodeMethod;\n var lazy = this.lazy;\n var traverse = function traverse(node) {\n var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n childNodes.forEach(function (child) {\n child.visible = filterNodeMethod.call(child, value, child.data, child);\n\n traverse(child);\n });\n\n if (!node.visible && childNodes.length) {\n var allHidden = true;\n allHidden = !childNodes.some(function (child) {\n return child.visible;\n });\n\n if (node.root) {\n node.root.visible = allHidden === false;\n } else {\n node.visible = allHidden === false;\n }\n }\n if (!value) return;\n\n if (node.visible && !node.isLeaf && !lazy) node.expand();\n };\n\n traverse(this);\n };\n\n TreeStore.prototype.setData = function setData(newVal) {\n var instanceChanged = newVal !== this.root.data;\n if (instanceChanged) {\n this.root.setData(newVal);\n this._initDefaultCheckedNodes();\n } else {\n this.root.updateChildren();\n }\n };\n\n TreeStore.prototype.getNode = function getNode(data) {\n if (data instanceof model_node) return data;\n var key = (typeof data === 'undefined' ? 'undefined' : tree_store_typeof(data)) !== 'object' ? data : util_getNodeKey(this.key, data);\n return this.nodesMap[key] || null;\n };\n\n TreeStore.prototype.insertBefore = function insertBefore(data, refData) {\n var refNode = this.getNode(refData);\n refNode.parent.insertBefore({ data: data }, refNode);\n };\n\n TreeStore.prototype.insertAfter = function insertAfter(data, refData) {\n var refNode = this.getNode(refData);\n refNode.parent.insertAfter({ data: data }, refNode);\n };\n\n TreeStore.prototype.remove = function remove(data) {\n var node = this.getNode(data);\n\n if (node && node.parent) {\n if (node === this.currentNode) {\n this.currentNode = null;\n }\n node.parent.removeChild(node);\n }\n };\n\n TreeStore.prototype.append = function append(data, parentData) {\n var parentNode = parentData ? this.getNode(parentData) : this.root;\n\n if (parentNode) {\n parentNode.insertChild({ data: data });\n }\n };\n\n TreeStore.prototype._initDefaultCheckedNodes = function _initDefaultCheckedNodes() {\n var _this2 = this;\n\n var defaultCheckedKeys = this.defaultCheckedKeys || [];\n var nodesMap = this.nodesMap;\n\n defaultCheckedKeys.forEach(function (checkedKey) {\n var node = nodesMap[checkedKey];\n\n if (node) {\n node.setChecked(true, !_this2.checkStrictly);\n }\n });\n };\n\n TreeStore.prototype._initDefaultCheckedNode = function _initDefaultCheckedNode(node) {\n var defaultCheckedKeys = this.defaultCheckedKeys || [];\n\n if (defaultCheckedKeys.indexOf(node.key) !== -1) {\n node.setChecked(true, !this.checkStrictly);\n }\n };\n\n TreeStore.prototype.setDefaultCheckedKey = function setDefaultCheckedKey(newVal) {\n if (newVal !== this.defaultCheckedKeys) {\n this.defaultCheckedKeys = newVal;\n this._initDefaultCheckedNodes();\n }\n };\n\n TreeStore.prototype.registerNode = function registerNode(node) {\n var key = this.key;\n if (!key || !node || !node.data) return;\n\n var nodeKey = node.key;\n if (nodeKey !== undefined) this.nodesMap[node.key] = node;\n };\n\n TreeStore.prototype.deregisterNode = function deregisterNode(node) {\n var _this3 = this;\n\n var key = this.key;\n if (!key || !node || !node.data) return;\n\n node.childNodes.forEach(function (child) {\n _this3.deregisterNode(child);\n });\n\n delete this.nodesMap[node.key];\n };\n\n TreeStore.prototype.getCheckedNodes = function getCheckedNodes() {\n var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n var includeHalfChecked = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var checkedNodes = [];\n var traverse = function traverse(node) {\n var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n childNodes.forEach(function (child) {\n if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {\n checkedNodes.push(child.data);\n }\n\n traverse(child);\n });\n };\n\n traverse(this);\n\n return checkedNodes;\n };\n\n TreeStore.prototype.getCheckedKeys = function getCheckedKeys() {\n var _this4 = this;\n\n var leafOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n return this.getCheckedNodes(leafOnly).map(function (data) {\n return (data || {})[_this4.key];\n });\n };\n\n TreeStore.prototype.getHalfCheckedNodes = function getHalfCheckedNodes() {\n var nodes = [];\n var traverse = function traverse(node) {\n var childNodes = node.root ? node.root.childNodes : node.childNodes;\n\n childNodes.forEach(function (child) {\n if (child.indeterminate) {\n nodes.push(child.data);\n }\n\n traverse(child);\n });\n };\n\n traverse(this);\n\n return nodes;\n };\n\n TreeStore.prototype.getHalfCheckedKeys = function getHalfCheckedKeys() {\n var _this5 = this;\n\n return this.getHalfCheckedNodes().map(function (data) {\n return (data || {})[_this5.key];\n });\n };\n\n TreeStore.prototype._getAllNodes = function _getAllNodes() {\n var allNodes = [];\n var nodesMap = this.nodesMap;\n for (var nodeKey in nodesMap) {\n if (nodesMap.hasOwnProperty(nodeKey)) {\n allNodes.push(nodesMap[nodeKey]);\n }\n }\n\n return allNodes;\n };\n\n TreeStore.prototype.updateChildren = function updateChildren(key, data) {\n var node = this.nodesMap[key];\n if (!node) return;\n var childNodes = node.childNodes;\n for (var i = childNodes.length - 1; i >= 0; i--) {\n var child = childNodes[i];\n this.remove(child.data);\n }\n for (var _i = 0, j = data.length; _i < j; _i++) {\n var _child = data[_i];\n this.append(_child, node.data);\n }\n };\n\n TreeStore.prototype._setCheckedKeys = function _setCheckedKeys(key) {\n var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var checkedKeys = arguments[2];\n\n var allNodes = this._getAllNodes().sort(function (a, b) {\n return b.level - a.level;\n });\n var cache = Object.create(null);\n var keys = Object.keys(checkedKeys);\n allNodes.forEach(function (node) {\n return node.setChecked(false, false);\n });\n for (var i = 0, j = allNodes.length; i < j; i++) {\n var node = allNodes[i];\n var nodeKey = node.data[key].toString();\n var checked = keys.indexOf(nodeKey) > -1;\n if (!checked) {\n if (node.checked && !cache[nodeKey]) {\n node.setChecked(false, false);\n }\n continue;\n }\n\n var parent = node.parent;\n while (parent && parent.level > 0) {\n cache[parent.data[key]] = true;\n parent = parent.parent;\n }\n\n if (node.isLeaf || this.checkStrictly) {\n node.setChecked(true, false);\n continue;\n }\n node.setChecked(true, true);\n\n if (leafOnly) {\n (function () {\n node.setChecked(false, false);\n var traverse = function traverse(node) {\n var childNodes = node.childNodes;\n childNodes.forEach(function (child) {\n if (!child.isLeaf) {\n child.setChecked(false, false);\n }\n traverse(child);\n });\n };\n traverse(node);\n })();\n }\n }\n };\n\n TreeStore.prototype.setCheckedNodes = function setCheckedNodes(array) {\n var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var key = this.key;\n var checkedKeys = {};\n array.forEach(function (item) {\n checkedKeys[(item || {})[key]] = true;\n });\n\n this._setCheckedKeys(key, leafOnly, checkedKeys);\n };\n\n TreeStore.prototype.setCheckedKeys = function setCheckedKeys(keys) {\n var leafOnly = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n this.defaultCheckedKeys = keys;\n var key = this.key;\n var checkedKeys = {};\n keys.forEach(function (key) {\n checkedKeys[key] = true;\n });\n\n this._setCheckedKeys(key, leafOnly, checkedKeys);\n };\n\n TreeStore.prototype.setDefaultExpandedKeys = function setDefaultExpandedKeys(keys) {\n var _this6 = this;\n\n keys = keys || [];\n this.defaultExpandedKeys = keys;\n\n keys.forEach(function (key) {\n var node = _this6.getNode(key);\n if (node) node.expand(null, _this6.autoExpandParent);\n });\n };\n\n TreeStore.prototype.setChecked = function setChecked(data, checked, deep) {\n var node = this.getNode(data);\n\n if (node) {\n node.setChecked(!!checked, deep);\n }\n };\n\n TreeStore.prototype.getCurrentNode = function getCurrentNode() {\n return this.currentNode;\n };\n\n TreeStore.prototype.setCurrentNode = function setCurrentNode(currentNode) {\n var prevCurrentNode = this.currentNode;\n if (prevCurrentNode) {\n prevCurrentNode.isCurrent = false;\n }\n this.currentNode = currentNode;\n this.currentNode.isCurrent = true;\n };\n\n TreeStore.prototype.setUserCurrentNode = function setUserCurrentNode(node) {\n var key = node[this.key];\n var currNode = this.nodesMap[key];\n this.setCurrentNode(currNode);\n };\n\n TreeStore.prototype.setCurrentNodeKey = function setCurrentNodeKey(key) {\n if (key === null || key === undefined) {\n this.currentNode && (this.currentNode.isCurrent = false);\n this.currentNode = null;\n return;\n }\n var node = this.getNode(key);\n if (node) {\n this.setCurrentNode(node);\n }\n };\n\n return TreeStore;\n}();\n\n/* harmony default export */ var tree_store = (tree_store_TreeStore);\n;\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree-node.vue?vue&type=template&id=3ba3ef0e&\nvar tree_nodevue_type_template_id_3ba3ef0e_render = function() {\n var this$1 = this\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.node.visible,\n expression: \"node.visible\"\n }\n ],\n ref: \"node\",\n staticClass: \"el-tree-node\",\n class: {\n \"is-expanded\": _vm.expanded,\n \"is-current\": _vm.node.isCurrent,\n \"is-hidden\": !_vm.node.visible,\n \"is-focusable\": !_vm.node.disabled,\n \"is-checked\": !_vm.node.disabled && _vm.node.checked\n },\n attrs: {\n role: \"treeitem\",\n tabindex: \"-1\",\n \"aria-expanded\": _vm.expanded,\n \"aria-disabled\": _vm.node.disabled,\n \"aria-checked\": _vm.node.checked,\n draggable: _vm.tree.draggable\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.handleClick($event)\n },\n contextmenu: function($event) {\n return this$1.handleContextMenu($event)\n },\n dragstart: function($event) {\n $event.stopPropagation()\n return _vm.handleDragStart($event)\n },\n dragover: function($event) {\n $event.stopPropagation()\n return _vm.handleDragOver($event)\n },\n dragend: function($event) {\n $event.stopPropagation()\n return _vm.handleDragEnd($event)\n },\n drop: function($event) {\n $event.stopPropagation()\n return _vm.handleDrop($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-tree-node__content\",\n style: {\n \"padding-left\": (_vm.node.level - 1) * _vm.tree.indent + \"px\"\n }\n },\n [\n _c(\"span\", {\n class: [\n {\n \"is-leaf\": _vm.node.isLeaf,\n expanded: !_vm.node.isLeaf && _vm.expanded\n },\n \"el-tree-node__expand-icon\",\n _vm.tree.iconClass ? _vm.tree.iconClass : \"el-icon-caret-right\"\n ],\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.handleExpandIconClick($event)\n }\n }\n }),\n _vm.showCheckbox\n ? _c(\"el-checkbox\", {\n attrs: {\n indeterminate: _vm.node.indeterminate,\n disabled: !!_vm.node.disabled\n },\n on: { change: _vm.handleCheckChange },\n nativeOn: {\n click: function($event) {\n $event.stopPropagation()\n }\n },\n model: {\n value: _vm.node.checked,\n callback: function($$v) {\n _vm.$set(_vm.node, \"checked\", $$v)\n },\n expression: \"node.checked\"\n }\n })\n : _vm._e(),\n _vm.node.loading\n ? _c(\"span\", {\n staticClass: \"el-tree-node__loading-icon el-icon-loading\"\n })\n : _vm._e(),\n _c(\"node-content\", { attrs: { node: _vm.node } })\n ],\n 1\n ),\n _c(\"el-collapse-transition\", [\n !_vm.renderAfterExpand || _vm.childNodeRendered\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.expanded,\n expression: \"expanded\"\n }\n ],\n staticClass: \"el-tree-node__children\",\n attrs: { role: \"group\", \"aria-expanded\": _vm.expanded }\n },\n _vm._l(_vm.node.childNodes, function(child) {\n return _c(\"el-tree-node\", {\n key: _vm.getNodeKey(child),\n attrs: {\n \"render-content\": _vm.renderContent,\n \"render-after-expand\": _vm.renderAfterExpand,\n \"show-checkbox\": _vm.showCheckbox,\n node: child\n },\n on: { \"node-expand\": _vm.handleChildNodeExpand }\n })\n }),\n 1\n )\n : _vm._e()\n ])\n ],\n 1\n )\n}\nvar tree_nodevue_type_template_id_3ba3ef0e_staticRenderFns = []\ntree_nodevue_type_template_id_3ba3ef0e_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue?vue&type=template&id=3ba3ef0e&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree-node.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var tree_nodevue_type_script_lang_js_ = ({\n name: 'ElTreeNode',\n\n componentName: 'ElTreeNode',\n\n mixins: [emitter_default.a],\n\n props: {\n node: {\n default: function _default() {\n return {};\n }\n },\n props: {},\n renderContent: Function,\n renderAfterExpand: {\n type: Boolean,\n default: true\n },\n showCheckbox: {\n type: Boolean,\n default: false\n }\n },\n\n components: {\n ElCollapseTransition: collapse_transition_default.a,\n ElCheckbox: checkbox_default.a,\n NodeContent: {\n props: {\n node: {\n required: true\n }\n },\n render: function render(h) {\n var parent = this.$parent;\n var tree = parent.tree;\n var node = this.node;\n var data = node.data,\n store = node.store;\n\n return parent.renderContent ? parent.renderContent.call(parent._renderProxy, h, { _self: tree.$vnode.context, node: node, data: data, store: store }) : tree.$scopedSlots.default ? tree.$scopedSlots.default({ node: node, data: data }) : h(\n 'span',\n { 'class': 'el-tree-node__label' },\n [node.label]\n );\n }\n }\n },\n\n data: function data() {\n return {\n tree: null,\n expanded: false,\n childNodeRendered: false,\n oldChecked: null,\n oldIndeterminate: null\n };\n },\n\n\n watch: {\n 'node.indeterminate': function nodeIndeterminate(val) {\n this.handleSelectChange(this.node.checked, val);\n },\n 'node.checked': function nodeChecked(val) {\n this.handleSelectChange(val, this.node.indeterminate);\n },\n 'node.expanded': function nodeExpanded(val) {\n var _this = this;\n\n this.$nextTick(function () {\n return _this.expanded = val;\n });\n if (val) {\n this.childNodeRendered = true;\n }\n }\n },\n\n methods: {\n getNodeKey: function getNodeKey(node) {\n return util_getNodeKey(this.tree.nodeKey, node.data);\n },\n handleSelectChange: function handleSelectChange(checked, indeterminate) {\n if (this.oldChecked !== checked && this.oldIndeterminate !== indeterminate) {\n this.tree.$emit('check-change', this.node.data, checked, indeterminate);\n }\n this.oldChecked = checked;\n this.indeterminate = indeterminate;\n },\n handleClick: function handleClick() {\n var store = this.tree.store;\n store.setCurrentNode(this.node);\n this.tree.$emit('current-change', store.currentNode ? store.currentNode.data : null, store.currentNode);\n this.tree.currentNode = this;\n if (this.tree.expandOnClickNode) {\n this.handleExpandIconClick();\n }\n if (this.tree.checkOnClickNode && !this.node.disabled) {\n this.handleCheckChange(null, {\n target: { checked: !this.node.checked }\n });\n }\n this.tree.$emit('node-click', this.node.data, this.node, this);\n },\n handleContextMenu: function handleContextMenu(event) {\n if (this.tree._events['node-contextmenu'] && this.tree._events['node-contextmenu'].length > 0) {\n event.stopPropagation();\n event.preventDefault();\n }\n this.tree.$emit('node-contextmenu', event, this.node.data, this.node, this);\n },\n handleExpandIconClick: function handleExpandIconClick() {\n if (this.node.isLeaf) return;\n if (this.expanded) {\n this.tree.$emit('node-collapse', this.node.data, this.node, this);\n this.node.collapse();\n } else {\n this.node.expand();\n this.$emit('node-expand', this.node.data, this.node, this);\n }\n },\n handleCheckChange: function handleCheckChange(value, ev) {\n var _this2 = this;\n\n this.node.setChecked(ev.target.checked, !this.tree.checkStrictly);\n this.$nextTick(function () {\n var store = _this2.tree.store;\n _this2.tree.$emit('check', _this2.node.data, {\n checkedNodes: store.getCheckedNodes(),\n checkedKeys: store.getCheckedKeys(),\n halfCheckedNodes: store.getHalfCheckedNodes(),\n halfCheckedKeys: store.getHalfCheckedKeys()\n });\n });\n },\n handleChildNodeExpand: function handleChildNodeExpand(nodeData, node, instance) {\n this.broadcast('ElTreeNode', 'tree-node-expand', node);\n this.tree.$emit('node-expand', nodeData, node, instance);\n },\n handleDragStart: function handleDragStart(event) {\n if (!this.tree.draggable) return;\n this.tree.$emit('tree-node-drag-start', event, this);\n },\n handleDragOver: function handleDragOver(event) {\n if (!this.tree.draggable) return;\n this.tree.$emit('tree-node-drag-over', event, this);\n event.preventDefault();\n },\n handleDrop: function handleDrop(event) {\n event.preventDefault();\n },\n handleDragEnd: function handleDragEnd(event) {\n if (!this.tree.draggable) return;\n this.tree.$emit('tree-node-drag-end', event, this);\n }\n },\n\n created: function created() {\n var _this3 = this;\n\n var parent = this.$parent;\n\n if (parent.isTree) {\n this.tree = parent;\n } else {\n this.tree = parent.tree;\n }\n\n var tree = this.tree;\n if (!tree) {\n console.warn('Can not find node\\'s tree.');\n }\n\n var props = tree.props || {};\n var childrenKey = props['children'] || 'children';\n\n this.$watch('node.data.' + childrenKey, function () {\n _this3.node.updateChildren();\n });\n\n if (this.node.expanded) {\n this.expanded = true;\n this.childNodeRendered = true;\n }\n\n if (this.tree.accordion) {\n this.$on('tree-node-expand', function (node) {\n if (_this3.node !== node) {\n _this3.node.collapse();\n }\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tree_nodevue_type_script_lang_js_ = (tree_nodevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tree/src/tree-node.vue\n\n\n\n\n\n/* normalize component */\n\nvar tree_node_component = normalizeComponent(\n src_tree_nodevue_type_script_lang_js_,\n tree_nodevue_type_template_id_3ba3ef0e_render,\n tree_nodevue_type_template_id_3ba3ef0e_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tree_node_api; }\ntree_node_component.options.__file = \"packages/tree/src/tree-node.vue\"\n/* harmony default export */ var tree_node = (tree_node_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tree/src/tree.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n/* harmony default export */ var treevue_type_script_lang_js_ = ({\n name: 'ElTree',\n\n mixins: [emitter_default.a],\n\n components: {\n ElTreeNode: tree_node\n },\n\n data: function data() {\n return {\n store: null,\n root: null,\n currentNode: null,\n treeItems: null,\n checkboxItems: [],\n dragState: {\n showDropIndicator: false,\n draggingNode: null,\n dropNode: null,\n allowDrop: true\n }\n };\n },\n\n\n props: {\n data: {\n type: Array\n },\n emptyText: {\n type: String,\n default: function _default() {\n return Object(lib_locale_[\"t\"])('el.tree.emptyText');\n }\n },\n renderAfterExpand: {\n type: Boolean,\n default: true\n },\n nodeKey: String,\n checkStrictly: Boolean,\n defaultExpandAll: Boolean,\n expandOnClickNode: {\n type: Boolean,\n default: true\n },\n checkOnClickNode: Boolean,\n checkDescendants: {\n type: Boolean,\n default: false\n },\n autoExpandParent: {\n type: Boolean,\n default: true\n },\n defaultCheckedKeys: Array,\n defaultExpandedKeys: Array,\n currentNodeKey: [String, Number],\n renderContent: Function,\n showCheckbox: {\n type: Boolean,\n default: false\n },\n draggable: {\n type: Boolean,\n default: false\n },\n allowDrag: Function,\n allowDrop: Function,\n props: {\n default: function _default() {\n return {\n children: 'children',\n label: 'label',\n disabled: 'disabled'\n };\n }\n },\n lazy: {\n type: Boolean,\n default: false\n },\n highlightCurrent: Boolean,\n load: Function,\n filterNodeMethod: Function,\n accordion: Boolean,\n indent: {\n type: Number,\n default: 18\n },\n iconClass: String\n },\n\n computed: {\n children: {\n set: function set(value) {\n this.data = value;\n },\n get: function get() {\n return this.data;\n }\n },\n\n treeItemArray: function treeItemArray() {\n return Array.prototype.slice.call(this.treeItems);\n },\n isEmpty: function isEmpty() {\n var childNodes = this.root.childNodes;\n\n return !childNodes || childNodes.length === 0 || childNodes.every(function (_ref) {\n var visible = _ref.visible;\n return !visible;\n });\n }\n },\n\n watch: {\n defaultCheckedKeys: function defaultCheckedKeys(newVal) {\n this.store.setDefaultCheckedKey(newVal);\n },\n defaultExpandedKeys: function defaultExpandedKeys(newVal) {\n this.store.defaultExpandedKeys = newVal;\n this.store.setDefaultExpandedKeys(newVal);\n },\n data: function data(newVal) {\n this.store.setData(newVal);\n },\n checkboxItems: function checkboxItems(val) {\n Array.prototype.forEach.call(val, function (checkbox) {\n checkbox.setAttribute('tabindex', -1);\n });\n },\n checkStrictly: function checkStrictly(newVal) {\n this.store.checkStrictly = newVal;\n }\n },\n\n methods: {\n filter: function filter(value) {\n if (!this.filterNodeMethod) throw new Error('[Tree] filterNodeMethod is required when filter');\n this.store.filter(value);\n },\n getNodeKey: function getNodeKey(node) {\n return util_getNodeKey(this.nodeKey, node.data);\n },\n getNodePath: function getNodePath(data) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in getNodePath');\n var node = this.store.getNode(data);\n if (!node) return [];\n var path = [node.data];\n var parent = node.parent;\n while (parent && parent !== this.root) {\n path.push(parent.data);\n parent = parent.parent;\n }\n return path.reverse();\n },\n getCheckedNodes: function getCheckedNodes(leafOnly, includeHalfChecked) {\n return this.store.getCheckedNodes(leafOnly, includeHalfChecked);\n },\n getCheckedKeys: function getCheckedKeys(leafOnly) {\n return this.store.getCheckedKeys(leafOnly);\n },\n getCurrentNode: function getCurrentNode() {\n var currentNode = this.store.getCurrentNode();\n return currentNode ? currentNode.data : null;\n },\n getCurrentKey: function getCurrentKey() {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in getCurrentKey');\n var currentNode = this.getCurrentNode();\n return currentNode ? currentNode[this.nodeKey] : null;\n },\n setCheckedNodes: function setCheckedNodes(nodes, leafOnly) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCheckedNodes');\n this.store.setCheckedNodes(nodes, leafOnly);\n },\n setCheckedKeys: function setCheckedKeys(keys, leafOnly) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCheckedKeys');\n this.store.setCheckedKeys(keys, leafOnly);\n },\n setChecked: function setChecked(data, checked, deep) {\n this.store.setChecked(data, checked, deep);\n },\n getHalfCheckedNodes: function getHalfCheckedNodes() {\n return this.store.getHalfCheckedNodes();\n },\n getHalfCheckedKeys: function getHalfCheckedKeys() {\n return this.store.getHalfCheckedKeys();\n },\n setCurrentNode: function setCurrentNode(node) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCurrentNode');\n this.store.setUserCurrentNode(node);\n },\n setCurrentKey: function setCurrentKey(key) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in setCurrentKey');\n this.store.setCurrentNodeKey(key);\n },\n getNode: function getNode(data) {\n return this.store.getNode(data);\n },\n remove: function remove(data) {\n this.store.remove(data);\n },\n append: function append(data, parentNode) {\n this.store.append(data, parentNode);\n },\n insertBefore: function insertBefore(data, refNode) {\n this.store.insertBefore(data, refNode);\n },\n insertAfter: function insertAfter(data, refNode) {\n this.store.insertAfter(data, refNode);\n },\n handleNodeExpand: function handleNodeExpand(nodeData, node, instance) {\n this.broadcast('ElTreeNode', 'tree-node-expand', node);\n this.$emit('node-expand', nodeData, node, instance);\n },\n updateKeyChildren: function updateKeyChildren(key, data) {\n if (!this.nodeKey) throw new Error('[Tree] nodeKey is required in updateKeyChild');\n this.store.updateChildren(key, data);\n },\n initTabIndex: function initTabIndex() {\n this.treeItems = this.$el.querySelectorAll('.is-focusable[role=treeitem]');\n this.checkboxItems = this.$el.querySelectorAll('input[type=checkbox]');\n var checkedItem = this.$el.querySelectorAll('.is-checked[role=treeitem]');\n if (checkedItem.length) {\n checkedItem[0].setAttribute('tabindex', 0);\n return;\n }\n this.treeItems[0] && this.treeItems[0].setAttribute('tabindex', 0);\n },\n handleKeydown: function handleKeydown(ev) {\n var currentItem = ev.target;\n if (currentItem.className.indexOf('el-tree-node') === -1) return;\n var keyCode = ev.keyCode;\n this.treeItems = this.$el.querySelectorAll('.is-focusable[role=treeitem]');\n var currentIndex = this.treeItemArray.indexOf(currentItem);\n var nextIndex = void 0;\n if ([38, 40].indexOf(keyCode) > -1) {\n // up、down\n ev.preventDefault();\n if (keyCode === 38) {\n // up\n nextIndex = currentIndex !== 0 ? currentIndex - 1 : 0;\n } else {\n nextIndex = currentIndex < this.treeItemArray.length - 1 ? currentIndex + 1 : 0;\n }\n this.treeItemArray[nextIndex].focus(); // 选中\n }\n if ([37, 39].indexOf(keyCode) > -1) {\n // left、right 展开\n ev.preventDefault();\n currentItem.click(); // 选中\n }\n var hasInput = currentItem.querySelector('[type=\"checkbox\"]');\n if ([13, 32].indexOf(keyCode) > -1 && hasInput) {\n // space enter选中checkbox\n ev.preventDefault();\n hasInput.click();\n }\n }\n },\n\n created: function created() {\n var _this = this;\n\n this.isTree = true;\n\n this.store = new tree_store({\n key: this.nodeKey,\n data: this.data,\n lazy: this.lazy,\n props: this.props,\n load: this.load,\n currentNodeKey: this.currentNodeKey,\n checkStrictly: this.checkStrictly,\n checkDescendants: this.checkDescendants,\n defaultCheckedKeys: this.defaultCheckedKeys,\n defaultExpandedKeys: this.defaultExpandedKeys,\n autoExpandParent: this.autoExpandParent,\n defaultExpandAll: this.defaultExpandAll,\n filterNodeMethod: this.filterNodeMethod\n });\n\n this.root = this.store.root;\n\n var dragState = this.dragState;\n this.$on('tree-node-drag-start', function (event, treeNode) {\n if (typeof _this.allowDrag === 'function' && !_this.allowDrag(treeNode.node)) {\n event.preventDefault();\n return false;\n }\n event.dataTransfer.effectAllowed = 'move';\n\n // wrap in try catch to address IE's error when first param is 'text/plain'\n try {\n // setData is required for draggable to work in FireFox\n // the content has to be '' so dragging a node out of the tree won't open a new tab in FireFox\n event.dataTransfer.setData('text/plain', '');\n } catch (e) {}\n dragState.draggingNode = treeNode;\n _this.$emit('node-drag-start', treeNode.node, event);\n });\n\n this.$on('tree-node-drag-over', function (event, treeNode) {\n var dropNode = findNearestComponent(event.target, 'ElTreeNode');\n var oldDropNode = dragState.dropNode;\n if (oldDropNode && oldDropNode !== dropNode) {\n Object(dom_[\"removeClass\"])(oldDropNode.$el, 'is-drop-inner');\n }\n var draggingNode = dragState.draggingNode;\n if (!draggingNode || !dropNode) return;\n\n var dropPrev = true;\n var dropInner = true;\n var dropNext = true;\n var userAllowDropInner = true;\n if (typeof _this.allowDrop === 'function') {\n dropPrev = _this.allowDrop(draggingNode.node, dropNode.node, 'prev');\n userAllowDropInner = dropInner = _this.allowDrop(draggingNode.node, dropNode.node, 'inner');\n dropNext = _this.allowDrop(draggingNode.node, dropNode.node, 'next');\n }\n event.dataTransfer.dropEffect = dropInner ? 'move' : 'none';\n if ((dropPrev || dropInner || dropNext) && oldDropNode !== dropNode) {\n if (oldDropNode) {\n _this.$emit('node-drag-leave', draggingNode.node, oldDropNode.node, event);\n }\n _this.$emit('node-drag-enter', draggingNode.node, dropNode.node, event);\n }\n\n if (dropPrev || dropInner || dropNext) {\n dragState.dropNode = dropNode;\n }\n\n if (dropNode.node.nextSibling === draggingNode.node) {\n dropNext = false;\n }\n if (dropNode.node.previousSibling === draggingNode.node) {\n dropPrev = false;\n }\n if (dropNode.node.contains(draggingNode.node, false)) {\n dropInner = false;\n }\n if (draggingNode.node === dropNode.node || draggingNode.node.contains(dropNode.node)) {\n dropPrev = false;\n dropInner = false;\n dropNext = false;\n }\n\n var targetPosition = dropNode.$el.getBoundingClientRect();\n var treePosition = _this.$el.getBoundingClientRect();\n\n var dropType = void 0;\n var prevPercent = dropPrev ? dropInner ? 0.25 : dropNext ? 0.45 : 1 : -1;\n var nextPercent = dropNext ? dropInner ? 0.75 : dropPrev ? 0.55 : 0 : 1;\n\n var indicatorTop = -9999;\n var distance = event.clientY - targetPosition.top;\n if (distance < targetPosition.height * prevPercent) {\n dropType = 'before';\n } else if (distance > targetPosition.height * nextPercent) {\n dropType = 'after';\n } else if (dropInner) {\n dropType = 'inner';\n } else {\n dropType = 'none';\n }\n\n var iconPosition = dropNode.$el.querySelector('.el-tree-node__expand-icon').getBoundingClientRect();\n var dropIndicator = _this.$refs.dropIndicator;\n if (dropType === 'before') {\n indicatorTop = iconPosition.top - treePosition.top;\n } else if (dropType === 'after') {\n indicatorTop = iconPosition.bottom - treePosition.top;\n }\n dropIndicator.style.top = indicatorTop + 'px';\n dropIndicator.style.left = iconPosition.right - treePosition.left + 'px';\n\n if (dropType === 'inner') {\n Object(dom_[\"addClass\"])(dropNode.$el, 'is-drop-inner');\n } else {\n Object(dom_[\"removeClass\"])(dropNode.$el, 'is-drop-inner');\n }\n\n dragState.showDropIndicator = dropType === 'before' || dropType === 'after';\n dragState.allowDrop = dragState.showDropIndicator || userAllowDropInner;\n dragState.dropType = dropType;\n _this.$emit('node-drag-over', draggingNode.node, dropNode.node, event);\n });\n\n this.$on('tree-node-drag-end', function (event) {\n var draggingNode = dragState.draggingNode,\n dropType = dragState.dropType,\n dropNode = dragState.dropNode;\n\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n\n if (draggingNode && dropNode) {\n var draggingNodeCopy = { data: draggingNode.node.data };\n if (dropType !== 'none') {\n draggingNode.node.remove();\n }\n if (dropType === 'before') {\n dropNode.node.parent.insertBefore(draggingNodeCopy, dropNode.node);\n } else if (dropType === 'after') {\n dropNode.node.parent.insertAfter(draggingNodeCopy, dropNode.node);\n } else if (dropType === 'inner') {\n dropNode.node.insertChild(draggingNodeCopy);\n }\n if (dropType !== 'none') {\n _this.store.registerNode(draggingNodeCopy);\n }\n\n Object(dom_[\"removeClass\"])(dropNode.$el, 'is-drop-inner');\n\n _this.$emit('node-drag-end', draggingNode.node, dropNode.node, dropType, event);\n if (dropType !== 'none') {\n _this.$emit('node-drop', draggingNode.node, dropNode.node, dropType, event);\n }\n }\n if (draggingNode && !dropNode) {\n _this.$emit('node-drag-end', draggingNode.node, null, dropType, event);\n }\n\n dragState.showDropIndicator = false;\n dragState.draggingNode = null;\n dragState.dropNode = null;\n dragState.allowDrop = true;\n });\n },\n mounted: function mounted() {\n this.initTabIndex();\n this.$el.addEventListener('keydown', this.handleKeydown);\n },\n updated: function updated() {\n this.treeItems = this.$el.querySelectorAll('[role=treeitem]');\n this.checkboxItems = this.$el.querySelectorAll('input[type=checkbox]');\n }\n});\n// CONCATENATED MODULE: ./packages/tree/src/tree.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_treevue_type_script_lang_js_ = (treevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/tree/src/tree.vue\n\n\n\n\n\n/* normalize component */\n\nvar tree_component = normalizeComponent(\n src_treevue_type_script_lang_js_,\n treevue_type_template_id_547575a6_render,\n treevue_type_template_id_547575a6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var tree_api; }\ntree_component.options.__file = \"packages/tree/src/tree.vue\"\n/* harmony default export */ var src_tree = (tree_component.exports);\n// CONCATENATED MODULE: ./packages/tree/index.js\n\n\n/* istanbul ignore next */\nsrc_tree.install = function (Vue) {\n Vue.component(src_tree.name, src_tree);\n};\n\n/* harmony default export */ var packages_tree = (src_tree);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/alert/src/main.vue?vue&type=template&id=6e53341b&\nvar mainvue_type_template_id_6e53341b_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"el-alert-fade\" } }, [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-alert\",\n class: [\n _vm.typeClass,\n _vm.center ? \"is-center\" : \"\",\n \"is-\" + _vm.effect\n ],\n attrs: { role: \"alert\" }\n },\n [\n _vm.showIcon\n ? _c(\"i\", {\n staticClass: \"el-alert__icon\",\n class: [_vm.iconClass, _vm.isBigIcon]\n })\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-alert__content\" }, [\n _vm.title || _vm.$slots.title\n ? _c(\n \"span\",\n { staticClass: \"el-alert__title\", class: [_vm.isBoldTitle] },\n [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n 2\n )\n : _vm._e(),\n _vm.$slots.default && !_vm.description\n ? _c(\n \"p\",\n { staticClass: \"el-alert__description\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e(),\n _vm.description && !_vm.$slots.default\n ? _c(\"p\", { staticClass: \"el-alert__description\" }, [\n _vm._v(_vm._s(_vm.description))\n ])\n : _vm._e(),\n _c(\n \"i\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.closable,\n expression: \"closable\"\n }\n ],\n staticClass: \"el-alert__closebtn\",\n class: {\n \"is-customed\": _vm.closeText !== \"\",\n \"el-icon-close\": _vm.closeText === \"\"\n },\n on: {\n click: function($event) {\n _vm.close()\n }\n }\n },\n [_vm._v(_vm._s(_vm.closeText))]\n )\n ])\n ]\n )\n ])\n}\nvar mainvue_type_template_id_6e53341b_staticRenderFns = []\nmainvue_type_template_id_6e53341b_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/alert/src/main.vue?vue&type=template&id=6e53341b&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/alert/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar TYPE_CLASSES_MAP = {\n 'success': 'el-icon-success',\n 'warning': 'el-icon-warning',\n 'error': 'el-icon-error'\n};\n/* harmony default export */ var alert_src_mainvue_type_script_lang_js_ = ({\n name: 'ElAlert',\n\n props: {\n title: {\n type: String,\n default: ''\n },\n description: {\n type: String,\n default: ''\n },\n type: {\n type: String,\n default: 'info'\n },\n closable: {\n type: Boolean,\n default: true\n },\n closeText: {\n type: String,\n default: ''\n },\n showIcon: Boolean,\n center: Boolean,\n effect: {\n type: String,\n default: 'light',\n validator: function validator(value) {\n return ['light', 'dark'].indexOf(value) !== -1;\n }\n }\n },\n\n data: function data() {\n return {\n visible: true\n };\n },\n\n\n methods: {\n close: function close() {\n this.visible = false;\n this.$emit('close');\n }\n },\n\n computed: {\n typeClass: function typeClass() {\n return 'el-alert--' + this.type;\n },\n iconClass: function iconClass() {\n return TYPE_CLASSES_MAP[this.type] || 'el-icon-info';\n },\n isBigIcon: function isBigIcon() {\n return this.description || this.$slots.default ? 'is-big' : '';\n },\n isBoldTitle: function isBoldTitle() {\n return this.description || this.$slots.default ? 'is-bold' : '';\n }\n }\n});\n// CONCATENATED MODULE: ./packages/alert/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_alert_src_mainvue_type_script_lang_js_ = (alert_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/alert/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar alert_src_main_component = normalizeComponent(\n packages_alert_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_6e53341b_render,\n mainvue_type_template_id_6e53341b_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var alert_src_main_api; }\nalert_src_main_component.options.__file = \"packages/alert/src/main.vue\"\n/* harmony default export */ var alert_src_main = (alert_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/alert/index.js\n\n\n/* istanbul ignore next */\nalert_src_main.install = function (Vue) {\n Vue.component(alert_src_main.name, alert_src_main);\n};\n\n/* harmony default export */ var packages_alert = (alert_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/notification/src/main.vue?vue&type=template&id=43dbc3d8&\nvar mainvue_type_template_id_43dbc3d8_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"el-notification-fade\" } }, [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n class: [\"el-notification\", _vm.customClass, _vm.horizontalClass],\n style: _vm.positionStyle,\n attrs: { role: \"alert\" },\n on: {\n mouseenter: function($event) {\n _vm.clearTimer()\n },\n mouseleave: function($event) {\n _vm.startTimer()\n },\n click: _vm.click\n }\n },\n [\n _vm.type || _vm.iconClass\n ? _c(\"i\", {\n staticClass: \"el-notification__icon\",\n class: [_vm.typeClass, _vm.iconClass]\n })\n : _vm._e(),\n _c(\n \"div\",\n {\n staticClass: \"el-notification__group\",\n class: { \"is-with-icon\": _vm.typeClass || _vm.iconClass }\n },\n [\n _c(\"h2\", {\n staticClass: \"el-notification__title\",\n domProps: { textContent: _vm._s(_vm.title) }\n }),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.message,\n expression: \"message\"\n }\n ],\n staticClass: \"el-notification__content\"\n },\n [\n _vm._t(\"default\", [\n !_vm.dangerouslyUseHTMLString\n ? _c(\"p\", [_vm._v(_vm._s(_vm.message))])\n : _c(\"p\", { domProps: { innerHTML: _vm._s(_vm.message) } })\n ])\n ],\n 2\n ),\n _vm.showClose\n ? _c(\"div\", {\n staticClass: \"el-notification__closeBtn el-icon-close\",\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.close($event)\n }\n }\n })\n : _vm._e()\n ]\n )\n ]\n )\n ])\n}\nvar mainvue_type_template_id_43dbc3d8_staticRenderFns = []\nmainvue_type_template_id_43dbc3d8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/notification/src/main.vue?vue&type=template&id=43dbc3d8&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/notification/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar mainvue_type_script_lang_js_typeMap = {\n success: 'success',\n info: 'info',\n warning: 'warning',\n error: 'error'\n};\n\n/* harmony default export */ var notification_src_mainvue_type_script_lang_js_ = ({\n data: function data() {\n return {\n visible: false,\n title: '',\n message: '',\n duration: 4500,\n type: '',\n showClose: true,\n customClass: '',\n iconClass: '',\n onClose: null,\n onClick: null,\n closed: false,\n verticalOffset: 0,\n timer: null,\n dangerouslyUseHTMLString: false,\n position: 'top-right'\n };\n },\n\n\n computed: {\n typeClass: function typeClass() {\n return this.type && mainvue_type_script_lang_js_typeMap[this.type] ? 'el-icon-' + mainvue_type_script_lang_js_typeMap[this.type] : '';\n },\n horizontalClass: function horizontalClass() {\n return this.position.indexOf('right') > -1 ? 'right' : 'left';\n },\n verticalProperty: function verticalProperty() {\n return (/^top-/.test(this.position) ? 'top' : 'bottom'\n );\n },\n positionStyle: function positionStyle() {\n var _ref;\n\n return _ref = {}, _ref[this.verticalProperty] = this.verticalOffset + 'px', _ref;\n }\n },\n\n watch: {\n closed: function closed(newVal) {\n if (newVal) {\n this.visible = false;\n this.$el.addEventListener('transitionend', this.destroyElement);\n }\n }\n },\n\n methods: {\n destroyElement: function destroyElement() {\n this.$el.removeEventListener('transitionend', this.destroyElement);\n this.$destroy(true);\n this.$el.parentNode.removeChild(this.$el);\n },\n click: function click() {\n if (typeof this.onClick === 'function') {\n this.onClick();\n }\n },\n close: function close() {\n this.closed = true;\n if (typeof this.onClose === 'function') {\n this.onClose();\n }\n },\n clearTimer: function clearTimer() {\n clearTimeout(this.timer);\n },\n startTimer: function startTimer() {\n var _this = this;\n\n if (this.duration > 0) {\n this.timer = setTimeout(function () {\n if (!_this.closed) {\n _this.close();\n }\n }, this.duration);\n }\n },\n keydown: function keydown(e) {\n if (e.keyCode === 46 || e.keyCode === 8) {\n this.clearTimer(); // detele 取消倒计时\n } else if (e.keyCode === 27) {\n // esc关闭消息\n if (!this.closed) {\n this.close();\n }\n } else {\n this.startTimer(); // 恢复倒计时\n }\n }\n },\n mounted: function mounted() {\n var _this2 = this;\n\n if (this.duration > 0) {\n this.timer = setTimeout(function () {\n if (!_this2.closed) {\n _this2.close();\n }\n }, this.duration);\n }\n document.addEventListener('keydown', this.keydown);\n },\n beforeDestroy: function beforeDestroy() {\n document.removeEventListener('keydown', this.keydown);\n }\n});\n// CONCATENATED MODULE: ./packages/notification/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_notification_src_mainvue_type_script_lang_js_ = (notification_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/notification/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar notification_src_main_component = normalizeComponent(\n packages_notification_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_43dbc3d8_render,\n mainvue_type_template_id_43dbc3d8_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var notification_src_main_api; }\nnotification_src_main_component.options.__file = \"packages/notification/src/main.vue\"\n/* harmony default export */ var notification_src_main = (notification_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/notification/src/main.js\n\n\n\n\n\nvar NotificationConstructor = external_vue_default.a.extend(notification_src_main);\n\nvar src_main_instance = void 0;\nvar instances = [];\nvar seed = 1;\n\nvar main_Notification = function Notification(options) {\n if (external_vue_default.a.prototype.$isServer) return;\n options = merge_default()({}, options);\n var userOnClose = options.onClose;\n var id = 'notification_' + seed++;\n var position = options.position || 'top-right';\n\n options.onClose = function () {\n Notification.close(id, userOnClose);\n };\n\n src_main_instance = new NotificationConstructor({\n data: options\n });\n\n if (Object(vdom_[\"isVNode\"])(options.message)) {\n src_main_instance.$slots.default = [options.message];\n options.message = 'REPLACED_BY_VNODE';\n }\n src_main_instance.id = id;\n src_main_instance.$mount();\n document.body.appendChild(src_main_instance.$el);\n src_main_instance.visible = true;\n src_main_instance.dom = src_main_instance.$el;\n src_main_instance.dom.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n\n var verticalOffset = options.offset || 0;\n instances.filter(function (item) {\n return item.position === position;\n }).forEach(function (item) {\n verticalOffset += item.$el.offsetHeight + 16;\n });\n verticalOffset += 16;\n src_main_instance.verticalOffset = verticalOffset;\n instances.push(src_main_instance);\n return src_main_instance;\n};\n\n['success', 'warning', 'info', 'error'].forEach(function (type) {\n main_Notification[type] = function (options) {\n if (typeof options === 'string' || Object(vdom_[\"isVNode\"])(options)) {\n options = {\n message: options\n };\n }\n options.type = type;\n return main_Notification(options);\n };\n});\n\nmain_Notification.close = function (id, userOnClose) {\n var index = -1;\n var len = instances.length;\n var instance = instances.filter(function (instance, i) {\n if (instance.id === id) {\n index = i;\n return true;\n }\n return false;\n })[0];\n if (!instance) return;\n\n if (typeof userOnClose === 'function') {\n userOnClose(instance);\n }\n instances.splice(index, 1);\n\n if (len <= 1) return;\n var position = instance.position;\n var removedHeight = instance.dom.offsetHeight;\n for (var i = index; i < len - 1; i++) {\n if (instances[i].position === position) {\n instances[i].dom.style[instance.verticalProperty] = parseInt(instances[i].dom.style[instance.verticalProperty], 10) - removedHeight - 16 + 'px';\n }\n }\n};\n\nmain_Notification.closeAll = function () {\n for (var i = instances.length - 1; i >= 0; i--) {\n instances[i].close();\n }\n};\n\n/* harmony default export */ var packages_notification_src_main = (main_Notification);\n// CONCATENATED MODULE: ./packages/notification/index.js\n\n/* harmony default export */ var notification = (packages_notification_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/main.vue?vue&type=template&id=32708644&\nvar mainvue_type_template_id_32708644_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-slider\",\n class: {\n \"is-vertical\": _vm.vertical,\n \"el-slider--with-input\": _vm.showInput\n },\n attrs: {\n role: \"slider\",\n \"aria-valuemin\": _vm.min,\n \"aria-valuemax\": _vm.max,\n \"aria-orientation\": _vm.vertical ? \"vertical\" : \"horizontal\",\n \"aria-disabled\": _vm.sliderDisabled\n }\n },\n [\n _vm.showInput && !_vm.range\n ? _c(\"el-input-number\", {\n ref: \"input\",\n staticClass: \"el-slider__input\",\n attrs: {\n step: _vm.step,\n disabled: _vm.sliderDisabled,\n controls: _vm.showInputControls,\n min: _vm.min,\n max: _vm.max,\n debounce: _vm.debounce,\n size: _vm.inputSize\n },\n on: { change: _vm.emitChange },\n model: {\n value: _vm.firstValue,\n callback: function($$v) {\n _vm.firstValue = $$v\n },\n expression: \"firstValue\"\n }\n })\n : _vm._e(),\n _c(\n \"div\",\n {\n ref: \"slider\",\n staticClass: \"el-slider__runway\",\n class: { \"show-input\": _vm.showInput, disabled: _vm.sliderDisabled },\n style: _vm.runwayStyle,\n on: { click: _vm.onSliderClick }\n },\n [\n _c(\"div\", { staticClass: \"el-slider__bar\", style: _vm.barStyle }),\n _c(\"slider-button\", {\n ref: \"button1\",\n attrs: {\n vertical: _vm.vertical,\n \"tooltip-class\": _vm.tooltipClass\n },\n model: {\n value: _vm.firstValue,\n callback: function($$v) {\n _vm.firstValue = $$v\n },\n expression: \"firstValue\"\n }\n }),\n _vm.range\n ? _c(\"slider-button\", {\n ref: \"button2\",\n attrs: {\n vertical: _vm.vertical,\n \"tooltip-class\": _vm.tooltipClass\n },\n model: {\n value: _vm.secondValue,\n callback: function($$v) {\n _vm.secondValue = $$v\n },\n expression: \"secondValue\"\n }\n })\n : _vm._e(),\n _vm._l(_vm.stops, function(item, key) {\n return _vm.showStops\n ? _c(\"div\", {\n key: key,\n staticClass: \"el-slider__stop\",\n style: _vm.getStopStyle(item)\n })\n : _vm._e()\n }),\n _vm.markList.length > 0\n ? [\n _c(\n \"div\",\n _vm._l(_vm.markList, function(item, key) {\n return _c(\"div\", {\n key: key,\n staticClass: \"el-slider__stop el-slider__marks-stop\",\n style: _vm.getStopStyle(item.position)\n })\n }),\n 0\n ),\n _c(\n \"div\",\n { staticClass: \"el-slider__marks\" },\n _vm._l(_vm.markList, function(item, key) {\n return _c(\"slider-marker\", {\n key: key,\n style: _vm.getStopStyle(item.position),\n attrs: { mark: item.mark }\n })\n }),\n 1\n )\n ]\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n )\n}\nvar mainvue_type_template_id_32708644_staticRenderFns = []\nmainvue_type_template_id_32708644_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/slider/src/main.vue?vue&type=template&id=32708644&\n\n// EXTERNAL MODULE: external \"element-ui/lib/input-number\"\nvar input_number_ = __webpack_require__(41);\nvar input_number_default = /*#__PURE__*/__webpack_require__.n(input_number_);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/button.vue?vue&type=template&id=e72d2ad2&\nvar buttonvue_type_template_id_e72d2ad2_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n ref: \"button\",\n staticClass: \"el-slider__button-wrapper\",\n class: { hover: _vm.hovering, dragging: _vm.dragging },\n style: _vm.wrapperStyle,\n attrs: { tabindex: \"0\" },\n on: {\n mouseenter: _vm.handleMouseEnter,\n mouseleave: _vm.handleMouseLeave,\n mousedown: _vm.onButtonDown,\n touchstart: _vm.onButtonDown,\n focus: _vm.handleMouseEnter,\n blur: _vm.handleMouseLeave,\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"left\", 37, $event.key, [\n \"Left\",\n \"ArrowLeft\"\n ])\n ) {\n return null\n }\n if (\"button\" in $event && $event.button !== 0) {\n return null\n }\n return _vm.onLeftKeyDown($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"right\", 39, $event.key, [\n \"Right\",\n \"ArrowRight\"\n ])\n ) {\n return null\n }\n if (\"button\" in $event && $event.button !== 2) {\n return null\n }\n return _vm.onRightKeyDown($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.onLeftKeyDown($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.onRightKeyDown($event)\n }\n ]\n }\n },\n [\n _c(\n \"el-tooltip\",\n {\n ref: \"tooltip\",\n attrs: {\n placement: \"top\",\n \"popper-class\": _vm.tooltipClass,\n disabled: !_vm.showTooltip\n }\n },\n [\n _c(\"span\", { attrs: { slot: \"content\" }, slot: \"content\" }, [\n _vm._v(_vm._s(_vm.formatValue))\n ]),\n _c(\"div\", {\n staticClass: \"el-slider__button\",\n class: { hover: _vm.hovering, dragging: _vm.dragging }\n })\n ]\n )\n ],\n 1\n )\n}\nvar buttonvue_type_template_id_e72d2ad2_staticRenderFns = []\nbuttonvue_type_template_id_e72d2ad2_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/slider/src/button.vue?vue&type=template&id=e72d2ad2&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/button.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var slider_src_buttonvue_type_script_lang_js_ = ({\n name: 'ElSliderButton',\n\n components: {\n ElTooltip: tooltip_default.a\n },\n\n props: {\n value: {\n type: Number,\n default: 0\n },\n vertical: {\n type: Boolean,\n default: false\n },\n tooltipClass: String\n },\n\n data: function data() {\n return {\n hovering: false,\n dragging: false,\n isClick: false,\n startX: 0,\n currentX: 0,\n startY: 0,\n currentY: 0,\n startPosition: 0,\n newPosition: null,\n oldValue: this.value\n };\n },\n\n\n computed: {\n disabled: function disabled() {\n return this.$parent.sliderDisabled;\n },\n max: function max() {\n return this.$parent.max;\n },\n min: function min() {\n return this.$parent.min;\n },\n step: function step() {\n return this.$parent.step;\n },\n showTooltip: function showTooltip() {\n return this.$parent.showTooltip;\n },\n precision: function precision() {\n return this.$parent.precision;\n },\n currentPosition: function currentPosition() {\n return (this.value - this.min) / (this.max - this.min) * 100 + '%';\n },\n enableFormat: function enableFormat() {\n return this.$parent.formatTooltip instanceof Function;\n },\n formatValue: function formatValue() {\n return this.enableFormat && this.$parent.formatTooltip(this.value) || this.value;\n },\n wrapperStyle: function wrapperStyle() {\n return this.vertical ? { bottom: this.currentPosition } : { left: this.currentPosition };\n }\n },\n\n watch: {\n dragging: function dragging(val) {\n this.$parent.dragging = val;\n }\n },\n\n methods: {\n displayTooltip: function displayTooltip() {\n this.$refs.tooltip && (this.$refs.tooltip.showPopper = true);\n },\n hideTooltip: function hideTooltip() {\n this.$refs.tooltip && (this.$refs.tooltip.showPopper = false);\n },\n handleMouseEnter: function handleMouseEnter() {\n this.hovering = true;\n this.displayTooltip();\n },\n handleMouseLeave: function handleMouseLeave() {\n this.hovering = false;\n this.hideTooltip();\n },\n onButtonDown: function onButtonDown(event) {\n if (this.disabled) return;\n event.preventDefault();\n this.onDragStart(event);\n window.addEventListener('mousemove', this.onDragging);\n window.addEventListener('touchmove', this.onDragging);\n window.addEventListener('mouseup', this.onDragEnd);\n window.addEventListener('touchend', this.onDragEnd);\n window.addEventListener('contextmenu', this.onDragEnd);\n },\n onLeftKeyDown: function onLeftKeyDown() {\n if (this.disabled) return;\n this.newPosition = parseFloat(this.currentPosition) - this.step / (this.max - this.min) * 100;\n this.setPosition(this.newPosition);\n this.$parent.emitChange();\n },\n onRightKeyDown: function onRightKeyDown() {\n if (this.disabled) return;\n this.newPosition = parseFloat(this.currentPosition) + this.step / (this.max - this.min) * 100;\n this.setPosition(this.newPosition);\n this.$parent.emitChange();\n },\n onDragStart: function onDragStart(event) {\n this.dragging = true;\n this.isClick = true;\n if (event.type === 'touchstart') {\n event.clientY = event.touches[0].clientY;\n event.clientX = event.touches[0].clientX;\n }\n if (this.vertical) {\n this.startY = event.clientY;\n } else {\n this.startX = event.clientX;\n }\n this.startPosition = parseFloat(this.currentPosition);\n this.newPosition = this.startPosition;\n },\n onDragging: function onDragging(event) {\n if (this.dragging) {\n this.isClick = false;\n this.displayTooltip();\n this.$parent.resetSize();\n var diff = 0;\n if (event.type === 'touchmove') {\n event.clientY = event.touches[0].clientY;\n event.clientX = event.touches[0].clientX;\n }\n if (this.vertical) {\n this.currentY = event.clientY;\n diff = (this.startY - this.currentY) / this.$parent.sliderSize * 100;\n } else {\n this.currentX = event.clientX;\n diff = (this.currentX - this.startX) / this.$parent.sliderSize * 100;\n }\n this.newPosition = this.startPosition + diff;\n this.setPosition(this.newPosition);\n }\n },\n onDragEnd: function onDragEnd() {\n var _this = this;\n\n if (this.dragging) {\n /*\n * 防止在 mouseup 后立即触发 click,导致滑块有几率产生一小段位移\n * 不使用 preventDefault 是因为 mouseup 和 click 没有注册在同一个 DOM 上\n */\n setTimeout(function () {\n _this.dragging = false;\n _this.hideTooltip();\n if (!_this.isClick) {\n _this.setPosition(_this.newPosition);\n _this.$parent.emitChange();\n }\n }, 0);\n window.removeEventListener('mousemove', this.onDragging);\n window.removeEventListener('touchmove', this.onDragging);\n window.removeEventListener('mouseup', this.onDragEnd);\n window.removeEventListener('touchend', this.onDragEnd);\n window.removeEventListener('contextmenu', this.onDragEnd);\n }\n },\n setPosition: function setPosition(newPosition) {\n var _this2 = this;\n\n if (newPosition === null || isNaN(newPosition)) return;\n if (newPosition < 0) {\n newPosition = 0;\n } else if (newPosition > 100) {\n newPosition = 100;\n }\n var lengthPerStep = 100 / ((this.max - this.min) / this.step);\n var steps = Math.round(newPosition / lengthPerStep);\n var value = steps * lengthPerStep * (this.max - this.min) * 0.01 + this.min;\n value = parseFloat(value.toFixed(this.precision));\n this.$emit('input', value);\n this.$nextTick(function () {\n _this2.displayTooltip();\n _this2.$refs.tooltip && _this2.$refs.tooltip.updatePopper();\n });\n if (!this.dragging && this.value !== this.oldValue) {\n this.oldValue = this.value;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/slider/src/button.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_slider_src_buttonvue_type_script_lang_js_ = (slider_src_buttonvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/slider/src/button.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_button_component = normalizeComponent(\n packages_slider_src_buttonvue_type_script_lang_js_,\n buttonvue_type_template_id_e72d2ad2_render,\n buttonvue_type_template_id_e72d2ad2_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_button_api; }\nsrc_button_component.options.__file = \"packages/slider/src/button.vue\"\n/* harmony default export */ var slider_src_button = (src_button_component.exports);\n// CONCATENATED MODULE: ./packages/slider/src/marker.js\n/* harmony default export */ var marker = ({\n name: 'ElMarker',\n\n props: {\n mark: {\n type: [String, Object]\n }\n },\n render: function render() {\n var h = arguments[0];\n\n var label = typeof this.mark === 'string' ? this.mark : this.mark.label;\n\n return h(\n 'div',\n { 'class': 'el-slider__marks-text', style: this.mark.style || {} },\n [label]\n );\n }\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/slider/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var slider_src_mainvue_type_script_lang_js_ = ({\n name: 'ElSlider',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n }\n },\n\n props: {\n min: {\n type: Number,\n default: 0\n },\n max: {\n type: Number,\n default: 100\n },\n step: {\n type: Number,\n default: 1\n },\n value: {\n type: [Number, Array],\n default: 0\n },\n showInput: {\n type: Boolean,\n default: false\n },\n showInputControls: {\n type: Boolean,\n default: true\n },\n inputSize: {\n type: String,\n default: 'small'\n },\n showStops: {\n type: Boolean,\n default: false\n },\n showTooltip: {\n type: Boolean,\n default: true\n },\n formatTooltip: Function,\n disabled: {\n type: Boolean,\n default: false\n },\n range: {\n type: Boolean,\n default: false\n },\n vertical: {\n type: Boolean,\n default: false\n },\n height: {\n type: String\n },\n debounce: {\n type: Number,\n default: 300\n },\n label: {\n type: String\n },\n tooltipClass: String,\n marks: Object\n },\n\n components: {\n ElInputNumber: input_number_default.a,\n SliderButton: slider_src_button,\n SliderMarker: marker\n },\n\n data: function data() {\n return {\n firstValue: null,\n secondValue: null,\n oldValue: null,\n dragging: false,\n sliderSize: 1\n };\n },\n\n\n watch: {\n value: function value(val, oldVal) {\n if (this.dragging || Array.isArray(val) && Array.isArray(oldVal) && val.every(function (item, index) {\n return item === oldVal[index];\n })) {\n return;\n }\n this.setValues();\n },\n dragging: function dragging(val) {\n if (!val) {\n this.setValues();\n }\n },\n firstValue: function firstValue(val) {\n if (this.range) {\n this.$emit('input', [this.minValue, this.maxValue]);\n } else {\n this.$emit('input', val);\n }\n },\n secondValue: function secondValue() {\n if (this.range) {\n this.$emit('input', [this.minValue, this.maxValue]);\n }\n },\n min: function min() {\n this.setValues();\n },\n max: function max() {\n this.setValues();\n }\n },\n\n methods: {\n valueChanged: function valueChanged() {\n var _this = this;\n\n if (this.range) {\n return ![this.minValue, this.maxValue].every(function (item, index) {\n return item === _this.oldValue[index];\n });\n } else {\n return this.value !== this.oldValue;\n }\n },\n setValues: function setValues() {\n if (this.min > this.max) {\n console.error('[Element Error][Slider]min should not be greater than max.');\n return;\n }\n var val = this.value;\n if (this.range && Array.isArray(val)) {\n if (val[1] < this.min) {\n this.$emit('input', [this.min, this.min]);\n } else if (val[0] > this.max) {\n this.$emit('input', [this.max, this.max]);\n } else if (val[0] < this.min) {\n this.$emit('input', [this.min, val[1]]);\n } else if (val[1] > this.max) {\n this.$emit('input', [val[0], this.max]);\n } else {\n this.firstValue = val[0];\n this.secondValue = val[1];\n if (this.valueChanged()) {\n this.dispatch('ElFormItem', 'el.form.change', [this.minValue, this.maxValue]);\n this.oldValue = val.slice();\n }\n }\n } else if (!this.range && typeof val === 'number' && !isNaN(val)) {\n if (val < this.min) {\n this.$emit('input', this.min);\n } else if (val > this.max) {\n this.$emit('input', this.max);\n } else {\n this.firstValue = val;\n if (this.valueChanged()) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n this.oldValue = val;\n }\n }\n }\n },\n setPosition: function setPosition(percent) {\n var targetValue = this.min + percent * (this.max - this.min) / 100;\n if (!this.range) {\n this.$refs.button1.setPosition(percent);\n return;\n }\n var button = void 0;\n if (Math.abs(this.minValue - targetValue) < Math.abs(this.maxValue - targetValue)) {\n button = this.firstValue < this.secondValue ? 'button1' : 'button2';\n } else {\n button = this.firstValue > this.secondValue ? 'button1' : 'button2';\n }\n this.$refs[button].setPosition(percent);\n },\n onSliderClick: function onSliderClick(event) {\n if (this.sliderDisabled || this.dragging) return;\n this.resetSize();\n if (this.vertical) {\n var sliderOffsetBottom = this.$refs.slider.getBoundingClientRect().bottom;\n this.setPosition((sliderOffsetBottom - event.clientY) / this.sliderSize * 100);\n } else {\n var sliderOffsetLeft = this.$refs.slider.getBoundingClientRect().left;\n this.setPosition((event.clientX - sliderOffsetLeft) / this.sliderSize * 100);\n }\n this.emitChange();\n },\n resetSize: function resetSize() {\n if (this.$refs.slider) {\n this.sliderSize = this.$refs.slider['client' + (this.vertical ? 'Height' : 'Width')];\n }\n },\n emitChange: function emitChange() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.$emit('change', _this2.range ? [_this2.minValue, _this2.maxValue] : _this2.value);\n });\n },\n getStopStyle: function getStopStyle(position) {\n return this.vertical ? { 'bottom': position + '%' } : { 'left': position + '%' };\n }\n },\n\n computed: {\n stops: function stops() {\n var _this3 = this;\n\n if (!this.showStops || this.min > this.max) return [];\n if (this.step === 0) {\n false && false;\n return [];\n }\n var stopCount = (this.max - this.min) / this.step;\n var stepWidth = 100 * this.step / (this.max - this.min);\n var result = [];\n for (var i = 1; i < stopCount; i++) {\n result.push(i * stepWidth);\n }\n if (this.range) {\n return result.filter(function (step) {\n return step < 100 * (_this3.minValue - _this3.min) / (_this3.max - _this3.min) || step > 100 * (_this3.maxValue - _this3.min) / (_this3.max - _this3.min);\n });\n } else {\n return result.filter(function (step) {\n return step > 100 * (_this3.firstValue - _this3.min) / (_this3.max - _this3.min);\n });\n }\n },\n markList: function markList() {\n var _this4 = this;\n\n if (!this.marks) {\n return [];\n }\n\n var marksKeys = Object.keys(this.marks);\n return marksKeys.map(parseFloat).sort(function (a, b) {\n return a - b;\n }).filter(function (point) {\n return point <= _this4.max && point >= _this4.min;\n }).map(function (point) {\n return {\n point: point,\n position: (point - _this4.min) * 100 / (_this4.max - _this4.min),\n mark: _this4.marks[point]\n };\n });\n },\n minValue: function minValue() {\n return Math.min(this.firstValue, this.secondValue);\n },\n maxValue: function maxValue() {\n return Math.max(this.firstValue, this.secondValue);\n },\n barSize: function barSize() {\n return this.range ? 100 * (this.maxValue - this.minValue) / (this.max - this.min) + '%' : 100 * (this.firstValue - this.min) / (this.max - this.min) + '%';\n },\n barStart: function barStart() {\n return this.range ? 100 * (this.minValue - this.min) / (this.max - this.min) + '%' : '0%';\n },\n precision: function precision() {\n var precisions = [this.min, this.max, this.step].map(function (item) {\n var decimal = ('' + item).split('.')[1];\n return decimal ? decimal.length : 0;\n });\n return Math.max.apply(null, precisions);\n },\n runwayStyle: function runwayStyle() {\n return this.vertical ? { height: this.height } : {};\n },\n barStyle: function barStyle() {\n return this.vertical ? {\n height: this.barSize,\n bottom: this.barStart\n } : {\n width: this.barSize,\n left: this.barStart\n };\n },\n sliderDisabled: function sliderDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n mounted: function mounted() {\n var valuetext = void 0;\n if (this.range) {\n if (Array.isArray(this.value)) {\n this.firstValue = Math.max(this.min, this.value[0]);\n this.secondValue = Math.min(this.max, this.value[1]);\n } else {\n this.firstValue = this.min;\n this.secondValue = this.max;\n }\n this.oldValue = [this.firstValue, this.secondValue];\n valuetext = this.firstValue + '-' + this.secondValue;\n } else {\n if (typeof this.value !== 'number' || isNaN(this.value)) {\n this.firstValue = this.min;\n } else {\n this.firstValue = Math.min(this.max, Math.max(this.min, this.value));\n }\n this.oldValue = this.firstValue;\n valuetext = this.firstValue;\n }\n this.$el.setAttribute('aria-valuetext', valuetext);\n\n // label screen reader\n this.$el.setAttribute('aria-label', this.label ? this.label : 'slider between ' + this.min + ' and ' + this.max);\n\n this.resetSize();\n window.addEventListener('resize', this.resetSize);\n },\n beforeDestroy: function beforeDestroy() {\n window.removeEventListener('resize', this.resetSize);\n }\n});\n// CONCATENATED MODULE: ./packages/slider/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_slider_src_mainvue_type_script_lang_js_ = (slider_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/slider/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar slider_src_main_component = normalizeComponent(\n packages_slider_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_32708644_render,\n mainvue_type_template_id_32708644_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var slider_src_main_api; }\nslider_src_main_component.options.__file = \"packages/slider/src/main.vue\"\n/* harmony default export */ var slider_src_main = (slider_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/slider/index.js\n\n\n/* istanbul ignore next */\nslider_src_main.install = function (Vue) {\n Vue.component(slider_src_main.name, slider_src_main);\n};\n\n/* harmony default export */ var slider = (slider_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/loading/src/loading.vue?vue&type=template&id=eee0a7ac&\nvar loadingvue_type_template_id_eee0a7ac_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-loading-fade\" },\n on: { \"after-leave\": _vm.handleAfterLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-loading-mask\",\n class: [_vm.customClass, { \"is-fullscreen\": _vm.fullscreen }],\n style: { backgroundColor: _vm.background || \"\" }\n },\n [\n _c(\"div\", { staticClass: \"el-loading-spinner\" }, [\n !_vm.spinner\n ? _c(\n \"svg\",\n {\n staticClass: \"circular\",\n attrs: { viewBox: \"25 25 50 50\" }\n },\n [\n _c(\"circle\", {\n staticClass: \"path\",\n attrs: { cx: \"50\", cy: \"50\", r: \"20\", fill: \"none\" }\n })\n ]\n )\n : _c(\"i\", { class: _vm.spinner }),\n _vm.text\n ? _c(\"p\", { staticClass: \"el-loading-text\" }, [\n _vm._v(_vm._s(_vm.text))\n ])\n : _vm._e()\n ])\n ]\n )\n ]\n )\n}\nvar loadingvue_type_template_id_eee0a7ac_staticRenderFns = []\nloadingvue_type_template_id_eee0a7ac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/loading/src/loading.vue?vue&type=template&id=eee0a7ac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/loading/src/loading.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var loadingvue_type_script_lang_js_ = ({\n data: function data() {\n return {\n text: null,\n spinner: null,\n background: null,\n fullscreen: true,\n visible: false,\n customClass: ''\n };\n },\n\n\n methods: {\n handleAfterLeave: function handleAfterLeave() {\n this.$emit('after-leave');\n },\n setText: function setText(text) {\n this.text = text;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/loading/src/loading.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_loadingvue_type_script_lang_js_ = (loadingvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/loading/src/loading.vue\n\n\n\n\n\n/* normalize component */\n\nvar loading_component = normalizeComponent(\n src_loadingvue_type_script_lang_js_,\n loadingvue_type_template_id_eee0a7ac_render,\n loadingvue_type_template_id_eee0a7ac_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var loading_api; }\nloading_component.options.__file = \"packages/loading/src/loading.vue\"\n/* harmony default export */ var loading = (loading_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/after-leave\"\nvar after_leave_ = __webpack_require__(32);\nvar after_leave_default = /*#__PURE__*/__webpack_require__.n(after_leave_);\n\n// CONCATENATED MODULE: ./packages/loading/src/directive.js\n\n\n\n\n\nvar Mask = external_vue_default.a.extend(loading);\n\nvar loadingDirective = {};\nloadingDirective.install = function (Vue) {\n if (Vue.prototype.$isServer) return;\n var toggleLoading = function toggleLoading(el, binding) {\n if (binding.value) {\n Vue.nextTick(function () {\n if (binding.modifiers.fullscreen) {\n el.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n el.originalOverflow = Object(dom_[\"getStyle\"])(document.body, 'overflow');\n el.maskStyle.zIndex = popup_[\"PopupManager\"].nextZIndex();\n\n Object(dom_[\"addClass\"])(el.mask, 'is-fullscreen');\n insertDom(document.body, el, binding);\n } else {\n Object(dom_[\"removeClass\"])(el.mask, 'is-fullscreen');\n\n if (binding.modifiers.body) {\n el.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n\n ['top', 'left'].forEach(function (property) {\n var scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n el.maskStyle[property] = el.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - parseInt(Object(dom_[\"getStyle\"])(document.body, 'margin-' + property), 10) + 'px';\n });\n ['height', 'width'].forEach(function (property) {\n el.maskStyle[property] = el.getBoundingClientRect()[property] + 'px';\n });\n\n insertDom(document.body, el, binding);\n } else {\n el.originalPosition = Object(dom_[\"getStyle\"])(el, 'position');\n insertDom(el, el, binding);\n }\n }\n });\n } else {\n after_leave_default()(el.instance, function (_) {\n if (!el.instance.hiding) return;\n el.domVisible = false;\n var target = binding.modifiers.fullscreen || binding.modifiers.body ? document.body : el;\n Object(dom_[\"removeClass\"])(target, 'el-loading-parent--relative');\n Object(dom_[\"removeClass\"])(target, 'el-loading-parent--hidden');\n el.instance.hiding = false;\n }, 300, true);\n el.instance.visible = false;\n el.instance.hiding = true;\n }\n };\n var insertDom = function insertDom(parent, el, binding) {\n if (!el.domVisible && Object(dom_[\"getStyle\"])(el, 'display') !== 'none' && Object(dom_[\"getStyle\"])(el, 'visibility') !== 'hidden') {\n Object.keys(el.maskStyle).forEach(function (property) {\n el.mask.style[property] = el.maskStyle[property];\n });\n\n if (el.originalPosition !== 'absolute' && el.originalPosition !== 'fixed') {\n Object(dom_[\"addClass\"])(parent, 'el-loading-parent--relative');\n }\n if (binding.modifiers.fullscreen && binding.modifiers.lock) {\n Object(dom_[\"addClass\"])(parent, 'el-loading-parent--hidden');\n }\n el.domVisible = true;\n\n parent.appendChild(el.mask);\n Vue.nextTick(function () {\n if (el.instance.hiding) {\n el.instance.$emit('after-leave');\n } else {\n el.instance.visible = true;\n }\n });\n el.domInserted = true;\n } else if (el.domVisible && el.instance.hiding === true) {\n el.instance.visible = true;\n el.instance.hiding = false;\n }\n };\n\n Vue.directive('loading', {\n bind: function bind(el, binding, vnode) {\n var textExr = el.getAttribute('element-loading-text');\n var spinnerExr = el.getAttribute('element-loading-spinner');\n var backgroundExr = el.getAttribute('element-loading-background');\n var customClassExr = el.getAttribute('element-loading-custom-class');\n var vm = vnode.context;\n var mask = new Mask({\n el: document.createElement('div'),\n data: {\n text: vm && vm[textExr] || textExr,\n spinner: vm && vm[spinnerExr] || spinnerExr,\n background: vm && vm[backgroundExr] || backgroundExr,\n customClass: vm && vm[customClassExr] || customClassExr,\n fullscreen: !!binding.modifiers.fullscreen\n }\n });\n el.instance = mask;\n el.mask = mask.$el;\n el.maskStyle = {};\n\n binding.value && toggleLoading(el, binding);\n },\n\n update: function update(el, binding) {\n el.instance.setText(el.getAttribute('element-loading-text'));\n if (binding.oldValue !== binding.value) {\n toggleLoading(el, binding);\n }\n },\n\n unbind: function unbind(el, binding) {\n if (el.domInserted) {\n el.mask && el.mask.parentNode && el.mask.parentNode.removeChild(el.mask);\n toggleLoading(el, { value: false, modifiers: binding.modifiers });\n }\n el.instance && el.instance.$destroy();\n }\n });\n};\n\n/* harmony default export */ var src_directive = (loadingDirective);\n// CONCATENATED MODULE: ./packages/loading/src/index.js\n\n\n\n\n\n\n\nvar LoadingConstructor = external_vue_default.a.extend(loading);\n\nvar src_defaults = {\n text: null,\n fullscreen: true,\n body: false,\n lock: false,\n customClass: ''\n};\n\nvar fullscreenLoading = void 0;\n\nLoadingConstructor.prototype.originalPosition = '';\nLoadingConstructor.prototype.originalOverflow = '';\n\nLoadingConstructor.prototype.close = function () {\n var _this = this;\n\n if (this.fullscreen) {\n fullscreenLoading = undefined;\n }\n after_leave_default()(this, function (_) {\n var target = _this.fullscreen || _this.body ? document.body : _this.target;\n Object(dom_[\"removeClass\"])(target, 'el-loading-parent--relative');\n Object(dom_[\"removeClass\"])(target, 'el-loading-parent--hidden');\n if (_this.$el && _this.$el.parentNode) {\n _this.$el.parentNode.removeChild(_this.$el);\n }\n _this.$destroy();\n }, 300);\n this.visible = false;\n};\n\nvar src_addStyle = function addStyle(options, parent, instance) {\n var maskStyle = {};\n if (options.fullscreen) {\n instance.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n instance.originalOverflow = Object(dom_[\"getStyle\"])(document.body, 'overflow');\n maskStyle.zIndex = popup_[\"PopupManager\"].nextZIndex();\n } else if (options.body) {\n instance.originalPosition = Object(dom_[\"getStyle\"])(document.body, 'position');\n ['top', 'left'].forEach(function (property) {\n var scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';\n maskStyle[property] = options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] + 'px';\n });\n ['height', 'width'].forEach(function (property) {\n maskStyle[property] = options.target.getBoundingClientRect()[property] + 'px';\n });\n } else {\n instance.originalPosition = Object(dom_[\"getStyle\"])(parent, 'position');\n }\n Object.keys(maskStyle).forEach(function (property) {\n instance.$el.style[property] = maskStyle[property];\n });\n};\n\nvar src_Loading = function Loading() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (external_vue_default.a.prototype.$isServer) return;\n options = merge_default()({}, src_defaults, options);\n if (typeof options.target === 'string') {\n options.target = document.querySelector(options.target);\n }\n options.target = options.target || document.body;\n if (options.target !== document.body) {\n options.fullscreen = false;\n } else {\n options.body = true;\n }\n if (options.fullscreen && fullscreenLoading) {\n return fullscreenLoading;\n }\n\n var parent = options.body ? document.body : options.target;\n var instance = new LoadingConstructor({\n el: document.createElement('div'),\n data: options\n });\n\n src_addStyle(options, parent, instance);\n if (instance.originalPosition !== 'absolute' && instance.originalPosition !== 'fixed') {\n Object(dom_[\"addClass\"])(parent, 'el-loading-parent--relative');\n }\n if (options.fullscreen && options.lock) {\n Object(dom_[\"addClass\"])(parent, 'el-loading-parent--hidden');\n }\n parent.appendChild(instance.$el);\n external_vue_default.a.nextTick(function () {\n instance.visible = true;\n });\n if (options.fullscreen) {\n fullscreenLoading = instance;\n }\n return instance;\n};\n\n/* harmony default export */ var src = (src_Loading);\n// CONCATENATED MODULE: ./packages/loading/index.js\n\n\n\n/* harmony default export */ var packages_loading = ({\n install: function install(Vue) {\n Vue.use(src_directive);\n Vue.prototype.$loading = src;\n },\n\n directive: src_directive,\n service: src\n});\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/icon/src/icon.vue?vue&type=template&id=cb3fe7f4&\nvar iconvue_type_template_id_cb3fe7f4_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"i\", { class: \"el-icon-\" + _vm.name })\n}\nvar iconvue_type_template_id_cb3fe7f4_staticRenderFns = []\niconvue_type_template_id_cb3fe7f4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/icon/src/icon.vue?vue&type=template&id=cb3fe7f4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/icon/src/icon.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n\n/* harmony default export */ var iconvue_type_script_lang_js_ = ({\n name: 'ElIcon',\n\n props: {\n name: String\n }\n});\n// CONCATENATED MODULE: ./packages/icon/src/icon.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_iconvue_type_script_lang_js_ = (iconvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/icon/src/icon.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_component = normalizeComponent(\n src_iconvue_type_script_lang_js_,\n iconvue_type_template_id_cb3fe7f4_render,\n iconvue_type_template_id_cb3fe7f4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var icon_api; }\nicon_component.options.__file = \"packages/icon/src/icon.vue\"\n/* harmony default export */ var icon = (icon_component.exports);\n// CONCATENATED MODULE: ./packages/icon/index.js\n\n\n/* istanbul ignore next */\nicon.install = function (Vue) {\n Vue.component(icon.name, icon);\n};\n\n/* harmony default export */ var packages_icon = (icon);\n// CONCATENATED MODULE: ./packages/row/src/row.js\n/* harmony default export */ var src_row = ({\n name: 'ElRow',\n\n componentName: 'ElRow',\n\n props: {\n tag: {\n type: String,\n default: 'div'\n },\n gutter: Number,\n type: String,\n justify: {\n type: String,\n default: 'start'\n },\n align: String\n },\n\n computed: {\n style: function style() {\n var ret = {};\n\n if (this.gutter) {\n ret.marginLeft = '-' + this.gutter / 2 + 'px';\n ret.marginRight = ret.marginLeft;\n }\n\n return ret;\n }\n },\n\n render: function render(h) {\n return h(this.tag, {\n class: ['el-row', this.justify !== 'start' ? 'is-justify-' + this.justify : '', this.align ? 'is-align-' + this.align : '', { 'el-row--flex': this.type === 'flex' }],\n style: this.style\n }, this.$slots.default);\n }\n});\n// CONCATENATED MODULE: ./packages/row/index.js\n\n\n/* istanbul ignore next */\nsrc_row.install = function (Vue) {\n Vue.component(src_row.name, src_row);\n};\n\n/* harmony default export */ var packages_row = (src_row);\n// CONCATENATED MODULE: ./packages/col/src/col.js\nvar col_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/* harmony default export */ var col = ({\n name: 'ElCol',\n\n props: {\n span: {\n type: Number,\n default: 24\n },\n tag: {\n type: String,\n default: 'div'\n },\n offset: Number,\n pull: Number,\n push: Number,\n xs: [Number, Object],\n sm: [Number, Object],\n md: [Number, Object],\n lg: [Number, Object],\n xl: [Number, Object]\n },\n\n computed: {\n gutter: function gutter() {\n var parent = this.$parent;\n while (parent && parent.$options.componentName !== 'ElRow') {\n parent = parent.$parent;\n }\n return parent ? parent.gutter : 0;\n }\n },\n render: function render(h) {\n var _this = this;\n\n var classList = [];\n var style = {};\n\n if (this.gutter) {\n style.paddingLeft = this.gutter / 2 + 'px';\n style.paddingRight = style.paddingLeft;\n }\n\n ['span', 'offset', 'pull', 'push'].forEach(function (prop) {\n if (_this[prop] || _this[prop] === 0) {\n classList.push(prop !== 'span' ? 'el-col-' + prop + '-' + _this[prop] : 'el-col-' + _this[prop]);\n }\n });\n\n ['xs', 'sm', 'md', 'lg', 'xl'].forEach(function (size) {\n if (typeof _this[size] === 'number') {\n classList.push('el-col-' + size + '-' + _this[size]);\n } else if (col_typeof(_this[size]) === 'object') {\n var props = _this[size];\n Object.keys(props).forEach(function (prop) {\n classList.push(prop !== 'span' ? 'el-col-' + size + '-' + prop + '-' + props[prop] : 'el-col-' + size + '-' + props[prop]);\n });\n }\n });\n\n return h(this.tag, {\n class: ['el-col', classList],\n style: style\n }, this.$slots.default);\n }\n});\n// CONCATENATED MODULE: ./packages/col/index.js\n\n\n/* istanbul ignore next */\ncol.install = function (Vue) {\n Vue.component(col.name, col);\n};\n\n/* harmony default export */ var packages_col = (col);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-list.vue?vue&type=template&id=173fedf5&\nvar upload_listvue_type_template_id_173fedf5_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition-group\",\n {\n class: [\n \"el-upload-list\",\n \"el-upload-list--\" + _vm.listType,\n { \"is-disabled\": _vm.disabled }\n ],\n attrs: { tag: \"ul\", name: \"el-list\" }\n },\n _vm._l(_vm.files, function(file) {\n return _c(\n \"li\",\n {\n key: file.uid,\n class: [\n \"el-upload-list__item\",\n \"is-\" + file.status,\n _vm.focusing ? \"focusing\" : \"\"\n ],\n attrs: { tabindex: \"0\" },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"delete\", [8, 46], $event.key, [\n \"Backspace\",\n \"Delete\",\n \"Del\"\n ])\n ) {\n return null\n }\n !_vm.disabled && _vm.$emit(\"remove\", file)\n },\n focus: function($event) {\n _vm.focusing = true\n },\n blur: function($event) {\n _vm.focusing = false\n },\n click: function($event) {\n _vm.focusing = false\n }\n }\n },\n [\n _vm._t(\n \"default\",\n [\n file.status !== \"uploading\" &&\n [\"picture-card\", \"picture\"].indexOf(_vm.listType) > -1\n ? _c(\"img\", {\n staticClass: \"el-upload-list__item-thumbnail\",\n attrs: { src: file.url, alt: \"\" }\n })\n : _vm._e(),\n _c(\n \"a\",\n {\n staticClass: \"el-upload-list__item-name\",\n on: {\n click: function($event) {\n _vm.handleClick(file)\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"el-icon-document\" }),\n _vm._v(_vm._s(file.name) + \"\\n \")\n ]\n ),\n _c(\n \"label\",\n { staticClass: \"el-upload-list__item-status-label\" },\n [\n _c(\"i\", {\n class: {\n \"el-icon-upload-success\": true,\n \"el-icon-circle-check\": _vm.listType === \"text\",\n \"el-icon-check\":\n [\"picture-card\", \"picture\"].indexOf(_vm.listType) > -1\n }\n })\n ]\n ),\n !_vm.disabled\n ? _c(\"i\", {\n staticClass: \"el-icon-close\",\n on: {\n click: function($event) {\n _vm.$emit(\"remove\", file)\n }\n }\n })\n : _vm._e(),\n !_vm.disabled\n ? _c(\"i\", { staticClass: \"el-icon-close-tip\" }, [\n _vm._v(_vm._s(_vm.t(\"el.upload.deleteTip\")))\n ])\n : _vm._e(),\n file.status === \"uploading\"\n ? _c(\"el-progress\", {\n attrs: {\n type: _vm.listType === \"picture-card\" ? \"circle\" : \"line\",\n \"stroke-width\": _vm.listType === \"picture-card\" ? 6 : 2,\n percentage: _vm.parsePercentage(file.percentage)\n }\n })\n : _vm._e(),\n _vm.listType === \"picture-card\"\n ? _c(\"span\", { staticClass: \"el-upload-list__item-actions\" }, [\n _vm.handlePreview && _vm.listType === \"picture-card\"\n ? _c(\n \"span\",\n {\n staticClass: \"el-upload-list__item-preview\",\n on: {\n click: function($event) {\n _vm.handlePreview(file)\n }\n }\n },\n [_c(\"i\", { staticClass: \"el-icon-zoom-in\" })]\n )\n : _vm._e(),\n !_vm.disabled\n ? _c(\n \"span\",\n {\n staticClass: \"el-upload-list__item-delete\",\n on: {\n click: function($event) {\n _vm.$emit(\"remove\", file)\n }\n }\n },\n [_c(\"i\", { staticClass: \"el-icon-delete\" })]\n )\n : _vm._e()\n ])\n : _vm._e()\n ],\n { file: file }\n )\n ],\n 2\n )\n }),\n 0\n )\n}\nvar upload_listvue_type_template_id_173fedf5_staticRenderFns = []\nupload_listvue_type_template_id_173fedf5_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=template&id=173fedf5&\n\n// EXTERNAL MODULE: external \"element-ui/lib/progress\"\nvar progress_ = __webpack_require__(33);\nvar progress_default = /*#__PURE__*/__webpack_require__.n(progress_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-list.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var upload_listvue_type_script_lang_js_ = ({\n\n name: 'ElUploadList',\n\n mixins: [locale_default.a],\n\n data: function data() {\n return {\n focusing: false\n };\n },\n\n components: { ElProgress: progress_default.a },\n\n props: {\n files: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n disabled: {\n type: Boolean,\n default: false\n },\n handlePreview: Function,\n listType: String\n },\n methods: {\n parsePercentage: function parsePercentage(val) {\n return parseInt(val, 10);\n },\n handleClick: function handleClick(file) {\n this.handlePreview && this.handlePreview(file);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_upload_listvue_type_script_lang_js_ = (upload_listvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload-list.vue\n\n\n\n\n\n/* normalize component */\n\nvar upload_list_component = normalizeComponent(\n src_upload_listvue_type_script_lang_js_,\n upload_listvue_type_template_id_173fedf5_render,\n upload_listvue_type_template_id_173fedf5_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var upload_list_api; }\nupload_list_component.options.__file = \"packages/upload/src/upload-list.vue\"\n/* harmony default export */ var upload_list = (upload_list_component.exports);\n// EXTERNAL MODULE: external \"babel-helper-vue-jsx-merge-props\"\nvar external_babel_helper_vue_jsx_merge_props_ = __webpack_require__(24);\nvar external_babel_helper_vue_jsx_merge_props_default = /*#__PURE__*/__webpack_require__.n(external_babel_helper_vue_jsx_merge_props_);\n\n// CONCATENATED MODULE: ./packages/upload/src/ajax.js\nfunction getError(action, option, xhr) {\n var msg = void 0;\n if (xhr.response) {\n msg = '' + (xhr.response.error || xhr.response);\n } else if (xhr.responseText) {\n msg = '' + xhr.responseText;\n } else {\n msg = 'fail to post ' + action + ' ' + xhr.status;\n }\n\n var err = new Error(msg);\n err.status = xhr.status;\n err.method = 'post';\n err.url = action;\n return err;\n}\n\nfunction getBody(xhr) {\n var text = xhr.responseText || xhr.response;\n if (!text) {\n return text;\n }\n\n try {\n return JSON.parse(text);\n } catch (e) {\n return text;\n }\n}\n\nfunction upload(option) {\n if (typeof XMLHttpRequest === 'undefined') {\n return;\n }\n\n var xhr = new XMLHttpRequest();\n var action = option.action;\n\n if (xhr.upload) {\n xhr.upload.onprogress = function progress(e) {\n if (e.total > 0) {\n e.percent = e.loaded / e.total * 100;\n }\n option.onProgress(e);\n };\n }\n\n var formData = new FormData();\n\n if (option.data) {\n Object.keys(option.data).forEach(function (key) {\n formData.append(key, option.data[key]);\n });\n }\n\n formData.append(option.filename, option.file, option.file.name);\n\n xhr.onerror = function error(e) {\n option.onError(e);\n };\n\n xhr.onload = function onload() {\n if (xhr.status < 200 || xhr.status >= 300) {\n return option.onError(getError(action, option, xhr));\n }\n\n option.onSuccess(getBody(xhr));\n };\n\n xhr.open('post', action, true);\n\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n var headers = option.headers || {};\n\n for (var item in headers) {\n if (headers.hasOwnProperty(item) && headers[item] !== null) {\n xhr.setRequestHeader(item, headers[item]);\n }\n }\n xhr.send(formData);\n return xhr;\n}\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-dragger.vue?vue&type=template&id=7ebbf219&\nvar upload_draggervue_type_template_id_7ebbf219_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-upload-dragger\",\n class: {\n \"is-dragover\": _vm.dragover\n },\n on: {\n drop: function($event) {\n $event.preventDefault()\n return _vm.onDrop($event)\n },\n dragover: function($event) {\n $event.preventDefault()\n return _vm.onDragover($event)\n },\n dragleave: function($event) {\n $event.preventDefault()\n _vm.dragover = false\n }\n }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar upload_draggervue_type_template_id_7ebbf219_staticRenderFns = []\nupload_draggervue_type_template_id_7ebbf219_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue?vue&type=template&id=7ebbf219&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload-dragger.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var upload_draggervue_type_script_lang_js_ = ({\n name: 'ElUploadDrag',\n props: {\n disabled: Boolean\n },\n inject: {\n uploader: {\n default: ''\n }\n },\n data: function data() {\n return {\n dragover: false\n };\n },\n\n methods: {\n onDragover: function onDragover() {\n if (!this.disabled) {\n this.dragover = true;\n }\n },\n onDrop: function onDrop(e) {\n if (this.disabled || !this.uploader) return;\n var accept = this.uploader.accept;\n this.dragover = false;\n if (!accept) {\n this.$emit('file', e.dataTransfer.files);\n return;\n }\n this.$emit('file', [].slice.call(e.dataTransfer.files).filter(function (file) {\n var type = file.type,\n name = file.name;\n\n var extension = name.indexOf('.') > -1 ? '.' + name.split('.').pop() : '';\n var baseType = type.replace(/\\/.*$/, '');\n return accept.split(',').map(function (type) {\n return type.trim();\n }).filter(function (type) {\n return type;\n }).some(function (acceptedType) {\n if (/\\..+$/.test(acceptedType)) {\n return extension === acceptedType;\n }\n if (/\\/\\*$/.test(acceptedType)) {\n return baseType === acceptedType.replace(/\\/\\*$/, '');\n }\n if (/^[^\\/]+\\/[^\\/]+$/.test(acceptedType)) {\n return type === acceptedType;\n }\n return false;\n });\n }));\n }\n }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_upload_draggervue_type_script_lang_js_ = (upload_draggervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload-dragger.vue\n\n\n\n\n\n/* normalize component */\n\nvar upload_dragger_component = normalizeComponent(\n src_upload_draggervue_type_script_lang_js_,\n upload_draggervue_type_template_id_7ebbf219_render,\n upload_draggervue_type_template_id_7ebbf219_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var upload_dragger_api; }\nupload_dragger_component.options.__file = \"packages/upload/src/upload-dragger.vue\"\n/* harmony default export */ var upload_dragger = (upload_dragger_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/upload.vue?vue&type=script&lang=js&\n\n\n\n\n\n/* harmony default export */ var uploadvue_type_script_lang_js_ = ({\n inject: ['uploader'],\n components: {\n UploadDragger: upload_dragger\n },\n props: {\n type: String,\n action: {\n type: String,\n required: true\n },\n name: {\n type: String,\n default: 'file'\n },\n data: Object,\n headers: Object,\n withCredentials: Boolean,\n multiple: Boolean,\n accept: String,\n onStart: Function,\n onProgress: Function,\n onSuccess: Function,\n onError: Function,\n beforeUpload: Function,\n drag: Boolean,\n onPreview: {\n type: Function,\n default: function _default() {}\n },\n onRemove: {\n type: Function,\n default: function _default() {}\n },\n fileList: Array,\n autoUpload: Boolean,\n listType: String,\n httpRequest: {\n type: Function,\n default: upload\n },\n disabled: Boolean,\n limit: Number,\n onExceed: Function\n },\n\n data: function data() {\n return {\n mouseover: false,\n reqs: {}\n };\n },\n\n\n methods: {\n isImage: function isImage(str) {\n return str.indexOf('image') !== -1;\n },\n handleChange: function handleChange(ev) {\n var files = ev.target.files;\n\n if (!files) return;\n this.uploadFiles(files);\n },\n uploadFiles: function uploadFiles(files) {\n var _this = this;\n\n if (this.limit && this.fileList.length + files.length > this.limit) {\n this.onExceed && this.onExceed(files, this.fileList);\n return;\n }\n\n var postFiles = Array.prototype.slice.call(files);\n if (!this.multiple) {\n postFiles = postFiles.slice(0, 1);\n }\n\n if (postFiles.length === 0) {\n return;\n }\n\n postFiles.forEach(function (rawFile) {\n _this.onStart(rawFile);\n if (_this.autoUpload) _this.upload(rawFile);\n });\n },\n upload: function upload(rawFile) {\n var _this2 = this;\n\n this.$refs.input.value = null;\n\n if (!this.beforeUpload) {\n return this.post(rawFile);\n }\n\n var before = this.beforeUpload(rawFile);\n if (before && before.then) {\n before.then(function (processedFile) {\n var fileType = Object.prototype.toString.call(processedFile);\n\n if (fileType === '[object File]' || fileType === '[object Blob]') {\n if (fileType === '[object Blob]') {\n processedFile = new File([processedFile], rawFile.name, {\n type: rawFile.type\n });\n }\n for (var p in rawFile) {\n if (rawFile.hasOwnProperty(p)) {\n processedFile[p] = rawFile[p];\n }\n }\n _this2.post(processedFile);\n } else {\n _this2.post(rawFile);\n }\n }, function () {\n _this2.onRemove(null, rawFile);\n });\n } else if (before !== false) {\n this.post(rawFile);\n } else {\n this.onRemove(null, rawFile);\n }\n },\n abort: function abort(file) {\n var reqs = this.reqs;\n\n if (file) {\n var uid = file;\n if (file.uid) uid = file.uid;\n if (reqs[uid]) {\n reqs[uid].abort();\n }\n } else {\n Object.keys(reqs).forEach(function (uid) {\n if (reqs[uid]) reqs[uid].abort();\n delete reqs[uid];\n });\n }\n },\n post: function post(rawFile) {\n var _this3 = this;\n\n var uid = rawFile.uid;\n\n var options = {\n headers: this.headers,\n withCredentials: this.withCredentials,\n file: rawFile,\n data: this.data,\n filename: this.name,\n action: this.action,\n onProgress: function onProgress(e) {\n _this3.onProgress(e, rawFile);\n },\n onSuccess: function onSuccess(res) {\n _this3.onSuccess(res, rawFile);\n delete _this3.reqs[uid];\n },\n onError: function onError(err) {\n _this3.onError(err, rawFile);\n delete _this3.reqs[uid];\n }\n };\n var req = this.httpRequest(options);\n this.reqs[uid] = req;\n if (req && req.then) {\n req.then(options.onSuccess, options.onError);\n }\n },\n handleClick: function handleClick() {\n if (!this.disabled) {\n this.$refs.input.value = null;\n this.$refs.input.click();\n }\n },\n handleKeydown: function handleKeydown(e) {\n if (e.target !== e.currentTarget) return;\n if (e.keyCode === 13 || e.keyCode === 32) {\n this.handleClick();\n }\n }\n },\n\n render: function render(h) {\n var handleClick = this.handleClick,\n drag = this.drag,\n name = this.name,\n handleChange = this.handleChange,\n multiple = this.multiple,\n accept = this.accept,\n listType = this.listType,\n uploadFiles = this.uploadFiles,\n disabled = this.disabled,\n handleKeydown = this.handleKeydown;\n\n var data = {\n class: {\n 'el-upload': true\n },\n on: {\n click: handleClick,\n keydown: handleKeydown\n }\n };\n data.class['el-upload--' + listType] = true;\n return h(\n 'div',\n external_babel_helper_vue_jsx_merge_props_default()([data, {\n attrs: { tabindex: '0' }\n }]),\n [drag ? h(\n 'upload-dragger',\n {\n attrs: { disabled: disabled },\n on: {\n 'file': uploadFiles\n }\n },\n [this.$slots.default]\n ) : this.$slots.default, h('input', { 'class': 'el-upload__input', attrs: { type: 'file', name: name, multiple: multiple, accept: accept },\n ref: 'input', on: {\n 'change': handleChange\n }\n })]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/upload/src/upload.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_uploadvue_type_script_lang_js_ = (uploadvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/upload.vue\nvar upload_render, upload_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar upload_component = normalizeComponent(\n src_uploadvue_type_script_lang_js_,\n upload_render,\n upload_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var upload_api; }\nupload_component.options.__file = \"packages/upload/src/upload.vue\"\n/* harmony default export */ var src_upload = (upload_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/upload/src/index.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nfunction srcvue_type_script_lang_js_noop() {}\n\n/* harmony default export */ var srcvue_type_script_lang_js_ = ({\n name: 'ElUpload',\n\n mixins: [migrating_default.a],\n\n components: {\n ElProgress: progress_default.a,\n UploadList: upload_list,\n Upload: src_upload\n },\n\n provide: function provide() {\n return {\n uploader: this\n };\n },\n\n\n inject: {\n elForm: {\n default: ''\n }\n },\n\n props: {\n action: {\n type: String,\n required: true\n },\n headers: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n data: Object,\n multiple: Boolean,\n name: {\n type: String,\n default: 'file'\n },\n drag: Boolean,\n dragger: Boolean,\n withCredentials: Boolean,\n showFileList: {\n type: Boolean,\n default: true\n },\n accept: String,\n type: {\n type: String,\n default: 'select'\n },\n beforeUpload: Function,\n beforeRemove: Function,\n onRemove: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n onChange: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n onPreview: {\n type: Function\n },\n onSuccess: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n onProgress: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n onError: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n },\n fileList: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n autoUpload: {\n type: Boolean,\n default: true\n },\n listType: {\n type: String,\n default: 'text' // text,picture,picture-card\n },\n httpRequest: Function,\n disabled: Boolean,\n limit: Number,\n onExceed: {\n type: Function,\n default: srcvue_type_script_lang_js_noop\n }\n },\n\n data: function data() {\n return {\n uploadFiles: [],\n dragOver: false,\n draging: false,\n tempIndex: 1\n };\n },\n\n\n computed: {\n uploadDisabled: function uploadDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n watch: {\n listType: function listType(type) {\n if (type === 'picture-card' || type === 'picture') {\n this.uploadFiles = this.uploadFiles.map(function (file) {\n if (!file.url && file.raw) {\n try {\n file.url = URL.createObjectURL(file.raw);\n } catch (err) {\n console.error('[Element Error][Upload]', err);\n }\n }\n return file;\n });\n }\n },\n\n fileList: {\n immediate: true,\n handler: function handler(fileList) {\n var _this = this;\n\n this.uploadFiles = fileList.map(function (item) {\n item.uid = item.uid || Date.now() + _this.tempIndex++;\n item.status = item.status || 'success';\n return item;\n });\n }\n }\n },\n\n methods: {\n handleStart: function handleStart(rawFile) {\n rawFile.uid = Date.now() + this.tempIndex++;\n var file = {\n status: 'ready',\n name: rawFile.name,\n size: rawFile.size,\n percentage: 0,\n uid: rawFile.uid,\n raw: rawFile\n };\n\n if (this.listType === 'picture-card' || this.listType === 'picture') {\n try {\n file.url = URL.createObjectURL(rawFile);\n } catch (err) {\n console.error('[Element Error][Upload]', err);\n return;\n }\n }\n\n this.uploadFiles.push(file);\n this.onChange(file, this.uploadFiles);\n },\n handleProgress: function handleProgress(ev, rawFile) {\n var file = this.getFile(rawFile);\n this.onProgress(ev, file, this.uploadFiles);\n file.status = 'uploading';\n file.percentage = ev.percent || 0;\n },\n handleSuccess: function handleSuccess(res, rawFile) {\n var file = this.getFile(rawFile);\n\n if (file) {\n file.status = 'success';\n file.response = res;\n\n this.onSuccess(res, file, this.uploadFiles);\n this.onChange(file, this.uploadFiles);\n }\n },\n handleError: function handleError(err, rawFile) {\n var file = this.getFile(rawFile);\n var fileList = this.uploadFiles;\n\n file.status = 'fail';\n\n fileList.splice(fileList.indexOf(file), 1);\n\n this.onError(err, file, this.uploadFiles);\n this.onChange(file, this.uploadFiles);\n },\n handleRemove: function handleRemove(file, raw) {\n var _this2 = this;\n\n if (raw) {\n file = this.getFile(raw);\n }\n var doRemove = function doRemove() {\n _this2.abort(file);\n var fileList = _this2.uploadFiles;\n fileList.splice(fileList.indexOf(file), 1);\n _this2.onRemove(file, fileList);\n };\n\n if (!this.beforeRemove) {\n doRemove();\n } else if (typeof this.beforeRemove === 'function') {\n var before = this.beforeRemove(file, this.uploadFiles);\n if (before && before.then) {\n before.then(function () {\n doRemove();\n }, srcvue_type_script_lang_js_noop);\n } else if (before !== false) {\n doRemove();\n }\n }\n },\n getFile: function getFile(rawFile) {\n var fileList = this.uploadFiles;\n var target = void 0;\n fileList.every(function (item) {\n target = rawFile.uid === item.uid ? item : null;\n return !target;\n });\n return target;\n },\n abort: function abort(file) {\n this.$refs['upload-inner'].abort(file);\n },\n clearFiles: function clearFiles() {\n this.uploadFiles = [];\n },\n submit: function submit() {\n var _this3 = this;\n\n this.uploadFiles.filter(function (file) {\n return file.status === 'ready';\n }).forEach(function (file) {\n _this3.$refs['upload-inner'].upload(file.raw);\n });\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'default-file-list': 'default-file-list is renamed to file-list.',\n 'show-upload-list': 'show-upload-list is renamed to show-file-list.',\n 'thumbnail-mode': 'thumbnail-mode has been deprecated, you can implement the same effect according to this case: http://element.eleme.io/#/zh-CN/component/upload#yong-hu-tou-xiang-shang-chuan'\n }\n };\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.uploadFiles.forEach(function (file) {\n if (file.url && file.url.indexOf('blob:') === 0) {\n URL.revokeObjectURL(file.url);\n }\n });\n },\n render: function render(h) {\n var _this4 = this;\n\n var uploadList = void 0;\n\n if (this.showFileList) {\n uploadList = h(\n upload_list,\n {\n attrs: {\n disabled: this.uploadDisabled,\n listType: this.listType,\n files: this.uploadFiles,\n\n handlePreview: this.onPreview },\n on: {\n 'remove': this.handleRemove\n }\n },\n [function (props) {\n if (_this4.$scopedSlots.file) {\n return _this4.$scopedSlots.file({\n file: props.file\n });\n }\n }]\n );\n }\n\n var uploadData = {\n props: {\n type: this.type,\n drag: this.drag,\n action: this.action,\n multiple: this.multiple,\n 'before-upload': this.beforeUpload,\n 'with-credentials': this.withCredentials,\n headers: this.headers,\n name: this.name,\n data: this.data,\n accept: this.accept,\n fileList: this.uploadFiles,\n autoUpload: this.autoUpload,\n listType: this.listType,\n disabled: this.uploadDisabled,\n limit: this.limit,\n 'on-exceed': this.onExceed,\n 'on-start': this.handleStart,\n 'on-progress': this.handleProgress,\n 'on-success': this.handleSuccess,\n 'on-error': this.handleError,\n 'on-preview': this.onPreview,\n 'on-remove': this.handleRemove,\n 'http-request': this.httpRequest\n },\n ref: 'upload-inner'\n };\n\n var trigger = this.$slots.trigger || this.$slots.default;\n var uploadComponent = h(\n 'upload',\n uploadData,\n [trigger]\n );\n\n return h('div', [this.listType === 'picture-card' ? uploadList : '', this.$slots.trigger ? [uploadComponent, this.$slots.default] : uploadComponent, this.$slots.tip, this.listType !== 'picture-card' ? uploadList : '']);\n }\n});\n// CONCATENATED MODULE: ./packages/upload/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var upload_srcvue_type_script_lang_js_ = (srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/upload/src/index.vue\nvar src_render, src_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar upload_src_component = normalizeComponent(\n upload_srcvue_type_script_lang_js_,\n src_render,\n src_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_api; }\nupload_src_component.options.__file = \"packages/upload/src/index.vue\"\n/* harmony default export */ var upload_src = (upload_src_component.exports);\n// CONCATENATED MODULE: ./packages/upload/index.js\n\n\n/* istanbul ignore next */\nupload_src.install = function (Vue) {\n Vue.component(upload_src.name, upload_src);\n};\n\n/* harmony default export */ var packages_upload = (upload_src);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\nvar progressvue_type_template_id_229ee406_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-progress\",\n class: [\n \"el-progress--\" + _vm.type,\n _vm.status ? \"is-\" + _vm.status : \"\",\n {\n \"el-progress--without-text\": !_vm.showText,\n \"el-progress--text-inside\": _vm.textInside\n }\n ],\n attrs: {\n role: \"progressbar\",\n \"aria-valuenow\": _vm.percentage,\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\"\n }\n },\n [\n _vm.type === \"line\"\n ? _c(\"div\", { staticClass: \"el-progress-bar\" }, [\n _c(\n \"div\",\n {\n staticClass: \"el-progress-bar__outer\",\n style: { height: _vm.strokeWidth + \"px\" }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-progress-bar__inner\",\n style: _vm.barStyle\n },\n [\n _vm.showText && _vm.textInside\n ? _c(\n \"div\",\n { staticClass: \"el-progress-bar__innerText\" },\n [_vm._v(_vm._s(_vm.content))]\n )\n : _vm._e()\n ]\n )\n ]\n )\n ])\n : _c(\n \"div\",\n {\n staticClass: \"el-progress-circle\",\n style: { height: _vm.width + \"px\", width: _vm.width + \"px\" }\n },\n [\n _c(\"svg\", { attrs: { viewBox: \"0 0 100 100\" } }, [\n _c(\"path\", {\n staticClass: \"el-progress-circle__track\",\n style: _vm.trailPathStyle,\n attrs: {\n d: _vm.trackPath,\n stroke: \"#e5e9f2\",\n \"stroke-width\": _vm.relativeStrokeWidth,\n fill: \"none\"\n }\n }),\n _c(\"path\", {\n staticClass: \"el-progress-circle__path\",\n style: _vm.circlePathStyle,\n attrs: {\n d: _vm.trackPath,\n stroke: _vm.stroke,\n fill: \"none\",\n \"stroke-linecap\": _vm.strokeLinecap,\n \"stroke-width\": _vm.percentage ? _vm.relativeStrokeWidth : 0\n }\n })\n ])\n ]\n ),\n _vm.showText && !_vm.textInside\n ? _c(\n \"div\",\n {\n staticClass: \"el-progress__text\",\n style: { fontSize: _vm.progressTextSize + \"px\" }\n },\n [\n !_vm.status\n ? [_vm._v(_vm._s(_vm.content))]\n : _c(\"i\", { class: _vm.iconClass })\n ],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar progressvue_type_template_id_229ee406_staticRenderFns = []\nprogressvue_type_template_id_229ee406_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var progressvue_type_script_lang_js_ = ({\n name: 'ElProgress',\n props: {\n type: {\n type: String,\n default: 'line',\n validator: function validator(val) {\n return ['line', 'circle', 'dashboard'].indexOf(val) > -1;\n }\n },\n percentage: {\n type: Number,\n default: 0,\n required: true,\n validator: function validator(val) {\n return val >= 0 && val <= 100;\n }\n },\n status: {\n type: String,\n validator: function validator(val) {\n return ['success', 'exception', 'warning'].indexOf(val) > -1;\n }\n },\n strokeWidth: {\n type: Number,\n default: 6\n },\n strokeLinecap: {\n type: String,\n default: 'round'\n },\n textInside: {\n type: Boolean,\n default: false\n },\n width: {\n type: Number,\n default: 126\n },\n showText: {\n type: Boolean,\n default: true\n },\n color: {\n type: [String, Array, Function],\n default: ''\n },\n format: Function\n },\n computed: {\n barStyle: function barStyle() {\n var style = {};\n style.width = this.percentage + '%';\n style.backgroundColor = this.getCurrentColor(this.percentage);\n return style;\n },\n relativeStrokeWidth: function relativeStrokeWidth() {\n return (this.strokeWidth / this.width * 100).toFixed(1);\n },\n radius: function radius() {\n if (this.type === 'circle' || this.type === 'dashboard') {\n return parseInt(50 - parseFloat(this.relativeStrokeWidth) / 2, 10);\n } else {\n return 0;\n }\n },\n trackPath: function trackPath() {\n var radius = this.radius;\n var isDashboard = this.type === 'dashboard';\n return '\\n M 50 50\\n m 0 ' + (isDashboard ? '' : '-') + radius + '\\n a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '-' : '') + radius * 2 + '\\n a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '' : '-') + radius * 2 + '\\n ';\n },\n perimeter: function perimeter() {\n return 2 * Math.PI * this.radius;\n },\n rate: function rate() {\n return this.type === 'dashboard' ? 0.75 : 1;\n },\n strokeDashoffset: function strokeDashoffset() {\n var offset = -1 * this.perimeter * (1 - this.rate) / 2;\n return offset + 'px';\n },\n trailPathStyle: function trailPathStyle() {\n return {\n strokeDasharray: this.perimeter * this.rate + 'px, ' + this.perimeter + 'px',\n strokeDashoffset: this.strokeDashoffset\n };\n },\n circlePathStyle: function circlePathStyle() {\n return {\n strokeDasharray: this.perimeter * this.rate * (this.percentage / 100) + 'px, ' + this.perimeter + 'px',\n strokeDashoffset: this.strokeDashoffset,\n transition: 'stroke-dasharray 0.6s ease 0s, stroke 0.6s ease'\n };\n },\n stroke: function stroke() {\n var ret = void 0;\n if (this.color) {\n ret = this.getCurrentColor(this.percentage);\n } else {\n switch (this.status) {\n case 'success':\n ret = '#13ce66';\n break;\n case 'exception':\n ret = '#ff4949';\n break;\n case 'warning':\n ret = '#e6a23c';\n break;\n default:\n ret = '#20a0ff';\n }\n }\n return ret;\n },\n iconClass: function iconClass() {\n if (this.status === 'warning') {\n return 'el-icon-warning';\n }\n if (this.type === 'line') {\n return this.status === 'success' ? 'el-icon-circle-check' : 'el-icon-circle-close';\n } else {\n return this.status === 'success' ? 'el-icon-check' : 'el-icon-close';\n }\n },\n progressTextSize: function progressTextSize() {\n return this.type === 'line' ? 12 + this.strokeWidth * 0.4 : this.width * 0.111111 + 2;\n },\n content: function content() {\n if (typeof this.format === 'function') {\n return this.format(this.percentage) || '';\n } else {\n return this.percentage + '%';\n }\n }\n },\n methods: {\n getCurrentColor: function getCurrentColor(percentage) {\n if (typeof this.color === 'function') {\n return this.color(percentage);\n } else if (typeof this.color === 'string') {\n return this.color;\n } else {\n return this.getLevelColor(percentage);\n }\n },\n getLevelColor: function getLevelColor(percentage) {\n var colorArray = this.getColorArray().sort(function (a, b) {\n return a.percentage - b.percentage;\n });\n\n for (var i = 0; i < colorArray.length; i++) {\n if (colorArray[i].percentage > percentage) {\n return colorArray[i].color;\n }\n }\n return colorArray[colorArray.length - 1].color;\n },\n getColorArray: function getColorArray() {\n var color = this.color;\n var span = 100 / color.length;\n return color.map(function (seriesColor, index) {\n if (typeof seriesColor === 'string') {\n return {\n color: seriesColor,\n percentage: (index + 1) * span\n };\n }\n return seriesColor;\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_progressvue_type_script_lang_js_ = (progressvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/progress/src/progress.vue\n\n\n\n\n\n/* normalize component */\n\nvar progress_component = normalizeComponent(\n src_progressvue_type_script_lang_js_,\n progressvue_type_template_id_229ee406_render,\n progressvue_type_template_id_229ee406_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var progress_api; }\nprogress_component.options.__file = \"packages/progress/src/progress.vue\"\n/* harmony default export */ var progress = (progress_component.exports);\n// CONCATENATED MODULE: ./packages/progress/index.js\n\n\n/* istanbul ignore next */\nprogress.install = function (Vue) {\n Vue.component(progress.name, progress);\n};\n\n/* harmony default export */ var packages_progress = (progress);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/spinner/src/spinner.vue?vue&type=template&id=697b8538&\nvar spinnervue_type_template_id_697b8538_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { staticClass: \"el-spinner\" }, [\n _c(\n \"svg\",\n {\n staticClass: \"el-spinner-inner\",\n style: { width: _vm.radius / 2 + \"px\", height: _vm.radius / 2 + \"px\" },\n attrs: { viewBox: \"0 0 50 50\" }\n },\n [\n _c(\"circle\", {\n staticClass: \"path\",\n attrs: {\n cx: \"25\",\n cy: \"25\",\n r: \"20\",\n fill: \"none\",\n stroke: _vm.strokeColor,\n \"stroke-width\": _vm.strokeWidth\n }\n })\n ]\n )\n ])\n}\nvar spinnervue_type_template_id_697b8538_staticRenderFns = []\nspinnervue_type_template_id_697b8538_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue?vue&type=template&id=697b8538&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/spinner/src/spinner.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var spinnervue_type_script_lang_js_ = ({\n name: 'ElSpinner',\n props: {\n type: String,\n radius: {\n type: Number,\n default: 100\n },\n strokeWidth: {\n type: Number,\n default: 5\n },\n strokeColor: {\n type: String,\n default: '#efefef'\n }\n }\n});\n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_spinnervue_type_script_lang_js_ = (spinnervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/spinner/src/spinner.vue\n\n\n\n\n\n/* normalize component */\n\nvar spinner_component = normalizeComponent(\n src_spinnervue_type_script_lang_js_,\n spinnervue_type_template_id_697b8538_render,\n spinnervue_type_template_id_697b8538_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var spinner_api; }\nspinner_component.options.__file = \"packages/spinner/src/spinner.vue\"\n/* harmony default export */ var spinner = (spinner_component.exports);\n// CONCATENATED MODULE: ./packages/spinner/index.js\n\n\n/* istanbul ignore next */\nspinner.install = function (Vue) {\n Vue.component(spinner.name, spinner);\n};\n\n/* harmony default export */ var packages_spinner = (spinner);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/message/src/main.vue?vue&type=template&id=455b9f60&\nvar mainvue_type_template_id_455b9f60_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-message-fade\" },\n on: { \"after-leave\": _vm.handleAfterLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n class: [\n \"el-message\",\n _vm.type && !_vm.iconClass ? \"el-message--\" + _vm.type : \"\",\n _vm.center ? \"is-center\" : \"\",\n _vm.showClose ? \"is-closable\" : \"\",\n _vm.customClass\n ],\n style: _vm.positionStyle,\n attrs: { role: \"alert\" },\n on: { mouseenter: _vm.clearTimer, mouseleave: _vm.startTimer }\n },\n [\n _vm.iconClass\n ? _c(\"i\", { class: _vm.iconClass })\n : _c(\"i\", { class: _vm.typeClass }),\n _vm._t(\"default\", [\n !_vm.dangerouslyUseHTMLString\n ? _c(\"p\", { staticClass: \"el-message__content\" }, [\n _vm._v(_vm._s(_vm.message))\n ])\n : _c(\"p\", {\n staticClass: \"el-message__content\",\n domProps: { innerHTML: _vm._s(_vm.message) }\n })\n ]),\n _vm.showClose\n ? _c(\"i\", {\n staticClass: \"el-message__closeBtn el-icon-close\",\n on: { click: _vm.close }\n })\n : _vm._e()\n ],\n 2\n )\n ]\n )\n}\nvar mainvue_type_template_id_455b9f60_staticRenderFns = []\nmainvue_type_template_id_455b9f60_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/message/src/main.vue?vue&type=template&id=455b9f60&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/message/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar src_mainvue_type_script_lang_js_typeMap = {\n success: 'success',\n info: 'info',\n warning: 'warning',\n error: 'error'\n};\n\n/* harmony default export */ var message_src_mainvue_type_script_lang_js_ = ({\n data: function data() {\n return {\n visible: false,\n message: '',\n duration: 3000,\n type: 'info',\n iconClass: '',\n customClass: '',\n onClose: null,\n showClose: false,\n closed: false,\n verticalOffset: 20,\n timer: null,\n dangerouslyUseHTMLString: false,\n center: false\n };\n },\n\n\n computed: {\n typeClass: function typeClass() {\n return this.type && !this.iconClass ? 'el-message__icon el-icon-' + src_mainvue_type_script_lang_js_typeMap[this.type] : '';\n },\n positionStyle: function positionStyle() {\n return {\n 'top': this.verticalOffset + 'px'\n };\n }\n },\n\n watch: {\n closed: function closed(newVal) {\n if (newVal) {\n this.visible = false;\n }\n }\n },\n\n methods: {\n handleAfterLeave: function handleAfterLeave() {\n this.$destroy(true);\n this.$el.parentNode.removeChild(this.$el);\n },\n close: function close() {\n this.closed = true;\n if (typeof this.onClose === 'function') {\n this.onClose(this);\n }\n },\n clearTimer: function clearTimer() {\n clearTimeout(this.timer);\n },\n startTimer: function startTimer() {\n var _this = this;\n\n if (this.duration > 0) {\n this.timer = setTimeout(function () {\n if (!_this.closed) {\n _this.close();\n }\n }, this.duration);\n }\n },\n keydown: function keydown(e) {\n if (e.keyCode === 27) {\n // esc关闭消息\n if (!this.closed) {\n this.close();\n }\n }\n }\n },\n mounted: function mounted() {\n this.startTimer();\n document.addEventListener('keydown', this.keydown);\n },\n beforeDestroy: function beforeDestroy() {\n document.removeEventListener('keydown', this.keydown);\n }\n});\n// CONCATENATED MODULE: ./packages/message/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_message_src_mainvue_type_script_lang_js_ = (message_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/message/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar message_src_main_component = normalizeComponent(\n packages_message_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_455b9f60_render,\n mainvue_type_template_id_455b9f60_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var message_src_main_api; }\nmessage_src_main_component.options.__file = \"packages/message/src/main.vue\"\n/* harmony default export */ var message_src_main = (message_src_main_component.exports);\n// EXTERNAL MODULE: external \"element-ui/lib/utils/types\"\nvar types_ = __webpack_require__(15);\n\n// CONCATENATED MODULE: ./packages/message/src/main.js\nvar main_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n\n\n\n\n\nvar MessageConstructor = external_vue_default.a.extend(message_src_main);\n\nvar message_src_main_instance = void 0;\nvar main_instances = [];\nvar main_seed = 1;\n\nvar main_Message = function Message(options) {\n if (external_vue_default.a.prototype.$isServer) return;\n options = options || {};\n if (typeof options === 'string') {\n options = {\n message: options\n };\n }\n var userOnClose = options.onClose;\n var id = 'message_' + main_seed++;\n\n options.onClose = function () {\n Message.close(id, userOnClose);\n };\n message_src_main_instance = new MessageConstructor({\n data: options\n });\n message_src_main_instance.id = id;\n if (Object(vdom_[\"isVNode\"])(message_src_main_instance.message)) {\n message_src_main_instance.$slots.default = [message_src_main_instance.message];\n message_src_main_instance.message = null;\n }\n message_src_main_instance.$mount();\n document.body.appendChild(message_src_main_instance.$el);\n var verticalOffset = options.offset || 20;\n main_instances.forEach(function (item) {\n verticalOffset += item.$el.offsetHeight + 16;\n });\n message_src_main_instance.verticalOffset = verticalOffset;\n message_src_main_instance.visible = true;\n message_src_main_instance.$el.style.zIndex = popup_[\"PopupManager\"].nextZIndex();\n main_instances.push(message_src_main_instance);\n return message_src_main_instance;\n};\n\n['success', 'warning', 'info', 'error'].forEach(function (type) {\n main_Message[type] = function (options) {\n if (Object(types_[\"isObject\"])(options) && !Object(vdom_[\"isVNode\"])(options)) {\n return main_Message(main_extends({}, options, {\n type: type\n }));\n }\n return main_Message({\n type: type,\n message: options\n });\n };\n});\n\nmain_Message.close = function (id, userOnClose) {\n var len = main_instances.length;\n var index = -1;\n var removedHeight = void 0;\n for (var i = 0; i < len; i++) {\n if (id === main_instances[i].id) {\n removedHeight = main_instances[i].$el.offsetHeight;\n index = i;\n if (typeof userOnClose === 'function') {\n userOnClose(main_instances[i]);\n }\n main_instances.splice(i, 1);\n break;\n }\n }\n if (len <= 1 || index === -1 || index > main_instances.length - 1) return;\n for (var _i = index; _i < len - 1; _i++) {\n var dom = main_instances[_i].$el;\n dom.style['top'] = parseInt(dom.style['top'], 10) - removedHeight - 16 + 'px';\n }\n};\n\nmain_Message.closeAll = function () {\n for (var i = main_instances.length - 1; i >= 0; i--) {\n main_instances[i].close();\n }\n};\n\n/* harmony default export */ var packages_message_src_main = (main_Message);\n// CONCATENATED MODULE: ./packages/message/index.js\n\n/* harmony default export */ var packages_message = (packages_message_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/badge/src/main.vue?vue&type=template&id=7ccb6598&\nvar mainvue_type_template_id_7ccb6598_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"el-badge\" },\n [\n _vm._t(\"default\"),\n _c(\"transition\", { attrs: { name: \"el-zoom-in-center\" } }, [\n _c(\"sup\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n !_vm.hidden && (_vm.content || _vm.content === 0 || _vm.isDot),\n expression: \"!hidden && (content || content === 0 || isDot)\"\n }\n ],\n staticClass: \"el-badge__content\",\n class: [\n _vm.type ? \"el-badge__content--\" + _vm.type : null,\n {\n \"is-fixed\": _vm.$slots.default,\n \"is-dot\": _vm.isDot\n }\n ],\n domProps: { textContent: _vm._s(_vm.content) }\n })\n ])\n ],\n 2\n )\n}\nvar mainvue_type_template_id_7ccb6598_staticRenderFns = []\nmainvue_type_template_id_7ccb6598_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/badge/src/main.vue?vue&type=template&id=7ccb6598&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/badge/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var badge_src_mainvue_type_script_lang_js_ = ({\n name: 'ElBadge',\n\n props: {\n value: [String, Number],\n max: Number,\n isDot: Boolean,\n hidden: Boolean,\n type: {\n type: String,\n validator: function validator(val) {\n return ['primary', 'success', 'warning', 'info', 'danger'].indexOf(val) > -1;\n }\n }\n },\n\n computed: {\n content: function content() {\n if (this.isDot) return;\n\n var value = this.value;\n var max = this.max;\n\n if (typeof value === 'number' && typeof max === 'number') {\n return max < value ? max + '+' : value;\n }\n\n return value;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/badge/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_badge_src_mainvue_type_script_lang_js_ = (badge_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/badge/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar badge_src_main_component = normalizeComponent(\n packages_badge_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_7ccb6598_render,\n mainvue_type_template_id_7ccb6598_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var badge_src_main_api; }\nbadge_src_main_component.options.__file = \"packages/badge/src/main.vue\"\n/* harmony default export */ var badge_src_main = (badge_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/badge/index.js\n\n\n/* istanbul ignore next */\nbadge_src_main.install = function (Vue) {\n Vue.component(badge_src_main.name, badge_src_main);\n};\n\n/* harmony default export */ var badge = (badge_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/card/src/main.vue?vue&type=template&id=59a4a40f&\nvar mainvue_type_template_id_59a4a40f_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-card\",\n class: _vm.shadow ? \"is-\" + _vm.shadow + \"-shadow\" : \"is-always-shadow\"\n },\n [\n _vm.$slots.header || _vm.header\n ? _c(\n \"div\",\n { staticClass: \"el-card__header\" },\n [_vm._t(\"header\", [_vm._v(_vm._s(_vm.header))])],\n 2\n )\n : _vm._e(),\n _c(\n \"div\",\n { staticClass: \"el-card__body\", style: _vm.bodyStyle },\n [_vm._t(\"default\")],\n 2\n )\n ]\n )\n}\nvar mainvue_type_template_id_59a4a40f_staticRenderFns = []\nmainvue_type_template_id_59a4a40f_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/card/src/main.vue?vue&type=template&id=59a4a40f&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/card/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var card_src_mainvue_type_script_lang_js_ = ({\n name: 'ElCard',\n props: {\n header: {},\n bodyStyle: {},\n shadow: {\n type: String\n }\n }\n});\n// CONCATENATED MODULE: ./packages/card/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_card_src_mainvue_type_script_lang_js_ = (card_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/card/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar card_src_main_component = normalizeComponent(\n packages_card_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_59a4a40f_render,\n mainvue_type_template_id_59a4a40f_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var card_src_main_api; }\ncard_src_main_component.options.__file = \"packages/card/src/main.vue\"\n/* harmony default export */ var card_src_main = (card_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/card/index.js\n\n\n/* istanbul ignore next */\ncard_src_main.install = function (Vue) {\n Vue.component(card_src_main.name, card_src_main);\n};\n\n/* harmony default export */ var card = (card_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/rate/src/main.vue?vue&type=template&id=ada57782&\nvar mainvue_type_template_id_ada57782_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-rate\",\n attrs: {\n role: \"slider\",\n \"aria-valuenow\": _vm.currentValue,\n \"aria-valuetext\": _vm.text,\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": _vm.max,\n tabindex: \"0\"\n },\n on: { keydown: _vm.handleKey }\n },\n [\n _vm._l(_vm.max, function(item, key) {\n return _c(\n \"span\",\n {\n key: key,\n staticClass: \"el-rate__item\",\n style: { cursor: _vm.rateDisabled ? \"auto\" : \"pointer\" },\n on: {\n mousemove: function($event) {\n _vm.setCurrentValue(item, $event)\n },\n mouseleave: _vm.resetCurrentValue,\n click: function($event) {\n _vm.selectValue(item)\n }\n }\n },\n [\n _c(\n \"i\",\n {\n staticClass: \"el-rate__icon\",\n class: [\n _vm.classes[item - 1],\n { hover: _vm.hoverIndex === item }\n ],\n style: _vm.getIconStyle(item)\n },\n [\n _vm.showDecimalIcon(item)\n ? _c(\"i\", {\n staticClass: \"el-rate__decimal\",\n class: _vm.decimalIconClass,\n style: _vm.decimalStyle\n })\n : _vm._e()\n ]\n )\n ]\n )\n }),\n _vm.showText || _vm.showScore\n ? _c(\n \"span\",\n { staticClass: \"el-rate__text\", style: { color: _vm.textColor } },\n [_vm._v(_vm._s(_vm.text))]\n )\n : _vm._e()\n ],\n 2\n )\n}\nvar mainvue_type_template_id_ada57782_staticRenderFns = []\nmainvue_type_template_id_ada57782_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/rate/src/main.vue?vue&type=template&id=ada57782&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/rate/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var rate_src_mainvue_type_script_lang_js_ = ({\n name: 'ElRate',\n\n mixins: [migrating_default.a],\n\n inject: {\n elForm: {\n default: ''\n }\n },\n\n data: function data() {\n return {\n pointerAtLeftHalf: true,\n currentValue: this.value,\n hoverIndex: -1\n };\n },\n\n\n props: {\n value: {\n type: Number,\n default: 0\n },\n lowThreshold: {\n type: Number,\n default: 2\n },\n highThreshold: {\n type: Number,\n default: 4\n },\n max: {\n type: Number,\n default: 5\n },\n colors: {\n type: [Array, Object],\n default: function _default() {\n return ['#F7BA2A', '#F7BA2A', '#F7BA2A'];\n }\n },\n voidColor: {\n type: String,\n default: '#C6D1DE'\n },\n disabledVoidColor: {\n type: String,\n default: '#EFF2F7'\n },\n iconClasses: {\n type: [Array, Object],\n default: function _default() {\n return ['el-icon-star-on', 'el-icon-star-on', 'el-icon-star-on'];\n }\n },\n voidIconClass: {\n type: String,\n default: 'el-icon-star-off'\n },\n disabledVoidIconClass: {\n type: String,\n default: 'el-icon-star-on'\n },\n disabled: {\n type: Boolean,\n default: false\n },\n allowHalf: {\n type: Boolean,\n default: false\n },\n showText: {\n type: Boolean,\n default: false\n },\n showScore: {\n type: Boolean,\n default: false\n },\n textColor: {\n type: String,\n default: '#1f2d3d'\n },\n texts: {\n type: Array,\n default: function _default() {\n return ['极差', '失望', '一般', '满意', '惊喜'];\n }\n },\n scoreTemplate: {\n type: String,\n default: '{value}'\n }\n },\n\n computed: {\n text: function text() {\n var result = '';\n if (this.showScore) {\n result = this.scoreTemplate.replace(/\\{\\s*value\\s*\\}/, this.rateDisabled ? this.value : this.currentValue);\n } else if (this.showText) {\n result = this.texts[Math.ceil(this.currentValue) - 1];\n }\n return result;\n },\n decimalStyle: function decimalStyle() {\n var width = '';\n if (this.rateDisabled) {\n width = this.valueDecimal + '%';\n } else if (this.allowHalf) {\n width = '50%';\n }\n return {\n color: this.activeColor,\n width: width\n };\n },\n valueDecimal: function valueDecimal() {\n return this.value * 100 - Math.floor(this.value) * 100;\n },\n classMap: function classMap() {\n var _ref;\n\n return Array.isArray(this.iconClasses) ? (_ref = {}, _ref[this.lowThreshold] = this.iconClasses[0], _ref[this.highThreshold] = { value: this.iconClasses[1], excluded: true }, _ref[this.max] = this.iconClasses[2], _ref) : this.iconClasses;\n },\n decimalIconClass: function decimalIconClass() {\n return this.getValueFromMap(this.value, this.classMap);\n },\n voidClass: function voidClass() {\n return this.rateDisabled ? this.disabledVoidIconClass : this.voidIconClass;\n },\n activeClass: function activeClass() {\n return this.getValueFromMap(this.currentValue, this.classMap);\n },\n colorMap: function colorMap() {\n var _ref2;\n\n return Array.isArray(this.colors) ? (_ref2 = {}, _ref2[this.lowThreshold] = this.colors[0], _ref2[this.highThreshold] = { value: this.colors[1], excluded: true }, _ref2[this.max] = this.colors[2], _ref2) : this.colors;\n },\n activeColor: function activeColor() {\n return this.getValueFromMap(this.currentValue, this.colorMap);\n },\n classes: function classes() {\n var result = [];\n var i = 0;\n var threshold = this.currentValue;\n if (this.allowHalf && this.currentValue !== Math.floor(this.currentValue)) {\n threshold--;\n }\n for (; i < threshold; i++) {\n result.push(this.activeClass);\n }\n for (; i < this.max; i++) {\n result.push(this.voidClass);\n }\n return result;\n },\n rateDisabled: function rateDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n watch: {\n value: function value(val) {\n this.currentValue = val;\n this.pointerAtLeftHalf = this.value !== Math.floor(this.value);\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'text-template': 'text-template is renamed to score-template.'\n }\n };\n },\n getValueFromMap: function getValueFromMap(value, map) {\n var matchedKeys = Object.keys(map).filter(function (key) {\n var val = map[key];\n var excluded = Object(types_[\"isObject\"])(val) ? val.excluded : false;\n return excluded ? value < key : value <= key;\n }).sort(function (a, b) {\n return a - b;\n });\n var matchedValue = map[matchedKeys[0]];\n return Object(types_[\"isObject\"])(matchedValue) ? matchedValue.value : matchedValue || '';\n },\n showDecimalIcon: function showDecimalIcon(item) {\n var showWhenDisabled = this.rateDisabled && this.valueDecimal > 0 && item - 1 < this.value && item > this.value;\n /* istanbul ignore next */\n var showWhenAllowHalf = this.allowHalf && this.pointerAtLeftHalf && item - 0.5 <= this.currentValue && item > this.currentValue;\n return showWhenDisabled || showWhenAllowHalf;\n },\n getIconStyle: function getIconStyle(item) {\n var voidColor = this.rateDisabled ? this.disabledVoidColor : this.voidColor;\n return {\n color: item <= this.currentValue ? this.activeColor : voidColor\n };\n },\n selectValue: function selectValue(value) {\n if (this.rateDisabled) {\n return;\n }\n if (this.allowHalf && this.pointerAtLeftHalf) {\n this.$emit('input', this.currentValue);\n this.$emit('change', this.currentValue);\n } else {\n this.$emit('input', value);\n this.$emit('change', value);\n }\n },\n handleKey: function handleKey(e) {\n if (this.rateDisabled) {\n return;\n }\n var currentValue = this.currentValue;\n var keyCode = e.keyCode;\n if (keyCode === 38 || keyCode === 39) {\n // left / down\n if (this.allowHalf) {\n currentValue += 0.5;\n } else {\n currentValue += 1;\n }\n e.stopPropagation();\n e.preventDefault();\n } else if (keyCode === 37 || keyCode === 40) {\n if (this.allowHalf) {\n currentValue -= 0.5;\n } else {\n currentValue -= 1;\n }\n e.stopPropagation();\n e.preventDefault();\n }\n currentValue = currentValue < 0 ? 0 : currentValue;\n currentValue = currentValue > this.max ? this.max : currentValue;\n\n this.$emit('input', currentValue);\n this.$emit('change', currentValue);\n },\n setCurrentValue: function setCurrentValue(value, event) {\n if (this.rateDisabled) {\n return;\n }\n /* istanbul ignore if */\n if (this.allowHalf) {\n var target = event.target;\n if (Object(dom_[\"hasClass\"])(target, 'el-rate__item')) {\n target = target.querySelector('.el-rate__icon');\n }\n if (Object(dom_[\"hasClass\"])(target, 'el-rate__decimal')) {\n target = target.parentNode;\n }\n this.pointerAtLeftHalf = event.offsetX * 2 <= target.clientWidth;\n this.currentValue = this.pointerAtLeftHalf ? value - 0.5 : value;\n } else {\n this.currentValue = value;\n }\n this.hoverIndex = value;\n },\n resetCurrentValue: function resetCurrentValue() {\n if (this.rateDisabled) {\n return;\n }\n if (this.allowHalf) {\n this.pointerAtLeftHalf = this.value !== Math.floor(this.value);\n }\n this.currentValue = this.value;\n this.hoverIndex = -1;\n }\n },\n\n created: function created() {\n if (!this.value) {\n this.$emit('input', 0);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/rate/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_rate_src_mainvue_type_script_lang_js_ = (rate_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/rate/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar rate_src_main_component = normalizeComponent(\n packages_rate_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_ada57782_render,\n mainvue_type_template_id_ada57782_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var rate_src_main_api; }\nrate_src_main_component.options.__file = \"packages/rate/src/main.vue\"\n/* harmony default export */ var rate_src_main = (rate_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/rate/index.js\n\n\n/* istanbul ignore next */\nrate_src_main.install = function (Vue) {\n Vue.component(rate_src_main.name, rate_src_main);\n};\n\n/* harmony default export */ var rate = (rate_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/steps.vue?vue&type=template&id=3c6b6dc0&\nvar stepsvue_type_template_id_3c6b6dc0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-steps\",\n class: [\n !_vm.simple && \"el-steps--\" + _vm.direction,\n _vm.simple && \"el-steps--simple\"\n ]\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar stepsvue_type_template_id_3c6b6dc0_staticRenderFns = []\nstepsvue_type_template_id_3c6b6dc0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue?vue&type=template&id=3c6b6dc0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/steps.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var stepsvue_type_script_lang_js_ = ({\n name: 'ElSteps',\n\n mixins: [migrating_default.a],\n\n props: {\n space: [Number, String],\n active: Number,\n direction: {\n type: String,\n default: 'horizontal'\n },\n alignCenter: Boolean,\n simple: Boolean,\n finishStatus: {\n type: String,\n default: 'finish'\n },\n processStatus: {\n type: String,\n default: 'process'\n }\n },\n\n data: function data() {\n return {\n steps: [],\n stepOffset: 0\n };\n },\n\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'center': 'center is removed.'\n }\n };\n }\n },\n\n watch: {\n active: function active(newVal, oldVal) {\n this.$emit('change', newVal, oldVal);\n },\n steps: function steps(_steps) {\n _steps.forEach(function (child, index) {\n child.index = index;\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/steps/src/steps.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_stepsvue_type_script_lang_js_ = (stepsvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/steps/src/steps.vue\n\n\n\n\n\n/* normalize component */\n\nvar steps_component = normalizeComponent(\n src_stepsvue_type_script_lang_js_,\n stepsvue_type_template_id_3c6b6dc0_render,\n stepsvue_type_template_id_3c6b6dc0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var steps_api; }\nsteps_component.options.__file = \"packages/steps/src/steps.vue\"\n/* harmony default export */ var steps = (steps_component.exports);\n// CONCATENATED MODULE: ./packages/steps/index.js\n\n\n/* istanbul ignore next */\nsteps.install = function (Vue) {\n Vue.component(steps.name, steps);\n};\n\n/* harmony default export */ var packages_steps = (steps);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/step.vue?vue&type=template&id=f414a87a&\nvar stepvue_type_template_id_f414a87a_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-step\",\n class: [\n !_vm.isSimple && \"is-\" + _vm.$parent.direction,\n _vm.isSimple && \"is-simple\",\n _vm.isLast && !_vm.space && !_vm.isCenter && \"is-flex\",\n _vm.isCenter && !_vm.isVertical && !_vm.isSimple && \"is-center\"\n ],\n style: _vm.style\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-step__head\", class: \"is-\" + _vm.currentStatus },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-step__line\",\n style: _vm.isLast\n ? \"\"\n : { marginRight: _vm.$parent.stepOffset + \"px\" }\n },\n [\n _c(\"i\", {\n staticClass: \"el-step__line-inner\",\n style: _vm.lineStyle\n })\n ]\n ),\n _c(\n \"div\",\n {\n staticClass: \"el-step__icon\",\n class: \"is-\" + (_vm.icon ? \"icon\" : \"text\")\n },\n [\n _vm.currentStatus !== \"success\" && _vm.currentStatus !== \"error\"\n ? _vm._t(\"icon\", [\n _vm.icon\n ? _c(\"i\", {\n staticClass: \"el-step__icon-inner\",\n class: [_vm.icon]\n })\n : _vm._e(),\n !_vm.icon && !_vm.isSimple\n ? _c(\"div\", { staticClass: \"el-step__icon-inner\" }, [\n _vm._v(_vm._s(_vm.index + 1))\n ])\n : _vm._e()\n ])\n : _c(\"i\", {\n staticClass: \"el-step__icon-inner is-status\",\n class: [\n \"el-icon-\" +\n (_vm.currentStatus === \"success\" ? \"check\" : \"close\")\n ]\n })\n ],\n 2\n )\n ]\n ),\n _c(\"div\", { staticClass: \"el-step__main\" }, [\n _c(\n \"div\",\n {\n ref: \"title\",\n staticClass: \"el-step__title\",\n class: [\"is-\" + _vm.currentStatus]\n },\n [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n 2\n ),\n _vm.isSimple\n ? _c(\"div\", { staticClass: \"el-step__arrow\" })\n : _c(\n \"div\",\n {\n staticClass: \"el-step__description\",\n class: [\"is-\" + _vm.currentStatus]\n },\n [_vm._t(\"description\", [_vm._v(_vm._s(_vm.description))])],\n 2\n )\n ])\n ]\n )\n}\nvar stepvue_type_template_id_f414a87a_staticRenderFns = []\nstepvue_type_template_id_f414a87a_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/steps/src/step.vue?vue&type=template&id=f414a87a&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/steps/src/step.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var stepvue_type_script_lang_js_ = ({\n name: 'ElStep',\n\n props: {\n title: String,\n icon: String,\n description: String,\n status: String\n },\n\n data: function data() {\n return {\n index: -1,\n lineStyle: {},\n internalStatus: ''\n };\n },\n beforeCreate: function beforeCreate() {\n this.$parent.steps.push(this);\n },\n beforeDestroy: function beforeDestroy() {\n var steps = this.$parent.steps;\n var index = steps.indexOf(this);\n if (index >= 0) {\n steps.splice(index, 1);\n }\n },\n\n\n computed: {\n currentStatus: function currentStatus() {\n return this.status || this.internalStatus;\n },\n prevStatus: function prevStatus() {\n var prevStep = this.$parent.steps[this.index - 1];\n return prevStep ? prevStep.currentStatus : 'wait';\n },\n isCenter: function isCenter() {\n return this.$parent.alignCenter;\n },\n isVertical: function isVertical() {\n return this.$parent.direction === 'vertical';\n },\n isSimple: function isSimple() {\n return this.$parent.simple;\n },\n isLast: function isLast() {\n var parent = this.$parent;\n return parent.steps[parent.steps.length - 1] === this;\n },\n stepsCount: function stepsCount() {\n return this.$parent.steps.length;\n },\n space: function space() {\n var isSimple = this.isSimple,\n space = this.$parent.space;\n\n return isSimple ? '' : space;\n },\n\n style: function style() {\n var style = {};\n var parent = this.$parent;\n var len = parent.steps.length;\n\n var space = typeof this.space === 'number' ? this.space + 'px' : this.space ? this.space : 100 / (len - (this.isCenter ? 0 : 1)) + '%';\n style.flexBasis = space;\n if (this.isVertical) return style;\n if (this.isLast) {\n style.maxWidth = 100 / this.stepsCount + '%';\n } else {\n style.marginRight = -this.$parent.stepOffset + 'px';\n }\n\n return style;\n }\n },\n\n methods: {\n updateStatus: function updateStatus(val) {\n var prevChild = this.$parent.$children[this.index - 1];\n\n if (val > this.index) {\n this.internalStatus = this.$parent.finishStatus;\n } else if (val === this.index && this.prevStatus !== 'error') {\n this.internalStatus = this.$parent.processStatus;\n } else {\n this.internalStatus = 'wait';\n }\n\n if (prevChild) prevChild.calcProgress(this.internalStatus);\n },\n calcProgress: function calcProgress(status) {\n var step = 100;\n var style = {};\n\n style.transitionDelay = 150 * this.index + 'ms';\n if (status === this.$parent.processStatus) {\n step = this.currentStatus !== 'error' ? 0 : 0;\n } else if (status === 'wait') {\n step = 0;\n style.transitionDelay = -150 * this.index + 'ms';\n }\n\n style.borderWidth = step && !this.isSimple ? '1px' : 0;\n this.$parent.direction === 'vertical' ? style.height = step + '%' : style.width = step + '%';\n\n this.lineStyle = style;\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var unwatch = this.$watch('index', function (val) {\n _this.$watch('$parent.active', _this.updateStatus, { immediate: true });\n _this.$watch('$parent.processStatus', function () {\n var activeIndex = _this.$parent.active;\n _this.updateStatus(activeIndex);\n }, { immediate: true });\n unwatch();\n });\n }\n});\n// CONCATENATED MODULE: ./packages/steps/src/step.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_stepvue_type_script_lang_js_ = (stepvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/steps/src/step.vue\n\n\n\n\n\n/* normalize component */\n\nvar step_component = normalizeComponent(\n src_stepvue_type_script_lang_js_,\n stepvue_type_template_id_f414a87a_render,\n stepvue_type_template_id_f414a87a_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var step_api; }\nstep_component.options.__file = \"packages/steps/src/step.vue\"\n/* harmony default export */ var step = (step_component.exports);\n// CONCATENATED MODULE: ./packages/step/index.js\n\n\n/* istanbul ignore next */\nstep.install = function (Vue) {\n Vue.component(step.name, step);\n};\n\n/* harmony default export */ var packages_step = (step);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/main.vue?vue&type=template&id=5d5d1482&\nvar mainvue_type_template_id_5d5d1482_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: _vm.carouselClasses,\n on: {\n mouseenter: function($event) {\n $event.stopPropagation()\n return _vm.handleMouseEnter($event)\n },\n mouseleave: function($event) {\n $event.stopPropagation()\n return _vm.handleMouseLeave($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-carousel__container\",\n style: { height: _vm.height }\n },\n [\n _vm.arrowDisplay\n ? _c(\"transition\", { attrs: { name: \"carousel-arrow-left\" } }, [\n _c(\n \"button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n (_vm.arrow === \"always\" || _vm.hover) &&\n (_vm.loop || _vm.activeIndex > 0),\n expression:\n \"(arrow === 'always' || hover) && (loop || activeIndex > 0)\"\n }\n ],\n staticClass: \"el-carousel__arrow el-carousel__arrow--left\",\n attrs: { type: \"button\" },\n on: {\n mouseenter: function($event) {\n _vm.handleButtonEnter(\"left\")\n },\n mouseleave: _vm.handleButtonLeave,\n click: function($event) {\n $event.stopPropagation()\n _vm.throttledArrowClick(_vm.activeIndex - 1)\n }\n }\n },\n [_c(\"i\", { staticClass: \"el-icon-arrow-left\" })]\n )\n ])\n : _vm._e(),\n _vm.arrowDisplay\n ? _c(\"transition\", { attrs: { name: \"carousel-arrow-right\" } }, [\n _c(\n \"button\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value:\n (_vm.arrow === \"always\" || _vm.hover) &&\n (_vm.loop || _vm.activeIndex < _vm.items.length - 1),\n expression:\n \"(arrow === 'always' || hover) && (loop || activeIndex < items.length - 1)\"\n }\n ],\n staticClass: \"el-carousel__arrow el-carousel__arrow--right\",\n attrs: { type: \"button\" },\n on: {\n mouseenter: function($event) {\n _vm.handleButtonEnter(\"right\")\n },\n mouseleave: _vm.handleButtonLeave,\n click: function($event) {\n $event.stopPropagation()\n _vm.throttledArrowClick(_vm.activeIndex + 1)\n }\n }\n },\n [_c(\"i\", { staticClass: \"el-icon-arrow-right\" })]\n )\n ])\n : _vm._e(),\n _vm._t(\"default\")\n ],\n 2\n ),\n _vm.indicatorPosition !== \"none\"\n ? _c(\n \"ul\",\n { class: _vm.indicatorsClasses },\n _vm._l(_vm.items, function(item, index) {\n return _c(\n \"li\",\n {\n key: index,\n class: [\n \"el-carousel__indicator\",\n \"el-carousel__indicator--\" + _vm.direction,\n { \"is-active\": index === _vm.activeIndex }\n ],\n on: {\n mouseenter: function($event) {\n _vm.throttledIndicatorHover(index)\n },\n click: function($event) {\n $event.stopPropagation()\n _vm.handleIndicatorClick(index)\n }\n }\n },\n [\n _c(\"button\", { staticClass: \"el-carousel__button\" }, [\n _vm.hasLabel\n ? _c(\"span\", [_vm._v(_vm._s(item.label))])\n : _vm._e()\n ])\n ]\n )\n }),\n 0\n )\n : _vm._e()\n ]\n )\n}\nvar mainvue_type_template_id_5d5d1482_staticRenderFns = []\nmainvue_type_template_id_5d5d1482_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/carousel/src/main.vue?vue&type=template&id=5d5d1482&\n\n// EXTERNAL MODULE: external \"throttle-debounce/throttle\"\nvar throttle_ = __webpack_require__(25);\nvar throttle_default = /*#__PURE__*/__webpack_require__.n(throttle_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var carousel_src_mainvue_type_script_lang_js_ = ({\n name: 'ElCarousel',\n\n props: {\n initialIndex: {\n type: Number,\n default: 0\n },\n height: String,\n trigger: {\n type: String,\n default: 'hover'\n },\n autoplay: {\n type: Boolean,\n default: true\n },\n interval: {\n type: Number,\n default: 3000\n },\n indicatorPosition: String,\n indicator: {\n type: Boolean,\n default: true\n },\n arrow: {\n type: String,\n default: 'hover'\n },\n type: String,\n loop: {\n type: Boolean,\n default: true\n },\n direction: {\n type: String,\n default: 'horizontal',\n validator: function validator(val) {\n return ['horizontal', 'vertical'].indexOf(val) !== -1;\n }\n }\n },\n\n data: function data() {\n return {\n items: [],\n activeIndex: -1,\n containerWidth: 0,\n timer: null,\n hover: false\n };\n },\n\n\n computed: {\n arrowDisplay: function arrowDisplay() {\n return this.arrow !== 'never' && this.direction !== 'vertical';\n },\n hasLabel: function hasLabel() {\n return this.items.some(function (item) {\n return item.label.toString().length > 0;\n });\n },\n carouselClasses: function carouselClasses() {\n var classes = ['el-carousel', 'el-carousel--' + this.direction];\n if (this.type === 'card') {\n classes.push('el-carousel--card');\n }\n return classes;\n },\n indicatorsClasses: function indicatorsClasses() {\n var classes = ['el-carousel__indicators', 'el-carousel__indicators--' + this.direction];\n if (this.hasLabel) {\n classes.push('el-carousel__indicators--labels');\n }\n if (this.indicatorPosition === 'outside' || this.type === 'card') {\n classes.push('el-carousel__indicators--outside');\n }\n return classes;\n }\n },\n\n watch: {\n items: function items(val) {\n if (val.length > 0) this.setActiveItem(this.initialIndex);\n },\n activeIndex: function activeIndex(val, oldVal) {\n this.resetItemPosition(oldVal);\n if (oldVal > -1) {\n this.$emit('change', val, oldVal);\n }\n },\n autoplay: function autoplay(val) {\n val ? this.startTimer() : this.pauseTimer();\n },\n loop: function loop() {\n this.setActiveItem(this.activeIndex);\n },\n interval: function interval() {\n this.pauseTimer();\n this.startTimer();\n }\n },\n\n methods: {\n handleMouseEnter: function handleMouseEnter() {\n this.hover = true;\n this.pauseTimer();\n },\n handleMouseLeave: function handleMouseLeave() {\n this.hover = false;\n this.startTimer();\n },\n itemInStage: function itemInStage(item, index) {\n var length = this.items.length;\n if (index === length - 1 && item.inStage && this.items[0].active || item.inStage && this.items[index + 1] && this.items[index + 1].active) {\n return 'left';\n } else if (index === 0 && item.inStage && this.items[length - 1].active || item.inStage && this.items[index - 1] && this.items[index - 1].active) {\n return 'right';\n }\n return false;\n },\n handleButtonEnter: function handleButtonEnter(arrow) {\n var _this = this;\n\n if (this.direction === 'vertical') return;\n this.items.forEach(function (item, index) {\n if (arrow === _this.itemInStage(item, index)) {\n item.hover = true;\n }\n });\n },\n handleButtonLeave: function handleButtonLeave() {\n if (this.direction === 'vertical') return;\n this.items.forEach(function (item) {\n item.hover = false;\n });\n },\n updateItems: function updateItems() {\n this.items = this.$children.filter(function (child) {\n return child.$options.name === 'ElCarouselItem';\n });\n },\n resetItemPosition: function resetItemPosition(oldIndex) {\n var _this2 = this;\n\n this.items.forEach(function (item, index) {\n item.translateItem(index, _this2.activeIndex, oldIndex);\n });\n },\n playSlides: function playSlides() {\n if (this.activeIndex < this.items.length - 1) {\n this.activeIndex++;\n } else if (this.loop) {\n this.activeIndex = 0;\n }\n },\n pauseTimer: function pauseTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n },\n startTimer: function startTimer() {\n if (this.interval <= 0 || !this.autoplay || this.timer) return;\n this.timer = setInterval(this.playSlides, this.interval);\n },\n resetTimer: function resetTimer() {\n this.pauseTimer();\n this.startTimer();\n },\n setActiveItem: function setActiveItem(index) {\n if (typeof index === 'string') {\n var filteredItems = this.items.filter(function (item) {\n return item.name === index;\n });\n if (filteredItems.length > 0) {\n index = this.items.indexOf(filteredItems[0]);\n }\n }\n index = Number(index);\n if (isNaN(index) || index !== Math.floor(index)) {\n console.warn('[Element Warn][Carousel]index must be an integer.');\n return;\n }\n var length = this.items.length;\n var oldIndex = this.activeIndex;\n if (index < 0) {\n this.activeIndex = this.loop ? length - 1 : 0;\n } else if (index >= length) {\n this.activeIndex = this.loop ? 0 : length - 1;\n } else {\n this.activeIndex = index;\n }\n if (oldIndex === this.activeIndex) {\n this.resetItemPosition(oldIndex);\n }\n this.resetTimer();\n },\n prev: function prev() {\n this.setActiveItem(this.activeIndex - 1);\n },\n next: function next() {\n this.setActiveItem(this.activeIndex + 1);\n },\n handleIndicatorClick: function handleIndicatorClick(index) {\n this.activeIndex = index;\n },\n handleIndicatorHover: function handleIndicatorHover(index) {\n if (this.trigger === 'hover' && index !== this.activeIndex) {\n this.activeIndex = index;\n }\n }\n },\n\n created: function created() {\n var _this3 = this;\n\n this.throttledArrowClick = throttle_default()(300, true, function (index) {\n _this3.setActiveItem(index);\n });\n this.throttledIndicatorHover = throttle_default()(300, function (index) {\n _this3.handleIndicatorHover(index);\n });\n },\n mounted: function mounted() {\n var _this4 = this;\n\n this.updateItems();\n this.$nextTick(function () {\n Object(resize_event_[\"addResizeListener\"])(_this4.$el, _this4.resetItemPosition);\n if (_this4.initialIndex < _this4.items.length && _this4.initialIndex >= 0) {\n _this4.activeIndex = _this4.initialIndex;\n }\n _this4.startTimer();\n });\n },\n beforeDestroy: function beforeDestroy() {\n if (this.$el) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.resetItemPosition);\n this.pauseTimer();\n }\n});\n// CONCATENATED MODULE: ./packages/carousel/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_carousel_src_mainvue_type_script_lang_js_ = (carousel_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/carousel/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar carousel_src_main_component = normalizeComponent(\n packages_carousel_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_5d5d1482_render,\n mainvue_type_template_id_5d5d1482_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var carousel_src_main_api; }\ncarousel_src_main_component.options.__file = \"packages/carousel/src/main.vue\"\n/* harmony default export */ var carousel_src_main = (carousel_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/carousel/index.js\n\n\n/* istanbul ignore next */\ncarousel_src_main.install = function (Vue) {\n Vue.component(carousel_src_main.name, carousel_src_main);\n};\n\n/* harmony default export */ var carousel = (carousel_src_main);\n// CONCATENATED MODULE: ./packages/scrollbar/src/util.js\nvar BAR_MAP = {\n vertical: {\n offset: 'offsetHeight',\n scroll: 'scrollTop',\n scrollSize: 'scrollHeight',\n size: 'height',\n key: 'vertical',\n axis: 'Y',\n client: 'clientY',\n direction: 'top'\n },\n horizontal: {\n offset: 'offsetWidth',\n scroll: 'scrollLeft',\n scrollSize: 'scrollWidth',\n size: 'width',\n key: 'horizontal',\n axis: 'X',\n client: 'clientX',\n direction: 'left'\n }\n};\n\nfunction renderThumbStyle(_ref) {\n var move = _ref.move,\n size = _ref.size,\n bar = _ref.bar;\n\n var style = {};\n var translate = 'translate' + bar.axis + '(' + move + '%)';\n\n style[bar.size] = size;\n style.transform = translate;\n style.msTransform = translate;\n style.webkitTransform = translate;\n\n return style;\n};\n// CONCATENATED MODULE: ./packages/scrollbar/src/bar.js\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var src_bar = ({\n name: 'Bar',\n\n props: {\n vertical: Boolean,\n size: String,\n move: Number\n },\n\n computed: {\n bar: function bar() {\n return BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];\n },\n wrap: function wrap() {\n return this.$parent.wrap;\n }\n },\n\n render: function render(h) {\n var size = this.size,\n move = this.move,\n bar = this.bar;\n\n\n return h(\n 'div',\n {\n 'class': ['el-scrollbar__bar', 'is-' + bar.key],\n on: {\n 'mousedown': this.clickTrackHandler\n }\n },\n [h('div', {\n ref: 'thumb',\n 'class': 'el-scrollbar__thumb',\n on: {\n 'mousedown': this.clickThumbHandler\n },\n\n style: renderThumbStyle({ size: size, move: move, bar: bar }) })]\n );\n },\n\n\n methods: {\n clickThumbHandler: function clickThumbHandler(e) {\n // prevent click event of right button\n if (e.ctrlKey || e.button === 2) {\n return;\n }\n this.startDrag(e);\n this[this.bar.axis] = e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]);\n },\n clickTrackHandler: function clickTrackHandler(e) {\n var offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);\n var thumbHalf = this.$refs.thumb[this.bar.offset] / 2;\n var thumbPositionPercentage = (offset - thumbHalf) * 100 / this.$el[this.bar.offset];\n\n this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n },\n startDrag: function startDrag(e) {\n e.stopImmediatePropagation();\n this.cursorDown = true;\n\n Object(dom_[\"on\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n Object(dom_[\"on\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n document.onselectstart = function () {\n return false;\n };\n },\n mouseMoveDocumentHandler: function mouseMoveDocumentHandler(e) {\n if (this.cursorDown === false) return;\n var prevPage = this[this.bar.axis];\n\n if (!prevPage) return;\n\n var offset = (this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1;\n var thumbClickPosition = this.$refs.thumb[this.bar.offset] - prevPage;\n var thumbPositionPercentage = (offset - thumbClickPosition) * 100 / this.$el[this.bar.offset];\n\n this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n },\n mouseUpDocumentHandler: function mouseUpDocumentHandler(e) {\n this.cursorDown = false;\n this[this.bar.axis] = 0;\n Object(dom_[\"off\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n document.onselectstart = null;\n }\n },\n\n destroyed: function destroyed() {\n Object(dom_[\"off\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/src/main.js\n// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js\n\n\n\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var scrollbar_src_main = ({\n name: 'ElScrollbar',\n\n components: { Bar: src_bar },\n\n props: {\n native: Boolean,\n wrapStyle: {},\n wrapClass: {},\n viewClass: {},\n viewStyle: {},\n noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n tag: {\n type: String,\n default: 'div'\n }\n },\n\n data: function data() {\n return {\n sizeWidth: '0',\n sizeHeight: '0',\n moveX: 0,\n moveY: 0\n };\n },\n\n\n computed: {\n wrap: function wrap() {\n return this.$refs.wrap;\n }\n },\n\n render: function render(h) {\n var gutter = scrollbar_width_default()();\n var style = this.wrapStyle;\n\n if (gutter) {\n var gutterWith = '-' + gutter + 'px';\n var gutterStyle = 'margin-bottom: ' + gutterWith + '; margin-right: ' + gutterWith + ';';\n\n if (Array.isArray(this.wrapStyle)) {\n style = Object(util_[\"toObject\"])(this.wrapStyle);\n style.marginRight = style.marginBottom = gutterWith;\n } else if (typeof this.wrapStyle === 'string') {\n style += gutterStyle;\n } else {\n style = gutterStyle;\n }\n }\n var view = h(this.tag, {\n class: ['el-scrollbar__view', this.viewClass],\n style: this.viewStyle,\n ref: 'resize'\n }, this.$slots.default);\n var wrap = h(\n 'div',\n {\n ref: 'wrap',\n style: style,\n on: {\n 'scroll': this.handleScroll\n },\n\n 'class': [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] },\n [[view]]\n );\n var nodes = void 0;\n\n if (!this.native) {\n nodes = [wrap, h(src_bar, {\n attrs: {\n move: this.moveX,\n size: this.sizeWidth }\n }), h(src_bar, {\n attrs: {\n vertical: true,\n move: this.moveY,\n size: this.sizeHeight }\n })];\n } else {\n nodes = [h(\n 'div',\n {\n ref: 'wrap',\n 'class': [this.wrapClass, 'el-scrollbar__wrap'],\n style: style },\n [[view]]\n )];\n }\n return h('div', { class: 'el-scrollbar' }, nodes);\n },\n\n\n methods: {\n handleScroll: function handleScroll() {\n var wrap = this.wrap;\n\n this.moveY = wrap.scrollTop * 100 / wrap.clientHeight;\n this.moveX = wrap.scrollLeft * 100 / wrap.clientWidth;\n },\n update: function update() {\n var heightPercentage = void 0,\n widthPercentage = void 0;\n var wrap = this.wrap;\n if (!wrap) return;\n\n heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n widthPercentage = wrap.clientWidth * 100 / wrap.scrollWidth;\n\n this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : '';\n this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : '';\n }\n },\n\n mounted: function mounted() {\n if (this.native) return;\n this.$nextTick(this.update);\n !this.noresize && Object(resize_event_[\"addResizeListener\"])(this.$refs.resize, this.update);\n },\n beforeDestroy: function beforeDestroy() {\n if (this.native) return;\n !this.noresize && Object(resize_event_[\"removeResizeListener\"])(this.$refs.resize, this.update);\n }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/index.js\n\n\n/* istanbul ignore next */\nscrollbar_src_main.install = function (Vue) {\n Vue.component(scrollbar_src_main.name, scrollbar_src_main);\n};\n\n/* harmony default export */ var scrollbar = (scrollbar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/item.vue?vue&type=template&id=1801ae19&\nvar itemvue_type_template_id_1801ae19_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.ready,\n expression: \"ready\"\n }\n ],\n staticClass: \"el-carousel__item\",\n class: {\n \"is-active\": _vm.active,\n \"el-carousel__item--card\": _vm.$parent.type === \"card\",\n \"is-in-stage\": _vm.inStage,\n \"is-hover\": _vm.hover,\n \"is-animating\": _vm.animating\n },\n style: _vm.itemStyle,\n on: { click: _vm.handleItemClick }\n },\n [\n _vm.$parent.type === \"card\"\n ? _c(\"div\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.active,\n expression: \"!active\"\n }\n ],\n staticClass: \"el-carousel__mask\"\n })\n : _vm._e(),\n _vm._t(\"default\")\n ],\n 2\n )\n}\nvar itemvue_type_template_id_1801ae19_staticRenderFns = []\nitemvue_type_template_id_1801ae19_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/carousel/src/item.vue?vue&type=template&id=1801ae19&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/carousel/src/item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\nvar CARD_SCALE = 0.83;\n/* harmony default export */ var itemvue_type_script_lang_js_ = ({\n name: 'ElCarouselItem',\n\n props: {\n name: String,\n label: {\n type: [String, Number],\n default: ''\n }\n },\n\n data: function data() {\n return {\n hover: false,\n translate: 0,\n scale: 1,\n active: false,\n ready: false,\n inStage: false,\n animating: false\n };\n },\n\n\n methods: {\n processIndex: function processIndex(index, activeIndex, length) {\n if (activeIndex === 0 && index === length - 1) {\n return -1;\n } else if (activeIndex === length - 1 && index === 0) {\n return length;\n } else if (index < activeIndex - 1 && activeIndex - index >= length / 2) {\n return length + 1;\n } else if (index > activeIndex + 1 && index - activeIndex >= length / 2) {\n return -2;\n }\n return index;\n },\n calcCardTranslate: function calcCardTranslate(index, activeIndex) {\n var parentWidth = this.$parent.$el.offsetWidth;\n if (this.inStage) {\n return parentWidth * ((2 - CARD_SCALE) * (index - activeIndex) + 1) / 4;\n } else if (index < activeIndex) {\n return -(1 + CARD_SCALE) * parentWidth / 4;\n } else {\n return (3 + CARD_SCALE) * parentWidth / 4;\n }\n },\n calcTranslate: function calcTranslate(index, activeIndex, isVertical) {\n var distance = this.$parent.$el[isVertical ? 'offsetHeight' : 'offsetWidth'];\n return distance * (index - activeIndex);\n },\n translateItem: function translateItem(index, activeIndex, oldIndex) {\n var parentType = this.$parent.type;\n var parentDirection = this.parentDirection;\n var length = this.$parent.items.length;\n if (parentType !== 'card' && oldIndex !== undefined) {\n this.animating = index === activeIndex || index === oldIndex;\n }\n if (index !== activeIndex && length > 2 && this.$parent.loop) {\n index = this.processIndex(index, activeIndex, length);\n }\n if (parentType === 'card') {\n if (parentDirection === 'vertical') {\n console.warn('[Element Warn][Carousel]vertical direction is not supported in card mode');\n }\n this.inStage = Math.round(Math.abs(index - activeIndex)) <= 1;\n this.active = index === activeIndex;\n this.translate = this.calcCardTranslate(index, activeIndex);\n this.scale = this.active ? 1 : CARD_SCALE;\n } else {\n this.active = index === activeIndex;\n var isVertical = parentDirection === 'vertical';\n this.translate = this.calcTranslate(index, activeIndex, isVertical);\n this.scale = 1;\n }\n this.ready = true;\n },\n handleItemClick: function handleItemClick() {\n var parent = this.$parent;\n if (parent && parent.type === 'card') {\n var index = parent.items.indexOf(this);\n parent.setActiveItem(index);\n }\n }\n },\n\n computed: {\n parentDirection: function parentDirection() {\n return this.$parent.direction;\n },\n itemStyle: function itemStyle() {\n var translateType = this.parentDirection === 'vertical' ? 'translateY' : 'translateX';\n var value = translateType + '(' + this.translate + 'px) scale(' + this.scale + ')';\n var style = {\n transform: value\n };\n return Object(util_[\"autoprefixer\"])(style);\n }\n },\n\n created: function created() {\n this.$parent && this.$parent.updateItems();\n },\n destroyed: function destroyed() {\n this.$parent && this.$parent.updateItems();\n }\n});\n// CONCATENATED MODULE: ./packages/carousel/src/item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_itemvue_type_script_lang_js_ = (itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/carousel/src/item.vue\n\n\n\n\n\n/* normalize component */\n\nvar item_component = normalizeComponent(\n src_itemvue_type_script_lang_js_,\n itemvue_type_template_id_1801ae19_render,\n itemvue_type_template_id_1801ae19_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var item_api; }\nitem_component.options.__file = \"packages/carousel/src/item.vue\"\n/* harmony default export */ var src_item = (item_component.exports);\n// CONCATENATED MODULE: ./packages/carousel-item/index.js\n\n\n/* istanbul ignore next */\nsrc_item.install = function (Vue) {\n Vue.component(src_item.name, src_item);\n};\n\n/* harmony default export */ var carousel_item = (src_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse.vue?vue&type=template&id=461d57f4&\nvar collapsevue_type_template_id_461d57f4_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-collapse\",\n attrs: { role: \"tablist\", \"aria-multiselectable\": \"true\" }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar collapsevue_type_template_id_461d57f4_staticRenderFns = []\ncollapsevue_type_template_id_461d57f4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue?vue&type=template&id=461d57f4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n\n/* harmony default export */ var collapsevue_type_script_lang_js_ = ({\n name: 'ElCollapse',\n\n componentName: 'ElCollapse',\n\n props: {\n accordion: Boolean,\n value: {\n type: [Array, String, Number],\n default: function _default() {\n return [];\n }\n }\n },\n\n data: function data() {\n return {\n activeNames: [].concat(this.value)\n };\n },\n provide: function provide() {\n return {\n collapse: this\n };\n },\n\n\n watch: {\n value: function value(_value) {\n this.activeNames = [].concat(_value);\n }\n },\n\n methods: {\n setActiveNames: function setActiveNames(activeNames) {\n activeNames = [].concat(activeNames);\n var value = this.accordion ? activeNames[0] : activeNames;\n this.activeNames = activeNames;\n this.$emit('input', value);\n this.$emit('change', value);\n },\n handleItemClick: function handleItemClick(item) {\n if (this.accordion) {\n this.setActiveNames((this.activeNames[0] || this.activeNames[0] === 0) && this.activeNames[0] === item.name ? '' : item.name);\n } else {\n var activeNames = this.activeNames.slice(0);\n var index = activeNames.indexOf(item.name);\n\n if (index > -1) {\n activeNames.splice(index, 1);\n } else {\n activeNames.push(item.name);\n }\n this.setActiveNames(activeNames);\n }\n }\n },\n\n created: function created() {\n this.$on('item-click', this.handleItemClick);\n }\n});\n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_collapsevue_type_script_lang_js_ = (collapsevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/collapse/src/collapse.vue\n\n\n\n\n\n/* normalize component */\n\nvar collapse_component = normalizeComponent(\n src_collapsevue_type_script_lang_js_,\n collapsevue_type_template_id_461d57f4_render,\n collapsevue_type_template_id_461d57f4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var collapse_api; }\ncollapse_component.options.__file = \"packages/collapse/src/collapse.vue\"\n/* harmony default export */ var collapse = (collapse_component.exports);\n// CONCATENATED MODULE: ./packages/collapse/index.js\n\n\n/* istanbul ignore next */\ncollapse.install = function (Vue) {\n Vue.component(collapse.name, collapse);\n};\n\n/* harmony default export */ var packages_collapse = (collapse);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse-item.vue?vue&type=template&id=2d05faac&\nvar collapse_itemvue_type_template_id_2d05faac_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-collapse-item\",\n class: { \"is-active\": _vm.isActive, \"is-disabled\": _vm.disabled }\n },\n [\n _c(\n \"div\",\n {\n attrs: {\n role: \"tab\",\n \"aria-expanded\": _vm.isActive,\n \"aria-controls\": \"el-collapse-content-\" + _vm.id,\n \"aria-describedby\": \"el-collapse-content-\" + _vm.id\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-collapse-item__header\",\n class: {\n focusing: _vm.focusing,\n \"is-active\": _vm.isActive\n },\n attrs: {\n role: \"button\",\n id: \"el-collapse-head-\" + _vm.id,\n tabindex: _vm.disabled ? undefined : 0\n },\n on: {\n click: _vm.handleHeaderClick,\n keyup: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"space\", 32, $event.key, [\n \" \",\n \"Spacebar\"\n ]) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n $event.stopPropagation()\n return _vm.handleEnterClick($event)\n },\n focus: _vm.handleFocus,\n blur: function($event) {\n _vm.focusing = false\n }\n }\n },\n [\n _vm._t(\"title\", [_vm._v(_vm._s(_vm.title))]),\n _c(\"i\", {\n staticClass: \"el-collapse-item__arrow el-icon-arrow-right\",\n class: { \"is-active\": _vm.isActive }\n })\n ],\n 2\n )\n ]\n ),\n _c(\"el-collapse-transition\", [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.isActive,\n expression: \"isActive\"\n }\n ],\n staticClass: \"el-collapse-item__wrap\",\n attrs: {\n role: \"tabpanel\",\n \"aria-hidden\": !_vm.isActive,\n \"aria-labelledby\": \"el-collapse-head-\" + _vm.id,\n id: \"el-collapse-content-\" + _vm.id\n }\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-collapse-item__content\" },\n [_vm._t(\"default\")],\n 2\n )\n ]\n )\n ])\n ],\n 1\n )\n}\nvar collapse_itemvue_type_template_id_2d05faac_staticRenderFns = []\ncollapse_itemvue_type_template_id_2d05faac_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue?vue&type=template&id=2d05faac&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/collapse/src/collapse-item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var collapse_itemvue_type_script_lang_js_ = ({\n name: 'ElCollapseItem',\n\n componentName: 'ElCollapseItem',\n\n mixins: [emitter_default.a],\n\n components: { ElCollapseTransition: collapse_transition_default.a },\n\n data: function data() {\n return {\n contentWrapStyle: {\n height: 'auto',\n display: 'block'\n },\n contentHeight: 0,\n focusing: false,\n isClick: false,\n id: Object(util_[\"generateId\"])()\n };\n },\n\n\n inject: ['collapse'],\n\n props: {\n title: String,\n name: {\n type: [String, Number],\n default: function _default() {\n return this._uid;\n }\n },\n disabled: Boolean\n },\n\n computed: {\n isActive: function isActive() {\n return this.collapse.activeNames.indexOf(this.name) > -1;\n }\n },\n\n methods: {\n handleFocus: function handleFocus() {\n var _this = this;\n\n setTimeout(function () {\n if (!_this.isClick) {\n _this.focusing = true;\n } else {\n _this.isClick = false;\n }\n }, 50);\n },\n handleHeaderClick: function handleHeaderClick() {\n if (this.disabled) return;\n this.dispatch('ElCollapse', 'item-click', this);\n this.focusing = false;\n this.isClick = true;\n },\n handleEnterClick: function handleEnterClick() {\n this.dispatch('ElCollapse', 'item-click', this);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_collapse_itemvue_type_script_lang_js_ = (collapse_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/collapse/src/collapse-item.vue\n\n\n\n\n\n/* normalize component */\n\nvar collapse_item_component = normalizeComponent(\n src_collapse_itemvue_type_script_lang_js_,\n collapse_itemvue_type_template_id_2d05faac_render,\n collapse_itemvue_type_template_id_2d05faac_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var collapse_item_api; }\ncollapse_item_component.options.__file = \"packages/collapse/src/collapse-item.vue\"\n/* harmony default export */ var collapse_item = (collapse_item_component.exports);\n// CONCATENATED MODULE: ./packages/collapse-item/index.js\n\n\n/* istanbul ignore next */\ncollapse_item.install = function (Vue) {\n Vue.component(collapse_item.name, collapse_item);\n};\n\n/* harmony default export */ var packages_collapse_item = (collapse_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader/src/cascader.vue?vue&type=template&id=032537a6&\nvar cascadervue_type_template_id_032537a6_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: function() {\n return _vm.toggleDropDownVisible(false)\n },\n expression: \"() => toggleDropDownVisible(false)\"\n }\n ],\n ref: \"reference\",\n class: [\n \"el-cascader\",\n _vm.realSize && \"el-cascader--\" + _vm.realSize,\n { \"is-disabled\": _vm.isDisabled }\n ],\n on: {\n mouseenter: function($event) {\n _vm.inputHover = true\n },\n mouseleave: function($event) {\n _vm.inputHover = false\n },\n click: function() {\n return _vm.toggleDropDownVisible(_vm.readonly ? undefined : true)\n },\n keydown: _vm.handleKeyDown\n }\n },\n [\n _c(\n \"el-input\",\n {\n ref: \"input\",\n class: { \"is-focus\": _vm.dropDownVisible },\n attrs: {\n size: _vm.realSize,\n placeholder: _vm.placeholder,\n readonly: _vm.readonly,\n disabled: _vm.isDisabled,\n \"validate-event\": false\n },\n on: {\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n input: _vm.handleInput\n },\n model: {\n value: _vm.multiple ? _vm.presentText : _vm.inputValue,\n callback: function($$v) {\n _vm.multiple ? _vm.presentText : (_vm.inputValue = $$v)\n },\n expression: \"multiple ? presentText : inputValue\"\n }\n },\n [\n _c(\"template\", { slot: \"suffix\" }, [\n _vm.clearBtnVisible\n ? _c(\"i\", {\n key: \"clear\",\n staticClass: \"el-input__icon el-icon-circle-close\",\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.handleClear($event)\n }\n }\n })\n : _c(\"i\", {\n key: \"arrow-down\",\n class: [\n \"el-input__icon\",\n \"el-icon-arrow-down\",\n _vm.dropDownVisible && \"is-reverse\"\n ],\n on: {\n click: function($event) {\n $event.stopPropagation()\n _vm.toggleDropDownVisible()\n }\n }\n })\n ])\n ],\n 2\n ),\n _vm.multiple\n ? _c(\n \"div\",\n { staticClass: \"el-cascader__tags\" },\n [\n _vm._l(_vm.presentTags, function(tag) {\n return _c(\n \"el-tag\",\n {\n key: tag.key,\n attrs: {\n type: \"info\",\n size: _vm.tagSize,\n hit: tag.hitState,\n closable: tag.closable,\n \"disable-transitions\": \"\"\n },\n on: {\n close: function($event) {\n _vm.deleteTag(tag)\n }\n }\n },\n [_c(\"span\", [_vm._v(_vm._s(tag.text))])]\n )\n }),\n _vm.filterable && !_vm.isDisabled\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model.trim\",\n value: _vm.inputValue,\n expression: \"inputValue\",\n modifiers: { trim: true }\n }\n ],\n staticClass: \"el-cascader__search-input\",\n attrs: {\n type: \"text\",\n placeholder: _vm.presentTags.length ? \"\" : _vm.placeholder\n },\n domProps: { value: _vm.inputValue },\n on: {\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.inputValue = $event.target.value.trim()\n },\n function(e) {\n return _vm.handleInput(_vm.inputValue, e)\n }\n ],\n click: function($event) {\n $event.stopPropagation()\n _vm.toggleDropDownVisible(true)\n },\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"delete\",\n [8, 46],\n $event.key,\n [\"Backspace\", \"Delete\", \"Del\"]\n )\n ) {\n return null\n }\n return _vm.handleDelete($event)\n },\n blur: function($event) {\n _vm.$forceUpdate()\n }\n }\n })\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: { \"after-leave\": _vm.handleDropdownLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.dropDownVisible,\n expression: \"dropDownVisible\"\n }\n ],\n ref: \"popper\",\n class: [\"el-popper\", \"el-cascader__dropdown\", _vm.popperClass]\n },\n [\n _c(\"el-cascader-panel\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.filtering,\n expression: \"!filtering\"\n }\n ],\n ref: \"panel\",\n attrs: {\n options: _vm.options,\n props: _vm.config,\n border: false,\n \"render-label\": _vm.$scopedSlots.default\n },\n on: {\n \"expand-change\": _vm.handleExpandChange,\n close: function($event) {\n _vm.toggleDropDownVisible(false)\n }\n },\n model: {\n value: _vm.checkedValue,\n callback: function($$v) {\n _vm.checkedValue = $$v\n },\n expression: \"checkedValue\"\n }\n }),\n _vm.filterable\n ? _c(\n \"el-scrollbar\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.filtering,\n expression: \"filtering\"\n }\n ],\n ref: \"suggestionPanel\",\n staticClass: \"el-cascader__suggestion-panel\",\n attrs: {\n tag: \"ul\",\n \"view-class\": \"el-cascader__suggestion-list\"\n },\n nativeOn: {\n keydown: function($event) {\n return _vm.handleSuggestionKeyDown($event)\n }\n }\n },\n [\n _vm.suggestions.length\n ? _vm._l(_vm.suggestions, function(item, index) {\n return _c(\n \"li\",\n {\n key: item.uid,\n class: [\n \"el-cascader__suggestion-item\",\n item.checked && \"is-checked\"\n ],\n attrs: { tabindex: -1 },\n on: {\n click: function($event) {\n _vm.handleSuggestionClick(index)\n }\n }\n },\n [\n _c(\"span\", [_vm._v(_vm._s(item.text))]),\n item.checked\n ? _c(\"i\", { staticClass: \"el-icon-check\" })\n : _vm._e()\n ]\n )\n })\n : _vm._t(\"empty\", [\n _c(\n \"li\",\n { staticClass: \"el-cascader__empty-text\" },\n [_vm._v(_vm._s(_vm.t(\"el.cascader.noMatch\")))]\n )\n ])\n ],\n 2\n )\n : _vm._e()\n ],\n 1\n )\n ]\n )\n ],\n 1\n )\n}\nvar cascadervue_type_template_id_032537a6_staticRenderFns = []\ncascadervue_type_template_id_032537a6_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue?vue&type=template&id=032537a6&\n\n// EXTERNAL MODULE: external \"element-ui/lib/cascader-panel\"\nvar cascader_panel_ = __webpack_require__(42);\nvar cascader_panel_default = /*#__PURE__*/__webpack_require__.n(cascader_panel_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/aria-utils\"\nvar aria_utils_ = __webpack_require__(34);\nvar aria_utils_default = /*#__PURE__*/__webpack_require__.n(aria_utils_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader/src/cascader.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar KeyCode = aria_utils_default.a.keys;\n\nvar MigratingProps = {\n expandTrigger: {\n newProp: 'expandTrigger',\n type: String\n },\n changeOnSelect: {\n newProp: 'checkStrictly',\n type: Boolean\n },\n hoverThreshold: {\n newProp: 'hoverThreshold',\n type: Number\n }\n};\n\nvar PopperMixin = {\n props: {\n placement: {\n type: String,\n default: 'bottom-start'\n },\n appendToBody: vue_popper_default.a.props.appendToBody,\n visibleArrow: {\n type: Boolean,\n default: true\n },\n arrowOffset: vue_popper_default.a.props.arrowOffset,\n offset: vue_popper_default.a.props.offset,\n boundariesPadding: vue_popper_default.a.props.boundariesPadding,\n popperOptions: vue_popper_default.a.props.popperOptions\n },\n methods: vue_popper_default.a.methods,\n data: vue_popper_default.a.data,\n beforeDestroy: vue_popper_default.a.beforeDestroy\n};\n\nvar InputSizeMap = {\n medium: 36,\n small: 32,\n mini: 28\n};\n\n/* harmony default export */ var cascadervue_type_script_lang_js_ = ({\n name: 'ElCascader',\n\n directives: { Clickoutside: clickoutside_default.a },\n\n mixins: [PopperMixin, emitter_default.a, locale_default.a, migrating_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n components: {\n ElInput: input_default.a,\n ElTag: tag_default.a,\n ElScrollbar: scrollbar_default.a,\n ElCascaderPanel: cascader_panel_default.a\n },\n\n props: {\n value: {},\n options: Array,\n props: Object,\n size: String,\n placeholder: {\n type: String,\n default: function _default() {\n return Object(lib_locale_[\"t\"])('el.cascader.placeholder');\n }\n },\n disabled: Boolean,\n clearable: Boolean,\n filterable: Boolean,\n filterMethod: Function,\n separator: {\n type: String,\n default: ' / '\n },\n showAllLevels: {\n type: Boolean,\n default: true\n },\n collapseTags: Boolean,\n debounce: {\n type: Number,\n default: 300\n },\n beforeFilter: {\n type: Function,\n default: function _default() {\n return function () {};\n }\n },\n popperClass: String\n },\n\n data: function data() {\n return {\n dropDownVisible: false,\n checkedValue: this.value,\n inputHover: false,\n inputValue: null,\n presentText: null,\n presentTags: [],\n checkedNodes: [],\n filtering: false,\n suggestions: [],\n inputInitialHeight: 0,\n pressDeleteCount: 0\n };\n },\n\n\n computed: {\n realSize: function realSize() {\n var _elFormItemSize = (this.elFormItem || {}).elFormItemSize;\n return this.size || _elFormItemSize || (this.$ELEMENT || {}).size;\n },\n tagSize: function tagSize() {\n return ['small', 'mini'].indexOf(this.realSize) > -1 ? 'mini' : 'small';\n },\n isDisabled: function isDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n config: function config() {\n var config = this.props || {};\n var $attrs = this.$attrs;\n\n\n Object.keys(MigratingProps).forEach(function (oldProp) {\n var _MigratingProps$oldPr = MigratingProps[oldProp],\n newProp = _MigratingProps$oldPr.newProp,\n type = _MigratingProps$oldPr.type;\n\n var oldValue = $attrs[oldProp] || $attrs[Object(util_[\"kebabCase\"])(oldProp)];\n if (Object(shared_[\"isDef\"])(oldProp) && !Object(shared_[\"isDef\"])(config[newProp])) {\n if (type === Boolean && oldValue === '') {\n oldValue = true;\n }\n config[newProp] = oldValue;\n }\n });\n\n return config;\n },\n multiple: function multiple() {\n return this.config.multiple;\n },\n leafOnly: function leafOnly() {\n return !this.config.checkStrictly;\n },\n readonly: function readonly() {\n return !this.filterable || this.multiple;\n },\n clearBtnVisible: function clearBtnVisible() {\n if (!this.clearable || this.isDisabled || this.filtering || !this.inputHover) {\n return false;\n }\n\n return this.multiple ? !!this.checkedNodes.filter(function (node) {\n return !node.isDisabled;\n }).length : !!this.presentText;\n },\n panel: function panel() {\n return this.$refs.panel;\n }\n },\n\n watch: {\n disabled: function disabled() {\n this.computePresentContent();\n },\n value: function value(val) {\n if (!Object(util_[\"isEqual\"])(val, this.checkedValue)) {\n this.checkedValue = val;\n this.computePresentContent();\n }\n },\n checkedValue: function checkedValue(val) {\n var value = this.value,\n dropDownVisible = this.dropDownVisible;\n var _config = this.config,\n checkStrictly = _config.checkStrictly,\n multiple = _config.multiple;\n\n\n if (!Object(util_[\"isEqual\"])(val, value) || Object(types_[\"isUndefined\"])(value)) {\n this.computePresentContent();\n // hide dropdown when single mode\n if (!multiple && !checkStrictly && dropDownVisible) {\n this.toggleDropDownVisible(false);\n }\n\n this.$emit('input', val);\n this.$emit('change', val);\n this.dispatch('ElFormItem', 'el.form.change', [val]);\n }\n },\n\n options: {\n handler: function handler() {\n this.$nextTick(this.computePresentContent);\n },\n deep: true\n },\n presentText: function presentText(val) {\n this.inputValue = val;\n },\n presentTags: function presentTags(val, oldVal) {\n if (this.multiple && (val.length || oldVal.length)) {\n this.$nextTick(this.updateStyle);\n }\n },\n filtering: function filtering(val) {\n this.$nextTick(this.updatePopper);\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var input = this.$refs.input;\n\n if (input && input.$el) {\n this.inputInitialHeight = input.$el.offsetHeight || InputSizeMap[this.realSize] || 40;\n }\n\n if (!this.isEmptyValue(this.value)) {\n this.computePresentContent();\n }\n\n this.filterHandler = debounce_default()(this.debounce, function () {\n var inputValue = _this.inputValue;\n\n\n if (!inputValue) {\n _this.filtering = false;\n return;\n }\n\n var before = _this.beforeFilter(inputValue);\n if (before && before.then) {\n before.then(_this.getSuggestions);\n } else if (before !== false) {\n _this.getSuggestions();\n } else {\n _this.filtering = false;\n }\n });\n\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.updateStyle);\n },\n beforeDestroy: function beforeDestroy() {\n Object(resize_event_[\"removeResizeListener\"])(this.$el, this.updateStyle);\n },\n\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'expand-trigger': 'expand-trigger is removed, use `props.expandTrigger` instead.',\n 'change-on-select': 'change-on-select is removed, use `props.checkStrictly` instead.',\n 'hover-threshold': 'hover-threshold is removed, use `props.hoverThreshold` instead'\n },\n events: {\n 'active-item-change': 'active-item-change is renamed to expand-change'\n }\n };\n },\n toggleDropDownVisible: function toggleDropDownVisible(visible) {\n var _this2 = this;\n\n if (this.isDisabled) return;\n\n var dropDownVisible = this.dropDownVisible;\n var input = this.$refs.input;\n\n visible = Object(shared_[\"isDef\"])(visible) ? visible : !dropDownVisible;\n if (visible !== dropDownVisible) {\n this.dropDownVisible = visible;\n if (visible) {\n this.$nextTick(function () {\n _this2.updatePopper();\n _this2.panel.scrollIntoView();\n });\n }\n input.$refs.input.setAttribute('aria-expanded', visible);\n this.$emit('visible-change', visible);\n }\n },\n handleDropdownLeave: function handleDropdownLeave() {\n this.filtering = false;\n this.inputValue = this.presentText;\n this.doDestroy();\n },\n handleKeyDown: function handleKeyDown(event) {\n switch (event.keyCode) {\n case KeyCode.enter:\n this.toggleDropDownVisible();\n break;\n case KeyCode.down:\n this.toggleDropDownVisible(true);\n this.focusFirstNode();\n event.preventDefault();\n break;\n case KeyCode.esc:\n case KeyCode.tab:\n this.toggleDropDownVisible(false);\n break;\n }\n },\n handleFocus: function handleFocus(e) {\n this.$emit('focus', e);\n },\n handleBlur: function handleBlur(e) {\n this.$emit('blur', e);\n },\n handleInput: function handleInput(val, event) {\n !this.dropDownVisible && this.toggleDropDownVisible(true);\n\n if (event && event.isComposing) return;\n if (val) {\n this.filterHandler();\n } else {\n this.filtering = false;\n }\n },\n handleClear: function handleClear() {\n this.presentText = '';\n this.panel.clearCheckedNodes();\n },\n handleExpandChange: function handleExpandChange(value) {\n this.$nextTick(this.updatePopper.bind(this));\n this.$emit('expand-change', value);\n this.$emit('active-item-change', value); // Deprecated\n },\n focusFirstNode: function focusFirstNode() {\n var _this3 = this;\n\n this.$nextTick(function () {\n var filtering = _this3.filtering;\n var _$refs = _this3.$refs,\n popper = _$refs.popper,\n suggestionPanel = _$refs.suggestionPanel;\n\n var firstNode = null;\n\n if (filtering && suggestionPanel) {\n firstNode = suggestionPanel.$el.querySelector('.el-cascader__suggestion-item');\n } else {\n var firstMenu = popper.querySelector('.el-cascader-menu');\n firstNode = firstMenu.querySelector('.el-cascader-node[tabindex=\"-1\"]');\n }\n\n if (firstNode) {\n firstNode.focus();\n !filtering && firstNode.click();\n }\n });\n },\n computePresentContent: function computePresentContent() {\n var _this4 = this;\n\n // nextTick is required, because checked nodes may not change right now\n this.$nextTick(function () {\n if (_this4.config.multiple) {\n _this4.computePresentTags();\n _this4.presentText = _this4.presentTags.length ? ' ' : null;\n } else {\n _this4.computePresentText();\n }\n });\n },\n isEmptyValue: function isEmptyValue(val) {\n var multiple = this.multiple;\n var emitPath = this.panel.config.emitPath;\n\n if (multiple || emitPath) {\n return Object(util_[\"isEmpty\"])(val);\n }\n return false;\n },\n computePresentText: function computePresentText() {\n var checkedValue = this.checkedValue,\n config = this.config;\n\n if (!this.isEmptyValue(checkedValue)) {\n var node = this.panel.getNodeByValue(checkedValue);\n if (node && (config.checkStrictly || node.isLeaf)) {\n this.presentText = node.getText(this.showAllLevels, this.separator);\n return;\n }\n }\n this.presentText = null;\n },\n computePresentTags: function computePresentTags() {\n var isDisabled = this.isDisabled,\n leafOnly = this.leafOnly,\n showAllLevels = this.showAllLevels,\n separator = this.separator,\n collapseTags = this.collapseTags;\n\n var checkedNodes = this.getCheckedNodes(leafOnly);\n var tags = [];\n\n var genTag = function genTag(node) {\n return {\n node: node,\n key: node.uid,\n text: node.getText(showAllLevels, separator),\n hitState: false,\n closable: !isDisabled && !node.isDisabled\n };\n };\n\n if (checkedNodes.length) {\n var first = checkedNodes[0],\n rest = checkedNodes.slice(1);\n\n var restCount = rest.length;\n tags.push(genTag(first));\n\n if (restCount) {\n if (collapseTags) {\n tags.push({\n key: -1,\n text: '+ ' + restCount,\n closable: false\n });\n } else {\n rest.forEach(function (node) {\n return tags.push(genTag(node));\n });\n }\n }\n }\n\n this.checkedNodes = checkedNodes;\n this.presentTags = tags;\n },\n getSuggestions: function getSuggestions() {\n var _this5 = this;\n\n var filterMethod = this.filterMethod;\n\n\n if (!Object(types_[\"isFunction\"])(filterMethod)) {\n filterMethod = function filterMethod(node, keyword) {\n return node.text.includes(keyword);\n };\n }\n\n var suggestions = this.panel.getFlattedNodes(this.leafOnly).filter(function (node) {\n if (node.isDisabled) return false;\n node.text = node.getText(_this5.showAllLevels, _this5.separator) || '';\n return filterMethod(node, _this5.inputValue);\n });\n\n if (this.multiple) {\n this.presentTags.forEach(function (tag) {\n tag.hitState = false;\n });\n } else {\n suggestions.forEach(function (node) {\n node.checked = Object(util_[\"isEqual\"])(_this5.checkedValue, node.getValueByOption());\n });\n }\n\n this.filtering = true;\n this.suggestions = suggestions;\n this.$nextTick(this.updatePopper);\n },\n handleSuggestionKeyDown: function handleSuggestionKeyDown(event) {\n var keyCode = event.keyCode,\n target = event.target;\n\n switch (keyCode) {\n case KeyCode.enter:\n target.click();\n break;\n case KeyCode.up:\n var prev = target.previousElementSibling;\n prev && prev.focus();\n break;\n case KeyCode.down:\n var next = target.nextElementSibling;\n next && next.focus();\n break;\n case KeyCode.esc:\n case KeyCode.tab:\n this.toggleDropDownVisible(false);\n break;\n }\n },\n handleDelete: function handleDelete() {\n var inputValue = this.inputValue,\n pressDeleteCount = this.pressDeleteCount,\n presentTags = this.presentTags;\n\n var lastIndex = presentTags.length - 1;\n var lastTag = presentTags[lastIndex];\n this.pressDeleteCount = inputValue ? 0 : pressDeleteCount + 1;\n\n if (!lastTag) return;\n\n if (this.pressDeleteCount) {\n if (lastTag.hitState) {\n this.deleteTag(lastTag);\n } else {\n lastTag.hitState = true;\n }\n }\n },\n handleSuggestionClick: function handleSuggestionClick(index) {\n var multiple = this.multiple;\n\n var targetNode = this.suggestions[index];\n\n if (multiple) {\n var checked = targetNode.checked;\n\n targetNode.doCheck(!checked);\n this.panel.calculateMultiCheckedValue();\n } else {\n this.checkedValue = targetNode.getValueByOption();\n this.toggleDropDownVisible(false);\n }\n },\n deleteTag: function deleteTag(tag) {\n var checkedValue = this.checkedValue;\n\n var current = tag.node.getValueByOption();\n var val = checkedValue.find(function (n) {\n return Object(util_[\"isEqual\"])(n, current);\n });\n this.checkedValue = checkedValue.filter(function (n) {\n return !Object(util_[\"isEqual\"])(n, current);\n });\n this.$emit('remove-tag', val);\n },\n updateStyle: function updateStyle() {\n var $el = this.$el,\n inputInitialHeight = this.inputInitialHeight;\n\n if (this.$isServer || !$el) return;\n\n var suggestionPanel = this.$refs.suggestionPanel;\n\n var inputInner = $el.querySelector('.el-input__inner');\n\n if (!inputInner) return;\n\n var tags = $el.querySelector('.el-cascader__tags');\n var suggestionPanelEl = null;\n\n if (suggestionPanel && (suggestionPanelEl = suggestionPanel.$el)) {\n var suggestionList = suggestionPanelEl.querySelector('.el-cascader__suggestion-list');\n suggestionList.style.minWidth = inputInner.offsetWidth + 'px';\n }\n\n if (tags) {\n var offsetHeight = Math.round(tags.getBoundingClientRect().height);\n var height = Math.max(offsetHeight + 6, inputInitialHeight) + 'px';\n inputInner.style.height = height;\n if (this.dropDownVisible) {\n this.updatePopper();\n }\n }\n },\n\n\n /**\n * public methods\n */\n getCheckedNodes: function getCheckedNodes(leafOnly) {\n return this.panel.getCheckedNodes(leafOnly);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascadervue_type_script_lang_js_ = (cascadervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader/src/cascader.vue\n\n\n\n\n\n/* normalize component */\n\nvar cascader_component = normalizeComponent(\n src_cascadervue_type_script_lang_js_,\n cascadervue_type_template_id_032537a6_render,\n cascadervue_type_template_id_032537a6_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_api; }\ncascader_component.options.__file = \"packages/cascader/src/cascader.vue\"\n/* harmony default export */ var cascader = (cascader_component.exports);\n// CONCATENATED MODULE: ./packages/cascader/index.js\n\n\n/* istanbul ignore next */\ncascader.install = function (Vue) {\n Vue.component(cascader.name, cascader);\n};\n\n/* harmony default export */ var packages_cascader = (cascader);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/main.vue?vue&type=template&id=55c8ade7&\nvar mainvue_type_template_id_55c8ade7_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.hide,\n expression: \"hide\"\n }\n ],\n class: [\n \"el-color-picker\",\n _vm.colorDisabled ? \"is-disabled\" : \"\",\n _vm.colorSize ? \"el-color-picker--\" + _vm.colorSize : \"\"\n ]\n },\n [\n _vm.colorDisabled\n ? _c(\"div\", { staticClass: \"el-color-picker__mask\" })\n : _vm._e(),\n _c(\n \"div\",\n {\n staticClass: \"el-color-picker__trigger\",\n on: { click: _vm.handleTrigger }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"el-color-picker__color\",\n class: { \"is-alpha\": _vm.showAlpha }\n },\n [\n _c(\"span\", {\n staticClass: \"el-color-picker__color-inner\",\n style: {\n backgroundColor: _vm.displayedColor\n }\n }),\n !_vm.value && !_vm.showPanelColor\n ? _c(\"span\", {\n staticClass: \"el-color-picker__empty el-icon-close\"\n })\n : _vm._e()\n ]\n ),\n _c(\"span\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.value || _vm.showPanelColor,\n expression: \"value || showPanelColor\"\n }\n ],\n staticClass: \"el-color-picker__icon el-icon-arrow-down\"\n })\n ]\n ),\n _c(\"picker-dropdown\", {\n ref: \"dropdown\",\n class: [\"el-color-picker__panel\", _vm.popperClass || \"\"],\n attrs: {\n color: _vm.color,\n \"show-alpha\": _vm.showAlpha,\n predefine: _vm.predefine\n },\n on: { pick: _vm.confirmValue, clear: _vm.clearValue },\n model: {\n value: _vm.showPicker,\n callback: function($$v) {\n _vm.showPicker = $$v\n },\n expression: \"showPicker\"\n }\n })\n ],\n 1\n )\n}\nvar mainvue_type_template_id_55c8ade7_staticRenderFns = []\nmainvue_type_template_id_55c8ade7_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue?vue&type=template&id=55c8ade7&\n\n// CONCATENATED MODULE: ./packages/color-picker/src/color.js\nvar color_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nfunction color_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar hsv2hsl = function hsv2hsl(hue, sat, val) {\n return [hue, sat * val / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0, hue / 2];\n};\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nvar isOnePointZero = function isOnePointZero(n) {\n return typeof n === 'string' && n.indexOf('.') !== -1 && parseFloat(n) === 1;\n};\n\nvar isPercentage = function isPercentage(n) {\n return typeof n === 'string' && n.indexOf('%') !== -1;\n};\n\n// Take input from [0, n] and return it as [0, 1]\nvar bound01 = function bound01(value, max) {\n if (isOnePointZero(value)) value = '100%';\n\n var processPercent = isPercentage(value);\n value = Math.min(max, Math.max(0, parseFloat(value)));\n\n // Automatically convert percentage into number\n if (processPercent) {\n value = parseInt(value * max, 10) / 100;\n }\n\n // Handle floating point rounding errors\n if (Math.abs(value - max) < 0.000001) {\n return 1;\n }\n\n // Convert into [0, 1] range if it isn't already\n return value % max / parseFloat(max);\n};\n\nvar INT_HEX_MAP = { 10: 'A', 11: 'B', 12: 'C', 13: 'D', 14: 'E', 15: 'F' };\n\nvar toHex = function toHex(_ref) {\n var r = _ref.r,\n g = _ref.g,\n b = _ref.b;\n\n var hexOne = function hexOne(value) {\n value = Math.min(Math.round(value), 255);\n var high = Math.floor(value / 16);\n var low = value % 16;\n return '' + (INT_HEX_MAP[high] || high) + (INT_HEX_MAP[low] || low);\n };\n\n if (isNaN(r) || isNaN(g) || isNaN(b)) return '';\n\n return '#' + hexOne(r) + hexOne(g) + hexOne(b);\n};\n\nvar HEX_INT_MAP = { A: 10, B: 11, C: 12, D: 13, E: 14, F: 15 };\n\nvar parseHexChannel = function parseHexChannel(hex) {\n if (hex.length === 2) {\n return (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 + (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]);\n }\n\n return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1];\n};\n\nvar hsl2hsv = function hsl2hsv(hue, sat, light) {\n sat = sat / 100;\n light = light / 100;\n var smin = sat;\n var lmin = Math.max(light, 0.01);\n var sv = void 0;\n var v = void 0;\n\n light *= 2;\n sat *= light <= 1 ? light : 2 - light;\n smin *= lmin <= 1 ? lmin : 2 - lmin;\n v = (light + sat) / 2;\n sv = light === 0 ? 2 * smin / (lmin + smin) : 2 * sat / (light + sat);\n\n return {\n h: hue,\n s: sv * 100,\n v: v * 100\n };\n};\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nvar rgb2hsv = function rgb2hsv(r, g, b) {\n r = bound01(r, 255);\n g = bound01(g, 255);\n b = bound01(b, 255);\n\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h = void 0,\n s = void 0;\n var v = max;\n\n var d = max - min;\n s = max === 0 ? 0 : d / max;\n\n if (max === min) {\n h = 0; // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return { h: h * 360, s: s * 100, v: v * 100 };\n};\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nvar hsv2rgb = function hsv2rgb(h, s, v) {\n h = bound01(h, 360) * 6;\n s = bound01(s, 100);\n v = bound01(v, 100);\n\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - f * s);\n var t = v * (1 - (1 - f) * s);\n var mod = i % 6;\n var r = [v, q, p, p, t, v][mod];\n var g = [t, v, v, q, p, p][mod];\n var b = [p, p, t, v, v, q][mod];\n\n return {\n r: Math.round(r * 255),\n g: Math.round(g * 255),\n b: Math.round(b * 255)\n };\n};\n\nvar Color = function () {\n function Color(options) {\n color_classCallCheck(this, Color);\n\n this._hue = 0;\n this._saturation = 100;\n this._value = 100;\n this._alpha = 100;\n\n this.enableAlpha = false;\n this.format = 'hex';\n this.value = '';\n\n options = options || {};\n\n for (var option in options) {\n if (options.hasOwnProperty(option)) {\n this[option] = options[option];\n }\n }\n\n this.doOnChange();\n }\n\n Color.prototype.set = function set(prop, value) {\n if (arguments.length === 1 && (typeof prop === 'undefined' ? 'undefined' : color_typeof(prop)) === 'object') {\n for (var p in prop) {\n if (prop.hasOwnProperty(p)) {\n this.set(p, prop[p]);\n }\n }\n\n return;\n }\n\n this['_' + prop] = value;\n this.doOnChange();\n };\n\n Color.prototype.get = function get(prop) {\n return this['_' + prop];\n };\n\n Color.prototype.toRgb = function toRgb() {\n return hsv2rgb(this._hue, this._saturation, this._value);\n };\n\n Color.prototype.fromString = function fromString(value) {\n var _this = this;\n\n if (!value) {\n this._hue = 0;\n this._saturation = 100;\n this._value = 100;\n\n this.doOnChange();\n return;\n }\n\n var fromHSV = function fromHSV(h, s, v) {\n _this._hue = Math.max(0, Math.min(360, h));\n _this._saturation = Math.max(0, Math.min(100, s));\n _this._value = Math.max(0, Math.min(100, v));\n\n _this.doOnChange();\n };\n\n if (value.indexOf('hsl') !== -1) {\n var parts = value.replace(/hsla|hsl|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n return val !== '';\n }).map(function (val, index) {\n return index > 2 ? parseFloat(val) : parseInt(val, 10);\n });\n\n if (parts.length === 4) {\n this._alpha = Math.floor(parseFloat(parts[3]) * 100);\n } else if (parts.length === 3) {\n this._alpha = 100;\n }\n if (parts.length >= 3) {\n var _hsl2hsv = hsl2hsv(parts[0], parts[1], parts[2]),\n h = _hsl2hsv.h,\n s = _hsl2hsv.s,\n v = _hsl2hsv.v;\n\n fromHSV(h, s, v);\n }\n } else if (value.indexOf('hsv') !== -1) {\n var _parts = value.replace(/hsva|hsv|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n return val !== '';\n }).map(function (val, index) {\n return index > 2 ? parseFloat(val) : parseInt(val, 10);\n });\n\n if (_parts.length === 4) {\n this._alpha = Math.floor(parseFloat(_parts[3]) * 100);\n } else if (_parts.length === 3) {\n this._alpha = 100;\n }\n if (_parts.length >= 3) {\n fromHSV(_parts[0], _parts[1], _parts[2]);\n }\n } else if (value.indexOf('rgb') !== -1) {\n var _parts2 = value.replace(/rgba|rgb|\\(|\\)/gm, '').split(/\\s|,/g).filter(function (val) {\n return val !== '';\n }).map(function (val, index) {\n return index > 2 ? parseFloat(val) : parseInt(val, 10);\n });\n\n if (_parts2.length === 4) {\n this._alpha = Math.floor(parseFloat(_parts2[3]) * 100);\n } else if (_parts2.length === 3) {\n this._alpha = 100;\n }\n if (_parts2.length >= 3) {\n var _rgb2hsv = rgb2hsv(_parts2[0], _parts2[1], _parts2[2]),\n _h = _rgb2hsv.h,\n _s = _rgb2hsv.s,\n _v = _rgb2hsv.v;\n\n fromHSV(_h, _s, _v);\n }\n } else if (value.indexOf('#') !== -1) {\n var hex = value.replace('#', '').trim();\n if (!/^(?:[0-9a-fA-F]{3}){1,2}|[0-9a-fA-F]{8}$/.test(hex)) return;\n var r = void 0,\n g = void 0,\n b = void 0;\n\n if (hex.length === 3) {\n r = parseHexChannel(hex[0] + hex[0]);\n g = parseHexChannel(hex[1] + hex[1]);\n b = parseHexChannel(hex[2] + hex[2]);\n } else if (hex.length === 6 || hex.length === 8) {\n r = parseHexChannel(hex.substring(0, 2));\n g = parseHexChannel(hex.substring(2, 4));\n b = parseHexChannel(hex.substring(4, 6));\n }\n\n if (hex.length === 8) {\n this._alpha = Math.floor(parseHexChannel(hex.substring(6)) / 255 * 100);\n } else if (hex.length === 3 || hex.length === 6) {\n this._alpha = 100;\n }\n\n var _rgb2hsv2 = rgb2hsv(r, g, b),\n _h2 = _rgb2hsv2.h,\n _s2 = _rgb2hsv2.s,\n _v2 = _rgb2hsv2.v;\n\n fromHSV(_h2, _s2, _v2);\n }\n };\n\n Color.prototype.compare = function compare(color) {\n return Math.abs(color._hue - this._hue) < 2 && Math.abs(color._saturation - this._saturation) < 1 && Math.abs(color._value - this._value) < 1 && Math.abs(color._alpha - this._alpha) < 1;\n };\n\n Color.prototype.doOnChange = function doOnChange() {\n var _hue = this._hue,\n _saturation = this._saturation,\n _value = this._value,\n _alpha = this._alpha,\n format = this.format;\n\n\n if (this.enableAlpha) {\n switch (format) {\n case 'hsl':\n var hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);\n this.value = 'hsla(' + _hue + ', ' + Math.round(hsl[1] * 100) + '%, ' + Math.round(hsl[2] * 100) + '%, ' + _alpha / 100 + ')';\n break;\n case 'hsv':\n this.value = 'hsva(' + _hue + ', ' + Math.round(_saturation) + '%, ' + Math.round(_value) + '%, ' + _alpha / 100 + ')';\n break;\n default:\n var _hsv2rgb = hsv2rgb(_hue, _saturation, _value),\n r = _hsv2rgb.r,\n g = _hsv2rgb.g,\n b = _hsv2rgb.b;\n\n this.value = 'rgba(' + r + ', ' + g + ', ' + b + ', ' + _alpha / 100 + ')';\n }\n } else {\n switch (format) {\n case 'hsl':\n var _hsl = hsv2hsl(_hue, _saturation / 100, _value / 100);\n this.value = 'hsl(' + _hue + ', ' + Math.round(_hsl[1] * 100) + '%, ' + Math.round(_hsl[2] * 100) + '%)';\n break;\n case 'hsv':\n this.value = 'hsv(' + _hue + ', ' + Math.round(_saturation) + '%, ' + Math.round(_value) + '%)';\n break;\n case 'rgb':\n var _hsv2rgb2 = hsv2rgb(_hue, _saturation, _value),\n _r = _hsv2rgb2.r,\n _g = _hsv2rgb2.g,\n _b = _hsv2rgb2.b;\n\n this.value = 'rgb(' + _r + ', ' + _g + ', ' + _b + ')';\n break;\n default:\n this.value = toHex(hsv2rgb(_hue, _saturation, _value));\n }\n }\n };\n\n return Color;\n}();\n\n/* harmony default export */ var src_color = (Color);\n;\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/picker-dropdown.vue?vue&type=template&id=06601625&\nvar picker_dropdownvue_type_template_id_06601625_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n { attrs: { name: \"el-zoom-in-top\" }, on: { \"after-leave\": _vm.doDestroy } },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showPopper,\n expression: \"showPopper\"\n }\n ],\n staticClass: \"el-color-dropdown\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"el-color-dropdown__main-wrapper\" },\n [\n _c(\"hue-slider\", {\n ref: \"hue\",\n staticStyle: { float: \"right\" },\n attrs: { color: _vm.color, vertical: \"\" }\n }),\n _c(\"sv-panel\", { ref: \"sl\", attrs: { color: _vm.color } })\n ],\n 1\n ),\n _vm.showAlpha\n ? _c(\"alpha-slider\", { ref: \"alpha\", attrs: { color: _vm.color } })\n : _vm._e(),\n _vm.predefine\n ? _c(\"predefine\", {\n attrs: { color: _vm.color, colors: _vm.predefine }\n })\n : _vm._e(),\n _c(\n \"div\",\n { staticClass: \"el-color-dropdown__btns\" },\n [\n _c(\n \"span\",\n { staticClass: \"el-color-dropdown__value\" },\n [\n _c(\"el-input\", {\n attrs: { \"validate-event\": false, size: \"mini\" },\n on: { blur: _vm.handleConfirm },\n nativeOn: {\n keyup: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n return _vm.handleConfirm($event)\n }\n },\n model: {\n value: _vm.customInput,\n callback: function($$v) {\n _vm.customInput = $$v\n },\n expression: \"customInput\"\n }\n })\n ],\n 1\n ),\n _c(\n \"el-button\",\n {\n staticClass: \"el-color-dropdown__link-btn\",\n attrs: { size: \"mini\", type: \"text\" },\n on: {\n click: function($event) {\n _vm.$emit(\"clear\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.colorpicker.clear\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n staticClass: \"el-color-dropdown__btn\",\n attrs: { plain: \"\", size: \"mini\" },\n on: { click: _vm.confirmValue }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.colorpicker.confirm\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n ]\n )\n}\nvar picker_dropdownvue_type_template_id_06601625_staticRenderFns = []\npicker_dropdownvue_type_template_id_06601625_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue?vue&type=template&id=06601625&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/sv-panel.vue?vue&type=template&id=d8583596&\nvar sv_panelvue_type_template_id_d8583596_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-color-svpanel\",\n style: {\n backgroundColor: _vm.background\n }\n },\n [\n _c(\"div\", { staticClass: \"el-color-svpanel__white\" }),\n _c(\"div\", { staticClass: \"el-color-svpanel__black\" }),\n _c(\n \"div\",\n {\n staticClass: \"el-color-svpanel__cursor\",\n style: {\n top: _vm.cursorTop + \"px\",\n left: _vm.cursorLeft + \"px\"\n }\n },\n [_c(\"div\")]\n )\n ]\n )\n}\nvar sv_panelvue_type_template_id_d8583596_staticRenderFns = []\nsv_panelvue_type_template_id_d8583596_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue?vue&type=template&id=d8583596&\n\n// CONCATENATED MODULE: ./packages/color-picker/src/draggable.js\n\nvar isDragging = false;\n\n/* harmony default export */ var draggable = (function (element, options) {\n if (external_vue_default.a.prototype.$isServer) return;\n var moveFn = function moveFn(event) {\n if (options.drag) {\n options.drag(event);\n }\n };\n var upFn = function upFn(event) {\n document.removeEventListener('mousemove', moveFn);\n document.removeEventListener('mouseup', upFn);\n document.onselectstart = null;\n document.ondragstart = null;\n\n isDragging = false;\n\n if (options.end) {\n options.end(event);\n }\n };\n element.addEventListener('mousedown', function (event) {\n if (isDragging) return;\n document.onselectstart = function () {\n return false;\n };\n document.ondragstart = function () {\n return false;\n };\n\n document.addEventListener('mousemove', moveFn);\n document.addEventListener('mouseup', upFn);\n isDragging = true;\n\n if (options.start) {\n options.start(event);\n }\n });\n});\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/sv-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var sv_panelvue_type_script_lang_js_ = ({\n name: 'el-sl-panel',\n\n props: {\n color: {\n required: true\n }\n },\n\n computed: {\n colorValue: function colorValue() {\n var hue = this.color.get('hue');\n var value = this.color.get('value');\n return { hue: hue, value: value };\n }\n },\n\n watch: {\n colorValue: function colorValue() {\n this.update();\n }\n },\n\n methods: {\n update: function update() {\n var saturation = this.color.get('saturation');\n var value = this.color.get('value');\n\n var el = this.$el;\n var width = el.clientWidth,\n height = el.clientHeight;\n\n\n this.cursorLeft = saturation * width / 100;\n this.cursorTop = (100 - value) * height / 100;\n\n this.background = 'hsl(' + this.color.get('hue') + ', 100%, 50%)';\n },\n handleDrag: function handleDrag(event) {\n var el = this.$el;\n var rect = el.getBoundingClientRect();\n\n var left = event.clientX - rect.left;\n var top = event.clientY - rect.top;\n left = Math.max(0, left);\n left = Math.min(left, rect.width);\n\n top = Math.max(0, top);\n top = Math.min(top, rect.height);\n\n this.cursorLeft = left;\n this.cursorTop = top;\n this.color.set({\n saturation: left / rect.width * 100,\n value: 100 - top / rect.height * 100\n });\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n draggable(this.$el, {\n drag: function drag(event) {\n _this.handleDrag(event);\n },\n end: function end(event) {\n _this.handleDrag(event);\n }\n });\n\n this.update();\n },\n data: function data() {\n return {\n cursorTop: 0,\n cursorLeft: 0,\n background: 'hsl(0, 100%, 50%)'\n };\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_sv_panelvue_type_script_lang_js_ = (sv_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/sv-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar sv_panel_component = normalizeComponent(\n components_sv_panelvue_type_script_lang_js_,\n sv_panelvue_type_template_id_d8583596_render,\n sv_panelvue_type_template_id_d8583596_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var sv_panel_api; }\nsv_panel_component.options.__file = \"packages/color-picker/src/components/sv-panel.vue\"\n/* harmony default export */ var sv_panel = (sv_panel_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/hue-slider.vue?vue&type=template&id=5cdc43b1&\nvar hue_slidervue_type_template_id_5cdc43b1_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-color-hue-slider\",\n class: { \"is-vertical\": _vm.vertical }\n },\n [\n _c(\"div\", {\n ref: \"bar\",\n staticClass: \"el-color-hue-slider__bar\",\n on: { click: _vm.handleClick }\n }),\n _c(\"div\", {\n ref: \"thumb\",\n staticClass: \"el-color-hue-slider__thumb\",\n style: {\n left: _vm.thumbLeft + \"px\",\n top: _vm.thumbTop + \"px\"\n }\n })\n ]\n )\n}\nvar hue_slidervue_type_template_id_5cdc43b1_staticRenderFns = []\nhue_slidervue_type_template_id_5cdc43b1_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue?vue&type=template&id=5cdc43b1&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/hue-slider.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var hue_slidervue_type_script_lang_js_ = ({\n name: 'el-color-hue-slider',\n\n props: {\n color: {\n required: true\n },\n\n vertical: Boolean\n },\n\n data: function data() {\n return {\n thumbLeft: 0,\n thumbTop: 0\n };\n },\n\n\n computed: {\n hueValue: function hueValue() {\n var hue = this.color.get('hue');\n return hue;\n }\n },\n\n watch: {\n hueValue: function hueValue() {\n this.update();\n }\n },\n\n methods: {\n handleClick: function handleClick(event) {\n var thumb = this.$refs.thumb;\n var target = event.target;\n\n if (target !== thumb) {\n this.handleDrag(event);\n }\n },\n handleDrag: function handleDrag(event) {\n var rect = this.$el.getBoundingClientRect();\n var thumb = this.$refs.thumb;\n\n var hue = void 0;\n\n if (!this.vertical) {\n var left = event.clientX - rect.left;\n left = Math.min(left, rect.width - thumb.offsetWidth / 2);\n left = Math.max(thumb.offsetWidth / 2, left);\n\n hue = Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 360);\n } else {\n var top = event.clientY - rect.top;\n top = Math.min(top, rect.height - thumb.offsetHeight / 2);\n top = Math.max(thumb.offsetHeight / 2, top);\n\n hue = Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 360);\n }\n\n this.color.set('hue', hue);\n },\n getThumbLeft: function getThumbLeft() {\n if (this.vertical) return 0;\n var el = this.$el;\n var hue = this.color.get('hue');\n\n if (!el) return 0;\n var thumb = this.$refs.thumb;\n return Math.round(hue * (el.offsetWidth - thumb.offsetWidth / 2) / 360);\n },\n getThumbTop: function getThumbTop() {\n if (!this.vertical) return 0;\n var el = this.$el;\n var hue = this.color.get('hue');\n\n if (!el) return 0;\n var thumb = this.$refs.thumb;\n return Math.round(hue * (el.offsetHeight - thumb.offsetHeight / 2) / 360);\n },\n update: function update() {\n this.thumbLeft = this.getThumbLeft();\n this.thumbTop = this.getThumbTop();\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var _$refs = this.$refs,\n bar = _$refs.bar,\n thumb = _$refs.thumb;\n\n\n var dragConfig = {\n drag: function drag(event) {\n _this.handleDrag(event);\n },\n end: function end(event) {\n _this.handleDrag(event);\n }\n };\n\n draggable(bar, dragConfig);\n draggable(thumb, dragConfig);\n this.update();\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_hue_slidervue_type_script_lang_js_ = (hue_slidervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/hue-slider.vue\n\n\n\n\n\n/* normalize component */\n\nvar hue_slider_component = normalizeComponent(\n components_hue_slidervue_type_script_lang_js_,\n hue_slidervue_type_template_id_5cdc43b1_render,\n hue_slidervue_type_template_id_5cdc43b1_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var hue_slider_api; }\nhue_slider_component.options.__file = \"packages/color-picker/src/components/hue-slider.vue\"\n/* harmony default export */ var hue_slider = (hue_slider_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/alpha-slider.vue?vue&type=template&id=068c66cb&\nvar alpha_slidervue_type_template_id_068c66cb_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-color-alpha-slider\",\n class: { \"is-vertical\": _vm.vertical }\n },\n [\n _c(\"div\", {\n ref: \"bar\",\n staticClass: \"el-color-alpha-slider__bar\",\n style: {\n background: _vm.background\n },\n on: { click: _vm.handleClick }\n }),\n _c(\"div\", {\n ref: \"thumb\",\n staticClass: \"el-color-alpha-slider__thumb\",\n style: {\n left: _vm.thumbLeft + \"px\",\n top: _vm.thumbTop + \"px\"\n }\n })\n ]\n )\n}\nvar alpha_slidervue_type_template_id_068c66cb_staticRenderFns = []\nalpha_slidervue_type_template_id_068c66cb_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue?vue&type=template&id=068c66cb&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/alpha-slider.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var alpha_slidervue_type_script_lang_js_ = ({\n name: 'el-color-alpha-slider',\n\n props: {\n color: {\n required: true\n },\n vertical: Boolean\n },\n\n watch: {\n 'color._alpha': function color_alpha() {\n this.update();\n },\n 'color.value': function colorValue() {\n this.update();\n }\n },\n\n methods: {\n handleClick: function handleClick(event) {\n var thumb = this.$refs.thumb;\n var target = event.target;\n\n if (target !== thumb) {\n this.handleDrag(event);\n }\n },\n handleDrag: function handleDrag(event) {\n var rect = this.$el.getBoundingClientRect();\n var thumb = this.$refs.thumb;\n\n\n if (!this.vertical) {\n var left = event.clientX - rect.left;\n left = Math.max(thumb.offsetWidth / 2, left);\n left = Math.min(left, rect.width - thumb.offsetWidth / 2);\n\n this.color.set('alpha', Math.round((left - thumb.offsetWidth / 2) / (rect.width - thumb.offsetWidth) * 100));\n } else {\n var top = event.clientY - rect.top;\n top = Math.max(thumb.offsetHeight / 2, top);\n top = Math.min(top, rect.height - thumb.offsetHeight / 2);\n\n this.color.set('alpha', Math.round((top - thumb.offsetHeight / 2) / (rect.height - thumb.offsetHeight) * 100));\n }\n },\n getThumbLeft: function getThumbLeft() {\n if (this.vertical) return 0;\n var el = this.$el;\n var alpha = this.color._alpha;\n\n if (!el) return 0;\n var thumb = this.$refs.thumb;\n return Math.round(alpha * (el.offsetWidth - thumb.offsetWidth / 2) / 100);\n },\n getThumbTop: function getThumbTop() {\n if (!this.vertical) return 0;\n var el = this.$el;\n var alpha = this.color._alpha;\n\n if (!el) return 0;\n var thumb = this.$refs.thumb;\n return Math.round(alpha * (el.offsetHeight - thumb.offsetHeight / 2) / 100);\n },\n getBackground: function getBackground() {\n if (this.color && this.color.value) {\n var _color$toRgb = this.color.toRgb(),\n r = _color$toRgb.r,\n g = _color$toRgb.g,\n b = _color$toRgb.b;\n\n return 'linear-gradient(to right, rgba(' + r + ', ' + g + ', ' + b + ', 0) 0%, rgba(' + r + ', ' + g + ', ' + b + ', 1) 100%)';\n }\n return null;\n },\n update: function update() {\n this.thumbLeft = this.getThumbLeft();\n this.thumbTop = this.getThumbTop();\n this.background = this.getBackground();\n }\n },\n\n data: function data() {\n return {\n thumbLeft: 0,\n thumbTop: 0,\n background: null\n };\n },\n mounted: function mounted() {\n var _this = this;\n\n var _$refs = this.$refs,\n bar = _$refs.bar,\n thumb = _$refs.thumb;\n\n\n var dragConfig = {\n drag: function drag(event) {\n _this.handleDrag(event);\n },\n end: function end(event) {\n _this.handleDrag(event);\n }\n };\n\n draggable(bar, dragConfig);\n draggable(thumb, dragConfig);\n this.update();\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_alpha_slidervue_type_script_lang_js_ = (alpha_slidervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/alpha-slider.vue\n\n\n\n\n\n/* normalize component */\n\nvar alpha_slider_component = normalizeComponent(\n components_alpha_slidervue_type_script_lang_js_,\n alpha_slidervue_type_template_id_068c66cb_render,\n alpha_slidervue_type_template_id_068c66cb_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var alpha_slider_api; }\nalpha_slider_component.options.__file = \"packages/color-picker/src/components/alpha-slider.vue\"\n/* harmony default export */ var alpha_slider = (alpha_slider_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/predefine.vue?vue&type=template&id=06e03093&\nvar predefinevue_type_template_id_06e03093_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-color-predefine\" }, [\n _c(\n \"div\",\n { staticClass: \"el-color-predefine__colors\" },\n _vm._l(_vm.rgbaColors, function(item, index) {\n return _c(\n \"div\",\n {\n key: _vm.colors[index],\n staticClass: \"el-color-predefine__color-selector\",\n class: { selected: item.selected, \"is-alpha\": item._alpha < 100 },\n on: {\n click: function($event) {\n _vm.handleSelect(index)\n }\n }\n },\n [_c(\"div\", { style: { \"background-color\": item.value } })]\n )\n }),\n 0\n )\n ])\n}\nvar predefinevue_type_template_id_06e03093_staticRenderFns = []\npredefinevue_type_template_id_06e03093_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue?vue&type=template&id=06e03093&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/predefine.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var predefinevue_type_script_lang_js_ = ({\n props: {\n colors: { type: Array, required: true },\n color: { required: true }\n },\n data: function data() {\n return {\n rgbaColors: this.parseColors(this.colors, this.color)\n };\n },\n\n methods: {\n handleSelect: function handleSelect(index) {\n this.color.fromString(this.colors[index]);\n },\n parseColors: function parseColors(colors, color) {\n return colors.map(function (value) {\n var c = new src_color();\n c.enableAlpha = true;\n c.format = 'rgba';\n c.fromString(value);\n c.selected = c.value === color.value;\n return c;\n });\n }\n },\n watch: {\n '$parent.currentColor': function $parentCurrentColor(val) {\n var color = new src_color();\n color.fromString(val);\n\n this.rgbaColors.forEach(function (item) {\n item.selected = color.compare(item);\n });\n },\n colors: function colors(newVal) {\n this.rgbaColors = this.parseColors(newVal, this.color);\n },\n color: function color(newVal) {\n this.rgbaColors = this.parseColors(this.colors, newVal);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_predefinevue_type_script_lang_js_ = (predefinevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/predefine.vue\n\n\n\n\n\n/* normalize component */\n\nvar predefine_component = normalizeComponent(\n components_predefinevue_type_script_lang_js_,\n predefinevue_type_template_id_06e03093_render,\n predefinevue_type_template_id_06e03093_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var predefine_api; }\npredefine_component.options.__file = \"packages/color-picker/src/components/predefine.vue\"\n/* harmony default export */ var predefine = (predefine_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/components/picker-dropdown.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var picker_dropdownvue_type_script_lang_js_ = ({\n name: 'el-color-picker-dropdown',\n\n mixins: [vue_popper_default.a, locale_default.a],\n\n components: {\n SvPanel: sv_panel,\n HueSlider: hue_slider,\n AlphaSlider: alpha_slider,\n ElInput: input_default.a,\n ElButton: button_default.a,\n Predefine: predefine\n },\n\n props: {\n color: {\n required: true\n },\n showAlpha: Boolean,\n predefine: Array\n },\n\n data: function data() {\n return {\n customInput: ''\n };\n },\n\n\n computed: {\n currentColor: function currentColor() {\n var parent = this.$parent;\n return !parent.value && !parent.showPanelColor ? '' : parent.color.value;\n }\n },\n\n methods: {\n confirmValue: function confirmValue() {\n this.$emit('pick');\n },\n handleConfirm: function handleConfirm() {\n this.color.fromString(this.customInput);\n }\n },\n\n mounted: function mounted() {\n this.$parent.popperElm = this.popperElm = this.$el;\n this.referenceElm = this.$parent.$el;\n },\n\n\n watch: {\n showPopper: function showPopper(val) {\n var _this = this;\n\n if (val === true) {\n this.$nextTick(function () {\n var _$refs = _this.$refs,\n sl = _$refs.sl,\n hue = _$refs.hue,\n alpha = _$refs.alpha;\n\n sl && sl.update();\n hue && hue.update();\n alpha && alpha.update();\n });\n }\n },\n\n\n currentColor: {\n immediate: true,\n handler: function handler(val) {\n this.customInput = val;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var components_picker_dropdownvue_type_script_lang_js_ = (picker_dropdownvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/components/picker-dropdown.vue\n\n\n\n\n\n/* normalize component */\n\nvar picker_dropdown_component = normalizeComponent(\n components_picker_dropdownvue_type_script_lang_js_,\n picker_dropdownvue_type_template_id_06601625_render,\n picker_dropdownvue_type_template_id_06601625_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var picker_dropdown_api; }\npicker_dropdown_component.options.__file = \"packages/color-picker/src/components/picker-dropdown.vue\"\n/* harmony default export */ var picker_dropdown = (picker_dropdown_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/color-picker/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var color_picker_src_mainvue_type_script_lang_js_ = ({\n name: 'ElColorPicker',\n\n mixins: [emitter_default.a],\n\n props: {\n value: String,\n showAlpha: Boolean,\n colorFormat: String,\n disabled: Boolean,\n size: String,\n popperClass: String,\n predefine: Array\n },\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n computed: {\n displayedColor: function displayedColor() {\n if (!this.value && !this.showPanelColor) {\n return 'transparent';\n }\n\n return this.displayedRgb(this.color, this.showAlpha);\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n colorSize: function colorSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n colorDisabled: function colorDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n }\n },\n\n watch: {\n value: function value(val) {\n if (!val) {\n this.showPanelColor = false;\n } else if (val && val !== this.color.value) {\n this.color.fromString(val);\n }\n },\n\n color: {\n deep: true,\n handler: function handler() {\n this.showPanelColor = true;\n }\n },\n displayedColor: function displayedColor(val) {\n if (!this.showPicker) return;\n var currentValueColor = new src_color({\n enableAlpha: this.showAlpha,\n format: this.colorFormat\n });\n currentValueColor.fromString(this.value);\n\n var currentValueColorRgb = this.displayedRgb(currentValueColor, this.showAlpha);\n if (val !== currentValueColorRgb) {\n this.$emit('active-change', val);\n }\n }\n },\n\n methods: {\n handleTrigger: function handleTrigger() {\n if (this.colorDisabled) return;\n this.showPicker = !this.showPicker;\n },\n confirmValue: function confirmValue() {\n var value = this.color.value;\n this.$emit('input', value);\n this.$emit('change', value);\n this.dispatch('ElFormItem', 'el.form.change', value);\n this.showPicker = false;\n },\n clearValue: function clearValue() {\n this.$emit('input', null);\n this.$emit('change', null);\n if (this.value !== null) {\n this.dispatch('ElFormItem', 'el.form.change', null);\n }\n this.showPanelColor = false;\n this.showPicker = false;\n this.resetColor();\n },\n hide: function hide() {\n this.showPicker = false;\n this.resetColor();\n },\n resetColor: function resetColor() {\n var _this = this;\n\n this.$nextTick(function (_) {\n if (_this.value) {\n _this.color.fromString(_this.value);\n } else {\n _this.showPanelColor = false;\n }\n });\n },\n displayedRgb: function displayedRgb(color, showAlpha) {\n if (!(color instanceof src_color)) {\n throw Error('color should be instance of Color Class');\n }\n\n var _color$toRgb = color.toRgb(),\n r = _color$toRgb.r,\n g = _color$toRgb.g,\n b = _color$toRgb.b;\n\n return showAlpha ? 'rgba(' + r + ', ' + g + ', ' + b + ', ' + color.get('alpha') / 100 + ')' : 'rgb(' + r + ', ' + g + ', ' + b + ')';\n }\n },\n\n mounted: function mounted() {\n var value = this.value;\n if (value) {\n this.color.fromString(value);\n }\n this.popperElm = this.$refs.dropdown.$el;\n },\n data: function data() {\n var color = new src_color({\n enableAlpha: this.showAlpha,\n format: this.colorFormat\n });\n\n return {\n color: color,\n showPicker: false,\n showPanelColor: false\n };\n },\n\n\n components: {\n PickerDropdown: picker_dropdown\n }\n});\n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_color_picker_src_mainvue_type_script_lang_js_ = (color_picker_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/color-picker/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar color_picker_src_main_component = normalizeComponent(\n packages_color_picker_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_55c8ade7_render,\n mainvue_type_template_id_55c8ade7_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var color_picker_src_main_api; }\ncolor_picker_src_main_component.options.__file = \"packages/color-picker/src/main.vue\"\n/* harmony default export */ var color_picker_src_main = (color_picker_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/color-picker/index.js\n\n\n/* istanbul ignore next */\ncolor_picker_src_main.install = function (Vue) {\n Vue.component(color_picker_src_main.name, color_picker_src_main);\n};\n\n/* harmony default export */ var color_picker = (color_picker_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/main.vue?vue&type=template&id=5c654dd8&\nvar mainvue_type_template_id_5c654dd8_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"el-transfer\" },\n [\n _c(\n \"transfer-panel\",\n _vm._b(\n {\n ref: \"leftPanel\",\n attrs: {\n data: _vm.sourceData,\n title: _vm.titles[0] || _vm.t(\"el.transfer.titles.0\"),\n \"default-checked\": _vm.leftDefaultChecked,\n placeholder:\n _vm.filterPlaceholder || _vm.t(\"el.transfer.filterPlaceholder\")\n },\n on: { \"checked-change\": _vm.onSourceCheckedChange }\n },\n \"transfer-panel\",\n _vm.$props,\n false\n ),\n [_vm._t(\"left-footer\")],\n 2\n ),\n _c(\n \"div\",\n { staticClass: \"el-transfer__buttons\" },\n [\n _c(\n \"el-button\",\n {\n class: [\n \"el-transfer__button\",\n _vm.hasButtonTexts ? \"is-with-texts\" : \"\"\n ],\n attrs: {\n type: \"primary\",\n disabled: _vm.rightChecked.length === 0\n },\n nativeOn: {\n click: function($event) {\n return _vm.addToLeft($event)\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"el-icon-arrow-left\" }),\n _vm.buttonTexts[0] !== undefined\n ? _c(\"span\", [_vm._v(_vm._s(_vm.buttonTexts[0]))])\n : _vm._e()\n ]\n ),\n _c(\n \"el-button\",\n {\n class: [\n \"el-transfer__button\",\n _vm.hasButtonTexts ? \"is-with-texts\" : \"\"\n ],\n attrs: {\n type: \"primary\",\n disabled: _vm.leftChecked.length === 0\n },\n nativeOn: {\n click: function($event) {\n return _vm.addToRight($event)\n }\n }\n },\n [\n _vm.buttonTexts[1] !== undefined\n ? _c(\"span\", [_vm._v(_vm._s(_vm.buttonTexts[1]))])\n : _vm._e(),\n _c(\"i\", { staticClass: \"el-icon-arrow-right\" })\n ]\n )\n ],\n 1\n ),\n _c(\n \"transfer-panel\",\n _vm._b(\n {\n ref: \"rightPanel\",\n attrs: {\n data: _vm.targetData,\n title: _vm.titles[1] || _vm.t(\"el.transfer.titles.1\"),\n \"default-checked\": _vm.rightDefaultChecked,\n placeholder:\n _vm.filterPlaceholder || _vm.t(\"el.transfer.filterPlaceholder\")\n },\n on: { \"checked-change\": _vm.onTargetCheckedChange }\n },\n \"transfer-panel\",\n _vm.$props,\n false\n ),\n [_vm._t(\"right-footer\")],\n 2\n )\n ],\n 1\n )\n}\nvar mainvue_type_template_id_5c654dd8_staticRenderFns = []\nmainvue_type_template_id_5c654dd8_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/transfer/src/main.vue?vue&type=template&id=5c654dd8&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/transfer-panel.vue?vue&type=template&id=2ddab8bd&\nvar transfer_panelvue_type_template_id_2ddab8bd_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-transfer-panel\" }, [\n _c(\n \"p\",\n { staticClass: \"el-transfer-panel__header\" },\n [\n _c(\n \"el-checkbox\",\n {\n attrs: { indeterminate: _vm.isIndeterminate },\n on: { change: _vm.handleAllCheckedChange },\n model: {\n value: _vm.allChecked,\n callback: function($$v) {\n _vm.allChecked = $$v\n },\n expression: \"allChecked\"\n }\n },\n [\n _vm._v(\"\\n \" + _vm._s(_vm.title) + \"\\n \"),\n _c(\"span\", [_vm._v(_vm._s(_vm.checkedSummary))])\n ]\n )\n ],\n 1\n ),\n _c(\n \"div\",\n {\n class: [\n \"el-transfer-panel__body\",\n _vm.hasFooter ? \"is-with-footer\" : \"\"\n ]\n },\n [\n _vm.filterable\n ? _c(\n \"el-input\",\n {\n staticClass: \"el-transfer-panel__filter\",\n attrs: { size: \"small\", placeholder: _vm.placeholder },\n nativeOn: {\n mouseenter: function($event) {\n _vm.inputHover = true\n },\n mouseleave: function($event) {\n _vm.inputHover = false\n }\n },\n model: {\n value: _vm.query,\n callback: function($$v) {\n _vm.query = $$v\n },\n expression: \"query\"\n }\n },\n [\n _c(\"i\", {\n class: [\"el-input__icon\", \"el-icon-\" + _vm.inputIcon],\n attrs: { slot: \"prefix\" },\n on: { click: _vm.clearQuery },\n slot: \"prefix\"\n })\n ]\n )\n : _vm._e(),\n _c(\n \"el-checkbox-group\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.hasNoMatch && _vm.data.length > 0,\n expression: \"!hasNoMatch && data.length > 0\"\n }\n ],\n staticClass: \"el-transfer-panel__list\",\n class: { \"is-filterable\": _vm.filterable },\n model: {\n value: _vm.checked,\n callback: function($$v) {\n _vm.checked = $$v\n },\n expression: \"checked\"\n }\n },\n _vm._l(_vm.filteredData, function(item) {\n return _c(\n \"el-checkbox\",\n {\n key: item[_vm.keyProp],\n staticClass: \"el-transfer-panel__item\",\n attrs: {\n label: item[_vm.keyProp],\n disabled: item[_vm.disabledProp]\n }\n },\n [_c(\"option-content\", { attrs: { option: item } })],\n 1\n )\n }),\n 1\n ),\n _c(\n \"p\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.hasNoMatch,\n expression: \"hasNoMatch\"\n }\n ],\n staticClass: \"el-transfer-panel__empty\"\n },\n [_vm._v(_vm._s(_vm.t(\"el.transfer.noMatch\")))]\n ),\n _c(\n \"p\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.data.length === 0 && !_vm.hasNoMatch,\n expression: \"data.length === 0 && !hasNoMatch\"\n }\n ],\n staticClass: \"el-transfer-panel__empty\"\n },\n [_vm._v(_vm._s(_vm.t(\"el.transfer.noData\")))]\n )\n ],\n 1\n ),\n _vm.hasFooter\n ? _c(\n \"p\",\n { staticClass: \"el-transfer-panel__footer\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n ])\n}\nvar transfer_panelvue_type_template_id_2ddab8bd_staticRenderFns = []\ntransfer_panelvue_type_template_id_2ddab8bd_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue?vue&type=template&id=2ddab8bd&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/transfer-panel.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var transfer_panelvue_type_script_lang_js_ = ({\n mixins: [locale_default.a],\n\n name: 'ElTransferPanel',\n\n componentName: 'ElTransferPanel',\n\n components: {\n ElCheckboxGroup: checkbox_group_default.a,\n ElCheckbox: checkbox_default.a,\n ElInput: input_default.a,\n OptionContent: {\n props: {\n option: Object\n },\n render: function render(h) {\n var getParent = function getParent(vm) {\n if (vm.$options.componentName === 'ElTransferPanel') {\n return vm;\n } else if (vm.$parent) {\n return getParent(vm.$parent);\n } else {\n return vm;\n }\n };\n var panel = getParent(this);\n var transfer = panel.$parent || panel;\n return panel.renderContent ? panel.renderContent(h, this.option) : transfer.$scopedSlots.default ? transfer.$scopedSlots.default({ option: this.option }) : h('span', [this.option[panel.labelProp] || this.option[panel.keyProp]]);\n }\n }\n },\n\n props: {\n data: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n renderContent: Function,\n placeholder: String,\n title: String,\n filterable: Boolean,\n format: Object,\n filterMethod: Function,\n defaultChecked: Array,\n props: Object\n },\n\n data: function data() {\n return {\n checked: [],\n allChecked: false,\n query: '',\n inputHover: false,\n checkChangeByUser: true\n };\n },\n\n\n watch: {\n checked: function checked(val, oldVal) {\n this.updateAllChecked();\n if (this.checkChangeByUser) {\n var movedKeys = val.concat(oldVal).filter(function (v) {\n return val.indexOf(v) === -1 || oldVal.indexOf(v) === -1;\n });\n this.$emit('checked-change', val, movedKeys);\n } else {\n this.$emit('checked-change', val);\n this.checkChangeByUser = true;\n }\n },\n data: function data() {\n var _this = this;\n\n var checked = [];\n var filteredDataKeys = this.filteredData.map(function (item) {\n return item[_this.keyProp];\n });\n this.checked.forEach(function (item) {\n if (filteredDataKeys.indexOf(item) > -1) {\n checked.push(item);\n }\n });\n this.checkChangeByUser = false;\n this.checked = checked;\n },\n checkableData: function checkableData() {\n this.updateAllChecked();\n },\n\n\n defaultChecked: {\n immediate: true,\n handler: function handler(val, oldVal) {\n var _this2 = this;\n\n if (oldVal && val.length === oldVal.length && val.every(function (item) {\n return oldVal.indexOf(item) > -1;\n })) return;\n var checked = [];\n var checkableDataKeys = this.checkableData.map(function (item) {\n return item[_this2.keyProp];\n });\n val.forEach(function (item) {\n if (checkableDataKeys.indexOf(item) > -1) {\n checked.push(item);\n }\n });\n this.checkChangeByUser = false;\n this.checked = checked;\n }\n }\n },\n\n computed: {\n filteredData: function filteredData() {\n var _this3 = this;\n\n return this.data.filter(function (item) {\n if (typeof _this3.filterMethod === 'function') {\n return _this3.filterMethod(_this3.query, item);\n } else {\n var label = item[_this3.labelProp] || item[_this3.keyProp].toString();\n return label.toLowerCase().indexOf(_this3.query.toLowerCase()) > -1;\n }\n });\n },\n checkableData: function checkableData() {\n var _this4 = this;\n\n return this.filteredData.filter(function (item) {\n return !item[_this4.disabledProp];\n });\n },\n checkedSummary: function checkedSummary() {\n var checkedLength = this.checked.length;\n var dataLength = this.data.length;\n var _format = this.format,\n noChecked = _format.noChecked,\n hasChecked = _format.hasChecked;\n\n if (noChecked && hasChecked) {\n return checkedLength > 0 ? hasChecked.replace(/\\${checked}/g, checkedLength).replace(/\\${total}/g, dataLength) : noChecked.replace(/\\${total}/g, dataLength);\n } else {\n return checkedLength + '/' + dataLength;\n }\n },\n isIndeterminate: function isIndeterminate() {\n var checkedLength = this.checked.length;\n return checkedLength > 0 && checkedLength < this.checkableData.length;\n },\n hasNoMatch: function hasNoMatch() {\n return this.query.length > 0 && this.filteredData.length === 0;\n },\n inputIcon: function inputIcon() {\n return this.query.length > 0 && this.inputHover ? 'circle-close' : 'search';\n },\n labelProp: function labelProp() {\n return this.props.label || 'label';\n },\n keyProp: function keyProp() {\n return this.props.key || 'key';\n },\n disabledProp: function disabledProp() {\n return this.props.disabled || 'disabled';\n },\n hasFooter: function hasFooter() {\n return !!this.$slots.default;\n }\n },\n\n methods: {\n updateAllChecked: function updateAllChecked() {\n var _this5 = this;\n\n var checkableDataKeys = this.checkableData.map(function (item) {\n return item[_this5.keyProp];\n });\n this.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every(function (item) {\n return _this5.checked.indexOf(item) > -1;\n });\n },\n handleAllCheckedChange: function handleAllCheckedChange(value) {\n var _this6 = this;\n\n this.checked = value ? this.checkableData.map(function (item) {\n return item[_this6.keyProp];\n }) : [];\n },\n clearQuery: function clearQuery() {\n if (this.inputIcon === 'circle-close') {\n this.query = '';\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_transfer_panelvue_type_script_lang_js_ = (transfer_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/transfer/src/transfer-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar transfer_panel_component = normalizeComponent(\n src_transfer_panelvue_type_script_lang_js_,\n transfer_panelvue_type_template_id_2ddab8bd_render,\n transfer_panelvue_type_template_id_2ddab8bd_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var transfer_panel_api; }\ntransfer_panel_component.options.__file = \"packages/transfer/src/transfer-panel.vue\"\n/* harmony default export */ var transfer_panel = (transfer_panel_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/transfer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n/* harmony default export */ var transfer_src_mainvue_type_script_lang_js_ = ({\n name: 'ElTransfer',\n\n mixins: [emitter_default.a, locale_default.a, migrating_default.a],\n\n components: {\n TransferPanel: transfer_panel,\n ElButton: button_default.a\n },\n\n props: {\n data: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n titles: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n buttonTexts: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n filterPlaceholder: {\n type: String,\n default: ''\n },\n filterMethod: Function,\n leftDefaultChecked: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n rightDefaultChecked: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n renderContent: Function,\n value: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n format: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n filterable: Boolean,\n props: {\n type: Object,\n default: function _default() {\n return {\n label: 'label',\n key: 'key',\n disabled: 'disabled'\n };\n }\n },\n targetOrder: {\n type: String,\n default: 'original'\n }\n },\n\n data: function data() {\n return {\n leftChecked: [],\n rightChecked: []\n };\n },\n\n\n computed: {\n dataObj: function dataObj() {\n var key = this.props.key;\n return this.data.reduce(function (o, cur) {\n return (o[cur[key]] = cur) && o;\n }, {});\n },\n sourceData: function sourceData() {\n var _this = this;\n\n return this.data.filter(function (item) {\n return _this.value.indexOf(item[_this.props.key]) === -1;\n });\n },\n targetData: function targetData() {\n var _this2 = this;\n\n if (this.targetOrder === 'original') {\n return this.data.filter(function (item) {\n return _this2.value.indexOf(item[_this2.props.key]) > -1;\n });\n } else {\n return this.value.reduce(function (arr, cur) {\n var val = _this2.dataObj[cur];\n if (val) {\n arr.push(val);\n }\n return arr;\n }, []);\n }\n },\n hasButtonTexts: function hasButtonTexts() {\n return this.buttonTexts.length === 2;\n }\n },\n\n watch: {\n value: function value(val) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'footer-format': 'footer-format is renamed to format.'\n }\n };\n },\n onSourceCheckedChange: function onSourceCheckedChange(val, movedKeys) {\n this.leftChecked = val;\n if (movedKeys === undefined) return;\n this.$emit('left-check-change', val, movedKeys);\n },\n onTargetCheckedChange: function onTargetCheckedChange(val, movedKeys) {\n this.rightChecked = val;\n if (movedKeys === undefined) return;\n this.$emit('right-check-change', val, movedKeys);\n },\n addToLeft: function addToLeft() {\n var currentValue = this.value.slice();\n this.rightChecked.forEach(function (item) {\n var index = currentValue.indexOf(item);\n if (index > -1) {\n currentValue.splice(index, 1);\n }\n });\n this.$emit('input', currentValue);\n this.$emit('change', currentValue, 'left', this.rightChecked);\n },\n addToRight: function addToRight() {\n var _this3 = this;\n\n var currentValue = this.value.slice();\n var itemsToBeMoved = [];\n var key = this.props.key;\n this.data.forEach(function (item) {\n var itemKey = item[key];\n if (_this3.leftChecked.indexOf(itemKey) > -1 && _this3.value.indexOf(itemKey) === -1) {\n itemsToBeMoved.push(itemKey);\n }\n });\n currentValue = this.targetOrder === 'unshift' ? itemsToBeMoved.concat(currentValue) : currentValue.concat(itemsToBeMoved);\n this.$emit('input', currentValue);\n this.$emit('change', currentValue, 'right', this.leftChecked);\n },\n clearQuery: function clearQuery(which) {\n if (which === 'left') {\n this.$refs.leftPanel.query = '';\n } else if (which === 'right') {\n this.$refs.rightPanel.query = '';\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/transfer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_transfer_src_mainvue_type_script_lang_js_ = (transfer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/transfer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar transfer_src_main_component = normalizeComponent(\n packages_transfer_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_5c654dd8_render,\n mainvue_type_template_id_5c654dd8_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var transfer_src_main_api; }\ntransfer_src_main_component.options.__file = \"packages/transfer/src/main.vue\"\n/* harmony default export */ var transfer_src_main = (transfer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/transfer/index.js\n\n\n/* istanbul ignore next */\ntransfer_src_main.install = function (Vue) {\n Vue.component(transfer_src_main.name, transfer_src_main);\n};\n\n/* harmony default export */ var transfer = (transfer_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/container/src/main.vue?vue&type=template&id=5bf181d4&\nvar mainvue_type_template_id_5bf181d4_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"section\",\n { staticClass: \"el-container\", class: { \"is-vertical\": _vm.isVertical } },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar mainvue_type_template_id_5bf181d4_staticRenderFns = []\nmainvue_type_template_id_5bf181d4_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/container/src/main.vue?vue&type=template&id=5bf181d4&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/container/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var container_src_mainvue_type_script_lang_js_ = ({\n name: 'ElContainer',\n\n componentName: 'ElContainer',\n\n props: {\n direction: String\n },\n\n computed: {\n isVertical: function isVertical() {\n if (this.direction === 'vertical') {\n return true;\n } else if (this.direction === 'horizontal') {\n return false;\n }\n return this.$slots && this.$slots.default ? this.$slots.default.some(function (vnode) {\n var tag = vnode.componentOptions && vnode.componentOptions.tag;\n return tag === 'el-header' || tag === 'el-footer';\n }) : false;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/container/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_container_src_mainvue_type_script_lang_js_ = (container_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/container/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar container_src_main_component = normalizeComponent(\n packages_container_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_5bf181d4_render,\n mainvue_type_template_id_5bf181d4_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var container_src_main_api; }\ncontainer_src_main_component.options.__file = \"packages/container/src/main.vue\"\n/* harmony default export */ var container_src_main = (container_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/container/index.js\n\n\n/* istanbul ignore next */\ncontainer_src_main.install = function (Vue) {\n Vue.component(container_src_main.name, container_src_main);\n};\n\n/* harmony default export */ var packages_container = (container_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/header/src/main.vue?vue&type=template&id=2b296ab2&\nvar mainvue_type_template_id_2b296ab2_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"header\",\n { staticClass: \"el-header\", style: { height: _vm.height } },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar mainvue_type_template_id_2b296ab2_staticRenderFns = []\nmainvue_type_template_id_2b296ab2_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/header/src/main.vue?vue&type=template&id=2b296ab2&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/header/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var header_src_mainvue_type_script_lang_js_ = ({\n name: 'ElHeader',\n\n componentName: 'ElHeader',\n\n props: {\n height: {\n type: String,\n default: '60px'\n }\n }\n});\n// CONCATENATED MODULE: ./packages/header/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_header_src_mainvue_type_script_lang_js_ = (header_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/header/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar header_src_main_component = normalizeComponent(\n packages_header_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_2b296ab2_render,\n mainvue_type_template_id_2b296ab2_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var header_src_main_api; }\nheader_src_main_component.options.__file = \"packages/header/src/main.vue\"\n/* harmony default export */ var header_src_main = (header_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/header/index.js\n\n\n/* istanbul ignore next */\nheader_src_main.install = function (Vue) {\n Vue.component(header_src_main.name, header_src_main);\n};\n\n/* harmony default export */ var header = (header_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/aside/src/main.vue?vue&type=template&id=03411dbf&\nvar mainvue_type_template_id_03411dbf_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"aside\",\n { staticClass: \"el-aside\", style: { width: _vm.width } },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar mainvue_type_template_id_03411dbf_staticRenderFns = []\nmainvue_type_template_id_03411dbf_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/aside/src/main.vue?vue&type=template&id=03411dbf&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/aside/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var aside_src_mainvue_type_script_lang_js_ = ({\n name: 'ElAside',\n\n componentName: 'ElAside',\n\n props: {\n width: {\n type: String,\n default: '300px'\n }\n }\n});\n// CONCATENATED MODULE: ./packages/aside/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_aside_src_mainvue_type_script_lang_js_ = (aside_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/aside/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar aside_src_main_component = normalizeComponent(\n packages_aside_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_03411dbf_render,\n mainvue_type_template_id_03411dbf_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var aside_src_main_api; }\naside_src_main_component.options.__file = \"packages/aside/src/main.vue\"\n/* harmony default export */ var aside_src_main = (aside_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/aside/index.js\n\n\n/* istanbul ignore next */\naside_src_main.install = function (Vue) {\n Vue.component(aside_src_main.name, aside_src_main);\n};\n\n/* harmony default export */ var aside = (aside_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/main/src/main.vue?vue&type=template&id=2a3a7406&\nvar mainvue_type_template_id_2a3a7406_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"main\", { staticClass: \"el-main\" }, [_vm._t(\"default\")], 2)\n}\nvar mainvue_type_template_id_2a3a7406_staticRenderFns = []\nmainvue_type_template_id_2a3a7406_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/main/src/main.vue?vue&type=template&id=2a3a7406&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/main/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var main_src_mainvue_type_script_lang_js_ = ({\n name: 'ElMain',\n componentName: 'ElMain'\n});\n// CONCATENATED MODULE: ./packages/main/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_main_src_mainvue_type_script_lang_js_ = (main_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/main/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar main_src_main_component = normalizeComponent(\n packages_main_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_2a3a7406_render,\n mainvue_type_template_id_2a3a7406_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var main_src_main_api; }\nmain_src_main_component.options.__file = \"packages/main/src/main.vue\"\n/* harmony default export */ var main_src_main = (main_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/main/index.js\n\n\n/* istanbul ignore next */\nmain_src_main.install = function (Vue) {\n Vue.component(main_src_main.name, main_src_main);\n};\n\n/* harmony default export */ var packages_main = (main_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/footer/src/main.vue?vue&type=template&id=80210338&\nvar mainvue_type_template_id_80210338_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"footer\",\n { staticClass: \"el-footer\", style: { height: _vm.height } },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar mainvue_type_template_id_80210338_staticRenderFns = []\nmainvue_type_template_id_80210338_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/footer/src/main.vue?vue&type=template&id=80210338&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/footer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var footer_src_mainvue_type_script_lang_js_ = ({\n name: 'ElFooter',\n\n componentName: 'ElFooter',\n\n props: {\n height: {\n type: String,\n default: '60px'\n }\n }\n});\n// CONCATENATED MODULE: ./packages/footer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_footer_src_mainvue_type_script_lang_js_ = (footer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/footer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar footer_src_main_component = normalizeComponent(\n packages_footer_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_80210338_render,\n mainvue_type_template_id_80210338_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var footer_src_main_api; }\nfooter_src_main_component.options.__file = \"packages/footer/src/main.vue\"\n/* harmony default export */ var footer_src_main = (footer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/footer/index.js\n\n\n/* istanbul ignore next */\nfooter_src_main.install = function (Vue) {\n Vue.component(footer_src_main.name, footer_src_main);\n};\n\n/* harmony default export */ var footer = (footer_src_main);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/main.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var timeline_src_mainvue_type_script_lang_js_ = ({\n name: 'ElTimeline',\n\n props: {\n reverse: {\n type: Boolean,\n default: false\n }\n },\n\n provide: function provide() {\n return {\n timeline: this\n };\n },\n render: function render() {\n var h = arguments[0];\n\n var reverse = this.reverse;\n var classes = {\n 'el-timeline': true,\n 'is-reverse': reverse\n };\n var slots = this.$slots.default || [];\n if (reverse) {\n slots = slots.reverse();\n }\n return h(\n 'ul',\n { 'class': classes },\n [slots]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/timeline/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_timeline_src_mainvue_type_script_lang_js_ = (timeline_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/timeline/src/main.vue\nvar main_render, main_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar timeline_src_main_component = normalizeComponent(\n packages_timeline_src_mainvue_type_script_lang_js_,\n main_render,\n main_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var timeline_src_main_api; }\ntimeline_src_main_component.options.__file = \"packages/timeline/src/main.vue\"\n/* harmony default export */ var timeline_src_main = (timeline_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/timeline/index.js\n\n\n/* istanbul ignore next */\ntimeline_src_main.install = function (Vue) {\n Vue.component(timeline_src_main.name, timeline_src_main);\n};\n\n/* harmony default export */ var timeline = (timeline_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/item.vue?vue&type=template&id=61a69e50&\nvar itemvue_type_template_id_61a69e50_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"li\", { staticClass: \"el-timeline-item\" }, [\n _c(\"div\", { staticClass: \"el-timeline-item__tail\" }),\n !_vm.$slots.dot\n ? _c(\n \"div\",\n {\n staticClass: \"el-timeline-item__node\",\n class: [\n \"el-timeline-item__node--\" + (_vm.size || \"\"),\n \"el-timeline-item__node--\" + (_vm.type || \"\")\n ],\n style: {\n backgroundColor: _vm.color\n }\n },\n [\n _vm.icon\n ? _c(\"i\", {\n staticClass: \"el-timeline-item__icon\",\n class: _vm.icon\n })\n : _vm._e()\n ]\n )\n : _vm._e(),\n _vm.$slots.dot\n ? _c(\"div\", { staticClass: \"el-timeline-item__dot\" }, [_vm._t(\"dot\")], 2)\n : _vm._e(),\n _c(\"div\", { staticClass: \"el-timeline-item__wrapper\" }, [\n !_vm.hideTimestamp && _vm.placement === \"top\"\n ? _c(\"div\", { staticClass: \"el-timeline-item__timestamp is-top\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.timestamp) + \"\\n \")\n ])\n : _vm._e(),\n _c(\n \"div\",\n { staticClass: \"el-timeline-item__content\" },\n [_vm._t(\"default\")],\n 2\n ),\n !_vm.hideTimestamp && _vm.placement === \"bottom\"\n ? _c(\"div\", { staticClass: \"el-timeline-item__timestamp is-bottom\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.timestamp) + \"\\n \")\n ])\n : _vm._e()\n ])\n ])\n}\nvar itemvue_type_template_id_61a69e50_staticRenderFns = []\nitemvue_type_template_id_61a69e50_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/timeline/src/item.vue?vue&type=template&id=61a69e50&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/timeline/src/item.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var timeline_src_itemvue_type_script_lang_js_ = ({\n name: 'ElTimelineItem',\n\n inject: ['timeline'],\n\n props: {\n timestamp: String,\n\n hideTimestamp: {\n type: Boolean,\n default: false\n },\n\n placement: {\n type: String,\n default: 'bottom'\n },\n\n type: String,\n\n color: String,\n\n size: {\n type: String,\n default: 'normal'\n },\n\n icon: String\n }\n});\n// CONCATENATED MODULE: ./packages/timeline/src/item.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_timeline_src_itemvue_type_script_lang_js_ = (timeline_src_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/timeline/src/item.vue\n\n\n\n\n\n/* normalize component */\n\nvar src_item_component = normalizeComponent(\n packages_timeline_src_itemvue_type_script_lang_js_,\n itemvue_type_template_id_61a69e50_render,\n itemvue_type_template_id_61a69e50_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_item_api; }\nsrc_item_component.options.__file = \"packages/timeline/src/item.vue\"\n/* harmony default export */ var timeline_src_item = (src_item_component.exports);\n// CONCATENATED MODULE: ./packages/timeline-item/index.js\n\n\n/* istanbul ignore next */\ntimeline_src_item.install = function (Vue) {\n Vue.component(timeline_src_item.name, timeline_src_item);\n};\n\n/* harmony default export */ var timeline_item = (timeline_src_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/link/src/main.vue?vue&type=template&id=01cf3b65&\nvar mainvue_type_template_id_01cf3b65_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"a\",\n _vm._b(\n {\n class: [\n \"el-link\",\n _vm.type ? \"el-link--\" + _vm.type : \"\",\n _vm.disabled && \"is-disabled\",\n _vm.underline && !_vm.disabled && \"is-underline\"\n ],\n attrs: { href: _vm.disabled ? null : _vm.href },\n on: { click: _vm.handleClick }\n },\n \"a\",\n _vm.$attrs,\n false\n ),\n [\n _vm.icon ? _c(\"i\", { class: _vm.icon }) : _vm._e(),\n _vm.$slots.default\n ? _c(\"span\", { staticClass: \"el-link--inner\" }, [_vm._t(\"default\")], 2)\n : _vm._e(),\n _vm.$slots.icon ? [_vm.$slots.icon ? _vm._t(\"icon\") : _vm._e()] : _vm._e()\n ],\n 2\n )\n}\nvar mainvue_type_template_id_01cf3b65_staticRenderFns = []\nmainvue_type_template_id_01cf3b65_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/link/src/main.vue?vue&type=template&id=01cf3b65&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/link/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var link_src_mainvue_type_script_lang_js_ = ({\n name: 'ElLink',\n\n props: {\n type: {\n type: String,\n default: 'default'\n },\n underline: {\n type: Boolean,\n default: true\n },\n disabled: Boolean,\n href: String,\n icon: String\n },\n\n methods: {\n handleClick: function handleClick(event) {\n if (!this.disabled) {\n if (!this.href) {\n this.$emit('click', event);\n }\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/link/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_link_src_mainvue_type_script_lang_js_ = (link_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/link/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar link_src_main_component = normalizeComponent(\n packages_link_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_01cf3b65_render,\n mainvue_type_template_id_01cf3b65_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var link_src_main_api; }\nlink_src_main_component.options.__file = \"packages/link/src/main.vue\"\n/* harmony default export */ var link_src_main = (link_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/link/index.js\n\n\n/* istanbul ignore next */\nlink_src_main.install = function (Vue) {\n Vue.component(link_src_main.name, link_src_main);\n};\n\n/* harmony default export */ var packages_link = (link_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/divider/src/main.vue?vue&type=template&id=7fa02a7e&functional=true&\nvar mainvue_type_template_id_7fa02a7e_functional_true_render = function(_h, _vm) {\n var _c = _vm._c\n return _c(\n \"div\",\n _vm._g(\n _vm._b(\n {\n class: [\n _vm.data.staticClass,\n \"el-divider\",\n \"el-divider--\" + _vm.props.direction\n ]\n },\n \"div\",\n _vm.data.attrs,\n false\n ),\n _vm.listeners\n ),\n [\n _vm.slots().default && _vm.props.direction !== \"vertical\"\n ? _c(\n \"div\",\n { class: [\"el-divider__text\", \"is-\" + _vm.props.contentPosition] },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar mainvue_type_template_id_7fa02a7e_functional_true_staticRenderFns = []\nmainvue_type_template_id_7fa02a7e_functional_true_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/divider/src/main.vue?vue&type=template&id=7fa02a7e&functional=true&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/divider/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var divider_src_mainvue_type_script_lang_js_ = ({\n name: 'ElDivider',\n props: {\n direction: {\n type: String,\n default: 'horizontal',\n validator: function validator(val) {\n return ['horizontal', 'vertical'].indexOf(val) !== -1;\n }\n },\n contentPosition: {\n type: String,\n default: 'center',\n validator: function validator(val) {\n return ['left', 'center', 'right'].indexOf(val) !== -1;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/divider/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_divider_src_mainvue_type_script_lang_js_ = (divider_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/divider/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar divider_src_main_component = normalizeComponent(\n packages_divider_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_7fa02a7e_functional_true_render,\n mainvue_type_template_id_7fa02a7e_functional_true_staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var divider_src_main_api; }\ndivider_src_main_component.options.__file = \"packages/divider/src/main.vue\"\n/* harmony default export */ var divider_src_main = (divider_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/divider/index.js\n\n\n/* istanbul ignore next */\ndivider_src_main.install = function (Vue) {\n Vue.component(divider_src_main.name, divider_src_main);\n};\n\n/* harmony default export */ var divider = (divider_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/main.vue?vue&type=template&id=44d84a7c&\nvar mainvue_type_template_id_44d84a7c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"el-image\" },\n [\n _vm.loading\n ? _vm._t(\"placeholder\", [\n _c(\"div\", { staticClass: \"el-image__placeholder\" })\n ])\n : _vm.error\n ? _vm._t(\"error\", [\n _c(\"div\", { staticClass: \"el-image__error\" }, [\n _vm._v(_vm._s(_vm.t(\"el.image.error\")))\n ])\n ])\n : _c(\n \"img\",\n _vm._g(\n _vm._b(\n {\n staticClass: \"el-image__inner\",\n class: {\n \"el-image__inner--center\": _vm.alignCenter,\n \"el-image__preview\": _vm.preview\n },\n style: _vm.imageStyle,\n attrs: { src: _vm.src },\n on: { click: _vm.clickHandler }\n },\n \"img\",\n _vm.$attrs,\n false\n ),\n _vm.$listeners\n )\n ),\n _vm.preview\n ? [\n _vm.showViewer\n ? _c(\"image-viewer\", {\n attrs: {\n \"z-index\": _vm.zIndex,\n \"initial-index\": _vm.imageIndex,\n \"on-close\": _vm.closeViewer,\n \"url-list\": _vm.previewSrcList\n }\n })\n : _vm._e()\n ]\n : _vm._e()\n ],\n 2\n )\n}\nvar mainvue_type_template_id_44d84a7c_staticRenderFns = []\nmainvue_type_template_id_44d84a7c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/image/src/main.vue?vue&type=template&id=44d84a7c&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/image-viewer.vue?vue&type=template&id=5e73b307&\nvar image_viewervue_type_template_id_5e73b307_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"viewer-fade\" } }, [\n _c(\n \"div\",\n {\n ref: \"el-image-viewer__wrapper\",\n staticClass: \"el-image-viewer__wrapper\",\n style: { \"z-index\": _vm.viewerZIndex },\n attrs: { tabindex: \"-1\" }\n },\n [\n _c(\"div\", {\n staticClass: \"el-image-viewer__mask\",\n on: {\n click: function($event) {\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.handleMaskClick($event)\n }\n }\n }),\n _c(\n \"span\",\n {\n staticClass: \"el-image-viewer__btn el-image-viewer__close\",\n on: { click: _vm.hide }\n },\n [_c(\"i\", { staticClass: \"el-icon-close\" })]\n ),\n !_vm.isSingle\n ? [\n _c(\n \"span\",\n {\n staticClass: \"el-image-viewer__btn el-image-viewer__prev\",\n class: { \"is-disabled\": !_vm.infinite && _vm.isFirst },\n on: { click: _vm.prev }\n },\n [_c(\"i\", { staticClass: \"el-icon-arrow-left\" })]\n ),\n _c(\n \"span\",\n {\n staticClass: \"el-image-viewer__btn el-image-viewer__next\",\n class: { \"is-disabled\": !_vm.infinite && _vm.isLast },\n on: { click: _vm.next }\n },\n [_c(\"i\", { staticClass: \"el-icon-arrow-right\" })]\n )\n ]\n : _vm._e(),\n _c(\n \"div\",\n { staticClass: \"el-image-viewer__btn el-image-viewer__actions\" },\n [\n _c(\"div\", { staticClass: \"el-image-viewer__actions__inner\" }, [\n _c(\"i\", {\n staticClass: \"el-icon-zoom-out\",\n on: {\n click: function($event) {\n _vm.handleActions(\"zoomOut\")\n }\n }\n }),\n _c(\"i\", {\n staticClass: \"el-icon-zoom-in\",\n on: {\n click: function($event) {\n _vm.handleActions(\"zoomIn\")\n }\n }\n }),\n _c(\"i\", { staticClass: \"el-image-viewer__actions__divider\" }),\n _c(\"i\", { class: _vm.mode.icon, on: { click: _vm.toggleMode } }),\n _c(\"i\", { staticClass: \"el-image-viewer__actions__divider\" }),\n _c(\"i\", {\n staticClass: \"el-icon-refresh-left\",\n on: {\n click: function($event) {\n _vm.handleActions(\"anticlocelise\")\n }\n }\n }),\n _c(\"i\", {\n staticClass: \"el-icon-refresh-right\",\n on: {\n click: function($event) {\n _vm.handleActions(\"clocelise\")\n }\n }\n })\n ])\n ]\n ),\n _c(\n \"div\",\n { staticClass: \"el-image-viewer__canvas\" },\n _vm._l(_vm.urlList, function(url, i) {\n return i === _vm.index\n ? _c(\"img\", {\n key: url,\n ref: \"img\",\n refInFor: true,\n staticClass: \"el-image-viewer__img\",\n style: _vm.imgStyle,\n attrs: { src: _vm.currentImg },\n on: {\n load: _vm.handleImgLoad,\n error: _vm.handleImgError,\n mousedown: _vm.handleMouseDown\n }\n })\n : _vm._e()\n }),\n 0\n )\n ],\n 2\n )\n ])\n}\nvar image_viewervue_type_template_id_5e73b307_staticRenderFns = []\nimage_viewervue_type_template_id_5e73b307_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue?vue&type=template&id=5e73b307&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/image-viewer.vue?vue&type=script&lang=js&\nvar image_viewervue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\nvar Mode = {\n CONTAIN: {\n name: 'contain',\n icon: 'el-icon-full-screen'\n },\n ORIGINAL: {\n name: 'original',\n icon: 'el-icon-c-scale-to-original'\n }\n};\n\nvar mousewheelEventName = Object(util_[\"isFirefox\"])() ? 'DOMMouseScroll' : 'mousewheel';\n\n/* harmony default export */ var image_viewervue_type_script_lang_js_ = ({\n name: 'elImageViewer',\n\n props: {\n urlList: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n zIndex: {\n type: Number,\n default: 2000\n },\n onSwitch: {\n type: Function,\n default: function _default() {}\n },\n onClose: {\n type: Function,\n default: function _default() {}\n },\n initialIndex: {\n type: Number,\n default: 0\n },\n appendToBody: {\n type: Boolean,\n default: true\n },\n maskClosable: {\n type: Boolean,\n default: true\n }\n },\n\n data: function data() {\n return {\n index: this.initialIndex,\n isShow: false,\n infinite: true,\n loading: false,\n mode: Mode.CONTAIN,\n transform: {\n scale: 1,\n deg: 0,\n offsetX: 0,\n offsetY: 0,\n enableTransition: false\n }\n };\n },\n\n computed: {\n isSingle: function isSingle() {\n return this.urlList.length <= 1;\n },\n isFirst: function isFirst() {\n return this.index === 0;\n },\n isLast: function isLast() {\n return this.index === this.urlList.length - 1;\n },\n currentImg: function currentImg() {\n return this.urlList[this.index];\n },\n imgStyle: function imgStyle() {\n var _transform = this.transform,\n scale = _transform.scale,\n deg = _transform.deg,\n offsetX = _transform.offsetX,\n offsetY = _transform.offsetY,\n enableTransition = _transform.enableTransition;\n\n var style = {\n transform: 'scale(' + scale + ') rotate(' + deg + 'deg)',\n transition: enableTransition ? 'transform .3s' : '',\n 'margin-left': offsetX + 'px',\n 'margin-top': offsetY + 'px'\n };\n if (this.mode === Mode.CONTAIN) {\n style.maxWidth = style.maxHeight = '100%';\n }\n return style;\n },\n viewerZIndex: function viewerZIndex() {\n var nextZIndex = popup_[\"PopupManager\"].nextZIndex();\n return this.zIndex > nextZIndex ? this.zIndex : nextZIndex;\n }\n },\n watch: {\n index: {\n handler: function handler(val) {\n this.reset();\n this.onSwitch(val);\n }\n },\n currentImg: function currentImg(val) {\n var _this = this;\n\n this.$nextTick(function (_) {\n var $img = _this.$refs.img[0];\n if (!$img.complete) {\n _this.loading = true;\n }\n });\n }\n },\n methods: {\n hide: function hide() {\n this.deviceSupportUninstall();\n this.onClose();\n },\n deviceSupportInstall: function deviceSupportInstall() {\n var _this2 = this;\n\n this._keyDownHandler = function (e) {\n e.stopPropagation();\n var keyCode = e.keyCode;\n switch (keyCode) {\n // ESC\n case 27:\n _this2.hide();\n break;\n // SPACE\n case 32:\n _this2.toggleMode();\n break;\n // LEFT_ARROW\n case 37:\n _this2.prev();\n break;\n // UP_ARROW\n case 38:\n _this2.handleActions('zoomIn');\n break;\n // RIGHT_ARROW\n case 39:\n _this2.next();\n break;\n // DOWN_ARROW\n case 40:\n _this2.handleActions('zoomOut');\n break;\n }\n };\n this._mouseWheelHandler = Object(util_[\"rafThrottle\"])(function (e) {\n var delta = e.wheelDelta ? e.wheelDelta : -e.detail;\n if (delta > 0) {\n _this2.handleActions('zoomIn', {\n zoomRate: 0.015,\n enableTransition: false\n });\n } else {\n _this2.handleActions('zoomOut', {\n zoomRate: 0.015,\n enableTransition: false\n });\n }\n });\n Object(dom_[\"on\"])(document, 'keydown', this._keyDownHandler);\n Object(dom_[\"on\"])(document, mousewheelEventName, this._mouseWheelHandler);\n },\n deviceSupportUninstall: function deviceSupportUninstall() {\n Object(dom_[\"off\"])(document, 'keydown', this._keyDownHandler);\n Object(dom_[\"off\"])(document, mousewheelEventName, this._mouseWheelHandler);\n this._keyDownHandler = null;\n this._mouseWheelHandler = null;\n },\n handleImgLoad: function handleImgLoad(e) {\n this.loading = false;\n },\n handleImgError: function handleImgError(e) {\n this.loading = false;\n e.target.alt = '加载失败';\n },\n handleMouseDown: function handleMouseDown(e) {\n var _this3 = this;\n\n if (this.loading || e.button !== 0) return;\n\n var _transform2 = this.transform,\n offsetX = _transform2.offsetX,\n offsetY = _transform2.offsetY;\n\n var startX = e.pageX;\n var startY = e.pageY;\n this._dragHandler = Object(util_[\"rafThrottle\"])(function (ev) {\n _this3.transform.offsetX = offsetX + ev.pageX - startX;\n _this3.transform.offsetY = offsetY + ev.pageY - startY;\n });\n Object(dom_[\"on\"])(document, 'mousemove', this._dragHandler);\n Object(dom_[\"on\"])(document, 'mouseup', function (ev) {\n Object(dom_[\"off\"])(document, 'mousemove', _this3._dragHandler);\n });\n\n e.preventDefault();\n },\n handleMaskClick: function handleMaskClick() {\n if (this.maskClosable) {\n this.hide();\n }\n },\n reset: function reset() {\n this.transform = {\n scale: 1,\n deg: 0,\n offsetX: 0,\n offsetY: 0,\n enableTransition: false\n };\n },\n toggleMode: function toggleMode() {\n if (this.loading) return;\n\n var modeNames = Object.keys(Mode);\n var modeValues = Object.values(Mode);\n var index = modeValues.indexOf(this.mode);\n var nextIndex = (index + 1) % modeNames.length;\n this.mode = Mode[modeNames[nextIndex]];\n this.reset();\n },\n prev: function prev() {\n if (this.isFirst && !this.infinite) return;\n var len = this.urlList.length;\n this.index = (this.index - 1 + len) % len;\n },\n next: function next() {\n if (this.isLast && !this.infinite) return;\n var len = this.urlList.length;\n this.index = (this.index + 1) % len;\n },\n handleActions: function handleActions(action) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (this.loading) return;\n\n var _zoomRate$rotateDeg$e = image_viewervue_type_script_lang_js_extends({\n zoomRate: 0.2,\n rotateDeg: 90,\n enableTransition: true\n }, options),\n zoomRate = _zoomRate$rotateDeg$e.zoomRate,\n rotateDeg = _zoomRate$rotateDeg$e.rotateDeg,\n enableTransition = _zoomRate$rotateDeg$e.enableTransition;\n\n var transform = this.transform;\n\n switch (action) {\n case 'zoomOut':\n if (transform.scale > 0.2) {\n transform.scale = parseFloat((transform.scale - zoomRate).toFixed(3));\n }\n break;\n case 'zoomIn':\n transform.scale = parseFloat((transform.scale + zoomRate).toFixed(3));\n break;\n case 'clocelise':\n transform.deg += rotateDeg;\n break;\n case 'anticlocelise':\n transform.deg -= rotateDeg;\n break;\n }\n transform.enableTransition = enableTransition;\n }\n },\n mounted: function mounted() {\n this.deviceSupportInstall();\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n // add tabindex then wrapper can be focusable via Javascript\n // focus wrapper so arrow key can't cause inner scroll behavior underneath\n this.$refs['el-image-viewer__wrapper'].focus();\n },\n destroyed: function destroyed() {\n // if appendToBody is true, remove DOM node after destroy\n if (this.appendToBody && this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_image_viewervue_type_script_lang_js_ = (image_viewervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/image/src/image-viewer.vue\n\n\n\n\n\n/* normalize component */\n\nvar image_viewer_component = normalizeComponent(\n src_image_viewervue_type_script_lang_js_,\n image_viewervue_type_template_id_5e73b307_render,\n image_viewervue_type_template_id_5e73b307_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var image_viewer_api; }\nimage_viewer_component.options.__file = \"packages/image/src/image-viewer.vue\"\n/* harmony default export */ var image_viewer = (image_viewer_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/image/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\nvar isSupportObjectFit = function isSupportObjectFit() {\n return document.documentElement.style.objectFit !== undefined;\n};\n\nvar ObjectFit = {\n NONE: 'none',\n CONTAIN: 'contain',\n COVER: 'cover',\n FILL: 'fill',\n SCALE_DOWN: 'scale-down'\n};\n\nvar prevOverflow = '';\n\n/* harmony default export */ var image_src_mainvue_type_script_lang_js_ = ({\n name: 'ElImage',\n\n mixins: [locale_default.a],\n inheritAttrs: false,\n\n components: {\n ImageViewer: image_viewer\n },\n\n props: {\n src: String,\n fit: String,\n lazy: Boolean,\n scrollContainer: {},\n previewSrcList: {\n type: Array,\n default: function _default() {\n return [];\n }\n },\n zIndex: {\n type: Number,\n default: 2000\n }\n },\n\n data: function data() {\n return {\n loading: true,\n error: false,\n show: !this.lazy,\n imageWidth: 0,\n imageHeight: 0,\n showViewer: false\n };\n },\n\n\n computed: {\n imageStyle: function imageStyle() {\n var fit = this.fit;\n\n if (!this.$isServer && fit) {\n return isSupportObjectFit() ? { 'object-fit': fit } : this.getImageStyle(fit);\n }\n return {};\n },\n alignCenter: function alignCenter() {\n return !this.$isServer && !isSupportObjectFit() && this.fit !== ObjectFit.FILL;\n },\n preview: function preview() {\n var previewSrcList = this.previewSrcList;\n\n return Array.isArray(previewSrcList) && previewSrcList.length > 0;\n },\n imageIndex: function imageIndex() {\n var previewIndex = 0;\n var srcIndex = this.previewSrcList.indexOf(this.src);\n if (srcIndex >= 0) {\n previewIndex = srcIndex;\n }\n return previewIndex;\n }\n },\n\n watch: {\n src: function src(val) {\n this.show && this.loadImage();\n },\n show: function show(val) {\n val && this.loadImage();\n }\n },\n\n mounted: function mounted() {\n if (this.lazy) {\n this.addLazyLoadListener();\n } else {\n this.loadImage();\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.lazy && this.removeLazyLoadListener();\n },\n\n\n methods: {\n loadImage: function loadImage() {\n var _this = this;\n\n if (this.$isServer) return;\n\n // reset status\n this.loading = true;\n this.error = false;\n\n var img = new Image();\n img.onload = function (e) {\n return _this.handleLoad(e, img);\n };\n img.onerror = this.handleError.bind(this);\n\n // bind html attrs\n // so it can behave consistently\n Object.keys(this.$attrs).forEach(function (key) {\n var value = _this.$attrs[key];\n img.setAttribute(key, value);\n });\n img.src = this.src;\n },\n handleLoad: function handleLoad(e, img) {\n this.imageWidth = img.width;\n this.imageHeight = img.height;\n this.loading = false;\n this.error = false;\n },\n handleError: function handleError(e) {\n this.loading = false;\n this.error = true;\n this.$emit('error', e);\n },\n handleLazyLoad: function handleLazyLoad() {\n if (Object(dom_[\"isInContainer\"])(this.$el, this._scrollContainer)) {\n this.show = true;\n this.removeLazyLoadListener();\n }\n },\n addLazyLoadListener: function addLazyLoadListener() {\n if (this.$isServer) return;\n\n var scrollContainer = this.scrollContainer;\n\n var _scrollContainer = null;\n\n if (Object(types_[\"isHtmlElement\"])(scrollContainer)) {\n _scrollContainer = scrollContainer;\n } else if (Object(types_[\"isString\"])(scrollContainer)) {\n _scrollContainer = document.querySelector(scrollContainer);\n } else {\n _scrollContainer = Object(dom_[\"getScrollContainer\"])(this.$el);\n }\n\n if (_scrollContainer) {\n this._scrollContainer = _scrollContainer;\n this._lazyLoadHandler = throttle_default()(200, this.handleLazyLoad);\n Object(dom_[\"on\"])(_scrollContainer, 'scroll', this._lazyLoadHandler);\n this.handleLazyLoad();\n }\n },\n removeLazyLoadListener: function removeLazyLoadListener() {\n var _scrollContainer = this._scrollContainer,\n _lazyLoadHandler = this._lazyLoadHandler;\n\n\n if (this.$isServer || !_scrollContainer || !_lazyLoadHandler) return;\n\n Object(dom_[\"off\"])(_scrollContainer, 'scroll', _lazyLoadHandler);\n this._scrollContainer = null;\n this._lazyLoadHandler = null;\n },\n\n /**\n * simulate object-fit behavior to compatible with IE11 and other browsers which not support object-fit\n */\n getImageStyle: function getImageStyle(fit) {\n var imageWidth = this.imageWidth,\n imageHeight = this.imageHeight;\n var _$el = this.$el,\n containerWidth = _$el.clientWidth,\n containerHeight = _$el.clientHeight;\n\n\n if (!imageWidth || !imageHeight || !containerWidth || !containerHeight) return {};\n\n var imageAspectRatio = imageWidth / imageHeight;\n var containerAspectRatio = containerWidth / containerHeight;\n\n if (fit === ObjectFit.SCALE_DOWN) {\n var isSmaller = imageWidth < containerWidth && imageHeight < containerHeight;\n fit = isSmaller ? ObjectFit.NONE : ObjectFit.CONTAIN;\n }\n\n switch (fit) {\n case ObjectFit.NONE:\n return { width: 'auto', height: 'auto' };\n case ObjectFit.CONTAIN:\n return imageAspectRatio < containerAspectRatio ? { width: 'auto' } : { height: 'auto' };\n case ObjectFit.COVER:\n return imageAspectRatio < containerAspectRatio ? { height: 'auto' } : { width: 'auto' };\n default:\n return {};\n }\n },\n clickHandler: function clickHandler() {\n // don't show viewer when preview is false\n if (!this.preview) {\n return;\n }\n // prevent body scroll\n prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n this.showViewer = true;\n },\n closeViewer: function closeViewer() {\n document.body.style.overflow = prevOverflow;\n this.showViewer = false;\n }\n }\n});\n// CONCATENATED MODULE: ./packages/image/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_image_src_mainvue_type_script_lang_js_ = (image_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/image/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar image_src_main_component = normalizeComponent(\n packages_image_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_44d84a7c_render,\n mainvue_type_template_id_44d84a7c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var image_src_main_api; }\nimage_src_main_component.options.__file = \"packages/image/src/main.vue\"\n/* harmony default export */ var image_src_main = (image_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/image/index.js\n\n\n/* istanbul ignore next */\nimage_src_main.install = function (Vue) {\n Vue.component(image_src_main.name, image_src_main);\n};\n\n/* harmony default export */ var packages_image = (image_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/main.vue?vue&type=template&id=6d9756be&\nvar mainvue_type_template_id_6d9756be_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-calendar\" }, [\n _c(\"div\", { staticClass: \"el-calendar__header\" }, [\n _c(\"div\", { staticClass: \"el-calendar__title\" }, [\n _vm._v(\"\\n \" + _vm._s(_vm.i18nDate) + \"\\n \")\n ]),\n _vm.validatedRange.length === 0\n ? _c(\n \"div\",\n { staticClass: \"el-calendar__button-group\" },\n [\n _c(\n \"el-button-group\",\n [\n _c(\n \"el-button\",\n {\n attrs: { type: \"plain\", size: \"mini\" },\n on: {\n click: function($event) {\n _vm.selectDate(\"prev-month\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.prevMonth\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n attrs: { type: \"plain\", size: \"mini\" },\n on: {\n click: function($event) {\n _vm.selectDate(\"today\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.today\")) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n attrs: { type: \"plain\", size: \"mini\" },\n on: {\n click: function($event) {\n _vm.selectDate(\"next-month\")\n }\n }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.t(\"el.datepicker.nextMonth\")) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n : _vm._e()\n ]),\n _vm.validatedRange.length === 0\n ? _c(\n \"div\",\n { key: \"no-range\", staticClass: \"el-calendar__body\" },\n [\n _c(\"date-table\", {\n attrs: {\n date: _vm.date,\n \"selected-day\": _vm.realSelectedDay,\n \"first-day-of-week\": _vm.realFirstDayOfWeek\n },\n on: { pick: _vm.pickDay }\n })\n ],\n 1\n )\n : _c(\n \"div\",\n { key: \"has-range\", staticClass: \"el-calendar__body\" },\n _vm._l(_vm.validatedRange, function(range, index) {\n return _c(\"date-table\", {\n key: index,\n attrs: {\n date: range[0],\n \"selected-day\": _vm.realSelectedDay,\n range: range,\n \"hide-header\": index !== 0,\n \"first-day-of-week\": _vm.realFirstDayOfWeek\n },\n on: { pick: _vm.pickDay }\n })\n }),\n 1\n )\n ])\n}\nvar mainvue_type_template_id_6d9756be_staticRenderFns = []\nmainvue_type_template_id_6d9756be_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/calendar/src/main.vue?vue&type=template&id=6d9756be&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/date\"\nvar date_ = __webpack_require__(20);\nvar date_default = /*#__PURE__*/__webpack_require__.n(date_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/date-table.vue?vue&type=script&lang=js&\n\n\n\n\n/* harmony default export */ var src_date_tablevue_type_script_lang_js_ = ({\n props: {\n selectedDay: String, // formated date yyyy-MM-dd\n range: {\n type: Array,\n validator: function validator(val) {\n if (!(val && val.length)) return true;\n var start = val[0],\n end = val[1];\n\n return Object(date_util_[\"validateRangeInOneMonth\"])(start, end);\n }\n },\n date: Date,\n hideHeader: Boolean,\n firstDayOfWeek: Number\n },\n\n inject: ['elCalendar'],\n\n methods: {\n toNestedArr: function toNestedArr(days) {\n return Object(date_util_[\"range\"])(days.length / 7).map(function (_, index) {\n var start = index * 7;\n return days.slice(start, start + 7);\n });\n },\n getFormateDate: function getFormateDate(day, type) {\n if (!day || ['prev', 'current', 'next'].indexOf(type) === -1) {\n throw new Error('invalid day or type');\n }\n var prefix = this.curMonthDatePrefix;\n if (type === 'prev') {\n prefix = this.prevMonthDatePrefix;\n } else if (type === 'next') {\n prefix = this.nextMonthDatePrefix;\n }\n day = ('00' + day).slice(-2);\n return prefix + '-' + day;\n },\n getCellClass: function getCellClass(_ref) {\n var text = _ref.text,\n type = _ref.type;\n\n var classes = [type];\n if (type === 'current') {\n var date = this.getFormateDate(text, type);\n if (date === this.selectedDay) {\n classes.push('is-selected');\n }\n if (date === this.formatedToday) {\n classes.push('is-today');\n }\n }\n return classes;\n },\n pickDay: function pickDay(_ref2) {\n var text = _ref2.text,\n type = _ref2.type;\n\n var date = this.getFormateDate(text, type);\n this.$emit('pick', date);\n },\n cellRenderProxy: function cellRenderProxy(_ref3) {\n var text = _ref3.text,\n type = _ref3.type;\n var h = this.$createElement;\n\n var render = this.elCalendar.$scopedSlots.dateCell;\n if (!render) return h('span', [text]);\n\n var day = this.getFormateDate(text, type);\n var date = new Date(day);\n var data = {\n isSelected: this.selectedDay === day,\n type: type + '-month',\n day: day\n };\n return render({ date: date, data: data });\n }\n },\n\n computed: {\n WEEK_DAYS: function WEEK_DAYS() {\n return Object(date_util_[\"getI18nSettings\"])().dayNames;\n },\n prevMonthDatePrefix: function prevMonthDatePrefix() {\n var temp = new Date(this.date.getTime());\n temp.setDate(0);\n return date_default.a.format(temp, 'yyyy-MM');\n },\n curMonthDatePrefix: function curMonthDatePrefix() {\n return date_default.a.format(this.date, 'yyyy-MM');\n },\n nextMonthDatePrefix: function nextMonthDatePrefix() {\n var temp = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 1);\n return date_default.a.format(temp, 'yyyy-MM');\n },\n formatedToday: function formatedToday() {\n return this.elCalendar.formatedToday;\n },\n isInRange: function isInRange() {\n return this.range && this.range.length;\n },\n rows: function rows() {\n var days = [];\n // if range exists, should render days in range.\n if (this.isInRange) {\n var _range = this.range,\n start = _range[0],\n end = _range[1];\n\n var currentMonthRange = Object(date_util_[\"range\"])(end.getDate() - start.getDate() + 1).map(function (_, index) {\n return {\n text: start.getDate() + index,\n type: 'current'\n };\n });\n var remaining = currentMonthRange.length % 7;\n remaining = remaining === 0 ? 0 : 7 - remaining;\n var nextMonthRange = Object(date_util_[\"range\"])(remaining).map(function (_, index) {\n return {\n text: index + 1,\n type: 'next'\n };\n });\n days = currentMonthRange.concat(nextMonthRange);\n } else {\n var date = this.date;\n var firstDay = Object(date_util_[\"getFirstDayOfMonth\"])(date);\n firstDay = firstDay === 0 ? 7 : firstDay;\n var firstDayOfWeek = typeof this.firstDayOfWeek === 'number' ? this.firstDayOfWeek : 1;\n var offset = (7 + firstDay - firstDayOfWeek) % 7;\n var prevMonthDays = Object(date_util_[\"getPrevMonthLastDays\"])(date, offset).map(function (day) {\n return {\n text: day,\n type: 'prev'\n };\n });\n var currentMonthDays = Object(date_util_[\"getMonthDays\"])(date).map(function (day) {\n return {\n text: day,\n type: 'current'\n };\n });\n days = [].concat(prevMonthDays, currentMonthDays);\n var nextMonthDays = Object(date_util_[\"range\"])(42 - days.length).map(function (_, index) {\n return {\n text: index + 1,\n type: 'next'\n };\n });\n days = days.concat(nextMonthDays);\n }\n return this.toNestedArr(days);\n },\n weekDays: function weekDays() {\n var start = this.firstDayOfWeek;\n var WEEK_DAYS = this.WEEK_DAYS;\n\n\n if (typeof start !== 'number' || start === 0) {\n return WEEK_DAYS.slice();\n } else {\n return WEEK_DAYS.slice(start).concat(WEEK_DAYS.slice(0, start));\n }\n }\n },\n\n render: function render() {\n var _this = this;\n\n var h = arguments[0];\n\n var thead = this.hideHeader ? null : h('thead', [this.weekDays.map(function (day) {\n return h(\n 'th',\n { key: day },\n [day]\n );\n })]);\n return h(\n 'table',\n {\n 'class': {\n 'el-calendar-table': true,\n 'is-range': this.isInRange\n },\n attrs: { cellspacing: '0',\n cellpadding: '0' }\n },\n [thead, h('tbody', [this.rows.map(function (row, index) {\n return h(\n 'tr',\n {\n 'class': {\n 'el-calendar-table__row': true,\n 'el-calendar-table__row--hide-border': index === 0 && _this.hideHeader\n },\n key: index },\n [row.map(function (cell, key) {\n return h(\n 'td',\n { key: key,\n 'class': _this.getCellClass(cell),\n on: {\n 'click': _this.pickDay.bind(_this, cell)\n }\n },\n [h(\n 'div',\n { 'class': 'el-calendar-day' },\n [_this.cellRenderProxy(cell)]\n )]\n );\n })]\n );\n })])]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/calendar/src/date-table.vue?vue&type=script&lang=js&\n /* harmony default export */ var calendar_src_date_tablevue_type_script_lang_js_ = (src_date_tablevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/calendar/src/date-table.vue\nvar date_table_render, date_table_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar src_date_table_component = normalizeComponent(\n calendar_src_date_tablevue_type_script_lang_js_,\n date_table_render,\n date_table_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var src_date_table_api; }\nsrc_date_table_component.options.__file = \"packages/calendar/src/date-table.vue\"\n/* harmony default export */ var src_date_table = (src_date_table_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/calendar/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar validTypes = ['prev-month', 'today', 'next-month'];\nvar weekDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\nvar oneDay = 86400000;\n\n/* harmony default export */ var calendar_src_mainvue_type_script_lang_js_ = ({\n name: 'ElCalendar',\n\n mixins: [locale_default.a],\n\n components: {\n DateTable: src_date_table,\n ElButton: button_default.a,\n ElButtonGroup: button_group_default.a\n },\n\n props: {\n value: [Date, String, Number],\n range: {\n type: Array,\n validator: function validator(range) {\n if (Array.isArray(range)) {\n return range.length === 2 && range.every(function (item) {\n return typeof item === 'string' || typeof item === 'number' || item instanceof Date;\n });\n } else {\n return true;\n }\n }\n },\n firstDayOfWeek: {\n type: Number,\n default: 1\n }\n },\n\n provide: function provide() {\n return {\n elCalendar: this\n };\n },\n\n\n methods: {\n pickDay: function pickDay(day) {\n this.realSelectedDay = day;\n },\n selectDate: function selectDate(type) {\n if (validTypes.indexOf(type) === -1) {\n throw new Error('invalid type ' + type);\n }\n var day = '';\n if (type === 'prev-month') {\n day = this.prevMonthDatePrefix + '-01';\n } else if (type === 'next-month') {\n day = this.nextMonthDatePrefix + '-01';\n } else {\n day = this.formatedToday;\n }\n\n if (day === this.formatedDate) return;\n this.pickDay(day);\n },\n toDate: function toDate(val) {\n if (!val) {\n throw new Error('invalid val');\n }\n return val instanceof Date ? val : new Date(val);\n },\n rangeValidator: function rangeValidator(date, isStart) {\n var firstDayOfWeek = this.realFirstDayOfWeek;\n var expected = isStart ? firstDayOfWeek : firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1;\n var message = (isStart ? 'start' : 'end') + ' of range should be ' + weekDays[expected] + '.';\n if (date.getDay() !== expected) {\n console.warn('[ElementCalendar]', message, 'Invalid range will be ignored.');\n return false;\n }\n return true;\n }\n },\n\n computed: {\n prevMonthDatePrefix: function prevMonthDatePrefix() {\n var temp = new Date(this.date.getTime());\n temp.setDate(0);\n return date_default.a.format(temp, 'yyyy-MM');\n },\n curMonthDatePrefix: function curMonthDatePrefix() {\n return date_default.a.format(this.date, 'yyyy-MM');\n },\n nextMonthDatePrefix: function nextMonthDatePrefix() {\n var temp = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 1);\n return date_default.a.format(temp, 'yyyy-MM');\n },\n formatedDate: function formatedDate() {\n return date_default.a.format(this.date, 'yyyy-MM-dd');\n },\n i18nDate: function i18nDate() {\n var year = this.date.getFullYear();\n var month = this.date.getMonth() + 1;\n return year + ' ' + this.t('el.datepicker.year') + ' ' + this.t('el.datepicker.month' + month);\n },\n formatedToday: function formatedToday() {\n return date_default.a.format(this.now, 'yyyy-MM-dd');\n },\n\n\n realSelectedDay: {\n get: function get() {\n if (!this.value) return this.selectedDay;\n return this.formatedDate;\n },\n set: function set(val) {\n this.selectedDay = val;\n var date = new Date(val);\n this.$emit('input', date);\n }\n },\n\n date: function date() {\n if (!this.value) {\n if (this.realSelectedDay) {\n var d = this.selectedDay.split('-');\n return new Date(d[0], d[1] - 1, d[2]);\n } else if (this.validatedRange.length) {\n return this.validatedRange[0][0];\n }\n return this.now;\n } else {\n return this.toDate(this.value);\n }\n },\n\n\n // if range is valid, we get a two-digit array\n validatedRange: function validatedRange() {\n var _this = this;\n\n var range = this.range;\n if (!range) return [];\n range = range.reduce(function (prev, val, index) {\n var date = _this.toDate(val);\n if (_this.rangeValidator(date, index === 0)) {\n prev = prev.concat(date);\n }\n return prev;\n }, []);\n if (range.length === 2) {\n var _range = range,\n start = _range[0],\n end = _range[1];\n\n if (start > end) {\n console.warn('[ElementCalendar]end time should be greater than start time');\n return [];\n }\n // start time and end time in one month\n if (Object(date_util_[\"validateRangeInOneMonth\"])(start, end)) {\n return [[start, end]];\n }\n var data = [];\n var startDay = new Date(start.getFullYear(), start.getMonth() + 1, 1);\n var lastDay = this.toDate(startDay.getTime() - oneDay);\n if (!Object(date_util_[\"validateRangeInOneMonth\"])(startDay, end)) {\n console.warn('[ElementCalendar]start time and end time interval must not exceed two months');\n return [];\n }\n // 第一个月的时间范围\n data.push([start, lastDay]);\n // 下一月的时间范围,需要计算一下该月的第一个周起始日\n var firstDayOfWeek = this.realFirstDayOfWeek;\n var nextMontFirstDay = startDay.getDay();\n var interval = 0;\n if (nextMontFirstDay !== firstDayOfWeek) {\n if (firstDayOfWeek === 0) {\n interval = 7 - nextMontFirstDay;\n } else {\n interval = firstDayOfWeek - nextMontFirstDay;\n interval = interval > 0 ? interval : 7 + interval;\n }\n }\n startDay = this.toDate(startDay.getTime() + interval * oneDay);\n if (startDay.getDate() < end.getDate()) {\n data.push([startDay, end]);\n }\n return data;\n }\n return [];\n },\n realFirstDayOfWeek: function realFirstDayOfWeek() {\n if (this.firstDayOfWeek < 1 || this.firstDayOfWeek > 6) {\n return 0;\n }\n return Math.floor(this.firstDayOfWeek);\n }\n },\n\n data: function data() {\n return {\n selectedDay: '',\n now: new Date()\n };\n }\n});\n// CONCATENATED MODULE: ./packages/calendar/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_calendar_src_mainvue_type_script_lang_js_ = (calendar_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/calendar/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar calendar_src_main_component = normalizeComponent(\n packages_calendar_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_6d9756be_render,\n mainvue_type_template_id_6d9756be_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var calendar_src_main_api; }\ncalendar_src_main_component.options.__file = \"packages/calendar/src/main.vue\"\n/* harmony default export */ var calendar_src_main = (calendar_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/calendar/index.js\n\n\n/* istanbul ignore next */\ncalendar_src_main.install = function (Vue) {\n Vue.component(calendar_src_main.name, calendar_src_main);\n};\n\n/* harmony default export */ var calendar = (calendar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/backtop/src/main.vue?vue&type=template&id=257dd4a9&\nvar mainvue_type_template_id_257dd4a9_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"transition\", { attrs: { name: \"el-fade-in\" } }, [\n _vm.visible\n ? _c(\n \"div\",\n {\n staticClass: \"el-backtop\",\n style: {\n right: _vm.styleRight,\n bottom: _vm.styleBottom\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.handleClick($event)\n }\n }\n },\n [\n _vm._t(\"default\", [_c(\"el-icon\", { attrs: { name: \"caret-top\" } })])\n ],\n 2\n )\n : _vm._e()\n ])\n}\nvar mainvue_type_template_id_257dd4a9_staticRenderFns = []\nmainvue_type_template_id_257dd4a9_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/backtop/src/main.vue?vue&type=template&id=257dd4a9&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/backtop/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\nvar cubic = function cubic(value) {\n return Math.pow(value, 3);\n};\nvar easeInOutCubic = function easeInOutCubic(value) {\n return value < 0.5 ? cubic(value * 2) / 2 : 1 - cubic((1 - value) * 2) / 2;\n};\n\n/* harmony default export */ var backtop_src_mainvue_type_script_lang_js_ = ({\n name: 'ElBacktop',\n\n props: {\n visibilityHeight: {\n type: Number,\n default: 200\n },\n target: [String],\n right: {\n type: Number,\n default: 40\n },\n bottom: {\n type: Number,\n default: 40\n }\n },\n\n data: function data() {\n return {\n el: null,\n container: null,\n visible: false\n };\n },\n\n\n computed: {\n styleBottom: function styleBottom() {\n return this.bottom + 'px';\n },\n styleRight: function styleRight() {\n return this.right + 'px';\n }\n },\n\n mounted: function mounted() {\n this.init();\n this.throttledScrollHandler = throttle_default()(300, this.onScroll);\n this.container.addEventListener('scroll', this.throttledScrollHandler);\n },\n\n\n methods: {\n init: function init() {\n this.container = document;\n this.el = document.documentElement;\n if (this.target) {\n this.el = document.querySelector(this.target);\n if (!this.el) {\n throw new Error('target is not existed: ' + this.target);\n }\n this.container = this.el;\n }\n },\n onScroll: function onScroll() {\n var scrollTop = this.el.scrollTop;\n this.visible = scrollTop >= this.visibilityHeight;\n },\n handleClick: function handleClick(e) {\n this.scrollToTop();\n this.$emit('click', e);\n },\n scrollToTop: function scrollToTop() {\n var el = this.el;\n var beginTime = Date.now();\n var beginValue = el.scrollTop;\n var rAF = window.requestAnimationFrame || function (func) {\n return setTimeout(func, 16);\n };\n var frameFunc = function frameFunc() {\n var progress = (Date.now() - beginTime) / 500;\n if (progress < 1) {\n el.scrollTop = beginValue * (1 - easeInOutCubic(progress));\n rAF(frameFunc);\n } else {\n el.scrollTop = 0;\n }\n };\n rAF(frameFunc);\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.container.removeEventListener('scroll', this.throttledScrollHandler);\n }\n});\n// CONCATENATED MODULE: ./packages/backtop/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_backtop_src_mainvue_type_script_lang_js_ = (backtop_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/backtop/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar backtop_src_main_component = normalizeComponent(\n packages_backtop_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_257dd4a9_render,\n mainvue_type_template_id_257dd4a9_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var backtop_src_main_api; }\nbacktop_src_main_component.options.__file = \"packages/backtop/src/main.vue\"\n/* harmony default export */ var backtop_src_main = (backtop_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/backtop/index.js\n\n\n/* istanbul ignore next */\nbacktop_src_main.install = function (Vue) {\n Vue.component(backtop_src_main.name, backtop_src_main);\n};\n\n/* harmony default export */ var backtop = (backtop_src_main);\n// CONCATENATED MODULE: ./packages/infinite-scroll/src/main.js\n\n\n\n\nvar getStyleComputedProperty = function getStyleComputedProperty(element, property) {\n if (element === window) {\n element = document.documentElement;\n }\n\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n};\n\nvar entries = function entries(obj) {\n return Object.keys(obj || {}).map(function (key) {\n return [key, obj[key]];\n });\n};\n\nvar getPositionSize = function getPositionSize(el, prop) {\n return el === window || el === document ? document.documentElement[prop] : el[prop];\n};\n\nvar getOffsetHeight = function getOffsetHeight(el) {\n return getPositionSize(el, 'offsetHeight');\n};\n\nvar getClientHeight = function getClientHeight(el) {\n return getPositionSize(el, 'clientHeight');\n};\n\nvar scope = 'ElInfiniteScroll';\nvar attributes = {\n delay: {\n type: Number,\n default: 200\n },\n distance: {\n type: Number,\n default: 0\n },\n disabled: {\n type: Boolean,\n default: false\n },\n immediate: {\n type: Boolean,\n default: true\n }\n};\n\nvar main_getScrollOptions = function getScrollOptions(el, vm) {\n if (!Object(types_[\"isHtmlElement\"])(el)) return {};\n\n return entries(attributes).reduce(function (map, _ref) {\n var key = _ref[0],\n option = _ref[1];\n var type = option.type,\n defaultValue = option.default;\n\n var value = el.getAttribute('infinite-scroll-' + key);\n value = Object(types_[\"isUndefined\"])(vm[value]) ? value : vm[value];\n switch (type) {\n case Number:\n value = Number(value);\n value = Number.isNaN(value) ? defaultValue : value;\n break;\n case Boolean:\n value = Object(types_[\"isDefined\"])(value) ? value === 'false' ? false : Boolean(value) : defaultValue;\n break;\n default:\n value = type(value);\n }\n map[key] = value;\n return map;\n }, {});\n};\n\nvar getElementTop = function getElementTop(el) {\n return el.getBoundingClientRect().top;\n};\n\nvar main_handleScroll = function handleScroll(cb) {\n var _scope = this[scope],\n el = _scope.el,\n vm = _scope.vm,\n container = _scope.container,\n observer = _scope.observer;\n\n var _getScrollOptions = main_getScrollOptions(el, vm),\n distance = _getScrollOptions.distance,\n disabled = _getScrollOptions.disabled;\n\n if (disabled) return;\n\n var containerInfo = container.getBoundingClientRect();\n if (!containerInfo.width && !containerInfo.height) return;\n\n var shouldTrigger = false;\n\n if (container === el) {\n // be aware of difference between clientHeight & offsetHeight & window.getComputedStyle().height\n var scrollBottom = container.scrollTop + getClientHeight(container);\n shouldTrigger = container.scrollHeight - scrollBottom <= distance;\n } else {\n var heightBelowTop = getOffsetHeight(el) + getElementTop(el) - getElementTop(container);\n var offsetHeight = getOffsetHeight(container);\n var borderBottom = Number.parseFloat(getStyleComputedProperty(container, 'borderBottomWidth'));\n shouldTrigger = heightBelowTop - offsetHeight + borderBottom <= distance;\n }\n\n if (shouldTrigger && Object(types_[\"isFunction\"])(cb)) {\n cb.call(vm);\n } else if (observer) {\n observer.disconnect();\n this[scope].observer = null;\n }\n};\n\n/* harmony default export */ var infinite_scroll_src_main = ({\n name: 'InfiniteScroll',\n inserted: function inserted(el, binding, vnode) {\n var cb = binding.value;\n\n var vm = vnode.context;\n // only include vertical scroll\n var container = Object(dom_[\"getScrollContainer\"])(el, true);\n\n var _getScrollOptions2 = main_getScrollOptions(el, vm),\n delay = _getScrollOptions2.delay,\n immediate = _getScrollOptions2.immediate;\n\n var onScroll = debounce_default()(delay, main_handleScroll.bind(el, cb));\n\n el[scope] = { el: el, vm: vm, container: container, onScroll: onScroll };\n\n if (container) {\n container.addEventListener('scroll', onScroll);\n\n if (immediate) {\n var observer = el[scope].observer = new MutationObserver(onScroll);\n observer.observe(container, { childList: true, subtree: true });\n onScroll();\n }\n }\n },\n unbind: function unbind(el) {\n var _el$scope = el[scope],\n container = _el$scope.container,\n onScroll = _el$scope.onScroll;\n\n if (container) {\n container.removeEventListener('scroll', onScroll);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/infinite-scroll/index.js\n\n\n/* istanbul ignore next */\ninfinite_scroll_src_main.install = function (Vue) {\n Vue.directive(infinite_scroll_src_main.name, infinite_scroll_src_main);\n};\n\n/* harmony default export */ var infinite_scroll = (infinite_scroll_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/page-header/src/main.vue?vue&type=template&id=5070954c&\nvar mainvue_type_template_id_5070954c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-page-header\" }, [\n _c(\n \"div\",\n {\n staticClass: \"el-page-header__left\",\n on: {\n click: function($event) {\n _vm.$emit(\"back\")\n }\n }\n },\n [\n _c(\"i\", { staticClass: \"el-icon-back\" }),\n _c(\n \"div\",\n { staticClass: \"el-page-header__title\" },\n [_vm._t(\"title\", [_vm._v(_vm._s(_vm.title))])],\n 2\n )\n ]\n ),\n _c(\n \"div\",\n { staticClass: \"el-page-header__content\" },\n [_vm._t(\"content\", [_vm._v(_vm._s(_vm.content))])],\n 2\n )\n ])\n}\nvar mainvue_type_template_id_5070954c_staticRenderFns = []\nmainvue_type_template_id_5070954c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/page-header/src/main.vue?vue&type=template&id=5070954c&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/page-header/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ var page_header_src_mainvue_type_script_lang_js_ = ({\n name: 'ElPageHeader',\n\n props: {\n title: {\n type: String,\n default: function _default() {\n return Object(lib_locale_[\"t\"])('el.pageHeader.title');\n }\n },\n content: String\n }\n});\n// CONCATENATED MODULE: ./packages/page-header/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_page_header_src_mainvue_type_script_lang_js_ = (page_header_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/page-header/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar page_header_src_main_component = normalizeComponent(\n packages_page_header_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_5070954c_render,\n mainvue_type_template_id_5070954c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var page_header_src_main_api; }\npage_header_src_main_component.options.__file = \"packages/page-header/src/main.vue\"\n/* harmony default export */ var page_header_src_main = (page_header_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/page-header/index.js\n\n\n/* istanbul ignore next */\npage_header_src_main.install = function (Vue) {\n Vue.component(page_header_src_main.name, page_header_src_main);\n};\n\n/* harmony default export */ var page_header = (page_header_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\nvar cascader_panelvue_type_template_id_34932346_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\"el-cascader-panel\", _vm.border && \"is-bordered\"],\n on: { keydown: _vm.handleKeyDown }\n },\n _vm._l(_vm.menus, function(menu, index) {\n return _c(\"cascader-menu\", {\n key: index,\n ref: \"menu\",\n refInFor: true,\n attrs: { index: index, nodes: menu }\n })\n }),\n 1\n )\n}\nvar cascader_panelvue_type_template_id_34932346_staticRenderFns = []\ncascader_panelvue_type_template_id_34932346_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=template&id=34932346&\n\n// EXTERNAL MODULE: external \"element-ui/lib/radio\"\nvar radio_ = __webpack_require__(43);\nvar radio_default = /*#__PURE__*/__webpack_require__.n(radio_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n\n\n\n\n\n\nvar stopPropagation = function stopPropagation(e) {\n return e.stopPropagation();\n};\n\n/* harmony default export */ var cascader_nodevue_type_script_lang_js_ = ({\n inject: ['panel'],\n\n components: {\n ElCheckbox: checkbox_default.a,\n ElRadio: radio_default.a\n },\n\n props: {\n node: {\n required: true\n },\n nodeId: String\n },\n\n computed: {\n config: function config() {\n return this.panel.config;\n },\n isLeaf: function isLeaf() {\n return this.node.isLeaf;\n },\n isDisabled: function isDisabled() {\n return this.node.isDisabled;\n },\n checkedValue: function checkedValue() {\n return this.panel.checkedValue;\n },\n isChecked: function isChecked() {\n return this.node.isSameNode(this.checkedValue);\n },\n inActivePath: function inActivePath() {\n return this.isInPath(this.panel.activePath);\n },\n inCheckedPath: function inCheckedPath() {\n var _this = this;\n\n if (!this.config.checkStrictly) return false;\n\n return this.panel.checkedNodePaths.some(function (checkedPath) {\n return _this.isInPath(checkedPath);\n });\n },\n value: function value() {\n return this.node.getValueByOption();\n }\n },\n\n methods: {\n handleExpand: function handleExpand() {\n var _this2 = this;\n\n var panel = this.panel,\n node = this.node,\n isDisabled = this.isDisabled,\n config = this.config;\n var multiple = config.multiple,\n checkStrictly = config.checkStrictly;\n\n\n if (!checkStrictly && isDisabled || node.loading) return;\n\n if (config.lazy && !node.loaded) {\n panel.lazyLoad(node, function () {\n // do not use cached leaf value here, invoke this.isLeaf to get new value.\n var isLeaf = _this2.isLeaf;\n\n\n if (!isLeaf) _this2.handleExpand();\n if (multiple) {\n // if leaf sync checked state, else clear checked state\n var checked = isLeaf ? node.checked : false;\n _this2.handleMultiCheckChange(checked);\n }\n });\n } else {\n panel.handleExpand(node);\n }\n },\n handleCheckChange: function handleCheckChange() {\n var panel = this.panel,\n value = this.value,\n node = this.node;\n\n panel.handleCheckChange(value);\n panel.handleExpand(node);\n },\n handleMultiCheckChange: function handleMultiCheckChange(checked) {\n this.node.doCheck(checked);\n this.panel.calculateMultiCheckedValue();\n },\n isInPath: function isInPath(pathNodes) {\n var node = this.node;\n\n var selectedPathNode = pathNodes[node.level - 1] || {};\n return selectedPathNode.uid === node.uid;\n },\n renderPrefix: function renderPrefix(h) {\n var isLeaf = this.isLeaf,\n isChecked = this.isChecked,\n config = this.config;\n var checkStrictly = config.checkStrictly,\n multiple = config.multiple;\n\n\n if (multiple) {\n return this.renderCheckbox(h);\n } else if (checkStrictly) {\n return this.renderRadio(h);\n } else if (isLeaf && isChecked) {\n return this.renderCheckIcon(h);\n }\n\n return null;\n },\n renderPostfix: function renderPostfix(h) {\n var node = this.node,\n isLeaf = this.isLeaf;\n\n\n if (node.loading) {\n return this.renderLoadingIcon(h);\n } else if (!isLeaf) {\n return this.renderExpandIcon(h);\n }\n\n return null;\n },\n renderCheckbox: function renderCheckbox(h) {\n var node = this.node,\n config = this.config,\n isDisabled = this.isDisabled;\n\n var events = {\n on: { change: this.handleMultiCheckChange },\n nativeOn: {}\n };\n\n if (config.checkStrictly) {\n // when every node is selectable, click event should not trigger expand event.\n events.nativeOn.click = stopPropagation;\n }\n\n return h('el-checkbox', external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n value: node.checked,\n indeterminate: node.indeterminate,\n disabled: isDisabled\n }\n }, events]));\n },\n renderRadio: function renderRadio(h) {\n var checkedValue = this.checkedValue,\n value = this.value,\n isDisabled = this.isDisabled;\n\n // to keep same reference if value cause radio's checked state is calculated by reference comparision;\n\n if (Object(util_[\"isEqual\"])(value, checkedValue)) {\n value = checkedValue;\n }\n\n return h(\n 'el-radio',\n {\n attrs: {\n value: checkedValue,\n label: value,\n disabled: isDisabled\n },\n on: {\n 'change': this.handleCheckChange\n },\n nativeOn: {\n 'click': stopPropagation\n }\n },\n [h('span')]\n );\n },\n renderCheckIcon: function renderCheckIcon(h) {\n return h('i', { 'class': 'el-icon-check el-cascader-node__prefix' });\n },\n renderLoadingIcon: function renderLoadingIcon(h) {\n return h('i', { 'class': 'el-icon-loading el-cascader-node__postfix' });\n },\n renderExpandIcon: function renderExpandIcon(h) {\n return h('i', { 'class': 'el-icon-arrow-right el-cascader-node__postfix' });\n },\n renderContent: function renderContent(h) {\n var panel = this.panel,\n node = this.node;\n\n var render = panel.renderLabelFn;\n var vnode = render ? render({ node: node, data: node.data }) : null;\n\n return h(\n 'span',\n { 'class': 'el-cascader-node__label' },\n [vnode || node.label]\n );\n }\n },\n\n render: function render(h) {\n var _this3 = this;\n\n var inActivePath = this.inActivePath,\n inCheckedPath = this.inCheckedPath,\n isChecked = this.isChecked,\n isLeaf = this.isLeaf,\n isDisabled = this.isDisabled,\n config = this.config,\n nodeId = this.nodeId;\n var expandTrigger = config.expandTrigger,\n checkStrictly = config.checkStrictly,\n multiple = config.multiple;\n\n var disabled = !checkStrictly && isDisabled;\n var events = { on: {} };\n\n if (expandTrigger === 'click') {\n events.on.click = this.handleExpand;\n } else {\n events.on.mouseenter = function (e) {\n _this3.handleExpand();\n _this3.$emit('expand', e);\n };\n events.on.focus = function (e) {\n _this3.handleExpand();\n _this3.$emit('expand', e);\n };\n }\n if (isLeaf && !isDisabled && !checkStrictly && !multiple) {\n events.on.click = this.handleCheckChange;\n }\n\n return h(\n 'li',\n external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n role: 'menuitem',\n id: nodeId,\n 'aria-expanded': inActivePath,\n tabindex: disabled ? null : -1\n },\n 'class': {\n 'el-cascader-node': true,\n 'is-selectable': checkStrictly,\n 'in-active-path': inActivePath,\n 'in-checked-path': inCheckedPath,\n 'is-active': isChecked,\n 'is-disabled': disabled\n }\n }, events]),\n [this.renderPrefix(h), this.renderContent(h), this.renderPostfix(h)]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_nodevue_type_script_lang_js_ = (cascader_nodevue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-node.vue\nvar cascader_node_render, cascader_node_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar cascader_node_component = normalizeComponent(\n src_cascader_nodevue_type_script_lang_js_,\n cascader_node_render,\n cascader_node_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_node_api; }\ncascader_node_component.options.__file = \"packages/cascader-panel/src/cascader-node.vue\"\n/* harmony default export */ var cascader_node = (cascader_node_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n\n\n\n\n\n\n\n/* harmony default export */ var cascader_menuvue_type_script_lang_js_ = ({\n name: 'ElCascaderMenu',\n\n mixins: [locale_default.a],\n\n inject: ['panel'],\n\n components: {\n ElScrollbar: scrollbar_default.a,\n CascaderNode: cascader_node\n },\n\n props: {\n nodes: {\n type: Array,\n required: true\n },\n index: Number\n },\n\n data: function data() {\n return {\n activeNode: null,\n hoverTimer: null,\n id: Object(util_[\"generateId\"])()\n };\n },\n\n\n computed: {\n isEmpty: function isEmpty() {\n return !this.nodes.length;\n },\n menuId: function menuId() {\n return 'cascader-menu-' + this.id + '-' + this.index;\n }\n },\n\n methods: {\n handleExpand: function handleExpand(e) {\n this.activeNode = e.target;\n },\n handleMouseMove: function handleMouseMove(e) {\n var activeNode = this.activeNode,\n hoverTimer = this.hoverTimer;\n var hoverZone = this.$refs.hoverZone;\n\n\n if (!activeNode || !hoverZone) return;\n\n if (activeNode.contains(e.target)) {\n clearTimeout(hoverTimer);\n\n var _$el$getBoundingClien = this.$el.getBoundingClientRect(),\n left = _$el$getBoundingClien.left;\n\n var startX = e.clientX - left;\n var _$el = this.$el,\n offsetWidth = _$el.offsetWidth,\n offsetHeight = _$el.offsetHeight;\n\n var top = activeNode.offsetTop;\n var bottom = top + activeNode.offsetHeight;\n\n hoverZone.innerHTML = '\\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + top + ' L' + offsetWidth + ' 0 V' + top + ' Z\" />\\n <path style=\"pointer-events: auto;\" fill=\"transparent\" d=\"M' + startX + ' ' + bottom + ' L' + offsetWidth + ' ' + offsetHeight + ' V' + bottom + ' Z\" />\\n ';\n } else if (!hoverTimer) {\n this.hoverTimer = setTimeout(this.clearHoverZone, this.panel.config.hoverThreshold);\n }\n },\n clearHoverZone: function clearHoverZone() {\n var hoverZone = this.$refs.hoverZone;\n\n if (!hoverZone) return;\n hoverZone.innerHTML = '';\n },\n renderEmptyText: function renderEmptyText(h) {\n return h(\n 'div',\n { 'class': 'el-cascader-menu__empty-text' },\n [this.t('el.cascader.noData')]\n );\n },\n renderNodeList: function renderNodeList(h) {\n var menuId = this.menuId;\n var isHoverMenu = this.panel.isHoverMenu;\n\n var events = { on: {} };\n\n if (isHoverMenu) {\n events.on.expand = this.handleExpand;\n }\n\n var nodes = this.nodes.map(function (node, index) {\n var hasChildren = node.hasChildren;\n\n return h('cascader-node', external_babel_helper_vue_jsx_merge_props_default()([{\n key: node.uid,\n attrs: { node: node,\n 'node-id': menuId + '-' + index,\n 'aria-haspopup': hasChildren,\n 'aria-owns': hasChildren ? menuId : null\n }\n }, events]));\n });\n\n return [].concat(nodes, [isHoverMenu ? h('svg', { ref: 'hoverZone', 'class': 'el-cascader-menu__hover-zone' }) : null]);\n }\n },\n\n render: function render(h) {\n var isEmpty = this.isEmpty,\n menuId = this.menuId;\n\n var events = { nativeOn: {} };\n\n // optimize hover to expand experience (#8010)\n if (this.panel.isHoverMenu) {\n events.nativeOn.mousemove = this.handleMouseMove;\n // events.nativeOn.mouseleave = this.clearHoverZone;\n }\n\n return h(\n 'el-scrollbar',\n external_babel_helper_vue_jsx_merge_props_default()([{\n attrs: {\n tag: 'ul',\n role: 'menu',\n id: menuId,\n\n 'wrap-class': 'el-cascader-menu__wrap',\n 'view-class': {\n 'el-cascader-menu__list': true,\n 'is-empty': isEmpty\n }\n },\n 'class': 'el-cascader-menu' }, events]),\n [isEmpty ? this.renderEmptyText(h) : this.renderNodeList(h)]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_menuvue_type_script_lang_js_ = (cascader_menuvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-menu.vue\nvar cascader_menu_render, cascader_menu_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar cascader_menu_component = normalizeComponent(\n src_cascader_menuvue_type_script_lang_js_,\n cascader_menu_render,\n cascader_menu_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_menu_api; }\ncascader_menu_component.options.__file = \"packages/cascader-panel/src/cascader-menu.vue\"\n/* harmony default export */ var cascader_menu = (cascader_menu_component.exports);\n// CONCATENATED MODULE: ./packages/cascader-panel/src/node.js\nvar node_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction src_node_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar uid = 0;\n\nvar src_node_Node = function () {\n function Node(data, config, parentNode) {\n src_node_classCallCheck(this, Node);\n\n this.data = data;\n this.config = config;\n this.parent = parentNode || null;\n this.level = !this.parent ? 1 : this.parent.level + 1;\n this.uid = uid++;\n\n this.initState();\n this.initChildren();\n }\n\n Node.prototype.initState = function initState() {\n var _config = this.config,\n valueKey = _config.value,\n labelKey = _config.label;\n\n\n this.value = this.data[valueKey];\n this.label = this.data[labelKey];\n this.pathNodes = this.calculatePathNodes();\n this.path = this.pathNodes.map(function (node) {\n return node.value;\n });\n this.pathLabels = this.pathNodes.map(function (node) {\n return node.label;\n });\n\n // lazy load\n this.loading = false;\n this.loaded = false;\n };\n\n Node.prototype.initChildren = function initChildren() {\n var _this = this;\n\n var config = this.config;\n\n var childrenKey = config.children;\n var childrenData = this.data[childrenKey];\n this.hasChildren = Array.isArray(childrenData);\n this.children = (childrenData || []).map(function (child) {\n return new Node(child, config, _this);\n });\n };\n\n Node.prototype.calculatePathNodes = function calculatePathNodes() {\n var nodes = [this];\n var parent = this.parent;\n\n while (parent) {\n nodes.unshift(parent);\n parent = parent.parent;\n }\n\n return nodes;\n };\n\n Node.prototype.getPath = function getPath() {\n return this.path;\n };\n\n Node.prototype.getValue = function getValue() {\n return this.value;\n };\n\n Node.prototype.getValueByOption = function getValueByOption() {\n return this.config.emitPath ? this.getPath() : this.getValue();\n };\n\n Node.prototype.getText = function getText(allLevels, separator) {\n return allLevels ? this.pathLabels.join(separator) : this.label;\n };\n\n Node.prototype.isSameNode = function isSameNode(checkedValue) {\n var value = this.getValueByOption();\n return this.config.multiple && Array.isArray(checkedValue) ? checkedValue.some(function (val) {\n return Object(util_[\"isEqual\"])(val, value);\n }) : Object(util_[\"isEqual\"])(checkedValue, value);\n };\n\n Node.prototype.broadcast = function broadcast(event) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var handlerName = 'onParent' + Object(util_[\"capitalize\"])(event);\n\n this.children.forEach(function (child) {\n if (child) {\n // bottom up\n child.broadcast.apply(child, [event].concat(args));\n child[handlerName] && child[handlerName].apply(child, args);\n }\n });\n };\n\n Node.prototype.emit = function emit(event) {\n var parent = this.parent;\n\n var handlerName = 'onChild' + Object(util_[\"capitalize\"])(event);\n if (parent) {\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n parent[handlerName] && parent[handlerName].apply(parent, args);\n parent.emit.apply(parent, [event].concat(args));\n }\n };\n\n Node.prototype.onParentCheck = function onParentCheck(checked) {\n if (!this.isDisabled) {\n this.setCheckState(checked);\n }\n };\n\n Node.prototype.onChildCheck = function onChildCheck() {\n var children = this.children;\n\n var validChildren = children.filter(function (child) {\n return !child.isDisabled;\n });\n var checked = validChildren.length ? validChildren.every(function (child) {\n return child.checked;\n }) : false;\n\n this.setCheckState(checked);\n };\n\n Node.prototype.setCheckState = function setCheckState(checked) {\n var totalNum = this.children.length;\n var checkedNum = this.children.reduce(function (c, p) {\n var num = p.checked ? 1 : p.indeterminate ? 0.5 : 0;\n return c + num;\n }, 0);\n\n this.checked = checked;\n this.indeterminate = checkedNum !== totalNum && checkedNum > 0;\n };\n\n Node.prototype.syncCheckState = function syncCheckState(checkedValue) {\n var value = this.getValueByOption();\n var checked = this.isSameNode(checkedValue, value);\n\n this.doCheck(checked);\n };\n\n Node.prototype.doCheck = function doCheck(checked) {\n if (this.checked !== checked) {\n if (this.config.checkStrictly) {\n this.checked = checked;\n } else {\n // bottom up to unify the calculation of the indeterminate state\n this.broadcast('check', checked);\n this.setCheckState(checked);\n this.emit('check');\n }\n }\n };\n\n node_createClass(Node, [{\n key: 'isDisabled',\n get: function get() {\n var data = this.data,\n parent = this.parent,\n config = this.config;\n\n var disabledKey = config.disabled;\n var checkStrictly = config.checkStrictly;\n\n return data[disabledKey] || !checkStrictly && parent && parent.isDisabled;\n }\n }, {\n key: 'isLeaf',\n get: function get() {\n var data = this.data,\n loaded = this.loaded,\n hasChildren = this.hasChildren,\n children = this.children;\n var _config2 = this.config,\n lazy = _config2.lazy,\n leafKey = _config2.leaf;\n\n if (lazy) {\n var isLeaf = Object(shared_[\"isDef\"])(data[leafKey]) ? data[leafKey] : loaded ? !children.length : false;\n this.hasChildren = !isLeaf;\n return isLeaf;\n }\n return !hasChildren;\n }\n }]);\n\n return Node;\n}();\n\n/* harmony default export */ var src_node = (src_node_Node);\n// CONCATENATED MODULE: ./packages/cascader-panel/src/store.js\nfunction store_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n\nvar flatNodes = function flatNodes(data, leafOnly) {\n return data.reduce(function (res, node) {\n if (node.isLeaf) {\n res.push(node);\n } else {\n !leafOnly && res.push(node);\n res = res.concat(flatNodes(node.children, leafOnly));\n }\n return res;\n }, []);\n};\n\nvar store_Store = function () {\n function Store(data, config) {\n store_classCallCheck(this, Store);\n\n this.config = config;\n this.initNodes(data);\n }\n\n Store.prototype.initNodes = function initNodes(data) {\n var _this = this;\n\n data = Object(util_[\"coerceTruthyValueToArray\"])(data);\n this.nodes = data.map(function (nodeData) {\n return new src_node(nodeData, _this.config);\n });\n this.flattedNodes = this.getFlattedNodes(false, false);\n this.leafNodes = this.getFlattedNodes(true, false);\n };\n\n Store.prototype.appendNode = function appendNode(nodeData, parentNode) {\n var node = new src_node(nodeData, this.config, parentNode);\n var children = parentNode ? parentNode.children : this.nodes;\n\n children.push(node);\n };\n\n Store.prototype.appendNodes = function appendNodes(nodeDataList, parentNode) {\n var _this2 = this;\n\n nodeDataList = Object(util_[\"coerceTruthyValueToArray\"])(nodeDataList);\n nodeDataList.forEach(function (nodeData) {\n return _this2.appendNode(nodeData, parentNode);\n });\n };\n\n Store.prototype.getNodes = function getNodes() {\n return this.nodes;\n };\n\n Store.prototype.getFlattedNodes = function getFlattedNodes(leafOnly) {\n var cached = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n var cachedNodes = leafOnly ? this.leafNodes : this.flattedNodes;\n return cached ? cachedNodes : flatNodes(this.nodes, leafOnly);\n };\n\n Store.prototype.getNodeByValue = function getNodeByValue(value) {\n var nodes = this.getFlattedNodes(false, !this.config.lazy).filter(function (node) {\n return Object(util_[\"valueEquals\"])(node.path, value) || node.value === value;\n });\n return nodes && nodes.length ? nodes[0] : null;\n };\n\n return Store;\n}();\n\n/* harmony default export */ var cascader_panel_src_store = (store_Store);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\nvar cascader_panelvue_type_script_lang_js_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\nvar cascader_panelvue_type_script_lang_js_KeyCode = aria_utils_default.a.keys;\n\nvar DefaultProps = {\n expandTrigger: 'click', // or hover\n multiple: false,\n checkStrictly: false, // whether all nodes can be selected\n emitPath: true, // wether to emit an array of all levels value in which node is located\n lazy: false,\n lazyLoad: util_[\"noop\"],\n value: 'value',\n label: 'label',\n children: 'children',\n leaf: 'leaf',\n disabled: 'disabled',\n hoverThreshold: 500\n};\n\nvar cascader_panelvue_type_script_lang_js_isLeaf = function isLeaf(el) {\n return !el.getAttribute('aria-owns');\n};\n\nvar getSibling = function getSibling(el, distance) {\n var parentNode = el.parentNode;\n\n if (parentNode) {\n var siblings = parentNode.querySelectorAll('.el-cascader-node[tabindex=\"-1\"]');\n var index = Array.prototype.indexOf.call(siblings, el);\n return siblings[index + distance] || null;\n }\n return null;\n};\n\nvar getMenuIndex = function getMenuIndex(el, distance) {\n if (!el) return;\n var pieces = el.id.split('-');\n return Number(pieces[pieces.length - 2]);\n};\n\nvar focusNode = function focusNode(el) {\n if (!el) return;\n el.focus();\n !cascader_panelvue_type_script_lang_js_isLeaf(el) && el.click();\n};\n\nvar checkNode = function checkNode(el) {\n if (!el) return;\n\n var input = el.querySelector('input');\n if (input) {\n input.click();\n } else if (cascader_panelvue_type_script_lang_js_isLeaf(el)) {\n el.click();\n }\n};\n\n/* harmony default export */ var cascader_panelvue_type_script_lang_js_ = ({\n name: 'ElCascaderPanel',\n\n components: {\n CascaderMenu: cascader_menu\n },\n\n props: {\n value: {},\n options: Array,\n props: Object,\n border: {\n type: Boolean,\n default: true\n },\n renderLabel: Function\n },\n\n provide: function provide() {\n return {\n panel: this\n };\n },\n data: function data() {\n return {\n checkedValue: null,\n checkedNodePaths: [],\n store: [],\n menus: [],\n activePath: [],\n loadCount: 0\n };\n },\n\n\n computed: {\n config: function config() {\n return merge_default()(cascader_panelvue_type_script_lang_js_extends({}, DefaultProps), this.props || {});\n },\n multiple: function multiple() {\n return this.config.multiple;\n },\n checkStrictly: function checkStrictly() {\n return this.config.checkStrictly;\n },\n leafOnly: function leafOnly() {\n return !this.checkStrictly;\n },\n isHoverMenu: function isHoverMenu() {\n return this.config.expandTrigger === 'hover';\n },\n renderLabelFn: function renderLabelFn() {\n return this.renderLabel || this.$scopedSlots.default;\n }\n },\n\n watch: {\n options: {\n handler: function handler() {\n this.initStore();\n },\n immediate: true,\n deep: true\n },\n value: function value() {\n this.syncCheckedValue();\n this.checkStrictly && this.calculateCheckedNodePaths();\n },\n checkedValue: function checkedValue(val) {\n if (!Object(util_[\"isEqual\"])(val, this.value)) {\n this.checkStrictly && this.calculateCheckedNodePaths();\n this.$emit('input', val);\n this.$emit('change', val);\n }\n }\n },\n\n mounted: function mounted() {\n if (!this.isEmptyValue(this.value)) {\n this.syncCheckedValue();\n }\n },\n\n\n methods: {\n initStore: function initStore() {\n var config = this.config,\n options = this.options;\n\n if (config.lazy && Object(util_[\"isEmpty\"])(options)) {\n this.lazyLoad();\n } else {\n this.store = new cascader_panel_src_store(options, config);\n this.menus = [this.store.getNodes()];\n this.syncMenuState();\n }\n },\n syncCheckedValue: function syncCheckedValue() {\n var value = this.value,\n checkedValue = this.checkedValue;\n\n if (!Object(util_[\"isEqual\"])(value, checkedValue)) {\n this.activePath = [];\n this.checkedValue = value;\n this.syncMenuState();\n }\n },\n syncMenuState: function syncMenuState() {\n var multiple = this.multiple,\n checkStrictly = this.checkStrictly;\n\n this.syncActivePath();\n multiple && this.syncMultiCheckState();\n checkStrictly && this.calculateCheckedNodePaths();\n this.$nextTick(this.scrollIntoView);\n },\n syncMultiCheckState: function syncMultiCheckState() {\n var _this = this;\n\n var nodes = this.getFlattedNodes(this.leafOnly);\n\n nodes.forEach(function (node) {\n node.syncCheckState(_this.checkedValue);\n });\n },\n isEmptyValue: function isEmptyValue(val) {\n var multiple = this.multiple,\n config = this.config;\n var emitPath = config.emitPath;\n\n if (multiple || emitPath) {\n return Object(util_[\"isEmpty\"])(val);\n }\n return false;\n },\n syncActivePath: function syncActivePath() {\n var _this2 = this;\n\n var store = this.store,\n multiple = this.multiple,\n activePath = this.activePath,\n checkedValue = this.checkedValue;\n\n\n if (!Object(util_[\"isEmpty\"])(activePath)) {\n var nodes = activePath.map(function (node) {\n return _this2.getNodeByValue(node.getValue());\n });\n this.expandNodes(nodes);\n } else if (!this.isEmptyValue(checkedValue)) {\n var value = multiple ? checkedValue[0] : checkedValue;\n var checkedNode = this.getNodeByValue(value) || {};\n var _nodes = (checkedNode.pathNodes || []).slice(0, -1);\n this.expandNodes(_nodes);\n } else {\n this.activePath = [];\n this.menus = [store.getNodes()];\n }\n },\n expandNodes: function expandNodes(nodes) {\n var _this3 = this;\n\n nodes.forEach(function (node) {\n return _this3.handleExpand(node, true /* silent */);\n });\n },\n calculateCheckedNodePaths: function calculateCheckedNodePaths() {\n var _this4 = this;\n\n var checkedValue = this.checkedValue,\n multiple = this.multiple;\n\n var checkedValues = multiple ? Object(util_[\"coerceTruthyValueToArray\"])(checkedValue) : [checkedValue];\n this.checkedNodePaths = checkedValues.map(function (v) {\n var checkedNode = _this4.getNodeByValue(v);\n return checkedNode ? checkedNode.pathNodes : [];\n });\n },\n handleKeyDown: function handleKeyDown(e) {\n var target = e.target,\n keyCode = e.keyCode;\n\n\n switch (keyCode) {\n case cascader_panelvue_type_script_lang_js_KeyCode.up:\n var prev = getSibling(target, -1);\n focusNode(prev);\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.down:\n var next = getSibling(target, 1);\n focusNode(next);\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.left:\n var preMenu = this.$refs.menu[getMenuIndex(target) - 1];\n if (preMenu) {\n var expandedNode = preMenu.$el.querySelector('.el-cascader-node[aria-expanded=\"true\"]');\n focusNode(expandedNode);\n }\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.right:\n var nextMenu = this.$refs.menu[getMenuIndex(target) + 1];\n if (nextMenu) {\n var firstNode = nextMenu.$el.querySelector('.el-cascader-node[tabindex=\"-1\"]');\n focusNode(firstNode);\n }\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.enter:\n checkNode(target);\n break;\n case cascader_panelvue_type_script_lang_js_KeyCode.esc:\n case cascader_panelvue_type_script_lang_js_KeyCode.tab:\n this.$emit('close');\n break;\n default:\n return;\n }\n },\n handleExpand: function handleExpand(node, silent) {\n var activePath = this.activePath;\n var level = node.level;\n\n var path = activePath.slice(0, level - 1);\n var menus = this.menus.slice(0, level);\n\n if (!node.isLeaf) {\n path.push(node);\n menus.push(node.children);\n }\n\n this.activePath = path;\n this.menus = menus;\n\n if (!silent) {\n var pathValues = path.map(function (node) {\n return node.getValue();\n });\n var activePathValues = activePath.map(function (node) {\n return node.getValue();\n });\n if (!Object(util_[\"valueEquals\"])(pathValues, activePathValues)) {\n this.$emit('active-item-change', pathValues); // Deprecated\n this.$emit('expand-change', pathValues);\n }\n }\n },\n handleCheckChange: function handleCheckChange(value) {\n this.checkedValue = value;\n },\n lazyLoad: function lazyLoad(node, onFullfiled) {\n var _this5 = this;\n\n var config = this.config;\n\n if (!node) {\n node = node || { root: true, level: 0 };\n this.store = new cascader_panel_src_store([], config);\n this.menus = [this.store.getNodes()];\n }\n node.loading = true;\n var resolve = function resolve(dataList) {\n var parent = node.root ? null : node;\n dataList && dataList.length && _this5.store.appendNodes(dataList, parent);\n node.loading = false;\n node.loaded = true;\n\n // dispose default value on lazy load mode\n if (Array.isArray(_this5.checkedValue)) {\n var nodeValue = _this5.checkedValue[_this5.loadCount++];\n var valueKey = _this5.config.value;\n var leafKey = _this5.config.leaf;\n\n if (Array.isArray(dataList) && dataList.filter(function (item) {\n return item[valueKey] === nodeValue;\n }).length > 0) {\n var checkedNode = _this5.store.getNodeByValue(nodeValue);\n\n if (!checkedNode.data[leafKey]) {\n _this5.lazyLoad(checkedNode, function () {\n _this5.handleExpand(checkedNode);\n });\n }\n\n if (_this5.loadCount === _this5.checkedValue.length) {\n _this5.$parent.computePresentText();\n }\n }\n }\n\n onFullfiled && onFullfiled(dataList);\n };\n config.lazyLoad(node, resolve);\n },\n\n\n /**\n * public methods\n */\n calculateMultiCheckedValue: function calculateMultiCheckedValue() {\n this.checkedValue = this.getCheckedNodes(this.leafOnly).map(function (node) {\n return node.getValueByOption();\n });\n },\n scrollIntoView: function scrollIntoView() {\n if (this.$isServer) return;\n\n var menus = this.$refs.menu || [];\n menus.forEach(function (menu) {\n var menuElement = menu.$el;\n if (menuElement) {\n var container = menuElement.querySelector('.el-scrollbar__wrap');\n var activeNode = menuElement.querySelector('.el-cascader-node.is-active') || menuElement.querySelector('.el-cascader-node.in-active-path');\n scroll_into_view_default()(container, activeNode);\n }\n });\n },\n getNodeByValue: function getNodeByValue(val) {\n return this.store.getNodeByValue(val);\n },\n getFlattedNodes: function getFlattedNodes(leafOnly) {\n var cached = !this.config.lazy;\n return this.store.getFlattedNodes(leafOnly, cached);\n },\n getCheckedNodes: function getCheckedNodes(leafOnly) {\n var checkedValue = this.checkedValue,\n multiple = this.multiple;\n\n if (multiple) {\n var nodes = this.getFlattedNodes(leafOnly);\n return nodes.filter(function (node) {\n return node.checked;\n });\n } else {\n return this.isEmptyValue(checkedValue) ? [] : [this.getNodeByValue(checkedValue)];\n }\n },\n clearCheckedNodes: function clearCheckedNodes() {\n var config = this.config,\n leafOnly = this.leafOnly;\n var multiple = config.multiple,\n emitPath = config.emitPath;\n\n if (multiple) {\n this.getCheckedNodes(leafOnly).filter(function (node) {\n return !node.isDisabled;\n }).forEach(function (node) {\n return node.doCheck(false);\n });\n this.calculateMultiCheckedValue();\n } else {\n this.checkedValue = emitPath ? [] : null;\n }\n }\n }\n});\n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_cascader_panelvue_type_script_lang_js_ = (cascader_panelvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/cascader-panel/src/cascader-panel.vue\n\n\n\n\n\n/* normalize component */\n\nvar cascader_panel_component = normalizeComponent(\n src_cascader_panelvue_type_script_lang_js_,\n cascader_panelvue_type_template_id_34932346_render,\n cascader_panelvue_type_template_id_34932346_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var cascader_panel_api; }\ncascader_panel_component.options.__file = \"packages/cascader-panel/src/cascader-panel.vue\"\n/* harmony default export */ var cascader_panel = (cascader_panel_component.exports);\n// CONCATENATED MODULE: ./packages/cascader-panel/index.js\n\n\n/* istanbul ignore next */\ncascader_panel.install = function (Vue) {\n Vue.component(cascader_panel.name, cascader_panel);\n};\n\n/* harmony default export */ var packages_cascader_panel = (cascader_panel);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/avatar/src/main.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var avatar_src_mainvue_type_script_lang_js_ = ({\n name: 'ElAvatar',\n\n props: {\n size: {\n type: [Number, String],\n validator: function validator(val) {\n if (typeof val === 'string') {\n return ['large', 'medium', 'small'].includes(val);\n }\n return typeof val === 'number';\n }\n },\n shape: {\n type: String,\n default: 'circle',\n validator: function validator(val) {\n return ['circle', 'square'].includes(val);\n }\n },\n icon: String,\n src: String,\n alt: String,\n srcSet: String,\n error: Function,\n fit: {\n type: String,\n default: 'cover'\n }\n },\n\n data: function data() {\n return {\n isImageExist: true\n };\n },\n\n\n computed: {\n avatarClass: function avatarClass() {\n var size = this.size,\n icon = this.icon,\n shape = this.shape;\n\n var classList = ['el-avatar'];\n\n if (size && typeof size === 'string') {\n classList.push('el-avatar--' + size);\n }\n\n if (icon) {\n classList.push('el-avatar--icon');\n }\n\n if (shape) {\n classList.push('el-avatar--' + shape);\n }\n\n return classList.join(' ');\n }\n },\n\n methods: {\n handleError: function handleError() {\n var error = this.error;\n\n var errorFlag = error ? error() : undefined;\n if (errorFlag !== false) {\n this.isImageExist = false;\n }\n },\n renderAvatar: function renderAvatar() {\n var h = this.$createElement;\n var icon = this.icon,\n src = this.src,\n alt = this.alt,\n isImageExist = this.isImageExist,\n srcSet = this.srcSet,\n fit = this.fit;\n\n\n if (isImageExist && src) {\n return h('img', {\n attrs: {\n src: src,\n\n alt: alt,\n srcSet: srcSet\n },\n on: {\n 'error': this.handleError\n },\n style: { 'object-fit': fit } });\n }\n\n if (icon) {\n return h('i', { 'class': icon });\n }\n\n return this.$slots.default;\n }\n },\n\n render: function render() {\n var h = arguments[0];\n var avatarClass = this.avatarClass,\n size = this.size;\n\n\n var sizeStyle = typeof size === 'number' ? {\n height: size + 'px',\n width: size + 'px',\n lineHeight: size + 'px'\n } : {};\n\n return h(\n 'span',\n { 'class': avatarClass, style: sizeStyle },\n [this.renderAvatar()]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/avatar/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_avatar_src_mainvue_type_script_lang_js_ = (avatar_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/avatar/src/main.vue\nvar src_main_render, src_main_staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar avatar_src_main_component = normalizeComponent(\n packages_avatar_src_mainvue_type_script_lang_js_,\n src_main_render,\n src_main_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var avatar_src_main_api; }\navatar_src_main_component.options.__file = \"packages/avatar/src/main.vue\"\n/* harmony default export */ var avatar_src_main = (avatar_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/avatar/index.js\n\n\n/* istanbul ignore next */\navatar_src_main.install = function (Vue) {\n Vue.component(avatar_src_main.name, avatar_src_main);\n};\n\n/* harmony default export */ var avatar = (avatar_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/drawer/src/main.vue?vue&type=template&id=a4885264&\nvar mainvue_type_template_id_a4885264_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"transition\",\n {\n attrs: { name: \"el-drawer-fade\" },\n on: { \"after-enter\": _vm.afterEnter, \"after-leave\": _vm.afterLeave }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-drawer__wrapper\",\n attrs: { tabindex: \"-1\" }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-drawer__container\",\n class: _vm.visible && \"el-drawer__open\",\n attrs: { role: \"document\", tabindex: \"-1\" },\n on: {\n click: function($event) {\n if ($event.target !== $event.currentTarget) {\n return null\n }\n return _vm.handleWrapperClick($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n ref: \"drawer\",\n staticClass: \"el-drawer\",\n class: [_vm.direction, _vm.customClass],\n style: _vm.isHorizontal\n ? \"width: \" + _vm.drawerSize\n : \"height: \" + _vm.drawerSize,\n attrs: {\n \"aria-modal\": \"true\",\n \"aria-labelledby\": \"el-drawer__title\",\n \"aria-label\": _vm.title,\n role: \"dialog\",\n tabindex: \"-1\"\n }\n },\n [\n _vm.withHeader\n ? _c(\n \"header\",\n {\n staticClass: \"el-drawer__header\",\n attrs: { id: \"el-drawer__title\" }\n },\n [\n _vm._t(\"title\", [\n _c(\n \"span\",\n { attrs: { role: \"heading\", title: _vm.title } },\n [_vm._v(_vm._s(_vm.title))]\n )\n ]),\n _vm.showClose\n ? _c(\n \"button\",\n {\n staticClass: \"el-drawer__close-btn\",\n attrs: {\n \"aria-label\":\n \"close \" + (_vm.title || \"drawer\"),\n type: \"button\"\n },\n on: { click: _vm.closeDrawer }\n },\n [\n _c(\"i\", {\n staticClass:\n \"el-dialog__close el-icon el-icon-close\"\n })\n ]\n )\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _vm.rendered\n ? _c(\n \"section\",\n { staticClass: \"el-drawer__body\" },\n [_vm._t(\"default\")],\n 2\n )\n : _vm._e()\n ]\n )\n ]\n )\n ]\n )\n ]\n )\n}\nvar mainvue_type_template_id_a4885264_staticRenderFns = []\nmainvue_type_template_id_a4885264_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/drawer/src/main.vue?vue&type=template&id=a4885264&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/drawer/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var drawer_src_mainvue_type_script_lang_js_ = ({\n name: 'ElDrawer',\n mixins: [popup_default.a, emitter_default.a],\n props: {\n appendToBody: {\n type: Boolean,\n default: false\n },\n beforeClose: {\n type: Function\n },\n customClass: {\n type: String,\n default: ''\n },\n closeOnPressEscape: {\n type: Boolean,\n default: true\n },\n destroyOnClose: {\n type: Boolean,\n default: false\n },\n modal: {\n type: Boolean,\n default: true\n },\n direction: {\n type: String,\n default: 'rtl',\n validator: function validator(val) {\n return ['ltr', 'rtl', 'ttb', 'btt'].indexOf(val) !== -1;\n }\n },\n modalAppendToBody: {\n type: Boolean,\n default: true\n },\n showClose: {\n type: Boolean,\n default: true\n },\n size: {\n type: [Number, String],\n default: '30%'\n },\n title: {\n type: String,\n default: ''\n },\n visible: {\n type: Boolean\n },\n wrapperClosable: {\n type: Boolean,\n default: true\n },\n withHeader: {\n type: Boolean,\n default: true\n }\n },\n computed: {\n isHorizontal: function isHorizontal() {\n return this.direction === 'rtl' || this.direction === 'ltr';\n },\n drawerSize: function drawerSize() {\n return typeof this.size === 'number' ? this.size + 'px' : this.size;\n }\n },\n data: function data() {\n return {\n closed: false,\n prevActiveElement: null\n };\n },\n\n watch: {\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n this.closed = false;\n this.$emit('open');\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n this.prevActiveElement = document.activeElement;\n } else {\n if (!this.closed) {\n this.$emit('close');\n if (this.destroyOnClose === true) {\n this.rendered = false;\n }\n }\n this.$nextTick(function () {\n if (_this.prevActiveElement) {\n _this.prevActiveElement.focus();\n }\n });\n }\n }\n },\n methods: {\n afterEnter: function afterEnter() {\n this.$emit('opened');\n },\n afterLeave: function afterLeave() {\n this.$emit('closed');\n },\n hide: function hide(cancel) {\n if (cancel !== false) {\n this.$emit('update:visible', false);\n this.$emit('close');\n if (this.destroyOnClose === true) {\n this.rendered = false;\n }\n this.closed = true;\n }\n },\n handleWrapperClick: function handleWrapperClick() {\n if (this.wrapperClosable) {\n this.closeDrawer();\n }\n },\n closeDrawer: function closeDrawer() {\n if (typeof this.beforeClose === 'function') {\n this.beforeClose(this.hide);\n } else {\n this.hide();\n }\n },\n handleClose: function handleClose() {\n // This method here will be called by PopupManger, when the `closeOnPressEscape` was set to true\n // pressing `ESC` will call this method, and also close the drawer.\n // This method also calls `beforeClose` if there was one.\n this.closeDrawer();\n }\n },\n mounted: function mounted() {\n if (this.visible) {\n this.rendered = true;\n this.open();\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n }\n },\n destroyed: function destroyed() {\n // if appendToBody is true, remove DOM node after destroy\n if (this.appendToBody && this.$el && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/drawer/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_drawer_src_mainvue_type_script_lang_js_ = (drawer_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/drawer/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar drawer_src_main_component = normalizeComponent(\n packages_drawer_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_a4885264_render,\n mainvue_type_template_id_a4885264_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var drawer_src_main_api; }\ndrawer_src_main_component.options.__file = \"packages/drawer/src/main.vue\"\n/* harmony default export */ var drawer_src_main = (drawer_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/drawer/index.js\n\n\n/* istanbul ignore next */\ndrawer_src_main.install = function (Vue) {\n Vue.component(drawer_src_main.name, drawer_src_main);\n};\n\n/* harmony default export */ var drawer = (drawer_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/popconfirm/src/main.vue?vue&type=template&id=048de730&\nvar mainvue_type_template_id_048de730_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"el-popover\",\n _vm._b(\n {\n attrs: { trigger: \"click\" },\n model: {\n value: _vm.visible,\n callback: function($$v) {\n _vm.visible = $$v\n },\n expression: \"visible\"\n }\n },\n \"el-popover\",\n _vm.$attrs,\n false\n ),\n [\n _c(\"div\", { staticClass: \"el-popconfirm\" }, [\n _c(\"p\", { staticClass: \"el-popconfirm__main\" }, [\n !_vm.hideIcon\n ? _c(\"i\", {\n staticClass: \"el-popconfirm__icon\",\n class: _vm.icon,\n style: { color: _vm.iconColor }\n })\n : _vm._e(),\n _vm._v(\"\\n \" + _vm._s(_vm.title) + \"\\n \")\n ]),\n _c(\n \"div\",\n { staticClass: \"el-popconfirm__action\" },\n [\n _c(\n \"el-button\",\n {\n attrs: { size: \"mini\", type: _vm.cancelButtonType },\n on: { click: _vm.cancel }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.displayCancelButtonText) +\n \"\\n \"\n )\n ]\n ),\n _c(\n \"el-button\",\n {\n attrs: { size: \"mini\", type: _vm.confirmButtonType },\n on: { click: _vm.confirm }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.displayConfirmButtonText) +\n \"\\n \"\n )\n ]\n )\n ],\n 1\n )\n ]),\n _vm._t(\"reference\", null, { slot: \"reference\" })\n ],\n 2\n )\n}\nvar mainvue_type_template_id_048de730_staticRenderFns = []\nmainvue_type_template_id_048de730_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue?vue&type=template&id=048de730&\n\n// EXTERNAL MODULE: external \"element-ui/lib/popover\"\nvar popover_ = __webpack_require__(44);\nvar popover_default = /*#__PURE__*/__webpack_require__.n(popover_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/popconfirm/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var popconfirm_src_mainvue_type_script_lang_js_ = ({\n name: 'ElPopconfirm',\n props: {\n title: {\n type: String\n },\n confirmButtonText: {\n type: String\n },\n cancelButtonText: {\n type: String\n },\n confirmButtonType: {\n type: String,\n default: 'primary'\n },\n cancelButtonType: {\n type: String,\n default: 'text'\n },\n icon: {\n type: String,\n default: 'el-icon-question'\n },\n iconColor: {\n type: String,\n default: '#f90'\n },\n hideIcon: {\n type: Boolean,\n default: false\n }\n },\n components: {\n ElPopover: popover_default.a,\n ElButton: button_default.a\n },\n data: function data() {\n return {\n visible: false\n };\n },\n\n computed: {\n displayConfirmButtonText: function displayConfirmButtonText() {\n return this.confirmButtonText || Object(lib_locale_[\"t\"])('el.popconfirm.confirmButtonText');\n },\n displayCancelButtonText: function displayCancelButtonText() {\n return this.cancelButtonText || Object(lib_locale_[\"t\"])('el.popconfirm.cancelButtonText');\n }\n },\n methods: {\n confirm: function confirm() {\n this.visible = false;\n this.$emit('confirm');\n },\n cancel: function cancel() {\n this.visible = false;\n this.$emit('cancel');\n }\n }\n});\n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_popconfirm_src_mainvue_type_script_lang_js_ = (popconfirm_src_mainvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/popconfirm/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar popconfirm_src_main_component = normalizeComponent(\n packages_popconfirm_src_mainvue_type_script_lang_js_,\n mainvue_type_template_id_048de730_render,\n mainvue_type_template_id_048de730_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var popconfirm_src_main_api; }\npopconfirm_src_main_component.options.__file = \"packages/popconfirm/src/main.vue\"\n/* harmony default export */ var popconfirm_src_main = (popconfirm_src_main_component.exports);\n// CONCATENATED MODULE: ./packages/popconfirm/index.js\n\n\n/* istanbul ignore next */\npopconfirm_src_main.install = function (Vue) {\n Vue.component(popconfirm_src_main.name, popconfirm_src_main);\n};\n\n/* harmony default export */ var popconfirm = (popconfirm_src_main);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/index.vue?vue&type=template&id=7f659269&\nvar srcvue_type_template_id_7f659269_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n [\n _vm.uiLoading\n ? [\n _c(\n \"div\",\n _vm._b(\n { class: [\"el-skeleton\", _vm.animated ? \"is-animated\" : \"\"] },\n \"div\",\n _vm.$attrs,\n false\n ),\n [\n _vm._l(_vm.count, function(i) {\n return [\n _vm.loading\n ? _vm._t(\n \"template\",\n _vm._l(_vm.rows, function(item) {\n return _c(\"el-skeleton-item\", {\n key: i + \"-\" + item,\n class: {\n \"el-skeleton__paragraph\": item !== 1,\n \"is-first\": item === 1,\n \"is-last\": item === _vm.rows && _vm.rows > 1\n },\n attrs: { variant: \"p\" }\n })\n })\n )\n : _vm._e()\n ]\n })\n ],\n 2\n )\n ]\n : [_vm._t(\"default\", null, null, _vm.$attrs)]\n ],\n 2\n )\n}\nvar srcvue_type_template_id_7f659269_staticRenderFns = []\nsrcvue_type_template_id_7f659269_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/skeleton/src/index.vue?vue&type=template&id=7f659269&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/index.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var skeleton_srcvue_type_script_lang_js_ = ({\n name: 'ElSkeleton',\n props: {\n animated: {\n type: Boolean,\n default: false\n },\n count: {\n type: Number,\n default: 1\n },\n rows: {\n type: Number,\n default: 4\n },\n loading: {\n type: Boolean,\n default: true\n },\n throttle: {\n type: Number,\n default: 0\n }\n },\n watch: {\n loading: {\n handler: function handler(loading) {\n var _this = this;\n\n if (this.throttle <= 0) {\n this.uiLoading = loading;\n return;\n }\n if (loading) {\n clearTimeout(this.timeoutHandle);\n this.timeoutHandle = setTimeout(function () {\n _this.uiLoading = _this.loading;\n }, this.throttle);\n } else {\n this.uiLoading = loading;\n }\n },\n\n immediate: true\n }\n },\n data: function data() {\n return {\n uiLoading: this.throttle <= 0 ? this.loading : false\n };\n }\n});\n// CONCATENATED MODULE: ./packages/skeleton/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_skeleton_srcvue_type_script_lang_js_ = (skeleton_srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/skeleton/src/index.vue\n\n\n\n\n\n/* normalize component */\n\nvar skeleton_src_component = normalizeComponent(\n packages_skeleton_srcvue_type_script_lang_js_,\n srcvue_type_template_id_7f659269_render,\n srcvue_type_template_id_7f659269_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var skeleton_src_api; }\nskeleton_src_component.options.__file = \"packages/skeleton/src/index.vue\"\n/* harmony default export */ var skeleton_src = (skeleton_src_component.exports);\n// CONCATENATED MODULE: ./packages/skeleton/index.js\n\n\n/* istanbul ignore next */\nskeleton_src.install = function (Vue) {\n Vue.component(skeleton_src.name, skeleton_src);\n};\n\n/* harmony default export */ var skeleton = (skeleton_src);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/item.vue?vue&type=template&id=4bc8804c&\nvar itemvue_type_template_id_4bc8804c_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { class: [\"el-skeleton__item\", \"el-skeleton__\" + _vm.variant] },\n [_vm.variant === \"image\" ? _c(\"img-placeholder\") : _vm._e()],\n 1\n )\n}\nvar itemvue_type_template_id_4bc8804c_staticRenderFns = []\nitemvue_type_template_id_4bc8804c_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/skeleton/src/item.vue?vue&type=template&id=4bc8804c&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/img-placeholder.vue?vue&type=template&id=1b2cb5c0&\nvar img_placeholdervue_type_template_id_1b2cb5c0_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: { viewBox: \"0 0 1024 1024\", xmlns: \"http://www.w3.org/2000/svg\" }\n },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M64 896V128h896v768H64z m64-128l192-192 116.352 116.352L640 448l256 307.2V192H128v576z m224-480a96 96 0 1 1-0.064 192.064A96 96 0 0 1 352 288z\"\n }\n })\n ]\n )\n}\nvar img_placeholdervue_type_template_id_1b2cb5c0_staticRenderFns = []\nimg_placeholdervue_type_template_id_1b2cb5c0_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/skeleton/src/img-placeholder.vue?vue&type=template&id=1b2cb5c0&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/img-placeholder.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var img_placeholdervue_type_script_lang_js_ = ({\n name: 'ImgPlaceholder'\n});\n// CONCATENATED MODULE: ./packages/skeleton/src/img-placeholder.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_img_placeholdervue_type_script_lang_js_ = (img_placeholdervue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/skeleton/src/img-placeholder.vue\n\n\n\n\n\n/* normalize component */\n\nvar img_placeholder_component = normalizeComponent(\n src_img_placeholdervue_type_script_lang_js_,\n img_placeholdervue_type_template_id_1b2cb5c0_render,\n img_placeholdervue_type_template_id_1b2cb5c0_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var img_placeholder_api; }\nimg_placeholder_component.options.__file = \"packages/skeleton/src/img-placeholder.vue\"\n/* harmony default export */ var img_placeholder = (img_placeholder_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/skeleton/src/item.vue?vue&type=script&lang=js&\nvar _components;\n\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var skeleton_src_itemvue_type_script_lang_js_ = ({\n name: 'ElSkeletonItem',\n props: {\n variant: {\n type: String,\n default: 'text'\n }\n },\n components: (_components = {}, _components[img_placeholder.name] = img_placeholder, _components)\n});\n// CONCATENATED MODULE: ./packages/skeleton/src/item.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_skeleton_src_itemvue_type_script_lang_js_ = (skeleton_src_itemvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/skeleton/src/item.vue\n\n\n\n\n\n/* normalize component */\n\nvar skeleton_src_item_component = normalizeComponent(\n packages_skeleton_src_itemvue_type_script_lang_js_,\n itemvue_type_template_id_4bc8804c_render,\n itemvue_type_template_id_4bc8804c_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var skeleton_src_item_api; }\nskeleton_src_item_component.options.__file = \"packages/skeleton/src/item.vue\"\n/* harmony default export */ var skeleton_src_item = (skeleton_src_item_component.exports);\n// CONCATENATED MODULE: ./packages/skeleton-item/index.js\n\n\n/* istanbul ignore next */\nskeleton_src_item.install = function (Vue) {\n Vue.component(skeleton_src_item.name, skeleton_src_item);\n};\n\n/* harmony default export */ var skeleton_item = (skeleton_src_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/empty/src/index.vue?vue&type=template&id=347ced91&\nvar srcvue_type_template_id_347ced91_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-empty\" }, [\n _c(\n \"div\",\n { staticClass: \"el-empty__image\", style: _vm.imageStyle },\n [\n _vm.image\n ? _c(\"img\", {\n attrs: { src: _vm.image, ondragstart: \"return false\" }\n })\n : _vm._t(\"image\", [_c(\"img-empty\")])\n ],\n 2\n ),\n _c(\n \"div\",\n { staticClass: \"el-empty__description\" },\n [\n _vm.$slots.description\n ? _vm._t(\"description\")\n : _c(\"p\", [_vm._v(_vm._s(_vm.emptyDescription))])\n ],\n 2\n ),\n _vm.$slots.default\n ? _c(\"div\", { staticClass: \"el-empty__bottom\" }, [_vm._t(\"default\")], 2)\n : _vm._e()\n ])\n}\nvar srcvue_type_template_id_347ced91_staticRenderFns = []\nsrcvue_type_template_id_347ced91_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/empty/src/index.vue?vue&type=template&id=347ced91&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/empty/src/img-empty.vue?vue&type=template&id=42918b82&\nvar img_emptyvue_type_template_id_42918b82_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n {\n attrs: {\n viewBox: \"0 0 79 86\",\n version: \"1.1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n \"xmlns:xlink\": \"http://www.w3.org/1999/xlink\"\n }\n },\n [\n _c(\n \"defs\",\n [\n _c(\n \"linearGradient\",\n {\n attrs: {\n id: \"linearGradient-1-\" + _vm.id,\n x1: \"38.8503086%\",\n y1: \"0%\",\n x2: \"61.1496914%\",\n y2: \"100%\"\n }\n },\n [\n _c(\"stop\", { attrs: { \"stop-color\": \"#FCFCFD\", offset: \"0%\" } }),\n _c(\"stop\", { attrs: { \"stop-color\": \"#EEEFF3\", offset: \"100%\" } })\n ],\n 1\n ),\n _c(\n \"linearGradient\",\n {\n attrs: {\n id: \"linearGradient-2-\" + _vm.id,\n x1: \"0%\",\n y1: \"9.5%\",\n x2: \"100%\",\n y2: \"90.5%\"\n }\n },\n [\n _c(\"stop\", { attrs: { \"stop-color\": \"#FCFCFD\", offset: \"0%\" } }),\n _c(\"stop\", { attrs: { \"stop-color\": \"#E9EBEF\", offset: \"100%\" } })\n ],\n 1\n ),\n _c(\"rect\", {\n attrs: {\n id: \"path-3-\" + _vm.id,\n x: \"0\",\n y: \"0\",\n width: \"17\",\n height: \"36\"\n }\n })\n ],\n 1\n ),\n _c(\n \"g\",\n {\n attrs: {\n id: \"Illustrations\",\n stroke: \"none\",\n \"stroke-width\": \"1\",\n fill: \"none\",\n \"fill-rule\": \"evenodd\"\n }\n },\n [\n _c(\n \"g\",\n {\n attrs: {\n id: \"B-type\",\n transform: \"translate(-1268.000000, -535.000000)\"\n }\n },\n [\n _c(\n \"g\",\n {\n attrs: {\n id: \"Group-2\",\n transform: \"translate(1268.000000, 535.000000)\"\n }\n },\n [\n _c(\"path\", {\n attrs: {\n id: \"Oval-Copy-2\",\n d:\n \"M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z\",\n fill: \"#F7F8FC\"\n }\n }),\n _c(\"polygon\", {\n attrs: {\n id: \"Rectangle-Copy-14\",\n fill: \"#E5E7E9\",\n transform:\n \"translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) \",\n points: \"13 58 53 58 42 45 2 45\"\n }\n }),\n _c(\n \"g\",\n {\n attrs: {\n id: \"Group-Copy\",\n transform:\n \"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)\"\n }\n },\n [\n _c(\"polygon\", {\n attrs: {\n id: \"Rectangle-Copy-10\",\n fill: \"#E5E7E9\",\n transform:\n \"translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) \",\n points: \"2.84078316e-14 3 18 3 23 7 5 7\"\n }\n }),\n _c(\"polygon\", {\n attrs: {\n id: \"Rectangle-Copy-11\",\n fill: \"#EDEEF2\",\n points:\n \"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43\"\n }\n }),\n _c(\"rect\", {\n attrs: {\n id: \"Rectangle-Copy-12\",\n fill: \"url(#linearGradient-1-\" + _vm.id + \")\",\n transform:\n \"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) \",\n x: \"38\",\n y: \"7\",\n width: \"17\",\n height: \"36\"\n }\n }),\n _c(\"polygon\", {\n attrs: {\n id: \"Rectangle-Copy-13\",\n fill: \"#F8F9FB\",\n transform:\n \"translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) \",\n points:\n \"24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12\"\n }\n })\n ]\n ),\n _c(\"rect\", {\n attrs: {\n id: \"Rectangle-Copy-15\",\n fill: \"url(#linearGradient-2-\" + _vm.id + \")\",\n x: \"13\",\n y: \"45\",\n width: \"40\",\n height: \"36\"\n }\n }),\n _c(\n \"g\",\n {\n attrs: {\n id: \"Rectangle-Copy-17\",\n transform: \"translate(53.000000, 45.000000)\"\n }\n },\n [\n _c(\n \"mask\",\n { attrs: { id: \"mask-4-\" + _vm.id, fill: \"white\" } },\n [\n _c(\"use\", {\n attrs: { \"xlink:href\": \"#path-3-\" + _vm.id }\n })\n ]\n ),\n _c(\"use\", {\n attrs: {\n id: \"Mask\",\n fill: \"#E0E3E9\",\n transform:\n \"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) \",\n \"xlink:href\": \"#path-3-\" + _vm.id\n }\n }),\n _c(\"polygon\", {\n attrs: {\n id: \"Rectangle-Copy\",\n fill: \"#D5D7DE\",\n mask: \"url(#mask-4-\" + _vm.id + \")\",\n transform:\n \"translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) \",\n points: \"7 0 24 0 20 18 -1.70530257e-13 16\"\n }\n })\n ]\n ),\n _c(\"polygon\", {\n attrs: {\n id: \"Rectangle-Copy-18\",\n fill: \"#F8F9FB\",\n transform:\n \"translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) \",\n points: \"62 45 79 45 70 58 53 58\"\n }\n })\n ]\n )\n ]\n )\n ]\n )\n ]\n )\n}\nvar img_emptyvue_type_template_id_42918b82_staticRenderFns = []\nimg_emptyvue_type_template_id_42918b82_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/empty/src/img-empty.vue?vue&type=template&id=42918b82&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/empty/src/img-empty.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\nvar img_emptyvue_type_script_lang_js_id = 0;\n/* harmony default export */ var img_emptyvue_type_script_lang_js_ = ({\n name: 'ImgEmpty',\n data: function data() {\n return {\n id: ++img_emptyvue_type_script_lang_js_id\n };\n }\n});\n// CONCATENATED MODULE: ./packages/empty/src/img-empty.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_img_emptyvue_type_script_lang_js_ = (img_emptyvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/empty/src/img-empty.vue\n\n\n\n\n\n/* normalize component */\n\nvar img_empty_component = normalizeComponent(\n src_img_emptyvue_type_script_lang_js_,\n img_emptyvue_type_template_id_42918b82_render,\n img_emptyvue_type_template_id_42918b82_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var img_empty_api; }\nimg_empty_component.options.__file = \"packages/empty/src/img-empty.vue\"\n/* harmony default export */ var img_empty = (img_empty_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/empty/src/index.vue?vue&type=script&lang=js&\nvar srcvue_type_script_lang_js_components;\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var empty_srcvue_type_script_lang_js_ = ({\n name: 'ElEmpty',\n components: (srcvue_type_script_lang_js_components = {}, srcvue_type_script_lang_js_components[img_empty.name] = img_empty, srcvue_type_script_lang_js_components),\n props: {\n image: {\n type: String,\n default: ''\n },\n imageSize: Number,\n description: {\n type: String,\n default: ''\n }\n },\n computed: {\n emptyDescription: function emptyDescription() {\n return this.description || Object(lib_locale_[\"t\"])('el.empty.description');\n },\n imageStyle: function imageStyle() {\n return {\n width: this.imageSize ? this.imageSize + 'px' : ''\n };\n }\n }\n});\n// CONCATENATED MODULE: ./packages/empty/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_empty_srcvue_type_script_lang_js_ = (empty_srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/empty/src/index.vue\n\n\n\n\n\n/* normalize component */\n\nvar empty_src_component = normalizeComponent(\n packages_empty_srcvue_type_script_lang_js_,\n srcvue_type_template_id_347ced91_render,\n srcvue_type_template_id_347ced91_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var empty_src_api; }\nempty_src_component.options.__file = \"packages/empty/src/index.vue\"\n/* harmony default export */ var empty_src = (empty_src_component.exports);\n// CONCATENATED MODULE: ./packages/empty/index.js\n\n\nempty_src.install = function (Vue) {\n Vue.component(empty_src.name, empty_src);\n};\n\n/* harmony default export */ var empty = (empty_src);\n// CONCATENATED MODULE: ./packages/descriptions/src/descriptions-row.js\nvar descriptions_row_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\n/* harmony default export */ var descriptions_row = ({\n name: 'ElDescriptionsRow',\n props: {\n row: {\n type: Array\n }\n },\n inject: ['elDescriptions'],\n render: function render(h) {\n var elDescriptions = this.elDescriptions;\n\n var row = (this.row || []).map(function (item) {\n return descriptions_row_extends({}, item, {\n label: item.slots.label || item.props.label\n }, ['labelClassName', 'contentClassName', 'labelStyle', 'contentStyle'].reduce(function (res, key) {\n res[key] = item.props[key] || elDescriptions[key];\n return res;\n }, {}));\n });\n if (elDescriptions.direction === 'vertical') {\n return h('tbody', [h(\n 'tr',\n { 'class': 'el-descriptions-row' },\n [row.map(function (item) {\n var _ref;\n\n return h(\n 'th',\n {\n 'class': (_ref = {\n 'el-descriptions-item__cell': true,\n 'el-descriptions-item__label': true,\n 'has-colon': elDescriptions.border ? false : elDescriptions.colon,\n 'is-bordered-label': elDescriptions.border\n }, _ref[item.labelClassName] = true, _ref),\n style: item.labelStyle,\n attrs: { colSpan: item.props.span\n }\n },\n [item.label]\n );\n })]\n ), h(\n 'tr',\n { 'class': 'el-descriptions-row' },\n [row.map(function (item) {\n return h(\n 'td',\n {\n 'class': ['el-descriptions-item__cell', 'el-descriptions-item__content', item.contentClassName],\n style: item.contentStyle,\n attrs: { colSpan: item.props.span\n }\n },\n [item.slots.default]\n );\n })]\n )]);\n }\n if (elDescriptions.border) {\n return h('tbody', [h(\n 'tr',\n { 'class': 'el-descriptions-row' },\n [row.map(function (item) {\n var _ref2;\n\n return [h(\n 'th',\n {\n 'class': (_ref2 = {\n 'el-descriptions-item__cell': true,\n 'el-descriptions-item__label': true,\n 'is-bordered-label': elDescriptions.border\n }, _ref2[item.labelClassName] = true, _ref2),\n style: item.labelStyle,\n attrs: { colSpan: '1'\n }\n },\n [item.label]\n ), h(\n 'td',\n {\n 'class': ['el-descriptions-item__cell', 'el-descriptions-item__content', item.contentClassName],\n style: item.contentStyle,\n attrs: { colSpan: item.props.span * 2 - 1\n }\n },\n [item.slots.default]\n )];\n })]\n )]);\n }\n return h('tbody', [h(\n 'tr',\n { 'class': 'el-descriptions-row' },\n [row.map(function (item) {\n var _ref3;\n\n return h(\n 'td',\n { 'class': 'el-descriptions-item el-descriptions-item__cell', attrs: { colSpan: item.props.span }\n },\n [h(\n 'div',\n { 'class': 'el-descriptions-item__container' },\n [h(\n 'span',\n {\n 'class': (_ref3 = {\n 'el-descriptions-item__label': true,\n 'has-colon': elDescriptions.colon\n }, _ref3[item.labelClassName] = true, _ref3),\n style: item.labelStyle\n },\n [item.label]\n ), h(\n 'span',\n {\n 'class': ['el-descriptions-item__content', item.contentClassName],\n style: item.contentStyle\n },\n [item.slots.default]\n )]\n )]\n );\n })]\n )]);\n }\n});\n// CONCATENATED MODULE: ./packages/descriptions/src/index.js\nvar src_extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar src_components;\n\n\n\n\n/* harmony default export */ var descriptions_src = ({\n name: 'ElDescriptions',\n components: (src_components = {}, src_components[descriptions_row.name] = descriptions_row, src_components),\n props: {\n border: {\n type: Boolean,\n default: false\n },\n column: {\n type: Number,\n default: 3\n },\n direction: {\n type: String,\n default: 'horizontal'\n },\n size: {\n type: String\n // validator: isValidComponentSize,\n },\n title: {\n type: String,\n default: ''\n },\n extra: {\n type: String,\n default: ''\n },\n labelStyle: {\n type: Object\n },\n contentStyle: {\n type: Object\n },\n labelClassName: {\n type: String,\n default: ''\n },\n contentClassName: {\n type: String,\n default: ''\n },\n colon: {\n type: Boolean,\n default: true\n }\n },\n computed: {\n descriptionsSize: function descriptionsSize() {\n return this.size || (this.$ELEMENT || {}).size;\n }\n },\n provide: function provide() {\n return {\n elDescriptions: this\n };\n },\n\n methods: {\n getOptionProps: function getOptionProps(vnode) {\n if (vnode.componentOptions) {\n var componentOptions = vnode.componentOptions;\n var _componentOptions$pro = componentOptions.propsData,\n propsData = _componentOptions$pro === undefined ? {} : _componentOptions$pro,\n _componentOptions$Cto = componentOptions.Ctor,\n Ctor = _componentOptions$Cto === undefined ? {} : _componentOptions$Cto;\n\n var props = (Ctor.options || {}).props || {};\n var res = {};\n for (var k in props) {\n var v = props[k];\n var defaultValue = v.default;\n if (defaultValue !== undefined) {\n res[k] = Object(types_[\"isFunction\"])(defaultValue) ? defaultValue.call(vnode) : defaultValue;\n }\n }\n return src_extends({}, res, propsData);\n }\n return {};\n },\n getSlots: function getSlots(vnode) {\n var _this = this;\n\n var componentOptions = vnode.componentOptions || {};\n var children = vnode.children || componentOptions.children || [];\n var slots = {};\n children.forEach(function (child) {\n if (!_this.isEmptyElement(child)) {\n var name = child.data && child.data.slot || 'default';\n slots[name] = slots[name] || [];\n if (child.tag === 'template') {\n slots[name].push(child.children);\n } else {\n slots[name].push(child);\n }\n }\n });\n return src_extends({}, slots);\n },\n isEmptyElement: function isEmptyElement(c) {\n return !(c.tag || c.text && c.text.trim() !== '');\n },\n filledNode: function filledNode(node, span, count) {\n var isLast = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (!node.props) {\n node.props = {};\n }\n if (span > count) {\n node.props.span = count;\n }\n if (isLast) {\n // set the max span, cause of the last td\n node.props.span = count;\n }\n return node;\n },\n getRows: function getRows() {\n var _this2 = this;\n\n var children = (this.$slots.default || []).filter(function (vnode) {\n return vnode.tag && vnode.componentOptions && vnode.componentOptions.Ctor.options.name === 'ElDescriptionsItem';\n });\n var nodes = children.map(function (vnode) {\n return {\n props: _this2.getOptionProps(vnode),\n slots: _this2.getSlots(vnode),\n vnode: vnode\n };\n });\n var rows = [];\n var temp = [];\n var count = this.column;\n\n nodes.forEach(function (node, index) {\n var span = node.props.span || 1;\n\n if (index === children.length - 1) {\n temp.push(_this2.filledNode(node, span, count, true));\n rows.push(temp);\n return;\n }\n\n if (span < count) {\n count -= span;\n temp.push(node);\n } else {\n temp.push(_this2.filledNode(node, span, count));\n rows.push(temp);\n count = _this2.column;\n temp = [];\n }\n });\n\n return rows;\n }\n },\n render: function render() {\n var h = arguments[0];\n var title = this.title,\n extra = this.extra,\n border = this.border,\n descriptionsSize = this.descriptionsSize,\n $slots = this.$slots;\n\n var rows = this.getRows();\n\n return h(\n 'div',\n { 'class': 'el-descriptions' },\n [title || extra || $slots.title || $slots.extra ? h(\n 'div',\n { 'class': 'el-descriptions__header' },\n [h(\n 'div',\n { 'class': 'el-descriptions__title' },\n [$slots.title ? $slots.title : title]\n ), h(\n 'div',\n { 'class': 'el-descriptions__extra' },\n [$slots.extra ? $slots.extra : extra]\n )]\n ) : null, h(\n 'div',\n { 'class': 'el-descriptions__body' },\n [h(\n 'table',\n { 'class': ['el-descriptions__table', { 'is-bordered': border }, descriptionsSize ? 'el-descriptions--' + descriptionsSize : ''] },\n [rows.map(function (row) {\n return h(descriptions_row, {\n attrs: { row: row }\n });\n })]\n )]\n )]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/descriptions/index.js\n\n\n/* istanbul ignore next */\ndescriptions_src.install = function install(Vue) {\n Vue.component(descriptions_src.name, descriptions_src);\n};\n\n/* harmony default export */ var descriptions = (descriptions_src);\n// CONCATENATED MODULE: ./packages/descriptions/src/descriptions-item.js\n/* harmony default export */ var descriptions_item = ({\n name: 'ElDescriptionsItem',\n props: {\n label: {\n type: String,\n default: ''\n },\n span: {\n type: Number,\n default: 1\n },\n contentClassName: {\n type: String,\n default: ''\n },\n contentStyle: {\n type: Object\n },\n labelClassName: {\n type: String,\n default: ''\n },\n labelStyle: {\n type: Object\n }\n },\n render: function render() {\n return null;\n }\n});\n// CONCATENATED MODULE: ./packages/descriptions-item/index.js\n\n\n/* istanbul ignore next */\ndescriptions_item.install = function install(Vue) {\n Vue.component(descriptions_item.name, descriptions_item);\n};\n\n/* harmony default export */ var packages_descriptions_item = (descriptions_item);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/index.vue?vue&type=template&id=3408b139&\nvar srcvue_type_template_id_3408b139_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { staticClass: \"el-result\" }, [\n _c(\n \"div\",\n { staticClass: \"el-result__icon\" },\n [\n _vm._t(\"icon\", [\n _c(_vm.iconElement, { tag: \"component\", class: _vm.iconElement })\n ])\n ],\n 2\n ),\n _vm.title || _vm.$slots.title\n ? _c(\n \"div\",\n { staticClass: \"el-result__title\" },\n [_vm._t(\"title\", [_c(\"p\", [_vm._v(_vm._s(_vm.title))])])],\n 2\n )\n : _vm._e(),\n _vm.subTitle || _vm.$slots.subTitle\n ? _c(\n \"div\",\n { staticClass: \"el-result__subtitle\" },\n [_vm._t(\"subTitle\", [_c(\"p\", [_vm._v(_vm._s(_vm.subTitle))])])],\n 2\n )\n : _vm._e(),\n _vm.$slots.extra\n ? _c(\"div\", { staticClass: \"el-result__extra\" }, [_vm._t(\"extra\")], 2)\n : _vm._e()\n ])\n}\nvar srcvue_type_template_id_3408b139_staticRenderFns = []\nsrcvue_type_template_id_3408b139_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/index.vue?vue&type=template&id=3408b139&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-success.vue?vue&type=template&id=18119418&\nvar icon_successvue_type_template_id_18119418_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n { attrs: { viewBox: \"0 0 48 48\", xmlns: \"http://www.w3.org/2000/svg\" } },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M34.5548098,16.4485711 C33.9612228,15.8504763 32.9988282,15.8504763 32.4052412,16.4485711 L32.4052412,16.4485711 L21.413757,27.5805811 L21.413757,27.5805811 L21.4034642,27.590855 C21.0097542,27.9781674 20.3766105,27.9729811 19.9892981,27.5792711 L19.9892981,27.5792711 L15.5947588,23.1121428 C15.0011718,22.514048 14.0387772,22.514048 13.4451902,23.1121428 C12.8516033,23.7102376 12.8516033,24.6799409 13.4451902,25.2780357 L13.4451902,25.2780357 L19.6260786,31.5514289 C20.2196656,32.1495237 21.1820602,32.1495237 21.7756472,31.5514289 L21.7756472,31.5514289 L34.5548098,18.614464 C35.1483967,18.0163692 35.1483967,17.0466659 34.5548098,16.4485711 Z\"\n }\n })\n ]\n )\n}\nvar icon_successvue_type_template_id_18119418_staticRenderFns = []\nicon_successvue_type_template_id_18119418_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/icon-success.vue?vue&type=template&id=18119418&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-success.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var icon_successvue_type_script_lang_js_ = ({\n name: 'IconSuccess'\n});\n// CONCATENATED MODULE: ./packages/result/src/icon-success.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_icon_successvue_type_script_lang_js_ = (icon_successvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/result/src/icon-success.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_success_component = normalizeComponent(\n src_icon_successvue_type_script_lang_js_,\n icon_successvue_type_template_id_18119418_render,\n icon_successvue_type_template_id_18119418_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var icon_success_api; }\nicon_success_component.options.__file = \"packages/result/src/icon-success.vue\"\n/* harmony default export */ var icon_success = (icon_success_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-error.vue?vue&type=template&id=21199246&\nvar icon_errorvue_type_template_id_21199246_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n { attrs: { viewBox: \"0 0 48 48\", xmlns: \"http://www.w3.org/2000/svg\" } },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M32.57818,15.42182 C32.0157534,14.8593933 31.1038797,14.8593933 30.541453,15.42182 L30.541453,15.42182 L24.0006789,21.9625941 L17.458547,15.42182 C16.8961203,14.8593933 15.9842466,14.8593933 15.42182,15.42182 C14.8593933,15.9842466 14.8593933,16.8961203 15.42182,17.458547 L15.42182,17.458547 L21.9639519,23.9993211 L15.42182,30.541453 C14.8593933,31.1038797 14.8593933,32.0157534 15.42182,32.57818 C15.9842466,33.1406067 16.8961203,33.1406067 17.458547,32.57818 L17.458547,32.57818 L24.0006789,26.0360481 L30.541453,32.57818 C31.1038797,33.1406067 32.0157534,33.1406067 32.57818,32.57818 C33.1406067,32.0157534 33.1406067,31.1038797 32.57818,30.541453 L32.57818,30.541453 L26.0374059,23.9993211 L32.57818,17.458547 C33.1406067,16.8961203 33.1406067,15.9842466 32.57818,15.42182 Z\"\n }\n })\n ]\n )\n}\nvar icon_errorvue_type_template_id_21199246_staticRenderFns = []\nicon_errorvue_type_template_id_21199246_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/icon-error.vue?vue&type=template&id=21199246&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-error.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var icon_errorvue_type_script_lang_js_ = ({\n name: 'IconError'\n});\n// CONCATENATED MODULE: ./packages/result/src/icon-error.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_icon_errorvue_type_script_lang_js_ = (icon_errorvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/result/src/icon-error.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_error_component = normalizeComponent(\n src_icon_errorvue_type_script_lang_js_,\n icon_errorvue_type_template_id_21199246_render,\n icon_errorvue_type_template_id_21199246_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var icon_error_api; }\nicon_error_component.options.__file = \"packages/result/src/icon-error.vue\"\n/* harmony default export */ var icon_error = (icon_error_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-warning.vue?vue&type=template&id=46fe8f31&\nvar icon_warningvue_type_template_id_46fe8f31_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n { attrs: { viewBox: \"0 0 48 48\", xmlns: \"http://www.w3.org/2000/svg\" } },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M24,31 C22.8954305,31 22,31.8954305 22,33 C22,34.1045695 22.8954305,35 24,35 C25.1045695,35 26,34.1045695 26,33 C26,31.8954305 25.1045695,31 24,31 Z M24,14 C23.1715729,14 22.5,14.6715729 22.5,15.5 L22.5,15.5 L22.5,27.5 C22.5,28.3284271 23.1715729,29 24,29 C24.8284271,29 25.5,28.3284271 25.5,27.5 L25.5,27.5 L25.5,15.5 C25.5,14.6715729 24.8284271,14 24,14 Z\"\n }\n })\n ]\n )\n}\nvar icon_warningvue_type_template_id_46fe8f31_staticRenderFns = []\nicon_warningvue_type_template_id_46fe8f31_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/icon-warning.vue?vue&type=template&id=46fe8f31&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-warning.vue?vue&type=script&lang=ts&\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var icon_warningvue_type_script_lang_ts_ = ({\n name: 'IconWarning'\n});\n\n// CONCATENATED MODULE: ./packages/result/src/icon-warning.vue?vue&type=script&lang=ts&\n /* harmony default export */ var src_icon_warningvue_type_script_lang_ts_ = (icon_warningvue_type_script_lang_ts_); \n// CONCATENATED MODULE: ./packages/result/src/icon-warning.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_warning_component = normalizeComponent(\n src_icon_warningvue_type_script_lang_ts_,\n icon_warningvue_type_template_id_46fe8f31_render,\n icon_warningvue_type_template_id_46fe8f31_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var icon_warning_api; }\nicon_warning_component.options.__file = \"packages/result/src/icon-warning.vue\"\n/* harmony default export */ var icon_warning = (icon_warning_component.exports);\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-info.vue?vue&type=template&id=19e3de69&\nvar icon_infovue_type_template_id_19e3de69_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"svg\",\n { attrs: { viewBox: \"0 0 48 48\", xmlns: \"http://www.w3.org/2000/svg\" } },\n [\n _c(\"path\", {\n attrs: {\n d:\n \"M24,4 C35.045695,4 44,12.954305 44,24 C44,35.045695 35.045695,44 24,44 C12.954305,44 4,35.045695 4,24 C4,12.954305 12.954305,4 24,4 Z M24,19 L21,19 C20.1715729,19 19.5,19.6715729 19.5,20.5 C19.5,21.3284271 20.1715729,22 21,22 L21,22 L22.5,22 L22.5,31 L21,31 C20.1715729,31 19.5,31.6715729 19.5,32.5 C19.5,33.3284271 20.1715729,34 21,34 L21,34 L27,34 C27.8284271,34 28.5,33.3284271 28.5,32.5 C28.5,31.6715729 27.8284271,31 27,31 L27,31 L25.5,31 L25.5,20.5 C25.5,19.6715729 24.8284271,19 24,19 L24,19 Z M24,13 C22.8954305,13 22,13.8954305 22,15 C22,16.1045695 22.8954305,17 24,17 C25.1045695,17 26,16.1045695 26,15 C26,13.8954305 25.1045695,13 24,13 Z\"\n }\n })\n ]\n )\n}\nvar icon_infovue_type_template_id_19e3de69_staticRenderFns = []\nicon_infovue_type_template_id_19e3de69_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/result/src/icon-info.vue?vue&type=template&id=19e3de69&\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/icon-info.vue?vue&type=script&lang=ts&\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var icon_infovue_type_script_lang_ts_ = ({\n name: 'IconInfo'\n});\n\n// CONCATENATED MODULE: ./packages/result/src/icon-info.vue?vue&type=script&lang=ts&\n /* harmony default export */ var src_icon_infovue_type_script_lang_ts_ = (icon_infovue_type_script_lang_ts_); \n// CONCATENATED MODULE: ./packages/result/src/icon-info.vue\n\n\n\n\n\n/* normalize component */\n\nvar icon_info_component = normalizeComponent(\n src_icon_infovue_type_script_lang_ts_,\n icon_infovue_type_template_id_19e3de69_render,\n icon_infovue_type_template_id_19e3de69_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var icon_info_api; }\nicon_info_component.options.__file = \"packages/result/src/icon-info.vue\"\n/* harmony default export */ var icon_info = (icon_info_component.exports);\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/result/src/index.vue?vue&type=script&lang=js&\nvar result_srcvue_type_script_lang_js_components;\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\nvar IconMap = {\n success: 'icon-success',\n warning: 'icon-warning',\n error: 'icon-error',\n info: 'icon-info'\n};\n\n/* harmony default export */ var result_srcvue_type_script_lang_js_ = ({\n name: 'ElResult',\n components: (result_srcvue_type_script_lang_js_components = {}, result_srcvue_type_script_lang_js_components[icon_success.name] = icon_success, result_srcvue_type_script_lang_js_components[icon_error.name] = icon_error, result_srcvue_type_script_lang_js_components[icon_warning.name] = icon_warning, result_srcvue_type_script_lang_js_components[icon_info.name] = icon_info, result_srcvue_type_script_lang_js_components),\n props: {\n title: {\n type: String,\n default: ''\n },\n subTitle: {\n type: String,\n default: ''\n },\n icon: {\n type: String,\n default: 'info'\n }\n },\n computed: {\n iconElement: function iconElement() {\n var icon = this.icon;\n return icon && IconMap[icon] ? IconMap[icon] : 'icon-info';\n }\n }\n});\n// CONCATENATED MODULE: ./packages/result/src/index.vue?vue&type=script&lang=js&\n /* harmony default export */ var packages_result_srcvue_type_script_lang_js_ = (result_srcvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/result/src/index.vue\n\n\n\n\n\n/* normalize component */\n\nvar result_src_component = normalizeComponent(\n packages_result_srcvue_type_script_lang_js_,\n srcvue_type_template_id_3408b139_render,\n srcvue_type_template_id_3408b139_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var result_src_api; }\nresult_src_component.options.__file = \"packages/result/src/index.vue\"\n/* harmony default export */ var result_src = (result_src_component.exports);\n// CONCATENATED MODULE: ./packages/result/index.js\n\n\n/* istanbul ignore next */\nresult_src.install = function (Vue) {\n Vue.component(result_src.name, result_src);\n};\n\n/* harmony default export */ var result = (result_src);\n// CONCATENATED MODULE: ./src/index.js\n/* Automatically generated by './build/bin/build-entry.js' */\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar components = [packages_pagination, dialog, packages_autocomplete, packages_dropdown, packages_dropdown_menu, packages_dropdown_item, packages_menu, packages_submenu, packages_menu_item, packages_menu_item_group, packages_input, packages_input_number, packages_radio, packages_radio_group, packages_radio_button, packages_checkbox, packages_checkbox_button, packages_checkbox_group, packages_switch, packages_select, packages_option, packages_option_group, packages_button, packages_button_group, packages_table, packages_table_column, packages_date_picker, packages_time_select, packages_time_picker, popover, packages_tooltip, packages_breadcrumb, packages_breadcrumb_item, packages_form, packages_form_item, packages_tabs, packages_tab_pane, packages_tag, packages_tree, packages_alert, slider, packages_icon, packages_row, packages_col, packages_upload, packages_progress, packages_spinner, badge, card, rate, packages_steps, packages_step, carousel, scrollbar, carousel_item, packages_collapse, packages_collapse_item, packages_cascader, color_picker, transfer, packages_container, header, aside, packages_main, footer, timeline, timeline_item, packages_link, divider, packages_image, calendar, backtop, page_header, packages_cascader_panel, avatar, drawer, popconfirm, skeleton, skeleton_item, empty, descriptions, packages_descriptions_item, result, collapse_transition_default.a];\n\nvar src_install = function install(Vue) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n lib_locale_default.a.use(opts.locale);\n lib_locale_default.a.i18n(opts.i18n);\n\n components.forEach(function (component) {\n Vue.component(component.name, component);\n });\n\n Vue.use(infinite_scroll);\n Vue.use(packages_loading.directive);\n\n Vue.prototype.$ELEMENT = {\n size: opts.size || '',\n zIndex: opts.zIndex || 2000\n };\n\n Vue.prototype.$loading = packages_loading.service;\n Vue.prototype.$msgbox = message_box;\n Vue.prototype.$alert = message_box.alert;\n Vue.prototype.$confirm = message_box.confirm;\n Vue.prototype.$prompt = message_box.prompt;\n Vue.prototype.$notify = notification;\n Vue.prototype.$message = packages_message;\n};\n\n/* istanbul ignore if */\nif (typeof window !== 'undefined' && window.Vue) {\n src_install(window.Vue);\n}\n\n/* harmony default export */ var src_0 = __webpack_exports__[\"default\"] = ({\n version: '2.15.8',\n locale: lib_locale_default.a.use,\n i18n: lib_locale_default.a.i18n,\n install: src_install,\n CollapseTransition: collapse_transition_default.a,\n Loading: packages_loading,\n Pagination: packages_pagination,\n Dialog: dialog,\n Autocomplete: packages_autocomplete,\n Dropdown: packages_dropdown,\n DropdownMenu: packages_dropdown_menu,\n DropdownItem: packages_dropdown_item,\n Menu: packages_menu,\n Submenu: packages_submenu,\n MenuItem: packages_menu_item,\n MenuItemGroup: packages_menu_item_group,\n Input: packages_input,\n InputNumber: packages_input_number,\n Radio: packages_radio,\n RadioGroup: packages_radio_group,\n RadioButton: packages_radio_button,\n Checkbox: packages_checkbox,\n CheckboxButton: packages_checkbox_button,\n CheckboxGroup: packages_checkbox_group,\n Switch: packages_switch,\n Select: packages_select,\n Option: packages_option,\n OptionGroup: packages_option_group,\n Button: packages_button,\n ButtonGroup: packages_button_group,\n Table: packages_table,\n TableColumn: packages_table_column,\n DatePicker: packages_date_picker,\n TimeSelect: packages_time_select,\n TimePicker: packages_time_picker,\n Popover: popover,\n Tooltip: packages_tooltip,\n MessageBox: message_box,\n Breadcrumb: packages_breadcrumb,\n BreadcrumbItem: packages_breadcrumb_item,\n Form: packages_form,\n FormItem: packages_form_item,\n Tabs: packages_tabs,\n TabPane: packages_tab_pane,\n Tag: packages_tag,\n Tree: packages_tree,\n Alert: packages_alert,\n Notification: notification,\n Slider: slider,\n Icon: packages_icon,\n Row: packages_row,\n Col: packages_col,\n Upload: packages_upload,\n Progress: packages_progress,\n Spinner: packages_spinner,\n Message: packages_message,\n Badge: badge,\n Card: card,\n Rate: rate,\n Steps: packages_steps,\n Step: packages_step,\n Carousel: carousel,\n Scrollbar: scrollbar,\n CarouselItem: carousel_item,\n Collapse: packages_collapse,\n CollapseItem: packages_collapse_item,\n Cascader: packages_cascader,\n ColorPicker: color_picker,\n Transfer: transfer,\n Container: packages_container,\n Header: header,\n Aside: aside,\n Main: packages_main,\n Footer: footer,\n Timeline: timeline,\n TimelineItem: timeline_item,\n Link: packages_link,\n Divider: divider,\n Image: packages_image,\n Calendar: calendar,\n Backtop: backtop,\n InfiniteScroll: infinite_scroll,\n PageHeader: page_header,\n CascaderPanel: packages_cascader_panel,\n Avatar: avatar,\n Drawer: drawer,\n Popconfirm: popconfirm,\n Skeleton: skeleton,\n SkeletonItem: skeleton_item,\n Empty: empty,\n Descriptions: descriptions,\n DescriptionsItem: packages_descriptions_item,\n Result: result\n});\n\n/***/ })\n/******/ ])[\"default\"];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvZWxlbWVudC11aS5jb21tb24uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvZWxlbWVudC11aS5jb21tb24uanM/NWM5NiJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQ1KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS11dGlsXCIpO1xuXG4vKioqLyB9KSxcbi8qIDEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiKTtcblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCIpO1xuXG4vKioqLyB9KSxcbi8qIDQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZVwiKTtcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Z1ZS1wb3BwZXJcIik7XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8qKiovIH0pLFxuLyogNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZVwiKTtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2lucHV0XCIpO1xuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZ1wiKTtcblxuLyoqKi8gfSksXG4vKiAxMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9jbGlja291dHNpZGVcIik7XG5cbi8qKiovIH0pLFxuLyogMTEgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXBcIik7XG5cbi8qKiovIH0pLFxuLyogMTIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbG9jYWxlXCIpO1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2J1dHRvblwiKTtcblxuLyoqKi8gfSksXG4vKiAxNCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9yZXNpemUtZXZlbnRcIik7XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXNcIik7XG5cbi8qKiovIH0pLFxuLyogMTYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2VcIik7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvY2hlY2tib3hcIik7XG5cbi8qKiovIH0pLFxuLyogMTggKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyXCIpO1xuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZFwiKTtcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kYXRlXCIpO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3RyYW5zaXRpb25zL2NvbGxhcHNlLXRyYW5zaXRpb25cIik7XG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdmRvbVwiKTtcblxuLyoqKi8gfSksXG4vKiAyMyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZm9jdXNcIik7XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHNcIik7XG5cbi8qKiovIH0pLFxuLyogMjUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2UvdGhyb3R0bGVcIik7XG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdG9vbHRpcFwiKTtcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3XCIpO1xuXG4vKioqLyB9KSxcbi8qIDI4ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2J1dHRvbi1ncm91cFwiKTtcblxuLyoqKi8gfSksXG4vKiAyOSAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi90YWdcIik7XG5cbi8qKiovIH0pLFxuLyogMzAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoXCIpO1xuXG4vKioqLyB9KSxcbi8qIDMxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2NoZWNrYm94LWdyb3VwXCIpO1xuXG4vKioqLyB9KSxcbi8qIDMyICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL2FmdGVyLWxlYXZlXCIpO1xuXG4vKioqLyB9KSxcbi8qIDMzICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3Byb2dyZXNzXCIpO1xuXG4vKioqLyB9KSxcbi8qIDM0ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL2FyaWEtdXRpbHNcIik7XG5cbi8qKiovIH0pLFxuLyogMzUgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidGhyb3R0bGUtZGVib3VuY2VcIik7XG5cbi8qKiovIH0pLFxuLyogMzYgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvc2VsZWN0XCIpO1xuXG4vKioqLyB9KSxcbi8qIDM3ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL29wdGlvblwiKTtcblxuLyoqKi8gfSksXG4vKiAzOCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJub3JtYWxpemUtd2hlZWxcIik7XG5cbi8qKiovIH0pLFxuLyogMzkgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS1kaWFsb2dcIik7XG5cbi8qKiovIH0pLFxuLyogNDAgKi9cbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiYXN5bmMtdmFsaWRhdG9yXCIpO1xuXG4vKioqLyB9KSxcbi8qIDQxICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL2lucHV0LW51bWJlclwiKTtcblxuLyoqKi8gfSksXG4vKiA0MiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9jYXNjYWRlci1wYW5lbFwiKTtcblxuLyoqKi8gfSksXG4vKiA0MyAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9yYWRpb1wiKTtcblxuLyoqKi8gfSksXG4vKiA0NCAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9wb3BvdmVyXCIpO1xuXG4vKioqLyB9KSxcbi8qIDQ1ICovXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XG5cblxuLyoqKi8gfSksXG4vKiA0NiAqL1xuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wYWdpbmF0aW9uL3NyYy9wYWdlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI3NGYyNjcmXG52YXIgcGFnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83Mjc0ZjI2N19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ1bFwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGFnZXJcIiwgb246IHsgY2xpY2s6IF92bS5vblBhZ2VyQ2xpY2sgfSB9LFxuICAgIFtcbiAgICAgIF92bS5wYWdlQ291bnQgPiAwXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IF92bS5jdXJyZW50UGFnZSA9PT0gMSwgZGlzYWJsZWQ6IF92bS5kaXNhYmxlZCB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW192bS5fdihcIjFcIildXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLnNob3dQcmV2TW9yZVxuICAgICAgICA/IF9jKFwibGlcIiwge1xuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbiBtb3JlIGJ0bi1xdWlja3ByZXZcIixcbiAgICAgICAgICAgIGNsYXNzOiBbX3ZtLnF1aWNrcHJldkljb25DbGFzcywgeyBkaXNhYmxlZDogX3ZtLmRpc2FibGVkIH1dLFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLm9uTW91c2VlbnRlcihcImxlZnRcIilcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLnF1aWNrcHJldkljb25DbGFzcyA9IFwiZWwtaWNvbi1tb3JlXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uX2woX3ZtLnBhZ2VycywgZnVuY3Rpb24ocGFnZXIpIHtcbiAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IHBhZ2VyLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IF92bS5jdXJyZW50UGFnZSA9PT0gcGFnZXIsIGRpc2FibGVkOiBfdm0uZGlzYWJsZWQgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihfdm0uX3MocGFnZXIpKV1cbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICBfdm0uc2hvd05leHRNb3JlXG4gICAgICAgID8gX2MoXCJsaVwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uIG1vcmUgYnRuLXF1aWNrbmV4dFwiLFxuICAgICAgICAgICAgY2xhc3M6IFtfdm0ucXVpY2tuZXh0SWNvbkNsYXNzLCB7IGRpc2FibGVkOiBfdm0uZGlzYWJsZWQgfV0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0ub25Nb3VzZWVudGVyKFwicmlnaHRcIilcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLnF1aWNrbmV4dEljb25DbGFzcyA9IFwiZWwtaWNvbi1tb3JlXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0ucGFnZUNvdW50ID4gMVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICBhY3RpdmU6IF92bS5jdXJyZW50UGFnZSA9PT0gX3ZtLnBhZ2VDb3VudCxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLmRpc2FibGVkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0ucGFnZUNvdW50KSldXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucGFnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83Mjc0ZjI2N19yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BhZ2luYXRpb24vc3JjL3BhZ2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Mjc0ZjI2NyZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUGFnZXInLFxuXG4gIHByb3BzOiB7XG4gICAgY3VycmVudFBhZ2U6IE51bWJlcixcblxuICAgIHBhZ2VDb3VudDogTnVtYmVyLFxuXG4gICAgcGFnZXJDb3VudDogTnVtYmVyLFxuXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW5cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3dQcmV2TW9yZTogZnVuY3Rpb24gc2hvd1ByZXZNb3JlKHZhbCkge1xuICAgICAgaWYgKCF2YWwpIHRoaXMucXVpY2twcmV2SWNvbkNsYXNzID0gJ2VsLWljb24tbW9yZSc7XG4gICAgfSxcbiAgICBzaG93TmV4dE1vcmU6IGZ1bmN0aW9uIHNob3dOZXh0TW9yZSh2YWwpIHtcbiAgICAgIGlmICghdmFsKSB0aGlzLnF1aWNrbmV4dEljb25DbGFzcyA9ICdlbC1pY29uLW1vcmUnO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QYWdlckNsaWNrOiBmdW5jdGlvbiBvblBhZ2VyQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdVTCcgfHwgdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdQYWdlID0gTnVtYmVyKGV2ZW50LnRhcmdldC50ZXh0Q29udGVudCk7XG4gICAgICB2YXIgcGFnZUNvdW50ID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICB2YXIgY3VycmVudFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgdmFyIHBhZ2VyQ291bnRPZmZzZXQgPSB0aGlzLnBhZ2VyQ291bnQgLSAyO1xuXG4gICAgICBpZiAodGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdtb3JlJykgIT09IC0xKSB7XG4gICAgICAgIGlmICh0YXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoJ3F1aWNrcHJldicpICE9PSAtMSkge1xuICAgICAgICAgIG5ld1BhZ2UgPSBjdXJyZW50UGFnZSAtIHBhZ2VyQ291bnRPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmNsYXNzTmFtZS5pbmRleE9mKCdxdWlja25leHQnKSAhPT0gLTEpIHtcbiAgICAgICAgICBuZXdQYWdlID0gY3VycmVudFBhZ2UgKyBwYWdlckNvdW50T2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCFpc05hTihuZXdQYWdlKSkge1xuICAgICAgICBpZiAobmV3UGFnZSA8IDEpIHtcbiAgICAgICAgICBuZXdQYWdlID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdQYWdlID4gcGFnZUNvdW50KSB7XG4gICAgICAgICAgbmV3UGFnZSA9IHBhZ2VDb3VudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobmV3UGFnZSAhPT0gY3VycmVudFBhZ2UpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgbmV3UGFnZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbk1vdXNlZW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VlbnRlcihkaXJlY3Rpb24pIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgdGhpcy5xdWlja3ByZXZJY29uQ2xhc3MgPSAnZWwtaWNvbi1kLWFycm93LWxlZnQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWlja25leHRJY29uQ2xhc3MgPSAnZWwtaWNvbi1kLWFycm93LXJpZ2h0JztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYWdlcnM6IGZ1bmN0aW9uIHBhZ2VycygpIHtcbiAgICAgIHZhciBwYWdlckNvdW50ID0gdGhpcy5wYWdlckNvdW50O1xuICAgICAgdmFyIGhhbGZQYWdlckNvdW50ID0gKHBhZ2VyQ291bnQgLSAxKSAvIDI7XG5cbiAgICAgIHZhciBjdXJyZW50UGFnZSA9IE51bWJlcih0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICAgIHZhciBwYWdlQ291bnQgPSBOdW1iZXIodGhpcy5wYWdlQ291bnQpO1xuXG4gICAgICB2YXIgc2hvd1ByZXZNb3JlID0gZmFsc2U7XG4gICAgICB2YXIgc2hvd05leHRNb3JlID0gZmFsc2U7XG5cbiAgICAgIGlmIChwYWdlQ291bnQgPiBwYWdlckNvdW50KSB7XG4gICAgICAgIGlmIChjdXJyZW50UGFnZSA+IHBhZ2VyQ291bnQgLSBoYWxmUGFnZXJDb3VudCkge1xuICAgICAgICAgIHNob3dQcmV2TW9yZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudFBhZ2UgPCBwYWdlQ291bnQgLSBoYWxmUGFnZXJDb3VudCkge1xuICAgICAgICAgIHNob3dOZXh0TW9yZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGFycmF5ID0gW107XG5cbiAgICAgIGlmIChzaG93UHJldk1vcmUgJiYgIXNob3dOZXh0TW9yZSkge1xuICAgICAgICB2YXIgc3RhcnRQYWdlID0gcGFnZUNvdW50IC0gKHBhZ2VyQ291bnQgLSAyKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0UGFnZTsgaSA8IHBhZ2VDb3VudDsgaSsrKSB7XG4gICAgICAgICAgYXJyYXkucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghc2hvd1ByZXZNb3JlICYmIHNob3dOZXh0TW9yZSkge1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgcGFnZXJDb3VudDsgX2krKykge1xuICAgICAgICAgIGFycmF5LnB1c2goX2kpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHNob3dQcmV2TW9yZSAmJiBzaG93TmV4dE1vcmUpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IE1hdGguZmxvb3IocGFnZXJDb3VudCAvIDIpIC0gMTtcbiAgICAgICAgZm9yICh2YXIgX2kyID0gY3VycmVudFBhZ2UgLSBvZmZzZXQ7IF9pMiA8PSBjdXJyZW50UGFnZSArIG9mZnNldDsgX2kyKyspIHtcbiAgICAgICAgICBhcnJheS5wdXNoKF9pMik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIF9pMyA9IDI7IF9pMyA8IHBhZ2VDb3VudDsgX2kzKyspIHtcbiAgICAgICAgICBhcnJheS5wdXNoKF9pMyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zaG93UHJldk1vcmUgPSBzaG93UHJldk1vcmU7XG4gICAgICB0aGlzLnNob3dOZXh0TW9yZSA9IHNob3dOZXh0TW9yZTtcblxuICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50OiBudWxsLFxuICAgICAgc2hvd1ByZXZNb3JlOiBmYWxzZSxcbiAgICAgIHNob3dOZXh0TW9yZTogZmFsc2UsXG4gICAgICBxdWlja25leHRJY29uQ2xhc3M6ICdlbC1pY29uLW1vcmUnLFxuICAgICAgcXVpY2twcmV2SWNvbkNsYXNzOiAnZWwtaWNvbi1tb3JlJ1xuICAgIH07XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdpbmF0aW9uL3NyYy9wYWdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3BhZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHBhZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnZXIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfcGFnZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHBhZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI3NGYyNjdfcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9wYWdpbmF0aW9uL3NyYy9wYWdlci52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFnZXIgPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3NlbGVjdFwiXG52YXIgc2VsZWN0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xudmFyIHNlbGVjdF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzZWxlY3RfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL29wdGlvblwiXG52YXIgb3B0aW9uXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyIG9wdGlvbl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihvcHRpb25fKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2lucHV0XCJcbnZhciBpbnB1dF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xudmFyIGlucHV0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGlucHV0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvbG9jYWxlXCJcbnZhciBsb2NhbGVfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBsb2NhbGVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obG9jYWxlXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCJcbnZhciB1dGlsXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcGFnaW5hdGlvbi9zcmMvcGFnaW5hdGlvbi5qc1xuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWdpbmF0aW9uID0gKHtcbiAgbmFtZTogJ0VsUGFnaW5hdGlvbicsXG5cbiAgcHJvcHM6IHtcbiAgICBwYWdlU2l6ZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMTBcbiAgICB9LFxuXG4gICAgc21hbGw6IEJvb2xlYW4sXG5cbiAgICB0b3RhbDogTnVtYmVyLFxuXG4gICAgcGFnZUNvdW50OiBOdW1iZXIsXG5cbiAgICBwYWdlckNvdW50OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlIHwgMCkgPT09IHZhbHVlICYmIHZhbHVlID4gNCAmJiB2YWx1ZSA8IDIyICYmIHZhbHVlICUgMiA9PT0gMTtcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQ6IDdcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2U6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDFcbiAgICB9LFxuXG4gICAgbGF5b3V0OiB7XG4gICAgICBkZWZhdWx0OiAncHJldiwgcGFnZXIsIG5leHQsIGp1bXBlciwgLT4sIHRvdGFsJ1xuICAgIH0sXG5cbiAgICBwYWdlU2l6ZXM6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbMTAsIDIwLCAzMCwgNDAsIDUwLCAxMDBdO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3BwZXJDbGFzczogU3RyaW5nLFxuXG4gICAgcHJldlRleHQ6IFN0cmluZyxcblxuICAgIG5leHRUZXh0OiBTdHJpbmcsXG5cbiAgICBiYWNrZ3JvdW5kOiBCb29sZWFuLFxuXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG5cbiAgICBoaWRlT25TaW5nbGVQYWdlOiBCb29sZWFuXG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW50ZXJuYWxDdXJyZW50UGFnZTogMSxcbiAgICAgIGludGVybmFsUGFnZVNpemU6IDAsXG4gICAgICBsYXN0RW1pdHRlZFBhZ2U6IC0xLFxuICAgICAgdXNlckNoYW5nZVBhZ2VTaXplOiBmYWxzZVxuICAgIH07XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgbGF5b3V0ID0gdGhpcy5sYXlvdXQ7XG4gICAgaWYgKCFsYXlvdXQpIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLmhpZGVPblNpbmdsZVBhZ2UgJiYgKCF0aGlzLmludGVybmFsUGFnZUNvdW50IHx8IHRoaXMuaW50ZXJuYWxQYWdlQ291bnQgPT09IDEpKSByZXR1cm4gbnVsbDtcblxuICAgIHZhciB0ZW1wbGF0ZSA9IGgoJ2RpdicsIHsgJ2NsYXNzJzogWydlbC1wYWdpbmF0aW9uJywge1xuICAgICAgICAnaXMtYmFja2dyb3VuZCc6IHRoaXMuYmFja2dyb3VuZCxcbiAgICAgICAgJ2VsLXBhZ2luYXRpb24tLXNtYWxsJzogdGhpcy5zbWFsbFxuICAgICAgfV0gfSk7XG4gICAgdmFyIFRFTVBMQVRFX01BUCA9IHtcbiAgICAgIHByZXY6IGgoJ3ByZXYnKSxcbiAgICAgIGp1bXBlcjogaCgnanVtcGVyJyksXG4gICAgICBwYWdlcjogaCgncGFnZXInLCB7XG4gICAgICAgIGF0dHJzOiB7IGN1cnJlbnRQYWdlOiB0aGlzLmludGVybmFsQ3VycmVudFBhZ2UsIHBhZ2VDb3VudDogdGhpcy5pbnRlcm5hbFBhZ2VDb3VudCwgcGFnZXJDb3VudDogdGhpcy5wYWdlckNvdW50LCBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdjaGFuZ2UnOiB0aGlzLmhhbmRsZUN1cnJlbnRDaGFuZ2VcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBuZXh0OiBoKCduZXh0JyksXG4gICAgICBzaXplczogaCgnc2l6ZXMnLCB7XG4gICAgICAgIGF0dHJzOiB7IHBhZ2VTaXplczogdGhpcy5wYWdlU2l6ZXMgfVxuICAgICAgfSksXG4gICAgICBzbG90OiBoKCdzbG90JywgW3RoaXMuJHNsb3RzLmRlZmF1bHQgPyB0aGlzLiRzbG90cy5kZWZhdWx0IDogJyddKSxcbiAgICAgIHRvdGFsOiBoKCd0b3RhbCcpXG4gICAgfTtcbiAgICB2YXIgY29tcG9uZW50cyA9IGxheW91dC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0udHJpbSgpO1xuICAgIH0pO1xuICAgIHZhciByaWdodFdyYXBwZXIgPSBoKCdkaXYnLCB7ICdjbGFzcyc6ICdlbC1wYWdpbmF0aW9uX19yaWdodHdyYXBwZXInIH0pO1xuICAgIHZhciBoYXZlUmlnaHRXcmFwcGVyID0gZmFsc2U7XG5cbiAgICB0ZW1wbGF0ZS5jaGlsZHJlbiA9IHRlbXBsYXRlLmNoaWxkcmVuIHx8IFtdO1xuICAgIHJpZ2h0V3JhcHBlci5jaGlsZHJlbiA9IHJpZ2h0V3JhcHBlci5jaGlsZHJlbiB8fCBbXTtcbiAgICBjb21wb25lbnRzLmZvckVhY2goZnVuY3Rpb24gKGNvbXBvKSB7XG4gICAgICBpZiAoY29tcG8gPT09ICctPicpIHtcbiAgICAgICAgaGF2ZVJpZ2h0V3JhcHBlciA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoYXZlUmlnaHRXcmFwcGVyKSB7XG4gICAgICAgIHRlbXBsYXRlLmNoaWxkcmVuLnB1c2goVEVNUExBVEVfTUFQW2NvbXBvXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByaWdodFdyYXBwZXIuY2hpbGRyZW4ucHVzaChURU1QTEFURV9NQVBbY29tcG9dKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChoYXZlUmlnaHRXcmFwcGVyKSB7XG4gICAgICB0ZW1wbGF0ZS5jaGlsZHJlbi51bnNoaWZ0KHJpZ2h0V3JhcHBlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9LFxuXG5cbiAgY29tcG9uZW50czoge1xuICAgIFByZXY6IHtcbiAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgJ2J1dHRvbicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG5cbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuJHBhcmVudC5kaXNhYmxlZCB8fCB0aGlzLiRwYXJlbnQuaW50ZXJuYWxDdXJyZW50UGFnZSA8PSAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2NsYXNzJzogJ2J0bi1wcmV2Jywgb246IHtcbiAgICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy4kcGFyZW50LnByZXZcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFt0aGlzLiRwYXJlbnQucHJldlRleHQgPyBoKCdzcGFuJywgW3RoaXMuJHBhcmVudC5wcmV2VGV4dF0pIDogaCgnaScsIHsgJ2NsYXNzJzogJ2VsLWljb24gZWwtaWNvbi1hcnJvdy1sZWZ0JyB9KV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgTmV4dDoge1xuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgICAgICByZXR1cm4gaChcbiAgICAgICAgICAnYnV0dG9uJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcblxuICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy4kcGFyZW50LmRpc2FibGVkIHx8IHRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlID09PSB0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlQ291bnQgfHwgdGhpcy4kcGFyZW50LmludGVybmFsUGFnZUNvdW50ID09PSAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2NsYXNzJzogJ2J0bi1uZXh0Jywgb246IHtcbiAgICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy4kcGFyZW50Lm5leHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFt0aGlzLiRwYXJlbnQubmV4dFRleHQgPyBoKCdzcGFuJywgW3RoaXMuJHBhcmVudC5uZXh0VGV4dF0pIDogaCgnaScsIHsgJ2NsYXNzJzogJ2VsLWljb24gZWwtaWNvbi1hcnJvdy1yaWdodCcgfSldXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFNpemVzOiB7XG4gICAgICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICAgICAgcHJvcHM6IHtcbiAgICAgICAgcGFnZVNpemVzOiBBcnJheVxuICAgICAgfSxcblxuICAgICAgd2F0Y2g6IHtcbiAgICAgICAgcGFnZVNpemVzOiB7XG4gICAgICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QodXRpbF9bXCJ2YWx1ZUVxdWFsc1wiXSkobmV3VmFsLCBvbGRWYWwpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgICAgICAgIHRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplID0gbmV3VmFsLmluZGV4T2YodGhpcy4kcGFyZW50LnBhZ2VTaXplKSA+IC0xID8gdGhpcy4kcGFyZW50LnBhZ2VTaXplIDogdGhpcy5wYWdlU2l6ZXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgIHsgJ2NsYXNzJzogJ2VsLXBhZ2luYXRpb25fX3NpemVzJyB9LFxuICAgICAgICAgIFtoKFxuICAgICAgICAgICAgJ2VsLXNlbGVjdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHBvcHBlckNsYXNzOiB0aGlzLiRwYXJlbnQucG9wcGVyQ2xhc3MgfHwgJycsXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21pbmknLFxuXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuJHBhcmVudC5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICdpbnB1dCc6IHRoaXMuaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbdGhpcy5wYWdlU2l6ZXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoKCdlbC1vcHRpb24nLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW0gKyBfdGhpcy50KCdlbC5wYWdpbmF0aW9uLnBhZ2VzaXplJykgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXVxuICAgICAgICAgICldXG4gICAgICAgICk7XG4gICAgICB9LFxuXG5cbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRWxTZWxlY3Q6IHNlbGVjdF9kZWZhdWx0LmEsXG4gICAgICAgIEVsT3B0aW9uOiBvcHRpb25fZGVmYXVsdC5hXG4gICAgICB9LFxuXG4gICAgICBtZXRob2RzOiB7XG4gICAgICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKHZhbCkge1xuICAgICAgICAgIGlmICh2YWwgIT09IHRoaXMuJHBhcmVudC5pbnRlcm5hbFBhZ2VTaXplKSB7XG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuaW50ZXJuYWxQYWdlU2l6ZSA9IHZhbCA9IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgICAgICAgdGhpcy4kcGFyZW50LnVzZXJDaGFuZ2VQYWdlU2l6ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3VwZGF0ZTpwYWdlU2l6ZScsIHZhbCk7XG4gICAgICAgICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ3NpemUtY2hhbmdlJywgdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgSnVtcGVyOiB7XG4gICAgICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICAgICAgY29tcG9uZW50czogeyBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEgfSxcblxuICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB1c2VySW5wdXQ6IG51bGxcbiAgICAgICAgfTtcbiAgICAgIH0sXG5cblxuICAgICAgd2F0Y2g6IHtcbiAgICAgICAgJyRwYXJlbnQuaW50ZXJuYWxDdXJyZW50UGFnZSc6IGZ1bmN0aW9uICRwYXJlbnRJbnRlcm5hbEN1cnJlbnRQYWdlKCkge1xuICAgICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgbWV0aG9kczoge1xuICAgICAgICBoYW5kbGVLZXl1cDogZnVuY3Rpb24gaGFuZGxlS2V5dXAoX3JlZikge1xuICAgICAgICAgIHZhciBrZXlDb2RlID0gX3JlZi5rZXlDb2RlLFxuICAgICAgICAgICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldDtcblxuICAgICAgICAgIC8vIENocm9tZSwgU2FmYXJpLCBGaXJlZm94IHRyaWdnZXJzIGNoYW5nZSBldmVudCBvbiBFbnRlclxuICAgICAgICAgIC8vIEhhY2sgZm9yIElFOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xMTcxMFxuICAgICAgICAgIC8vIERyb3AgdGhpcyBtZXRob2Qgd2hlbiB3ZSBubyBsb25nZXIgc3VwcG9ydHMgSUVcbiAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRhcmdldC52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVJbnB1dDogZnVuY3Rpb24gaGFuZGxlSW5wdXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnVzZXJJbnB1dCA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlID0gdGhpcy4kcGFyZW50LmdldFZhbGlkQ3VycmVudFBhZ2UodmFsdWUpO1xuICAgICAgICAgIHRoaXMuJHBhcmVudC5lbWl0Q2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1wYWdpbmF0aW9uX19qdW1wJyB9LFxuICAgICAgICAgIFt0aGlzLnQoJ2VsLnBhZ2luYXRpb24uZ290bycpLCBoKCdlbC1pbnB1dCcsIHtcbiAgICAgICAgICAgICdjbGFzcyc6ICdlbC1wYWdpbmF0aW9uX19lZGl0b3IgaXMtaW4tcGFnaW5hdGlvbicsXG4gICAgICAgICAgICBhdHRyczogeyBtaW46IDEsXG4gICAgICAgICAgICAgIG1heDogdGhpcy4kcGFyZW50LmludGVybmFsUGFnZUNvdW50LFxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy51c2VySW5wdXQgIT09IG51bGwgPyB0aGlzLnVzZXJJbnB1dCA6IHRoaXMuJHBhcmVudC5pbnRlcm5hbEN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuJHBhcmVudC5kaXNhYmxlZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICdrZXl1cCc6IHRoaXMuaGFuZGxlS2V5dXBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAnaW5wdXQnOiB0aGlzLmhhbmRsZUlucHV0LFxuICAgICAgICAgICAgICAnY2hhbmdlJzogdGhpcy5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSwgdGhpcy50KCdlbC5wYWdpbmF0aW9uLnBhZ2VDbGFzc2lmaWVyJyldXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFRvdGFsOiB7XG4gICAgICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuJHBhcmVudC50b3RhbCA9PT0gJ251bWJlcicgPyBoKFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1wYWdpbmF0aW9uX190b3RhbCcgfSxcbiAgICAgICAgICBbdGhpcy50KCdlbC5wYWdpbmF0aW9uLnRvdGFsJywgeyB0b3RhbDogdGhpcy4kcGFyZW50LnRvdGFsIH0pXVxuICAgICAgICApIDogJyc7XG4gICAgICB9XG4gICAgfSxcblxuICAgIFBhZ2VyOiBwYWdlclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDdXJyZW50Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDdXJyZW50Q2hhbmdlKHZhbCkge1xuICAgICAgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlID0gdGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKHZhbCk7XG4gICAgICB0aGlzLnVzZXJDaGFuZ2VQYWdlU2l6ZSA9IHRydWU7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9LFxuICAgIHByZXY6IGZ1bmN0aW9uIHByZXYoKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgdmFyIG5ld1ZhbCA9IHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSAtIDE7XG4gICAgICB0aGlzLmludGVybmFsQ3VycmVudFBhZ2UgPSB0aGlzLmdldFZhbGlkQ3VycmVudFBhZ2UobmV3VmFsKTtcbiAgICAgIHRoaXMuJGVtaXQoJ3ByZXYtY2xpY2snLCB0aGlzLmludGVybmFsQ3VycmVudFBhZ2UpO1xuICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfSxcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciBuZXdWYWwgPSB0aGlzLmludGVybmFsQ3VycmVudFBhZ2UgKyAxO1xuICAgICAgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlID0gdGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKG5ld1ZhbCk7XG4gICAgICB0aGlzLiRlbWl0KCduZXh0LWNsaWNrJywgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlKTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH0sXG4gICAgZ2V0VmFsaWRDdXJyZW50UGFnZTogZnVuY3Rpb24gZ2V0VmFsaWRDdXJyZW50UGFnZSh2YWx1ZSkge1xuICAgICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuXG4gICAgICB2YXIgaGF2ZVBhZ2VDb3VudCA9IHR5cGVvZiB0aGlzLmludGVybmFsUGFnZUNvdW50ID09PSAnbnVtYmVyJztcblxuICAgICAgdmFyIHJlc2V0VmFsdWUgPSB2b2lkIDA7XG4gICAgICBpZiAoIWhhdmVQYWdlQ291bnQpIHtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHJlc2V0VmFsdWUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHZhbHVlIDwgMSkge1xuICAgICAgICAgIHJlc2V0VmFsdWUgPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID4gdGhpcy5pbnRlcm5hbFBhZ2VDb3VudCkge1xuICAgICAgICAgIHJlc2V0VmFsdWUgPSB0aGlzLmludGVybmFsUGFnZUNvdW50O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNldFZhbHVlID09PSB1bmRlZmluZWQgJiYgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHJlc2V0VmFsdWUgPSAxO1xuICAgICAgfSBlbHNlIGlmIChyZXNldFZhbHVlID09PSAwKSB7XG4gICAgICAgIHJlc2V0VmFsdWUgPSAxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzZXRWYWx1ZSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiByZXNldFZhbHVlO1xuICAgIH0sXG4gICAgZW1pdENoYW5nZTogZnVuY3Rpb24gZW1pdENoYW5nZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczIuaW50ZXJuYWxDdXJyZW50UGFnZSAhPT0gX3RoaXMyLmxhc3RFbWl0dGVkUGFnZSB8fCBfdGhpczIudXNlckNoYW5nZVBhZ2VTaXplKSB7XG4gICAgICAgICAgX3RoaXMyLiRlbWl0KCdjdXJyZW50LWNoYW5nZScsIF90aGlzMi5pbnRlcm5hbEN1cnJlbnRQYWdlKTtcbiAgICAgICAgICBfdGhpczIubGFzdEVtaXR0ZWRQYWdlID0gX3RoaXMyLmludGVybmFsQ3VycmVudFBhZ2U7XG4gICAgICAgICAgX3RoaXMyLnVzZXJDaGFuZ2VQYWdlU2l6ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnRlcm5hbFBhZ2VDb3VudDogZnVuY3Rpb24gaW50ZXJuYWxQYWdlQ291bnQoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMudG90YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmNlaWwodGhpcy50b3RhbCAvIHRoaXMuaW50ZXJuYWxQYWdlU2l6ZSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5wYWdlQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgxLCB0aGlzLnBhZ2VDb3VudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjdXJyZW50UGFnZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlID0gdGhpcy5nZXRWYWxpZEN1cnJlbnRQYWdlKHZhbCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhZ2VTaXplOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCkge1xuICAgICAgICB0aGlzLmludGVybmFsUGFnZVNpemUgPSBpc05hTih2YWwpID8gMTAgOiB2YWw7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGludGVybmFsQ3VycmVudFBhZ2U6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpjdXJyZW50UGFnZScsIG5ld1ZhbCk7XG4gICAgICAgIHRoaXMubGFzdEVtaXR0ZWRQYWdlID0gLTE7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGludGVybmFsUGFnZUNvdW50OiBmdW5jdGlvbiBpbnRlcm5hbFBhZ2VDb3VudChuZXdWYWwpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgdmFyIG9sZFBhZ2UgPSB0aGlzLmludGVybmFsQ3VycmVudFBhZ2U7XG4gICAgICBpZiAobmV3VmFsID4gMCAmJiBvbGRQYWdlID09PSAwKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDdXJyZW50UGFnZSA9IDE7XG4gICAgICB9IGVsc2UgaWYgKG9sZFBhZ2UgPiBuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbEN1cnJlbnRQYWdlID0gbmV3VmFsID09PSAwID8gMSA6IG5ld1ZhbDtcbiAgICAgICAgdGhpcy51c2VyQ2hhbmdlUGFnZVNpemUgJiYgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJDaGFuZ2VQYWdlU2l6ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BhZ2luYXRpb24vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucGFnaW5hdGlvbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHBhZ2luYXRpb24ubmFtZSwgcGFnaW5hdGlvbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19wYWdpbmF0aW9uID0gKHBhZ2luYXRpb24pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kaWFsb2cvc3JjL2NvbXBvbmVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjAxNDBlNjImXG52YXIgY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfNjAxNDBlNjJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZGlhbG9nLWZhZGVcIiB9LFxuICAgICAgb246IHsgXCJhZnRlci1lbnRlclwiOiBfdm0uYWZ0ZXJFbnRlciwgXCJhZnRlci1sZWF2ZVwiOiBfdm0uYWZ0ZXJMZWF2ZSB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ19fd3JhcHBlclwiLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVXcmFwcGVyQ2xpY2soJGV2ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBfdm0ua2V5LFxuICAgICAgICAgICAgICByZWY6IFwiZGlhbG9nXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgXCJlbC1kaWFsb2dcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBcImlzLWZ1bGxzY3JlZW5cIjogX3ZtLmZ1bGxzY3JlZW4sXG4gICAgICAgICAgICAgICAgICBcImVsLWRpYWxvZy0tY2VudGVyXCI6IF92bS5jZW50ZXJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF92bS5jdXN0b21DbGFzc1xuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdHlsZTogX3ZtLnN0eWxlLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0udGl0bGUgfHwgXCJkaWFsb2dcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtZGlhbG9nX19oZWFkZXJcIiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdChcInRpdGxlXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtZGlhbG9nX190aXRsZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgIF92bS5zaG93Q2xvc2VcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ19faGVhZGVyYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIFwiYXJpYS1sYWJlbFwiOiBcIkNsb3NlXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDbG9zZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1kaWFsb2dfX2Nsb3NlIGVsLWljb24gZWwtaWNvbi1jbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5yZW5kZXJlZFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtZGlhbG9nX19ib2R5XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX3ZtLiRzbG90cy5mb290ZXJcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWRpYWxvZ19fZm9vdGVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdChcImZvb3RlclwiKV0sXG4gICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfNjAxNDBlNjJfc3RhdGljUmVuZGVyRm5zID0gW11cbmNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYwMTQwZTYyX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGlhbG9nL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYwMTQwZTYyJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXBcIlxudmFyIHBvcHVwXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIHBvcHVwX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHBvcHVwXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvbWlncmF0aW5nXCJcbnZhciBtaWdyYXRpbmdfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcbnZhciBtaWdyYXRpbmdfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obWlncmF0aW5nXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kaWFsb2cvc3JjL2NvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsRGlhbG9nJyxcblxuICBtaXhpbnM6IFtwb3B1cF9kZWZhdWx0LmEsIGVtaXR0ZXJfZGVmYXVsdC5hLCBtaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIHRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG5cbiAgICBtb2RhbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuXG4gICAgbW9kYWxBcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIGFwcGVuZFRvQm9keToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcblxuICAgIGxvY2tTY3JvbGw6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIGNsb3NlT25DbGlja01vZGFsOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBjbG9zZU9uUHJlc3NFc2NhcGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIHNob3dDbG9zZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuXG4gICAgd2lkdGg6IFN0cmluZyxcblxuICAgIGZ1bGxzY3JlZW46IEJvb2xlYW4sXG5cbiAgICBjdXN0b21DbGFzczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuXG4gICAgdG9wOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTV2aCdcbiAgICB9LFxuICAgIGJlZm9yZUNsb3NlOiBGdW5jdGlvbixcbiAgICBjZW50ZXI6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICBkZXN0cm95T25DbG9zZTogQm9vbGVhblxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICBrZXk6IDBcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRlbWl0KCdvcGVuJyk7XG4gICAgICAgIHRoaXMuJGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMudXBkYXRlUG9wcGVyKTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRyZWZzLmRpYWxvZy5zY3JvbGxUb3AgPSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5KSB7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMudXBkYXRlUG9wcGVyKTtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkgdGhpcy4kZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveU9uQ2xvc2UpIHtcbiAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5rZXkrKztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHN0eWxlOiBmdW5jdGlvbiBzdHlsZSgpIHtcbiAgICAgIHZhciBzdHlsZSA9IHt9O1xuICAgICAgaWYgKCF0aGlzLmZ1bGxzY3JlZW4pIHtcbiAgICAgICAgc3R5bGUubWFyZ2luVG9wID0gdGhpcy50b3A7XG4gICAgICAgIGlmICh0aGlzLndpZHRoKSB7XG4gICAgICAgICAgc3R5bGUud2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgJ3NpemUnOiAnc2l6ZSBpcyByZW1vdmVkLidcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIGhhbmRsZVdyYXBwZXJDbGljazogZnVuY3Rpb24gaGFuZGxlV3JhcHBlckNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmNsb3NlT25DbGlja01vZGFsKSByZXR1cm47XG4gICAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XG4gICAgfSxcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuYmVmb3JlQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5iZWZvcmVDbG9zZSh0aGlzLmhpZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoaWRlOiBmdW5jdGlvbiBoaWRlKGNhbmNlbCkge1xuICAgICAgaWYgKGNhbmNlbCAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnZpc2libGUnLCBmYWxzZSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZVBvcHBlcjogZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICB0aGlzLmJyb2FkY2FzdCgnRWxEcm9wZG93bk1lbnUnLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgfSxcbiAgICBhZnRlckVudGVyOiBmdW5jdGlvbiBhZnRlckVudGVyKCkge1xuICAgICAgdGhpcy4kZW1pdCgnb3BlbmVkJyk7XG4gICAgfSxcbiAgICBhZnRlckxlYXZlOiBmdW5jdGlvbiBhZnRlckxlYXZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnY2xvc2VkJyk7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRydWU7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIC8vIGlmIGFwcGVuZFRvQm9keSBpcyB0cnVlLCByZW1vdmUgRE9NIG5vZGUgYWZ0ZXIgZGVzdHJveVxuICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSAmJiB0aGlzLiRlbCAmJiB0aGlzLiRlbC5wYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGVsKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kaWFsb2cvc3JjL2NvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NvbXBvbmVudHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjb21wb25lbnR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGlhbG9nL3NyYy9jb21wb25lbnQudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50X2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2NvbXBvbmVudHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfNjAxNDBlNjJfcmVuZGVyLFxuICBjb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF82MDE0MGU2Ml9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNvbXBvbmVudF9hcGk7IH1cbmNvbXBvbmVudF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2RpYWxvZy9zcmMvY29tcG9uZW50LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY29tcG9uZW50ID0gKGNvbXBvbmVudF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RpYWxvZy9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfY29tcG9uZW50Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX2NvbXBvbmVudC5uYW1lLCBzcmNfY29tcG9uZW50KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRpYWxvZyA9IChzcmNfY29tcG9uZW50KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE1MmYyZWU2JlxudmFyIGF1dG9jb21wbGV0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE1MmYyZWU2X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LWNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgIHZhbHVlOiBfdm0uY2xvc2UsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJjbG9zZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1hdXRvY29tcGxldGVcIixcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIFwiYXJpYS1oYXNwb3B1cFwiOiBcImxpc3Rib3hcIixcbiAgICAgICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLnN1Z2dlc3Rpb25WaXNpYmxlLFxuICAgICAgICBcImFyaWEtb3duc1wiOiBfdm0uaWRcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImVsLWlucHV0XCIsXG4gICAgICAgIF92bS5fYihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWY6IFwiaW5wdXRcIixcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGlucHV0OiBfdm0uaGFuZGxlSW5wdXQsXG4gICAgICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZUNoYW5nZSxcbiAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgYmx1cjogX3ZtLmhhbmRsZUJsdXIsXG4gICAgICAgICAgICAgIGNsZWFyOiBfdm0uaGFuZGxlQ2xlYXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICBrZXlkb3duOiBbXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ1cFwiLCAzOCwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICAgIFwiVXBcIixcbiAgICAgICAgICAgICAgICAgICAgICBcIkFycm93VXBcIlxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgX3ZtLmhpZ2hsaWdodChfdm0uaGlnaGxpZ2h0ZWRJbmRleCAtIDEpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRvd25cIiwgNDAsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgICBcIkRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICBcIkFycm93RG93blwiXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICBfdm0uaGlnaGxpZ2h0KF92bS5oaWdobGlnaHRlZEluZGV4ICsgMSlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZW50ZXJcIiwgMTMsICRldmVudC5rZXksIFwiRW50ZXJcIilcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVLZXlFbnRlcigkZXZlbnQpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInRhYlwiLCA5LCAkZXZlbnQua2V5LCBcIlRhYlwiKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNsb3NlKCRldmVudClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiZWwtaW5wdXRcIixcbiAgICAgICAgICBbX3ZtLiRwcm9wcywgX3ZtLiRhdHRyc10sXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS4kc2xvdHMucHJlcGVuZFxuICAgICAgICAgICAgPyBfYyhcInRlbXBsYXRlXCIsIHsgc2xvdDogXCJwcmVwZW5kXCIgfSwgW192bS5fdChcInByZXBlbmRcIildLCAyKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uJHNsb3RzLmFwcGVuZFxuICAgICAgICAgICAgPyBfYyhcInRlbXBsYXRlXCIsIHsgc2xvdDogXCJhcHBlbmRcIiB9LCBbX3ZtLl90KFwiYXBwZW5kXCIpXSwgMilcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLiRzbG90cy5wcmVmaXhcbiAgICAgICAgICAgID8gX2MoXCJ0ZW1wbGF0ZVwiLCB7IHNsb3Q6IFwicHJlZml4XCIgfSwgW192bS5fdChcInByZWZpeFwiKV0sIDIpXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS4kc2xvdHMuc3VmZml4XG4gICAgICAgICAgICA/IF9jKFwidGVtcGxhdGVcIiwgeyBzbG90OiBcInN1ZmZpeFwiIH0sIFtfdm0uX3QoXCJzdWZmaXhcIildLCAyKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApLFxuICAgICAgX2MoXG4gICAgICAgIFwiZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zXCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwic3VnZ2VzdGlvbnNcIixcbiAgICAgICAgICBjbGFzczogW192bS5wb3BwZXJDbGFzcyA/IF92bS5wb3BwZXJDbGFzcyA6IFwiXCJdLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBcInZpc2libGUtYXJyb3dcIjogXCJcIixcbiAgICAgICAgICAgIFwicG9wcGVyLW9wdGlvbnNcIjogX3ZtLnBvcHBlck9wdGlvbnMsXG4gICAgICAgICAgICBcImFwcGVuZC10by1ib2R5XCI6IF92bS5wb3BwZXJBcHBlbmRUb0JvZHksXG4gICAgICAgICAgICBwbGFjZW1lbnQ6IF92bS5wbGFjZW1lbnQsXG4gICAgICAgICAgICBpZDogX3ZtLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBfdm0uX2woX3ZtLnN1Z2dlc3Rpb25zLCBmdW5jdGlvbihpdGVtLCBpbmRleCkge1xuICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICAgICAgY2xhc3M6IHsgaGlnaGxpZ2h0ZWQ6IF92bS5oaWdobGlnaHRlZEluZGV4ID09PSBpbmRleCB9LFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIGlkOiBfdm0uaWQgKyBcIi1pdGVtLVwiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgcm9sZTogXCJvcHRpb25cIixcbiAgICAgICAgICAgICAgICBcImFyaWEtc2VsZWN0ZWRcIjogX3ZtLmhpZ2hsaWdodGVkSW5kZXggPT09IGluZGV4XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgX3ZtLnNlbGVjdChpdGVtKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLl90KFxuICAgICAgICAgICAgICAgIFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgXCIgKyBfdm0uX3MoaXRlbVtfdm0udmFsdWVLZXldKSArIFwiXFxuICAgICAgXCIpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB7IGl0ZW06IGl0ZW0gfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgfSksXG4gICAgICAgIDBcbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIGF1dG9jb21wbGV0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE1MmYyZWU2X3N0YXRpY1JlbmRlckZucyA9IFtdXG5hdXRvY29tcGxldGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNTJmMmVlNl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xNTJmMmVlNiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInRocm90dGxlLWRlYm91bmNlL2RlYm91bmNlXCJcbnZhciBkZWJvdW5jZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcbnZhciBkZWJvdW5jZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihkZWJvdW5jZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlXCJcbnZhciBjbGlja291dHNpZGVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XG52YXIgY2xpY2tvdXRzaWRlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNsaWNrb3V0c2lkZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZDEwZGNmMCZcbnZhciBhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jZDEwZGNmMF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAgeyBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSwgb246IHsgXCJhZnRlci1sZWF2ZVwiOiBfdm0uZG9EZXN0cm95IH0gfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1BvcHBlcixcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93UG9wcGVyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uIGVsLXBvcHBlclwiLFxuICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICBcImlzLWxvYWRpbmdcIjogIV92bS5wYXJlbnQuaGlkZUxvYWRpbmcgJiYgX3ZtLnBhcmVudC5sb2FkaW5nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLmRyb3Bkb3duV2lkdGggfSxcbiAgICAgICAgICBhdHRyczogeyByb2xlOiBcInJlZ2lvblwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJlbC1zY3JvbGxiYXJcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICB0YWc6IFwidWxcIixcbiAgICAgICAgICAgICAgICBcIndyYXAtY2xhc3NcIjogXCJlbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fd3JhcFwiLFxuICAgICAgICAgICAgICAgIFwidmlldy1jbGFzc1wiOiBcImVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX19saXN0XCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgIV92bS5wYXJlbnQuaGlkZUxvYWRpbmcgJiYgX3ZtLnBhcmVudC5sb2FkaW5nXG4gICAgICAgICAgICAgICAgPyBfYyhcImxpXCIsIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWxvYWRpbmdcIiB9KV0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX3QoXCJkZWZhdWx0XCIpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2NkMTBkY2YwX3N0YXRpY1JlbmRlckZucyA9IFtdXG5hdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jZDEwZGNmMF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jZDEwZGNmMCZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Z1ZS1wb3BwZXJcIlxudmFyIHZ1ZV9wb3BwZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciB2dWVfcG9wcGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9wb3BwZXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3Njcm9sbGJhclwiXG52YXIgc2Nyb2xsYmFyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIHNjcm9sbGJhcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzY3JvbGxiYXJfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBjb21wb25lbnRzOiB7IEVsU2Nyb2xsYmFyOiBzY3JvbGxiYXJfZGVmYXVsdC5hIH0sXG4gIG1peGluczogW3Z1ZV9wb3BwZXJfZGVmYXVsdC5hLCBlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnMnLFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudDogdGhpcy4kcGFyZW50LFxuICAgICAgZHJvcGRvd25XaWR0aDogJydcbiAgICB9O1xuICB9LFxuXG5cbiAgcHJvcHM6IHtcbiAgICBvcHRpb25zOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBpZDogU3RyaW5nXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KGl0ZW0pIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsQXV0b2NvbXBsZXRlJywgJ2l0ZW0tY2xpY2snLCBpdGVtKTtcbiAgICB9XG4gIH0sXG5cbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgIF90aGlzLnBvcHBlckpTICYmIF90aGlzLnVwZGF0ZVBvcHBlcigpO1xuICAgIH0pO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuJHBhcmVudC5wb3BwZXJFbG0gPSB0aGlzLnBvcHBlckVsbSA9IHRoaXMuJGVsO1xuICAgIHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kcGFyZW50LiRyZWZzLmlucHV0LiRyZWZzLmlucHV0IHx8IHRoaXMuJHBhcmVudC4kcmVmcy5pbnB1dC4kcmVmcy50ZXh0YXJlYTtcbiAgICB0aGlzLnJlZmVyZW5jZUxpc3QgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25fX2xpc3QnKTtcbiAgICB0aGlzLnJlZmVyZW5jZUxpc3Quc2V0QXR0cmlidXRlKCdyb2xlJywgJ2xpc3Rib3gnKTtcbiAgICB0aGlzLnJlZmVyZW5jZUxpc3Quc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMuaWQpO1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy4kb24oJ3Zpc2libGUnLCBmdW5jdGlvbiAodmFsLCBpbnB1dFdpZHRoKSB7XG4gICAgICBfdGhpczIuZHJvcGRvd25XaWR0aCA9IGlucHV0V2lkdGggKyAncHgnO1xuICAgICAgX3RoaXMyLnNob3dQb3BwZXIgPSB2YWw7XG4gICAgfSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS1zdWdnZXN0aW9ucy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2F1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUtc3VnZ2VzdGlvbnMudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2F1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zdnVlX3R5cGVfdGVtcGxhdGVfaWRfY2QxMGRjZjBfcmVuZGVyLFxuICBhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnN2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jZDEwZGNmMF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc19hcGk7IH1cbmF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLXN1Z2dlc3Rpb25zLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhdXRvY29tcGxldGVfc3VnZ2VzdGlvbnMgPSAoYXV0b2NvbXBsZXRlX3N1Z2dlc3Rpb25zX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZm9jdXNcIlxudmFyIGZvY3VzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xudmFyIGZvY3VzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGZvY3VzXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhdXRvY29tcGxldGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxBdXRvY29tcGxldGUnLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hLCBmb2N1c19kZWZhdWx0KCkoJ2lucHV0JyksIG1pZ3JhdGluZ19kZWZhdWx0LmFdLFxuXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsQXV0b2NvbXBsZXRlJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hLFxuICAgIEVsQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbnM6IGF1dG9jb21wbGV0ZV9zdWdnZXN0aW9uc1xuICB9LFxuXG4gIGRpcmVjdGl2ZXM6IHsgQ2xpY2tvdXRzaWRlOiBjbGlja291dHNpZGVfZGVmYXVsdC5hIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZUtleToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3ZhbHVlJ1xuICAgIH0sXG4gICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcbiAgICBwb3BwZXJPcHRpb25zOiBPYmplY3QsXG4gICAgcGxhY2Vob2xkZXI6IFN0cmluZyxcbiAgICBjbGVhcmFibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbmFtZTogU3RyaW5nLFxuICAgIHNpemU6IFN0cmluZyxcbiAgICB2YWx1ZTogU3RyaW5nLFxuICAgIG1heGxlbmd0aDogTnVtYmVyLFxuICAgIG1pbmxlbmd0aDogTnVtYmVyLFxuICAgIGF1dG9mb2N1czogQm9vbGVhbixcbiAgICBmZXRjaFN1Z2dlc3Rpb25zOiBGdW5jdGlvbixcbiAgICB0cmlnZ2VyT25Gb2N1czoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGN1c3RvbUl0ZW06IFN0cmluZyxcbiAgICBzZWxlY3RXaGVuVW5tYXRjaGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHByZWZpeEljb246IFN0cmluZyxcbiAgICBzdWZmaXhJY29uOiBTdHJpbmcsXG4gICAgbGFiZWw6IFN0cmluZyxcbiAgICBkZWJvdW5jZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMzAwXG4gICAgfSxcbiAgICBwbGFjZW1lbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdib3R0b20tc3RhcnQnXG4gICAgfSxcbiAgICBoaWRlTG9hZGluZzogQm9vbGVhbixcbiAgICBwb3BwZXJBcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBoaWdobGlnaHRGaXJzdEl0ZW06IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWN0aXZhdGVkOiBmYWxzZSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgaGlnaGxpZ2h0ZWRJbmRleDogLTEsXG4gICAgICBzdWdnZXN0aW9uRGlzYWJsZWQ6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHN1Z2dlc3Rpb25WaXNpYmxlOiBmdW5jdGlvbiBzdWdnZXN0aW9uVmlzaWJsZSgpIHtcbiAgICAgIHZhciBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnM7XG4gICAgICB2YXIgaXNWYWxpZERhdGEgPSBBcnJheS5pc0FycmF5KHN1Z2dlc3Rpb25zKSAmJiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgcmV0dXJuIChpc1ZhbGlkRGF0YSB8fCB0aGlzLmxvYWRpbmcpICYmIHRoaXMuYWN0aXZhdGVkO1xuICAgIH0sXG4gICAgaWQ6IGZ1bmN0aW9uIGlkKCkge1xuICAgICAgcmV0dXJuICdlbC1hdXRvY29tcGxldGUtJyArIE9iamVjdCh1dGlsX1tcImdlbmVyYXRlSWRcIl0pKCk7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIHN1Z2dlc3Rpb25WaXNpYmxlOiBmdW5jdGlvbiBzdWdnZXN0aW9uVmlzaWJsZSh2YWwpIHtcbiAgICAgIHZhciAkaW5wdXQgPSB0aGlzLmdldElucHV0KCk7XG4gICAgICBpZiAoJGlucHV0KSB7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbEF1dG9jb21wbGV0ZVN1Z2dlc3Rpb25zJywgJ3Zpc2libGUnLCBbdmFsLCAkaW5wdXQub2Zmc2V0V2lkdGhdKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgJ2N1c3RvbS1pdGVtJzogJ2N1c3RvbS1pdGVtIGlzIHJlbW92ZWQsIHVzZSBzY29wZWQgc2xvdCBpbnN0ZWFkLicsXG4gICAgICAgICAgJ3Byb3BzJzogJ3Byb3BzIGlzIHJlbW92ZWQsIHVzZSB2YWx1ZS1rZXkgaW5zdGVhZC4nXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXREYXRhOiBmdW5jdGlvbiBnZXREYXRhKHF1ZXJ5U3RyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uRGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuZmV0Y2hTdWdnZXN0aW9ucyhxdWVyeVN0cmluZywgZnVuY3Rpb24gKHN1Z2dlc3Rpb25zKSB7XG4gICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKF90aGlzLnN1Z2dlc3Rpb25EaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICBfdGhpcy5zdWdnZXN0aW9ucyA9IHN1Z2dlc3Rpb25zO1xuICAgICAgICAgIF90aGlzLmhpZ2hsaWdodGVkSW5kZXggPSBfdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0gPyAwIDogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW0VsZW1lbnQgRXJyb3JdW0F1dG9jb21wbGV0ZV1hdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dCh2YWx1ZSkge1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgaWYgKCF0aGlzLnRyaWdnZXJPbkZvY3VzICYmICF2YWx1ZSkge1xuICAgICAgICB0aGlzLnN1Z2dlc3Rpb25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5kZWJvdW5jZWRHZXREYXRhKHZhbHVlKTtcbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSk7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuJGVtaXQoJ2ZvY3VzJywgZXZlbnQpO1xuICAgICAgaWYgKHRoaXMudHJpZ2dlck9uRm9jdXMpIHtcbiAgICAgICAgdGhpcy5kZWJvdW5jZWRHZXREYXRhKHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIGV2ZW50KTtcbiAgICB9LFxuICAgIGhhbmRsZUNsZWFyOiBmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLiRlbWl0KCdjbGVhcicpO1xuICAgIH0sXG4gICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKGUpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVLZXlFbnRlcjogZnVuY3Rpb24gaGFuZGxlS2V5RW50ZXIoZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25WaXNpYmxlICYmIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA+PSAwICYmIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA8IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5zdWdnZXN0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RXaGVuVW5tYXRjaGVkKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcsIHsgdmFsdWU6IHRoaXMudmFsdWUgfSk7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG4gICAgICAgICAgX3RoaXMyLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgX3RoaXMyLmhpZ2hsaWdodGVkSW5kZXggPSAtMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdChpdGVtKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBpdGVtW3RoaXMudmFsdWVLZXldKTtcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdCcsIGl0ZW0pO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgX3RoaXMzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIF90aGlzMy5oaWdobGlnaHRlZEluZGV4ID0gLTE7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhpZ2hsaWdodDogZnVuY3Rpb24gaGlnaGxpZ2h0KGluZGV4KSB7XG4gICAgICBpZiAoIXRoaXMuc3VnZ2VzdGlvblZpc2libGUgfHwgdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gLTE7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA+PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICBpbmRleCA9IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIHZhciBzdWdnZXN0aW9uID0gdGhpcy4kcmVmcy5zdWdnZXN0aW9ucy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWF1dG9jb21wbGV0ZS1zdWdnZXN0aW9uX193cmFwJyk7XG4gICAgICB2YXIgc3VnZ2VzdGlvbkxpc3QgPSBzdWdnZXN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbC1hdXRvY29tcGxldGUtc3VnZ2VzdGlvbl9fbGlzdCBsaScpO1xuXG4gICAgICB2YXIgaGlnaGxpZ2h0SXRlbSA9IHN1Z2dlc3Rpb25MaXN0W2luZGV4XTtcbiAgICAgIHZhciBzY3JvbGxUb3AgPSBzdWdnZXN0aW9uLnNjcm9sbFRvcDtcbiAgICAgIHZhciBvZmZzZXRUb3AgPSBoaWdobGlnaHRJdGVtLm9mZnNldFRvcDtcblxuICAgICAgaWYgKG9mZnNldFRvcCArIGhpZ2hsaWdodEl0ZW0uc2Nyb2xsSGVpZ2h0ID4gc2Nyb2xsVG9wICsgc3VnZ2VzdGlvbi5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgc3VnZ2VzdGlvbi5zY3JvbGxUb3AgKz0gaGlnaGxpZ2h0SXRlbS5zY3JvbGxIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAob2Zmc2V0VG9wIDwgc2Nyb2xsVG9wKSB7XG4gICAgICAgIHN1Z2dlc3Rpb24uc2Nyb2xsVG9wIC09IGhpZ2hsaWdodEl0ZW0uc2Nyb2xsSGVpZ2h0O1xuICAgICAgfVxuICAgICAgdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gaW5kZXg7XG4gICAgICB2YXIgJGlucHV0ID0gdGhpcy5nZXRJbnB1dCgpO1xuICAgICAgJGlucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgdGhpcy5pZCArICctaXRlbS0nICsgdGhpcy5oaWdobGlnaHRlZEluZGV4KTtcbiAgICB9LFxuICAgIGdldElucHV0OiBmdW5jdGlvbiBnZXRJbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0LmdldElucHV0KCk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdGhpcy5kZWJvdW5jZWRHZXREYXRhID0gZGVib3VuY2VfZGVmYXVsdCgpKHRoaXMuZGVib3VuY2UsIHRoaXMuZ2V0RGF0YSk7XG4gICAgdGhpcy4kb24oJ2l0ZW0tY2xpY2snLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgX3RoaXM0LnNlbGVjdChpdGVtKTtcbiAgICB9KTtcbiAgICB2YXIgJGlucHV0ID0gdGhpcy5nZXRJbnB1dCgpO1xuICAgICRpbnB1dC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAndGV4dGJveCcpO1xuICAgICRpbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtYXV0b2NvbXBsZXRlJywgJ2xpc3QnKTtcbiAgICAkaW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgJ2lkJyk7XG4gICAgJGlucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgdGhpcy5pZCArICctaXRlbS0nICsgdGhpcy5oaWdobGlnaHRlZEluZGV4KTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLiRyZWZzLnN1Z2dlc3Rpb25zLiRkZXN0cm95KCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hdXRvY29tcGxldGUvc3JjL2F1dG9jb21wbGV0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2F1dG9jb21wbGV0ZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChhdXRvY29tcGxldGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL3NyYy9hdXRvY29tcGxldGUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgYXV0b2NvbXBsZXRlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2F1dG9jb21wbGV0ZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgYXV0b2NvbXBsZXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMTUyZjJlZTZfcmVuZGVyLFxuICBhdXRvY29tcGxldGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNTJmMmVlNl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGF1dG9jb21wbGV0ZV9hcGk7IH1cbmF1dG9jb21wbGV0ZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2F1dG9jb21wbGV0ZS9zcmMvYXV0b2NvbXBsZXRlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhdXRvY29tcGxldGUgPSAoYXV0b2NvbXBsZXRlX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXV0b2NvbXBsZXRlL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmF1dG9jb21wbGV0ZS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGF1dG9jb21wbGV0ZS5uYW1lLCBhdXRvY29tcGxldGUpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfYXV0b2NvbXBsZXRlID0gKGF1dG9jb21wbGV0ZSk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvYnV0dG9uXCJcbnZhciBidXR0b25fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XG52YXIgYnV0dG9uX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGJ1dHRvbl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvYnV0dG9uLWdyb3VwXCJcbnZhciBidXR0b25fZ3JvdXBfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOCk7XG52YXIgYnV0dG9uX2dyb3VwX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGJ1dHRvbl9ncm91cF8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRyb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsRHJvcGRvd24nLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbERyb3Bkb3duJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYSwgbWlncmF0aW5nX2RlZmF1bHQuYV0sXG5cbiAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IGNsaWNrb3V0c2lkZV9kZWZhdWx0LmEgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmEsXG4gICAgRWxCdXR0b25Hcm91cDogYnV0dG9uX2dyb3VwX2RlZmF1bHQuYVxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyb3Bkb3duOiB0aGlzXG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hvdmVyJ1xuICAgIH0sXG4gICAgdHlwZTogU3RyaW5nLFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBzcGxpdEJ1dHRvbjogQm9vbGVhbixcbiAgICBoaWRlT25DbGljazoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHBsYWNlbWVudDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2JvdHRvbS1lbmQnXG4gICAgfSxcbiAgICB2aXNpYmxlQXJyb3c6IHtcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHNob3dUaW1lb3V0OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAyNTBcbiAgICB9LFxuICAgIGhpZGVUaW1lb3V0OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxNTBcbiAgICB9LFxuICAgIHRhYmluZGV4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpbWVvdXQ6IG51bGwsXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIHRyaWdnZXJFbG06IG51bGwsXG4gICAgICBtZW51SXRlbXM6IG51bGwsXG4gICAgICBtZW51SXRlbXNBcnJheTogbnVsbCxcbiAgICAgIGRyb3Bkb3duRWxtOiBudWxsLFxuICAgICAgZm9jdXNpbmc6IGZhbHNlLFxuICAgICAgbGlzdElkOiAnZHJvcGRvd24tbWVudS0nICsgT2JqZWN0KHV0aWxfW1wiZ2VuZXJhdGVJZFwiXSkoKVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGRyb3Bkb3duU2l6ZTogZnVuY3Rpb24gZHJvcGRvd25TaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLiRvbignbWVudS1pdGVtLWNsaWNrJywgdGhpcy5oYW5kbGVNZW51SXRlbUNsaWNrKTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHtcbiAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbERyb3Bkb3duTWVudScsICd2aXNpYmxlJywgdmFsKTtcbiAgICAgIHRoaXMuJGVtaXQoJ3Zpc2libGUtY2hhbmdlJywgdmFsKTtcbiAgICB9LFxuICAgIGZvY3VzaW5nOiBmdW5jdGlvbiBmb2N1c2luZyh2YWwpIHtcbiAgICAgIHZhciBzZWxmRGVmaW5lID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWRyb3Bkb3duLXNlbGZkZWZpbmUnKTtcbiAgICAgIGlmIChzZWxmRGVmaW5lKSB7XG4gICAgICAgIC8vIOiHquWumuS5iVxuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgc2VsZkRlZmluZS5jbGFzc05hbWUgKz0gJyBmb2N1c2luZyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZkRlZmluZS5jbGFzc05hbWUgPSBzZWxmRGVmaW5lLmNsYXNzTmFtZS5yZXBsYWNlKCdmb2N1c2luZycsICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICdtZW51LWFsaWduJzogJ21lbnUtYWxpZ24gaXMgcmVuYW1lZCB0byBwbGFjZW1lbnQuJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgc2hvdzogZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH0sIHRoaXMudHJpZ2dlciA9PT0gJ2NsaWNrJyA/IDAgOiB0aGlzLnNob3dUaW1lb3V0KTtcbiAgICB9LFxuICAgIGhpZGU6IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHRoaXMucmVtb3ZlVGFiaW5kZXgoKTtcbiAgICAgIGlmICh0aGlzLnRhYmluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5yZXNldFRhYmluZGV4KHRoaXMudHJpZ2dlckVsbSk7XG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfSwgdGhpcy50cmlnZ2VyID09PSAnY2xpY2snID8gMCA6IHRoaXMuaGlkZVRpbWVvdXQpO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLnZpc2libGUpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVRyaWdnZXJLZXlEb3duOiBmdW5jdGlvbiBoYW5kbGVUcmlnZ2VyS2V5RG93bihldikge1xuICAgICAgdmFyIGtleUNvZGUgPSBldi5rZXlDb2RlO1xuICAgICAgaWYgKFszOCwgNDBdLmluZGV4T2Yoa2V5Q29kZSkgPiAtMSkge1xuICAgICAgICAvLyB1cC9kb3duXG4gICAgICAgIHRoaXMucmVtb3ZlVGFiaW5kZXgoKTtcbiAgICAgICAgdGhpcy5yZXNldFRhYmluZGV4KHRoaXMubWVudUl0ZW1zWzBdKTtcbiAgICAgICAgdGhpcy5tZW51SXRlbXNbMF0uZm9jdXMoKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIC8vIHNwYWNlIGVudGVy6YCJ5LitXG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soKTtcbiAgICAgIH0gZWxzZSBpZiAoWzksIDI3XS5pbmRleE9mKGtleUNvZGUpID4gLTEpIHtcbiAgICAgICAgLy8gdGFiIHx8IGVzY1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUl0ZW1LZXlEb3duOiBmdW5jdGlvbiBoYW5kbGVJdGVtS2V5RG93bihldikge1xuICAgICAgdmFyIGtleUNvZGUgPSBldi5rZXlDb2RlO1xuICAgICAgdmFyIHRhcmdldCA9IGV2LnRhcmdldDtcbiAgICAgIHZhciBjdXJyZW50SW5kZXggPSB0aGlzLm1lbnVJdGVtc0FycmF5LmluZGV4T2YodGFyZ2V0KTtcbiAgICAgIHZhciBtYXggPSB0aGlzLm1lbnVJdGVtc0FycmF5Lmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gdm9pZCAwO1xuICAgICAgaWYgKFszOCwgNDBdLmluZGV4T2Yoa2V5Q29kZSkgPiAtMSkge1xuICAgICAgICAvLyB1cC9kb3duXG4gICAgICAgIGlmIChrZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgIC8vIHVwXG4gICAgICAgICAgbmV4dEluZGV4ID0gY3VycmVudEluZGV4ICE9PSAwID8gY3VycmVudEluZGV4IC0gMSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZG93blxuICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCA8IG1heCA/IGN1cnJlbnRJbmRleCArIDEgOiBtYXg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVUYWJpbmRleCgpO1xuICAgICAgICB0aGlzLnJlc2V0VGFiaW5kZXgodGhpcy5tZW51SXRlbXNbbmV4dEluZGV4XSk7XG4gICAgICAgIHRoaXMubWVudUl0ZW1zW25leHRJbmRleF0uZm9jdXMoKTtcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgIC8vIGVudGVy6YCJ5LitXG4gICAgICAgIHRoaXMudHJpZ2dlckVsbUZvY3VzKCk7XG4gICAgICAgIHRhcmdldC5jbGljaygpO1xuICAgICAgICBpZiAodGhpcy5oaWRlT25DbGljaykge1xuICAgICAgICAgIC8vIGNsaWNr5YWz6ZetXG4gICAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoWzksIDI3XS5pbmRleE9mKGtleUNvZGUpID4gLTEpIHtcbiAgICAgICAgLy8gdGFiIC8vIGVzY1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2V0VGFiaW5kZXg6IGZ1bmN0aW9uIHJlc2V0VGFiaW5kZXgoZWxlKSB7XG4gICAgICAvLyDkuIvmrKF0YWLml7bnu4Tku7bogZrnhKblhYPntKBcbiAgICAgIHRoaXMucmVtb3ZlVGFiaW5kZXgoKTtcbiAgICAgIGVsZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTsgLy8g5LiL5qyh5pyf5pyb55qE6IGa54Sm5YWD57SgXG4gICAgfSxcbiAgICByZW1vdmVUYWJpbmRleDogZnVuY3Rpb24gcmVtb3ZlVGFiaW5kZXgoKSB7XG4gICAgICB0aGlzLnRyaWdnZXJFbG0uc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgdGhpcy5tZW51SXRlbXNBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBpbml0QXJpYTogZnVuY3Rpb24gaW5pdEFyaWEoKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duRWxtLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmxpc3RJZCk7XG4gICAgICB0aGlzLnRyaWdnZXJFbG0uc2V0QXR0cmlidXRlKCdhcmlhLWhhc3BvcHVwJywgJ2xpc3QnKTtcbiAgICAgIHRoaXMudHJpZ2dlckVsbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnLCB0aGlzLmxpc3RJZCk7XG5cbiAgICAgIGlmICghdGhpcy5zcGxpdEJ1dHRvbikge1xuICAgICAgICAvLyDoh6rlrprkuYlcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgncm9sZScsICdidXR0b24nKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCB0aGlzLnRhYmluZGV4KTtcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAodGhpcy50cmlnZ2VyRWxtLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSB8fCAnJykgKyAnIGVsLWRyb3Bkb3duLXNlbGZkZWZpbmUnKTsgLy8g5o6n5Yi2XG4gICAgICB9XG4gICAgfSxcbiAgICBpbml0RXZlbnQ6IGZ1bmN0aW9uIGluaXRFdmVudCgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgdHJpZ2dlciA9IHRoaXMudHJpZ2dlcixcbiAgICAgICAgICBzaG93ID0gdGhpcy5zaG93LFxuICAgICAgICAgIGhpZGUgPSB0aGlzLmhpZGUsXG4gICAgICAgICAgaGFuZGxlQ2xpY2sgPSB0aGlzLmhhbmRsZUNsaWNrLFxuICAgICAgICAgIHNwbGl0QnV0dG9uID0gdGhpcy5zcGxpdEJ1dHRvbixcbiAgICAgICAgICBoYW5kbGVUcmlnZ2VyS2V5RG93biA9IHRoaXMuaGFuZGxlVHJpZ2dlcktleURvd24sXG4gICAgICAgICAgaGFuZGxlSXRlbUtleURvd24gPSB0aGlzLmhhbmRsZUl0ZW1LZXlEb3duO1xuXG4gICAgICB0aGlzLnRyaWdnZXJFbG0gPSBzcGxpdEJ1dHRvbiA/IHRoaXMuJHJlZnMudHJpZ2dlci4kZWwgOiB0aGlzLiRzbG90cy5kZWZhdWx0WzBdLmVsbTtcblxuICAgICAgdmFyIGRyb3Bkb3duRWxtID0gdGhpcy5kcm9wZG93bkVsbTtcblxuICAgICAgdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVUcmlnZ2VyS2V5RG93bik7IC8vIHRyaWdnZXJFbG0ga2V5ZG93blxuICAgICAgZHJvcGRvd25FbG0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUl0ZW1LZXlEb3duLCB0cnVlKTsgLy8gaXRlbSBrZXlkb3duXG4gICAgICAvLyDmjqfliLboh6rlrprkuYnlhYPntKDnmoTmoLflvI9cbiAgICAgIGlmICghc3BsaXRCdXR0b24pIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5mb2N1c2luZyA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuZm9jdXNpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudHJpZ2dlckVsbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuZm9jdXNpbmcgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2hvdmVyJykge1xuICAgICAgICB0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHNob3cpO1xuICAgICAgICB0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIGhpZGUpO1xuICAgICAgICBkcm9wZG93bkVsbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgc2hvdyk7XG4gICAgICAgIGRyb3Bkb3duRWxtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBoaWRlKTtcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICB0aGlzLnRyaWdnZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGljayk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNZW51SXRlbUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVNZW51SXRlbUNsaWNrKGNvbW1hbmQsIGluc3RhbmNlKSB7XG4gICAgICBpZiAodGhpcy5oaWRlT25DbGljaykge1xuICAgICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVtaXQoJ2NvbW1hbmQnLCBjb21tYW5kLCBpbnN0YW5jZSk7XG4gICAgfSxcbiAgICB0cmlnZ2VyRWxtRm9jdXM6IGZ1bmN0aW9uIHRyaWdnZXJFbG1Gb2N1cygpIHtcbiAgICAgIHRoaXMudHJpZ2dlckVsbS5mb2N1cyAmJiB0aGlzLnRyaWdnZXJFbG0uZm9jdXMoKTtcbiAgICB9LFxuICAgIGluaXREb21PcGVyYXRpb246IGZ1bmN0aW9uIGluaXREb21PcGVyYXRpb24oKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duRWxtID0gdGhpcy5wb3BwZXJFbG07XG4gICAgICB0aGlzLm1lbnVJdGVtcyA9IHRoaXMuZHJvcGRvd25FbG0ucXVlcnlTZWxlY3RvckFsbChcIlt0YWJpbmRleD0nLTEnXVwiKTtcbiAgICAgIHRoaXMubWVudUl0ZW1zQXJyYXkgPSBbXS5zbGljZS5jYWxsKHRoaXMubWVudUl0ZW1zKTtcblxuICAgICAgdGhpcy5pbml0RXZlbnQoKTtcbiAgICAgIHRoaXMuaW5pdEFyaWEoKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGhpZGUgPSB0aGlzLmhpZGUsXG4gICAgICAgIHNwbGl0QnV0dG9uID0gdGhpcy5zcGxpdEJ1dHRvbixcbiAgICAgICAgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgICAgZHJvcGRvd25TaXplID0gdGhpcy5kcm9wZG93blNpemUsXG4gICAgICAgIGRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcblxuXG4gICAgdmFyIGhhbmRsZU1haW5CdXR0b25DbGljayA9IGZ1bmN0aW9uIGhhbmRsZU1haW5CdXR0b25DbGljayhldmVudCkge1xuICAgICAgX3RoaXM0LiRlbWl0KCdjbGljaycsIGV2ZW50KTtcbiAgICAgIGhpZGUoKTtcbiAgICB9O1xuXG4gICAgdmFyIHRyaWdnZXJFbG0gPSBudWxsO1xuICAgIGlmIChzcGxpdEJ1dHRvbikge1xuICAgICAgdHJpZ2dlckVsbSA9IGgoJ2VsLWJ1dHRvbi1ncm91cCcsIFtoKFxuICAgICAgICAnZWwtYnV0dG9uJyxcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IHR5cGUsIHNpemU6IGRyb3Bkb3duU2l6ZSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0sXG4gICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICdjbGljayc6IGhhbmRsZU1haW5CdXR0b25DbGlja1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW3RoaXMuJHNsb3RzLmRlZmF1bHRdXG4gICAgICApLCBoKFxuICAgICAgICAnZWwtYnV0dG9uJyxcbiAgICAgICAgeyByZWY6ICd0cmlnZ2VyJywgYXR0cnM6IHsgdHlwZTogdHlwZSwgc2l6ZTogZHJvcGRvd25TaXplLCBkaXNhYmxlZDogZGlzYWJsZWQgfSxcbiAgICAgICAgICAnY2xhc3MnOiAnZWwtZHJvcGRvd25fX2NhcmV0LWJ1dHRvbicgfSxcbiAgICAgICAgW2goJ2knLCB7ICdjbGFzcyc6ICdlbC1kcm9wZG93bl9faWNvbiBlbC1pY29uLWFycm93LWRvd24nIH0pXVxuICAgICAgKV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmlnZ2VyRWxtID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICAgIHZhciB2bm9kZURhdGEgPSB0cmlnZ2VyRWxtWzBdLmRhdGEgfHwge307XG4gICAgICB2YXIgX3Zub2RlRGF0YSRhdHRycyA9IHZub2RlRGF0YS5hdHRycyxcbiAgICAgICAgICBhdHRycyA9IF92bm9kZURhdGEkYXR0cnMgPT09IHVuZGVmaW5lZCA/IHt9IDogX3Zub2RlRGF0YSRhdHRycztcblxuICAgICAgaWYgKGRpc2FibGVkICYmICFhdHRycy5kaXNhYmxlZCkge1xuICAgICAgICBhdHRycy5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHZub2RlRGF0YS5hdHRycyA9IGF0dHJzO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgbWVudUVsbSA9IGRpc2FibGVkID8gbnVsbCA6IHRoaXMuJHNsb3RzLmRyb3Bkb3duO1xuXG4gICAgcmV0dXJuIGgoXG4gICAgICAnZGl2JyxcbiAgICAgIHsgJ2NsYXNzJzogJ2VsLWRyb3Bkb3duJywgZGlyZWN0aXZlczogW3tcbiAgICAgICAgICBuYW1lOiAnY2xpY2tvdXRzaWRlJyxcbiAgICAgICAgICB2YWx1ZTogaGlkZVxuICAgICAgICB9XSxcbiAgICAgICAgYXR0cnM6IHsgJ2FyaWEtZGlzYWJsZWQnOiBkaXNhYmxlZCB9XG4gICAgICB9LFxuICAgICAgW3RyaWdnZXJFbG0sIG1lbnVFbG1dXG4gICAgKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGRyb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi52dWVcbnZhciBkcm9wZG93bl9yZW5kZXIsIGRyb3Bkb3duX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBkcm9wZG93bl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgZHJvcGRvd25fcmVuZGVyLFxuICBkcm9wZG93bl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGRyb3Bkb3duX2FwaTsgfVxuZHJvcGRvd25fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRyb3Bkb3duID0gKGRyb3Bkb3duX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZHJvcGRvd24uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChkcm9wZG93bi5uYW1lLCBkcm9wZG93bik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19kcm9wZG93biA9IChkcm9wZG93bik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1tZW51LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZGE2YjcxNCZcbnZhciBkcm9wZG93bl9tZW51dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGRhNmI3MTRfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHsgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0sIG9uOiB7IFwiYWZ0ZXItbGVhdmVcIjogX3ZtLmRvRGVzdHJveSB9IH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwidWxcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1BvcHBlcixcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93UG9wcGVyXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRyb3Bkb3duLW1lbnUgZWwtcG9wcGVyXCIsXG4gICAgICAgICAgY2xhc3M6IFtfdm0uc2l6ZSAmJiBcImVsLWRyb3Bkb3duLW1lbnUtLVwiICsgX3ZtLnNpemVdXG4gICAgICAgIH0sXG4gICAgICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIGRyb3Bkb3duX21lbnV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZGE2YjcxNF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuZHJvcGRvd25fbWVudXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBkYTZiNzE0X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLW1lbnUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTBkYTZiNzE0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24tbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZHJvcGRvd25fbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbERyb3Bkb3duTWVudScsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsRHJvcGRvd25NZW51JyxcblxuICBtaXhpbnM6IFt2dWVfcG9wcGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICB2aXNpYmxlQXJyb3c6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBhcnJvd09mZnNldDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmRyb3Bkb3duLmRyb3Bkb3duU2l6ZVxuICAgIH07XG4gIH0sXG5cblxuICBpbmplY3Q6IFsnZHJvcGRvd24nXSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiRvbigndXBkYXRlUG9wcGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnNob3dQb3BwZXIpIF90aGlzLnVwZGF0ZVBvcHBlcigpO1xuICAgIH0pO1xuICAgIHRoaXMuJG9uKCd2aXNpYmxlJywgZnVuY3Rpb24gKHZhbCkge1xuICAgICAgX3RoaXMuc2hvd1BvcHBlciA9IHZhbDtcbiAgICB9KTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLmRyb3Bkb3duLnBvcHBlckVsbSA9IHRoaXMucG9wcGVyRWxtID0gdGhpcy4kZWw7XG4gICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLmRyb3Bkb3duLiRlbDtcbiAgICAvLyBjb21wYXRpYmxlIHdpdGggMi42IG5ldyB2LXNsb3Qgc3ludGF4XG4gICAgLy8gaXNzdWUgbGluayBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNDM0NVxuICAgIHRoaXMuZHJvcGRvd24uaW5pdERvbU9wZXJhdGlvbigpO1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICAnZHJvcGRvd24ucGxhY2VtZW50Jzoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGxhY2VtZW50ID0gdmFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1tZW51LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZHJvcGRvd25fbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChkcm9wZG93bl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1tZW51LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGRyb3Bkb3duX21lbnVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfZHJvcGRvd25fbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgZHJvcGRvd25fbWVudXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBkYTZiNzE0X3JlbmRlcixcbiAgZHJvcGRvd25fbWVudXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBkYTZiNzE0X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZHJvcGRvd25fbWVudV9hcGk7IH1cbmRyb3Bkb3duX21lbnVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24tbWVudS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZHJvcGRvd25fbWVudSA9IChkcm9wZG93bl9tZW51X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24tbWVudS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5kcm9wZG93bl9tZW51Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoZHJvcGRvd25fbWVudS5uYW1lLCBkcm9wZG93bl9tZW51KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2Ryb3Bkb3duX21lbnUgPSAoZHJvcGRvd25fbWVudSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MzU5MTAyYSZcbnZhciBkcm9wZG93bl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjM1OTEwMmFfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGlcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1kcm9wZG93bi1tZW51X19pdGVtXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBcImlzLWRpc2FibGVkXCI6IF92bS5kaXNhYmxlZCxcbiAgICAgICAgXCJlbC1kcm9wZG93bi1tZW51X19pdGVtLS1kaXZpZGVkXCI6IF92bS5kaXZpZGVkXG4gICAgICB9LFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IF92bS5kaXNhYmxlZCxcbiAgICAgICAgdGFiaW5kZXg6IF92bS5kaXNhYmxlZCA/IG51bGwgOiAtMVxuICAgICAgfSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xpY2sgfVxuICAgIH0sXG4gICAgW192bS5pY29uID8gX2MoXCJpXCIsIHsgY2xhc3M6IF92bS5pY29uIH0pIDogX3ZtLl9lKCksIF92bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIGRyb3Bkb3duX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF82MzU5MTAyYV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuZHJvcGRvd25faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYzNTkxMDJhX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTYzNTkxMDJhJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kcm9wZG93bi9zcmMvZHJvcGRvd24taXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkcm9wZG93bl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsRHJvcGRvd25JdGVtJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21tYW5kOiB7fSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBkaXZpZGVkOiBCb29sZWFuLFxuICAgIGljb246IFN0cmluZ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZSkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxEcm9wZG93bicsICdtZW51LWl0ZW0tY2xpY2snLCBbdGhpcy5jb21tYW5kLCB0aGlzXSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19kcm9wZG93bl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGRyb3Bkb3duX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJvcGRvd24vc3JjL2Ryb3Bkb3duLWl0ZW0udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgZHJvcGRvd25faXRlbV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19kcm9wZG93bl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBkcm9wZG93bl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjM1OTEwMmFfcmVuZGVyLFxuICBkcm9wZG93bl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjM1OTEwMmFfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBkcm9wZG93bl9pdGVtX2FwaTsgfVxuZHJvcGRvd25faXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2Ryb3Bkb3duL3NyYy9kcm9wZG93bi1pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkcm9wZG93bl9pdGVtID0gKGRyb3Bkb3duX2l0ZW1fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcm9wZG93bi1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmRyb3Bkb3duX2l0ZW0uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChkcm9wZG93bl9pdGVtLm5hbWUsIGRyb3Bkb3duX2l0ZW0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfZHJvcGRvd25faXRlbSA9IChkcm9wZG93bl9pdGVtKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL2FyaWEtdXRpbHMuanNcbnZhciBhcmlhID0gYXJpYSB8fCB7fTtcblxuYXJpYS5VdGlscyA9IGFyaWEuVXRpbHMgfHwge307XG5cbi8qKlxuICogQGRlc2MgU2V0IGZvY3VzIG9uIGRlc2NlbmRhbnQgbm9kZXMgdW50aWwgdGhlIGZpcnN0IGZvY3VzYWJsZSBlbGVtZW50IGlzXG4gKiAgICAgICBmb3VuZC5cbiAqIEBwYXJhbSBlbGVtZW50XG4gKiAgICAgICAgICBET00gbm9kZSBmb3Igd2hpY2ggdG8gZmluZCB0aGUgZmlyc3QgZm9jdXNhYmxlIGRlc2NlbmRhbnQuXG4gKiBAcmV0dXJuc1xuICogIHRydWUgaWYgYSBmb2N1c2FibGUgZWxlbWVudCBpcyBmb3VuZCBhbmQgZm9jdXMgaXMgc2V0LlxuICovXG5hcmlhLlV0aWxzLmZvY3VzRmlyc3REZXNjZW5kYW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgaWYgKGFyaWEuVXRpbHMuYXR0ZW1wdEZvY3VzKGNoaWxkKSB8fCBhcmlhLlV0aWxzLmZvY3VzRmlyc3REZXNjZW5kYW50KGNoaWxkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbi8qKlxuICogQGRlc2MgRmluZCB0aGUgbGFzdCBkZXNjZW5kYW50IG5vZGUgdGhhdCBpcyBmb2N1c2FibGUuXG4gKiBAcGFyYW0gZWxlbWVudFxuICogICAgICAgICAgRE9NIG5vZGUgZm9yIHdoaWNoIHRvIGZpbmQgdGhlIGxhc3QgZm9jdXNhYmxlIGRlc2NlbmRhbnQuXG4gKiBAcmV0dXJuc1xuICogIHRydWUgaWYgYSBmb2N1c2FibGUgZWxlbWVudCBpcyBmb3VuZCBhbmQgZm9jdXMgaXMgc2V0LlxuICovXG5cbmFyaWEuVXRpbHMuZm9jdXNMYXN0RGVzY2VuZGFudCA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGZvciAodmFyIGkgPSBlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgY2hpbGQgPSBlbGVtZW50LmNoaWxkTm9kZXNbaV07XG4gICAgaWYgKGFyaWEuVXRpbHMuYXR0ZW1wdEZvY3VzKGNoaWxkKSB8fCBhcmlhLlV0aWxzLmZvY3VzTGFzdERlc2NlbmRhbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBAZGVzYyBTZXQgQXR0ZW1wdCB0byBzZXQgZm9jdXMgb24gdGhlIGN1cnJlbnQgbm9kZS5cbiAqIEBwYXJhbSBlbGVtZW50XG4gKiAgICAgICAgICBUaGUgbm9kZSB0byBhdHRlbXB0IHRvIGZvY3VzIG9uLlxuICogQHJldHVybnNcbiAqICB0cnVlIGlmIGVsZW1lbnQgaXMgZm9jdXNlZC5cbiAqL1xuYXJpYS5VdGlscy5hdHRlbXB0Rm9jdXMgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICBpZiAoIWFyaWEuVXRpbHMuaXNGb2N1c2FibGUoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgYXJpYS5VdGlscy5JZ25vcmVVdGlsRm9jdXNDaGFuZ2VzID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBlbGVtZW50LmZvY3VzKCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG4gIGFyaWEuVXRpbHMuSWdub3JlVXRpbEZvY3VzQ2hhbmdlcyA9IGZhbHNlO1xuICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWxlbWVudDtcbn07XG5cbmFyaWEuVXRpbHMuaXNGb2N1c2FibGUgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50YWJJbmRleCA+IDAgfHwgZWxlbWVudC50YWJJbmRleCA9PT0gMCAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiSW5kZXgnKSAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGVsZW1lbnQuZGlzYWJsZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKGVsZW1lbnQubm9kZU5hbWUpIHtcbiAgICBjYXNlICdBJzpcbiAgICAgIHJldHVybiAhIWVsZW1lbnQuaHJlZiAmJiBlbGVtZW50LnJlbCAhPT0gJ2lnbm9yZSc7XG4gICAgY2FzZSAnSU5QVVQnOlxuICAgICAgcmV0dXJuIGVsZW1lbnQudHlwZSAhPT0gJ2hpZGRlbicgJiYgZWxlbWVudC50eXBlICE9PSAnZmlsZSc7XG4gICAgY2FzZSAnQlVUVE9OJzpcbiAgICBjYXNlICdTRUxFQ1QnOlxuICAgIGNhc2UgJ1RFWFRBUkVBJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbi8qKlxuICog6Kem5Y+R5LiA5Liq5LqL5Lu2XG4gKiBtb3VzZWVudGVyLCBtb3VzZWxlYXZlLCBtb3VzZW92ZXIsIGtleXVwLCBjaGFuZ2UsIGNsaWNrIOetiVxuICogQHBhcmFtICB7RWxlbWVudH0gZWxtXG4gKiBAcGFyYW0gIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSAgeyp9IG9wdHNcbiAqL1xuYXJpYS5VdGlscy50cmlnZ2VyRXZlbnQgPSBmdW5jdGlvbiAoZWxtLCBuYW1lKSB7XG4gIHZhciBldmVudE5hbWUgPSB2b2lkIDA7XG5cbiAgaWYgKC9ebW91c2V8Y2xpY2svLnRlc3QobmFtZSkpIHtcbiAgICBldmVudE5hbWUgPSAnTW91c2VFdmVudHMnO1xuICB9IGVsc2UgaWYgKC9ea2V5Ly50ZXN0KG5hbWUpKSB7XG4gICAgZXZlbnROYW1lID0gJ0tleWJvYXJkRXZlbnQnO1xuICB9IGVsc2Uge1xuICAgIGV2ZW50TmFtZSA9ICdIVE1MRXZlbnRzJztcbiAgfVxuICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoZXZlbnROYW1lKTtcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgb3B0cyA9IEFycmF5KF9sZW4gPiAyID8gX2xlbiAtIDIgOiAwKSwgX2tleSA9IDI7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBvcHRzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGV2dC5pbml0RXZlbnQuYXBwbHkoZXZ0LCBbbmFtZV0uY29uY2F0KG9wdHMpKTtcbiAgZWxtLmRpc3BhdGNoRXZlbnQgPyBlbG0uZGlzcGF0Y2hFdmVudChldnQpIDogZWxtLmZpcmVFdmVudCgnb24nICsgbmFtZSwgZXZ0KTtcblxuICByZXR1cm4gZWxtO1xufTtcblxuYXJpYS5VdGlscy5rZXlzID0ge1xuICB0YWI6IDksXG4gIGVudGVyOiAxMyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBlc2M6IDI3XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhcmlhX3V0aWxzID0gKGFyaWEuVXRpbHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvbWVudS9hcmlhLXN1Ym1lbnUuanNcblxuXG52YXIgU3ViTWVudSA9IGZ1bmN0aW9uIFN1Yk1lbnUocGFyZW50LCBkb21Ob2RlKSB7XG4gIHRoaXMuZG9tTm9kZSA9IGRvbU5vZGU7XG4gIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICB0aGlzLnN1Yk1lbnVJdGVtcyA9IFtdO1xuICB0aGlzLnN1YkluZGV4ID0gMDtcbiAgdGhpcy5pbml0KCk7XG59O1xuXG5TdWJNZW51LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLnN1Yk1lbnVJdGVtcyA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdsaScpO1xuICB0aGlzLmFkZExpc3RlbmVycygpO1xufTtcblxuU3ViTWVudS5wcm90b3R5cGUuZ290b1N1YkluZGV4ID0gZnVuY3Rpb24gKGlkeCkge1xuICBpZiAoaWR4ID09PSB0aGlzLnN1Yk1lbnVJdGVtcy5sZW5ndGgpIHtcbiAgICBpZHggPSAwO1xuICB9IGVsc2UgaWYgKGlkeCA8IDApIHtcbiAgICBpZHggPSB0aGlzLnN1Yk1lbnVJdGVtcy5sZW5ndGggLSAxO1xuICB9XG4gIHRoaXMuc3ViTWVudUl0ZW1zW2lkeF0uZm9jdXMoKTtcbiAgdGhpcy5zdWJJbmRleCA9IGlkeDtcbn07XG5cblN1Yk1lbnUucHJvdG90eXBlLmFkZExpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB2YXIga2V5cyA9IGFyaWFfdXRpbHMua2V5cztcbiAgdmFyIHBhcmVudE5vZGUgPSB0aGlzLnBhcmVudC5kb21Ob2RlO1xuICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRoaXMuc3ViTWVudUl0ZW1zLCBmdW5jdGlvbiAoZWwpIHtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICB2YXIgcHJldkRlZiA9IGZhbHNlO1xuICAgICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICAgIGNhc2Uga2V5cy5kb3duOlxuICAgICAgICAgIF90aGlzLmdvdG9TdWJJbmRleChfdGhpcy5zdWJJbmRleCArIDEpO1xuICAgICAgICAgIHByZXZEZWYgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGtleXMudXA6XG4gICAgICAgICAgX3RoaXMuZ290b1N1YkluZGV4KF90aGlzLnN1YkluZGV4IC0gMSk7XG4gICAgICAgICAgcHJldkRlZiA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2Uga2V5cy50YWI6XG4gICAgICAgICAgYXJpYV91dGlscy50cmlnZ2VyRXZlbnQocGFyZW50Tm9kZSwgJ21vdXNlbGVhdmUnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlzLmVudGVyOlxuICAgICAgICBjYXNlIGtleXMuc3BhY2U6XG4gICAgICAgICAgcHJldkRlZiA9IHRydWU7XG4gICAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5jbGljaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZEZWYpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXJpYV9zdWJtZW51ID0gKFN1Yk1lbnUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvdXRpbHMvbWVudS9hcmlhLW1lbnVpdGVtLmpzXG5cblxuXG52YXIgTWVudUl0ZW0gPSBmdW5jdGlvbiBNZW51SXRlbShkb21Ob2RlKSB7XG4gIHRoaXMuZG9tTm9kZSA9IGRvbU5vZGU7XG4gIHRoaXMuc3VibWVudSA9IG51bGw7XG4gIHRoaXMuaW5pdCgpO1xufTtcblxuTWVudUl0ZW0ucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZG9tTm9kZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgdmFyIG1lbnVDaGlsZCA9IHRoaXMuZG9tTm9kZS5xdWVyeVNlbGVjdG9yKCcuZWwtbWVudScpO1xuICBpZiAobWVudUNoaWxkKSB7XG4gICAgdGhpcy5zdWJtZW51ID0gbmV3IGFyaWFfc3VibWVudSh0aGlzLCBtZW51Q2hpbGQpO1xuICB9XG4gIHRoaXMuYWRkTGlzdGVuZXJzKCk7XG59O1xuXG5NZW51SXRlbS5wcm90b3R5cGUuYWRkTGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gIHZhciBrZXlzID0gYXJpYV91dGlscy5rZXlzO1xuICB0aGlzLmRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBwcmV2RGVmID0gZmFsc2U7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIGtleXMuZG93bjpcbiAgICAgICAgYXJpYV91dGlscy50cmlnZ2VyRXZlbnQoZXZlbnQuY3VycmVudFRhcmdldCwgJ21vdXNlZW50ZXInKTtcbiAgICAgICAgX3RoaXMuc3VibWVudSAmJiBfdGhpcy5zdWJtZW51LmdvdG9TdWJJbmRleCgwKTtcbiAgICAgICAgcHJldkRlZiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBrZXlzLnVwOlxuICAgICAgICBhcmlhX3V0aWxzLnRyaWdnZXJFdmVudChldmVudC5jdXJyZW50VGFyZ2V0LCAnbW91c2VlbnRlcicpO1xuICAgICAgICBfdGhpcy5zdWJtZW51ICYmIF90aGlzLnN1Ym1lbnUuZ290b1N1YkluZGV4KF90aGlzLnN1Ym1lbnUuc3ViTWVudUl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgICAgICBwcmV2RGVmID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGtleXMudGFiOlxuICAgICAgICBhcmlhX3V0aWxzLnRyaWdnZXJFdmVudChldmVudC5jdXJyZW50VGFyZ2V0LCAnbW91c2VsZWF2ZScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2Uga2V5cy5lbnRlcjpcbiAgICAgIGNhc2Uga2V5cy5zcGFjZTpcbiAgICAgICAgcHJldkRlZiA9IHRydWU7XG4gICAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xpY2soKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChwcmV2RGVmKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhcmlhX21lbnVpdGVtID0gKE1lbnVJdGVtKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL3V0aWxzL21lbnUvYXJpYS1tZW51YmFyLmpzXG5cblxudmFyIE1lbnUgPSBmdW5jdGlvbiBNZW51KGRvbU5vZGUpIHtcbiAgdGhpcy5kb21Ob2RlID0gZG9tTm9kZTtcbiAgdGhpcy5pbml0KCk7XG59O1xuXG5NZW51LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbWVudUNoaWxkcmVuID0gdGhpcy5kb21Ob2RlLmNoaWxkTm9kZXM7XG4gIFtdLmZpbHRlci5jYWxsKG1lbnVDaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkLm5vZGVUeXBlID09PSAxO1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIG5ldyBhcmlhX21lbnVpdGVtKGNoaWxkKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9KTtcbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhcmlhX21lbnViYXIgPSAoTWVudSk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCJcbnZhciBkb21fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVudS9zcmMvbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsTWVudScsXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBjb21wb25lbnQgPSBoKFxuICAgICAgJ3VsJyxcbiAgICAgIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICByb2xlOiAnbWVudWJhcidcbiAgICAgICAgfSxcbiAgICAgICAga2V5OiArdGhpcy5jb2xsYXBzZSxcbiAgICAgICAgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvciB8fCAnJyB9LFxuICAgICAgICAnY2xhc3MnOiB7XG4gICAgICAgICAgJ2VsLW1lbnUtLWhvcml6b250YWwnOiB0aGlzLm1vZGUgPT09ICdob3Jpem9udGFsJyxcbiAgICAgICAgICAnZWwtbWVudS0tY29sbGFwc2UnOiB0aGlzLmNvbGxhcHNlLFxuICAgICAgICAgIFwiZWwtbWVudVwiOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbdGhpcy4kc2xvdHMuZGVmYXVsdF1cbiAgICApO1xuXG4gICAgaWYgKHRoaXMuY29sbGFwc2VUcmFuc2l0aW9uKSB7XG4gICAgICByZXR1cm4gaCgnZWwtbWVudS1jb2xsYXBzZS10cmFuc2l0aW9uJywgW2NvbXBvbmVudF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbiAgfSxcblxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbE1lbnUnLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hLCBtaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICByb290TWVudTogdGhpc1xuICAgIH07XG4gIH0sXG5cblxuICBjb21wb25lbnRzOiB7XG4gICAgJ2VsLW1lbnUtY29sbGFwc2UtdHJhbnNpdGlvbic6IHtcbiAgICAgIGZ1bmN0aW9uYWw6IHRydWUsXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihjcmVhdGVFbGVtZW50LCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICBtb2RlOiAnb3V0LWluJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGJlZm9yZUVudGVyOiBmdW5jdGlvbiBiZWZvcmVFbnRlcihlbCkge1xuICAgICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gMC4yO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudGVyOiBmdW5jdGlvbiBlbnRlcihlbCkge1xuICAgICAgICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShlbCwgJ2VsLW9wYWNpdHktdHJhbnNpdGlvbicpO1xuICAgICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZnRlckVudGVyOiBmdW5jdGlvbiBhZnRlckVudGVyKGVsKSB7XG4gICAgICAgICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKGVsLCAnZWwtb3BhY2l0eS10cmFuc2l0aW9uJyk7XG4gICAgICAgICAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAnJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBiZWZvcmVMZWF2ZTogZnVuY3Rpb24gYmVmb3JlTGVhdmUoZWwpIHtcbiAgICAgICAgICAgICAgaWYgKCFlbC5kYXRhc2V0KSBlbC5kYXRhc2V0ID0ge307XG5cbiAgICAgICAgICAgICAgaWYgKE9iamVjdChkb21fW1wiaGFzQ2xhc3NcIl0pKGVsLCAnZWwtbWVudS0tY29sbGFwc2UnKSkge1xuICAgICAgICAgICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKGVsLCAnZWwtbWVudS0tY29sbGFwc2UnKTtcbiAgICAgICAgICAgICAgICBlbC5kYXRhc2V0Lm9sZE92ZXJmbG93ID0gZWwuc3R5bGUub3ZlcmZsb3c7XG4gICAgICAgICAgICAgICAgZWwuZGF0YXNldC5zY3JvbGxXaWR0aCA9IGVsLmNsaWVudFdpZHRoO1xuICAgICAgICAgICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKGVsLCAnZWwtbWVudS0tY29sbGFwc2UnKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShlbCwgJ2VsLW1lbnUtLWNvbGxhcHNlJyk7XG4gICAgICAgICAgICAgICAgZWwuZGF0YXNldC5vbGRPdmVyZmxvdyA9IGVsLnN0eWxlLm92ZXJmbG93O1xuICAgICAgICAgICAgICAgIGVsLmRhdGFzZXQuc2Nyb2xsV2lkdGggPSBlbC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKShlbCwgJ2VsLW1lbnUtLWNvbGxhcHNlJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLnNjcm9sbFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgICAgZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBsZWF2ZTogZnVuY3Rpb24gbGVhdmUoZWwpIHtcbiAgICAgICAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkoZWwsICdob3Jpem9udGFsLWNvbGxhcHNlLXRyYW5zaXRpb24nKTtcbiAgICAgICAgICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5kYXRhc2V0LnNjcm9sbFdpZHRoICsgJ3B4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCd0cmFuc2l0aW9uJywgZGF0YSwgY29udGV4dC5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3ZlcnRpY2FsJ1xuICAgIH0sXG4gICAgZGVmYXVsdEFjdGl2ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGRlZmF1bHRPcGVuZWRzOiBBcnJheSxcbiAgICB1bmlxdWVPcGVuZWQ6IEJvb2xlYW4sXG4gICAgcm91dGVyOiBCb29sZWFuLFxuICAgIG1lbnVUcmlnZ2VyOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaG92ZXInXG4gICAgfSxcbiAgICBjb2xsYXBzZTogQm9vbGVhbixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFN0cmluZyxcbiAgICB0ZXh0Q29sb3I6IFN0cmluZyxcbiAgICBhY3RpdmVUZXh0Q29sb3I6IFN0cmluZyxcbiAgICBjb2xsYXBzZVRyYW5zaXRpb246IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmVJbmRleDogdGhpcy5kZWZhdWx0QWN0aXZlLFxuICAgICAgb3BlbmVkTWVudXM6IHRoaXMuZGVmYXVsdE9wZW5lZHMgJiYgIXRoaXMuY29sbGFwc2UgPyB0aGlzLmRlZmF1bHRPcGVuZWRzLnNsaWNlKDApIDogW10sXG4gICAgICBpdGVtczoge30sXG4gICAgICBzdWJtZW51czoge31cbiAgICB9O1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaG92ZXJCYWNrZ3JvdW5kOiBmdW5jdGlvbiBob3ZlckJhY2tncm91bmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPyB0aGlzLm1peENvbG9yKHRoaXMuYmFja2dyb3VuZENvbG9yLCAwLjIpIDogJyc7XG4gICAgfSxcbiAgICBpc01lbnVQb3B1cDogZnVuY3Rpb24gaXNNZW51UG9wdXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcgfHwgdGhpcy5tb2RlID09PSAndmVydGljYWwnICYmIHRoaXMuY29sbGFwc2U7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIGRlZmF1bHRBY3RpdmU6IGZ1bmN0aW9uIGRlZmF1bHRBY3RpdmUodmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5pdGVtc1t2YWx1ZV0pIHtcbiAgICAgICAgdGhpcy5hY3RpdmVJbmRleCA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUluZGV4KHZhbHVlKTtcbiAgICB9LFxuICAgIGRlZmF1bHRPcGVuZWRzOiBmdW5jdGlvbiBkZWZhdWx0T3BlbmVkcyh2YWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlKSB7XG4gICAgICAgIHRoaXMub3BlbmVkTWVudXMgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbGxhcHNlOiBmdW5jdGlvbiBjb2xsYXBzZSh2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlKSB0aGlzLm9wZW5lZE1lbnVzID0gW107XG4gICAgICB0aGlzLmJyb2FkY2FzdCgnRWxTdWJtZW51JywgJ3RvZ2dsZS1jb2xsYXBzZScsIHZhbHVlKTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVBY3RpdmVJbmRleDogZnVuY3Rpb24gdXBkYXRlQWN0aXZlSW5kZXgodmFsKSB7XG4gICAgICB2YXIgaXRlbSA9IHRoaXMuaXRlbXNbdmFsXSB8fCB0aGlzLml0ZW1zW3RoaXMuYWN0aXZlSW5kZXhdIHx8IHRoaXMuaXRlbXNbdGhpcy5kZWZhdWx0QWN0aXZlXTtcbiAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpdGVtLmluZGV4O1xuICAgICAgICB0aGlzLmluaXRPcGVuZWRNZW51KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAndGhlbWUnOiAndGhlbWUgaXMgcmVtb3ZlZC4nXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRDb2xvckNoYW5uZWxzOiBmdW5jdGlvbiBnZXRDb2xvckNoYW5uZWxzKGNvbG9yKSB7XG4gICAgICBjb2xvciA9IGNvbG9yLnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgICBpZiAoL15bMC05YS1mQS1GXXszfSQvLnRlc3QoY29sb3IpKSB7XG4gICAgICAgIGNvbG9yID0gY29sb3Iuc3BsaXQoJycpO1xuICAgICAgICBmb3IgKHZhciBpID0gMjsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICBjb2xvci5zcGxpY2UoaSwgMCwgY29sb3JbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbG9yID0gY29sb3Iuam9pbignJyk7XG4gICAgICB9XG4gICAgICBpZiAoL15bMC05YS1mQS1GXXs2fSQvLnRlc3QoY29sb3IpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVkOiBwYXJzZUludChjb2xvci5zbGljZSgwLCAyKSwgMTYpLFxuICAgICAgICAgIGdyZWVuOiBwYXJzZUludChjb2xvci5zbGljZSgyLCA0KSwgMTYpLFxuICAgICAgICAgIGJsdWU6IHBhcnNlSW50KGNvbG9yLnNsaWNlKDQsIDYpLCAxNilcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVkOiAyNTUsXG4gICAgICAgICAgZ3JlZW46IDI1NSxcbiAgICAgICAgICBibHVlOiAyNTVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1peENvbG9yOiBmdW5jdGlvbiBtaXhDb2xvcihjb2xvciwgcGVyY2VudCkge1xuICAgICAgdmFyIF9nZXRDb2xvckNoYW5uZWxzID0gdGhpcy5nZXRDb2xvckNoYW5uZWxzKGNvbG9yKSxcbiAgICAgICAgICByZWQgPSBfZ2V0Q29sb3JDaGFubmVscy5yZWQsXG4gICAgICAgICAgZ3JlZW4gPSBfZ2V0Q29sb3JDaGFubmVscy5ncmVlbixcbiAgICAgICAgICBibHVlID0gX2dldENvbG9yQ2hhbm5lbHMuYmx1ZTtcblxuICAgICAgaWYgKHBlcmNlbnQgPiAwKSB7XG4gICAgICAgIC8vIHNoYWRlIGdpdmVuIGNvbG9yXG4gICAgICAgIHJlZCAqPSAxIC0gcGVyY2VudDtcbiAgICAgICAgZ3JlZW4gKj0gMSAtIHBlcmNlbnQ7XG4gICAgICAgIGJsdWUgKj0gMSAtIHBlcmNlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aW50IGdpdmVuIGNvbG9yXG4gICAgICAgIHJlZCArPSAoMjU1IC0gcmVkKSAqIHBlcmNlbnQ7XG4gICAgICAgIGdyZWVuICs9ICgyNTUgLSBncmVlbikgKiBwZXJjZW50O1xuICAgICAgICBibHVlICs9ICgyNTUgLSBibHVlKSAqIHBlcmNlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ3JnYignICsgTWF0aC5yb3VuZChyZWQpICsgJywgJyArIE1hdGgucm91bmQoZ3JlZW4pICsgJywgJyArIE1hdGgucm91bmQoYmx1ZSkgKyAnKSc7XG4gICAgfSxcbiAgICBhZGRJdGVtOiBmdW5jdGlvbiBhZGRJdGVtKGl0ZW0pIHtcbiAgICAgIHRoaXMuJHNldCh0aGlzLml0ZW1zLCBpdGVtLmluZGV4LCBpdGVtKTtcbiAgICB9LFxuICAgIHJlbW92ZUl0ZW06IGZ1bmN0aW9uIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgZGVsZXRlIHRoaXMuaXRlbXNbaXRlbS5pbmRleF07XG4gICAgfSxcbiAgICBhZGRTdWJtZW51OiBmdW5jdGlvbiBhZGRTdWJtZW51KGl0ZW0pIHtcbiAgICAgIHRoaXMuJHNldCh0aGlzLnN1Ym1lbnVzLCBpdGVtLmluZGV4LCBpdGVtKTtcbiAgICB9LFxuICAgIHJlbW92ZVN1Ym1lbnU6IGZ1bmN0aW9uIHJlbW92ZVN1Ym1lbnUoaXRlbSkge1xuICAgICAgZGVsZXRlIHRoaXMuc3VibWVudXNbaXRlbS5pbmRleF07XG4gICAgfSxcbiAgICBvcGVuTWVudTogZnVuY3Rpb24gb3Blbk1lbnUoaW5kZXgsIGluZGV4UGF0aCkge1xuICAgICAgdmFyIG9wZW5lZE1lbnVzID0gdGhpcy5vcGVuZWRNZW51cztcbiAgICAgIGlmIChvcGVuZWRNZW51cy5pbmRleE9mKGluZGV4KSAhPT0gLTEpIHJldHVybjtcbiAgICAgIC8vIOWwhuS4jeWcqOivpeiPnOWNlei3r+W+hOS4i+eahOWFtuS9meiPnOWNleaUtui1t1xuICAgICAgLy8gY29sbGFwc2UgYWxsIG1lbnUgdGhhdCBhcmUgbm90IHVuZGVyIGN1cnJlbnQgbWVudSBpdGVtXG4gICAgICBpZiAodGhpcy51bmlxdWVPcGVuZWQpIHtcbiAgICAgICAgdGhpcy5vcGVuZWRNZW51cyA9IG9wZW5lZE1lbnVzLmZpbHRlcihmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gaW5kZXhQYXRoLmluZGV4T2YoaW5kZXgpICE9PSAtMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wZW5lZE1lbnVzLnB1c2goaW5kZXgpO1xuICAgIH0sXG4gICAgY2xvc2VNZW51OiBmdW5jdGlvbiBjbG9zZU1lbnUoaW5kZXgpIHtcbiAgICAgIHZhciBpID0gdGhpcy5vcGVuZWRNZW51cy5pbmRleE9mKGluZGV4KTtcbiAgICAgIGlmIChpICE9PSAtMSkge1xuICAgICAgICB0aGlzLm9wZW5lZE1lbnVzLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVN1Ym1lbnVDbGljazogZnVuY3Rpb24gaGFuZGxlU3VibWVudUNsaWNrKHN1Ym1lbnUpIHtcbiAgICAgIHZhciBpbmRleCA9IHN1Ym1lbnUuaW5kZXgsXG4gICAgICAgICAgaW5kZXhQYXRoID0gc3VibWVudS5pbmRleFBhdGg7XG5cbiAgICAgIHZhciBpc09wZW5lZCA9IHRoaXMub3BlbmVkTWVudXMuaW5kZXhPZihpbmRleCkgIT09IC0xO1xuXG4gICAgICBpZiAoaXNPcGVuZWQpIHtcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaW5kZXgpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScsIGluZGV4LCBpbmRleFBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vcGVuTWVudShpbmRleCwgaW5kZXhQYXRoKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnb3BlbicsIGluZGV4LCBpbmRleFBhdGgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlSXRlbUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVJdGVtQ2xpY2soaXRlbSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGluZGV4ID0gaXRlbS5pbmRleCxcbiAgICAgICAgICBpbmRleFBhdGggPSBpdGVtLmluZGV4UGF0aDtcblxuICAgICAgdmFyIG9sZEFjdGl2ZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcbiAgICAgIHZhciBoYXNJbmRleCA9IGl0ZW0uaW5kZXggIT09IG51bGw7XG5cbiAgICAgIGlmIChoYXNJbmRleCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaXRlbS5pbmRleDtcbiAgICAgIH1cblxuICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0JywgaW5kZXgsIGluZGV4UGF0aCwgaXRlbSk7XG5cbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdob3Jpem9udGFsJyB8fCB0aGlzLmNvbGxhcHNlKSB7XG4gICAgICAgIHRoaXMub3BlbmVkTWVudXMgPSBbXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucm91dGVyICYmIGhhc0luZGV4KSB7XG4gICAgICAgIHRoaXMucm91dGVUb0l0ZW0oaXRlbSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgX3RoaXMuYWN0aXZlSW5kZXggPSBvbGRBY3RpdmVJbmRleDtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIHZ1ZS1yb3V0ZXIgMy4xLjArIHB1c2gvcmVwbGFjZSBjYXVzZSBOYXZpZ2F0aW9uRHVwbGljYXRlZCBlcnJvciBcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE3MDQ0XG4gICAgICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ05hdmlnYXRpb25EdXBsaWNhdGVkJykgcmV0dXJuO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8g5Yid5aeL5YyW5bGV5byA6I+c5Y2VXG4gICAgLy8gaW5pdGlhbGl6ZSBvcGVuZWQgbWVudVxuICAgIGluaXRPcGVuZWRNZW51OiBmdW5jdGlvbiBpbml0T3BlbmVkTWVudSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgaW5kZXggPSB0aGlzLmFjdGl2ZUluZGV4O1xuICAgICAgdmFyIGFjdGl2ZUl0ZW0gPSB0aGlzLml0ZW1zW2luZGV4XTtcbiAgICAgIGlmICghYWN0aXZlSXRlbSB8fCB0aGlzLm1vZGUgPT09ICdob3Jpem9udGFsJyB8fCB0aGlzLmNvbGxhcHNlKSByZXR1cm47XG5cbiAgICAgIHZhciBpbmRleFBhdGggPSBhY3RpdmVJdGVtLmluZGV4UGF0aDtcblxuICAgICAgLy8g5bGV5byA6K+l6I+c5Y2V6aG555qE6Lev5b6E5LiK5omA5pyJ5a2Q6I+c5Y2VXG4gICAgICAvLyBleHBhbmQgYWxsIHN1Ym1lbnVzIG9mIHRoZSBtZW51IGl0ZW1cbiAgICAgIGluZGV4UGF0aC5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgc3VibWVudSA9IF90aGlzMi5zdWJtZW51c1tpbmRleF07XG4gICAgICAgIHN1Ym1lbnUgJiYgX3RoaXMyLm9wZW5NZW51KGluZGV4LCBzdWJtZW51LmluZGV4UGF0aCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJvdXRlVG9JdGVtOiBmdW5jdGlvbiByb3V0ZVRvSXRlbShpdGVtLCBvbkVycm9yKSB7XG4gICAgICB2YXIgcm91dGUgPSBpdGVtLnJvdXRlIHx8IGl0ZW0uaW5kZXg7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChyb3V0ZSwgZnVuY3Rpb24gKCkge30sIG9uRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgb3BlbjogZnVuY3Rpb24gb3BlbihpbmRleCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBpbmRleFBhdGggPSB0aGlzLnN1Ym1lbnVzW2luZGV4LnRvU3RyaW5nKCldLmluZGV4UGF0aDtcblxuICAgICAgaW5kZXhQYXRoLmZvckVhY2goZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMy5vcGVuTWVudShpLCBpbmRleFBhdGgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoaW5kZXgpIHtcbiAgICAgIHRoaXMuY2xvc2VNZW51KGluZGV4KTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pbml0T3BlbmVkTWVudSgpO1xuICAgIHRoaXMuJG9uKCdpdGVtLWNsaWNrJywgdGhpcy5oYW5kbGVJdGVtQ2xpY2spO1xuICAgIHRoaXMuJG9uKCdzdWJtZW51LWNsaWNrJywgdGhpcy5oYW5kbGVTdWJtZW51Q2xpY2spO1xuICAgIGlmICh0aGlzLm1vZGUgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgbmV3IGFyaWFfbWVudWJhcih0aGlzLiRlbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB9XG4gICAgdGhpcy4kd2F0Y2goJ2l0ZW1zJywgdGhpcy51cGRhdGVBY3RpdmVJbmRleCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUudnVlXG52YXIgbWVudV9yZW5kZXIsIG1lbnVfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIG1lbnVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWVudV9yZW5kZXIsXG4gIG1lbnVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBtZW51X2FwaTsgfVxubWVudV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL21lbnUvc3JjL21lbnUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19tZW51ID0gKG1lbnVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19tZW51Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX21lbnUubmFtZSwgc3JjX21lbnUpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbWVudSA9IChzcmNfbWVudSk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdHJhbnNpdGlvbnMvY29sbGFwc2UtdHJhbnNpdGlvblwiXG52YXIgY29sbGFwc2VfdHJhbnNpdGlvbl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcbnZhciBjb2xsYXBzZV90cmFuc2l0aW9uX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvbGxhcHNlX3RyYW5zaXRpb25fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LW1peGluLmpzXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtZW51X21peGluID0gKHtcbiAgaW5qZWN0OiBbJ3Jvb3RNZW51J10sXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5kZXhQYXRoOiBmdW5jdGlvbiBpbmRleFBhdGgoKSB7XG4gICAgICB2YXIgcGF0aCA9IFt0aGlzLmluZGV4XTtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbE1lbnUnKSB7XG4gICAgICAgIGlmIChwYXJlbnQuaW5kZXgpIHtcbiAgICAgICAgICBwYXRoLnVuc2hpZnQocGFyZW50LmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXRoO1xuICAgIH0sXG4gICAgcGFyZW50TWVudTogZnVuY3Rpb24gcGFyZW50TWVudSgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50ICYmIFsnRWxNZW51JywgJ0VsU3VibWVudSddLmluZGV4T2YocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUpID09PSAtMSkge1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfSxcbiAgICBwYWRkaW5nU3R5bGU6IGZ1bmN0aW9uIHBhZGRpbmdTdHlsZSgpIHtcbiAgICAgIGlmICh0aGlzLnJvb3RNZW51Lm1vZGUgIT09ICd2ZXJ0aWNhbCcpIHJldHVybiB7fTtcblxuICAgICAgdmFyIHBhZGRpbmcgPSAyMDtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cbiAgICAgIGlmICh0aGlzLnJvb3RNZW51LmNvbGxhcHNlKSB7XG4gICAgICAgIHBhZGRpbmcgPSAyMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbE1lbnUnKSB7XG4gICAgICAgICAgaWYgKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lID09PSAnRWxTdWJtZW51Jykge1xuICAgICAgICAgICAgcGFkZGluZyArPSAyMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHBhZGRpbmdMZWZ0OiBwYWRkaW5nICsgJ3B4JyB9O1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZW51L3NyYy9zdWJtZW51LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cblxuXG5cbnZhciBwb3Blck1peGlucyA9IHtcbiAgcHJvcHM6IHtcbiAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIG9mZnNldDogdnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMub2Zmc2V0LFxuICAgIGJvdW5kYXJpZXNQYWRkaW5nOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5ib3VuZGFyaWVzUGFkZGluZyxcbiAgICBwb3BwZXJPcHRpb25zOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5wb3BwZXJPcHRpb25zXG4gIH0sXG4gIGRhdGE6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLmRhdGEsXG4gIG1ldGhvZHM6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLm1ldGhvZHMsXG4gIGJlZm9yZURlc3Ryb3k6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLmJlZm9yZURlc3Ryb3ksXG4gIGRlYWN0aXZhdGVkOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5kZWFjdGl2YXRlZFxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3VibWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFN1Ym1lbnUnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFN1Ym1lbnUnLFxuXG4gIG1peGluczogW21lbnVfbWl4aW4sIGVtaXR0ZXJfZGVmYXVsdC5hLCBwb3Blck1peGluc10sXG5cbiAgY29tcG9uZW50czogeyBFbENvbGxhcHNlVHJhbnNpdGlvbjogY29sbGFwc2VfdHJhbnNpdGlvbl9kZWZhdWx0LmEgfSxcblxuICBwcm9wczoge1xuICAgIGluZGV4OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd1RpbWVvdXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDMwMFxuICAgIH0sXG4gICAgaGlkZVRpbWVvdXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDMwMFxuICAgIH0sXG4gICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBwb3BwZXJBcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9wcGVySlM6IG51bGwsXG4gICAgICB0aW1lb3V0OiBudWxsLFxuICAgICAgaXRlbXM6IHt9LFxuICAgICAgc3VibWVudXM6IHt9LFxuICAgICAgbW91c2VJbkNoaWxkOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBvcGVuZWQ6IGZ1bmN0aW9uIG9wZW5lZCh2YWwpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmlzTWVudVBvcHVwKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG4gICAgICAgICAgX3RoaXMudXBkYXRlUG9wcGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBwb3BwZXIgb3B0aW9uXG4gICAgYXBwZW5kVG9Cb2R5OiBmdW5jdGlvbiBhcHBlbmRUb0JvZHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb3BwZXJBcHBlbmRUb0JvZHkgPT09IHVuZGVmaW5lZCA/IHRoaXMuaXNGaXJzdExldmVsIDogdGhpcy5wb3BwZXJBcHBlbmRUb0JvZHk7XG4gICAgfSxcbiAgICBtZW51VHJhbnNpdGlvbk5hbWU6IGZ1bmN0aW9uIG1lbnVUcmFuc2l0aW9uTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51LmNvbGxhcHNlID8gJ2VsLXpvb20taW4tbGVmdCcgOiAnZWwtem9vbS1pbi10b3AnO1xuICAgIH0sXG4gICAgb3BlbmVkOiBmdW5jdGlvbiBvcGVuZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS5vcGVuZWRNZW51cy5pbmRleE9mKHRoaXMuaW5kZXgpID4gLTE7XG4gICAgfSxcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIGFjdGl2ZSgpIHtcbiAgICAgIHZhciBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdmFyIHN1Ym1lbnVzID0gdGhpcy5zdWJtZW51cztcbiAgICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXM7XG5cbiAgICAgIE9iamVjdC5rZXlzKGl0ZW1zKS5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpZiAoaXRlbXNbaW5kZXhdLmFjdGl2ZSkge1xuICAgICAgICAgIGlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIE9iamVjdC5rZXlzKHN1Ym1lbnVzKS5mb3JFYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICBpZiAoc3VibWVudXNbaW5kZXhdLmFjdGl2ZSkge1xuICAgICAgICAgIGlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBpc0FjdGl2ZTtcbiAgICB9LFxuICAgIGhvdmVyQmFja2dyb3VuZDogZnVuY3Rpb24gaG92ZXJCYWNrZ3JvdW5kKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUuaG92ZXJCYWNrZ3JvdW5kO1xuICAgIH0sXG4gICAgYmFja2dyb3VuZENvbG9yOiBmdW5jdGlvbiBiYWNrZ3JvdW5kQ29sb3IoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3IgfHwgJyc7XG4gICAgfSxcbiAgICBhY3RpdmVUZXh0Q29sb3I6IGZ1bmN0aW9uIGFjdGl2ZVRleHRDb2xvcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51LmFjdGl2ZVRleHRDb2xvciB8fCAnJztcbiAgICB9LFxuICAgIHRleHRDb2xvcjogZnVuY3Rpb24gdGV4dENvbG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUudGV4dENvbG9yIHx8ICcnO1xuICAgIH0sXG4gICAgbW9kZTogZnVuY3Rpb24gbW9kZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51Lm1vZGU7XG4gICAgfSxcbiAgICBpc01lbnVQb3B1cDogZnVuY3Rpb24gaXNNZW51UG9wdXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS5pc01lbnVQb3B1cDtcbiAgICB9LFxuICAgIHRpdGxlU3R5bGU6IGZ1bmN0aW9uIHRpdGxlU3R5bGUoKSB7XG4gICAgICBpZiAodGhpcy5tb2RlICE9PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb2xvcjogdGhpcy50ZXh0Q29sb3JcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiB0aGlzLmFjdGl2ZSA/IHRoaXMucm9vdE1lbnUuYWN0aXZlVGV4dENvbG9yID8gdGhpcy5hY3RpdmVUZXh0Q29sb3IgOiAnJyA6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIGNvbG9yOiB0aGlzLmFjdGl2ZSA/IHRoaXMuYWN0aXZlVGV4dENvbG9yIDogdGhpcy50ZXh0Q29sb3JcbiAgICAgIH07XG4gICAgfSxcbiAgICBpc0ZpcnN0TGV2ZWw6IGZ1bmN0aW9uIGlzRmlyc3RMZXZlbCgpIHtcbiAgICAgIHZhciBpc0ZpcnN0TGV2ZWwgPSB0cnVlO1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50ICE9PSB0aGlzLnJvb3RNZW51KSB7XG4gICAgICAgIGlmIChbJ0VsU3VibWVudScsICdFbE1lbnVJdGVtR3JvdXAnXS5pbmRleE9mKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lKSA+IC0xKSB7XG4gICAgICAgICAgaXNGaXJzdExldmVsID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0ZpcnN0TGV2ZWw7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ29sbGFwc2VUb2dnbGU6IGZ1bmN0aW9uIGhhbmRsZUNvbGxhcHNlVG9nZ2xlKHZhbHVlKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5pbml0UG9wcGVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRvRGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWRkSXRlbTogZnVuY3Rpb24gYWRkSXRlbShpdGVtKSB7XG4gICAgICB0aGlzLiRzZXQodGhpcy5pdGVtcywgaXRlbS5pbmRleCwgaXRlbSk7XG4gICAgfSxcbiAgICByZW1vdmVJdGVtOiBmdW5jdGlvbiByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2l0ZW0uaW5kZXhdO1xuICAgIH0sXG4gICAgYWRkU3VibWVudTogZnVuY3Rpb24gYWRkU3VibWVudShpdGVtKSB7XG4gICAgICB0aGlzLiRzZXQodGhpcy5zdWJtZW51cywgaXRlbS5pbmRleCwgaXRlbSk7XG4gICAgfSxcbiAgICByZW1vdmVTdWJtZW51OiBmdW5jdGlvbiByZW1vdmVTdWJtZW51KGl0ZW0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1lbnVzW2l0ZW0uaW5kZXhdO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgdmFyIHJvb3RNZW51ID0gdGhpcy5yb290TWVudSxcbiAgICAgICAgICBkaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG5cbiAgICAgIGlmIChyb290TWVudS5tZW51VHJpZ2dlciA9PT0gJ2hvdmVyJyAmJiByb290TWVudS5tb2RlID09PSAnaG9yaXpvbnRhbCcgfHwgcm9vdE1lbnUuY29sbGFwc2UgJiYgcm9vdE1lbnUubW9kZSA9PT0gJ3ZlcnRpY2FsJyB8fCBkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbE1lbnUnLCAnc3VibWVudS1jbGljaycsIHRoaXMpO1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VlbnRlcjogZnVuY3Rpb24gaGFuZGxlTW91c2VlbnRlcihldmVudCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBzaG93VGltZW91dCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdGhpcy5zaG93VGltZW91dDtcblxuXG4gICAgICBpZiAoISgnQWN0aXZlWE9iamVjdCcgaW4gd2luZG93KSAmJiBldmVudC50eXBlID09PSAnZm9jdXMnICYmICFldmVudC5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciByb290TWVudSA9IHRoaXMucm9vdE1lbnUsXG4gICAgICAgICAgZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkO1xuXG4gICAgICBpZiAocm9vdE1lbnUubWVudVRyaWdnZXIgPT09ICdjbGljaycgJiYgcm9vdE1lbnUubW9kZSA9PT0gJ2hvcml6b250YWwnIHx8ICFyb290TWVudS5jb2xsYXBzZSAmJiByb290TWVudS5tb2RlID09PSAndmVydGljYWwnIHx8IGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsU3VibWVudScsICdtb3VzZS1lbnRlci1jaGlsZCcpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnJvb3RNZW51Lm9wZW5NZW51KF90aGlzMi5pbmRleCwgX3RoaXMyLmluZGV4UGF0aCk7XG4gICAgICB9LCBzaG93VGltZW91dCk7XG5cbiAgICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSkge1xuICAgICAgICB0aGlzLiRwYXJlbnQuJGVsLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlZW50ZXInKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZWxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZWxlYXZlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBkZWVwRGlzcGF0Y2ggPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgdmFyIHJvb3RNZW51ID0gdGhpcy5yb290TWVudTtcblxuICAgICAgaWYgKHJvb3RNZW51Lm1lbnVUcmlnZ2VyID09PSAnY2xpY2snICYmIHJvb3RNZW51Lm1vZGUgPT09ICdob3Jpem9udGFsJyB8fCAhcm9vdE1lbnUuY29sbGFwc2UgJiYgcm9vdE1lbnUubW9kZSA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbFN1Ym1lbnUnLCAnbW91c2UtbGVhdmUtY2hpbGQnKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuICAgICAgdGhpcy50aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICFfdGhpczMubW91c2VJbkNoaWxkICYmIF90aGlzMy5yb290TWVudS5jbG9zZU1lbnUoX3RoaXMzLmluZGV4KTtcbiAgICAgIH0sIHRoaXMuaGlkZVRpbWVvdXQpO1xuXG4gICAgICBpZiAodGhpcy5hcHBlbmRUb0JvZHkgJiYgZGVlcERpc3BhdGNoKSB7XG4gICAgICAgIGlmICh0aGlzLiRwYXJlbnQuJG9wdGlvbnMubmFtZSA9PT0gJ0VsU3VibWVudScpIHtcbiAgICAgICAgICB0aGlzLiRwYXJlbnQuaGFuZGxlTW91c2VsZWF2ZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlVGl0bGVNb3VzZWVudGVyOiBmdW5jdGlvbiBoYW5kbGVUaXRsZU1vdXNlZW50ZXIoKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcgJiYgIXRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yKSByZXR1cm47XG4gICAgICB2YXIgdGl0bGUgPSB0aGlzLiRyZWZzWydzdWJtZW51LXRpdGxlJ107XG4gICAgICB0aXRsZSAmJiAodGl0bGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5yb290TWVudS5ob3ZlckJhY2tncm91bmQpO1xuICAgIH0sXG4gICAgaGFuZGxlVGl0bGVNb3VzZWxlYXZlOiBmdW5jdGlvbiBoYW5kbGVUaXRsZU1vdXNlbGVhdmUoKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcgJiYgIXRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yKSByZXR1cm47XG4gICAgICB2YXIgdGl0bGUgPSB0aGlzLiRyZWZzWydzdWJtZW51LXRpdGxlJ107XG4gICAgICB0aXRsZSAmJiAodGl0bGUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3IgfHwgJycpO1xuICAgIH0sXG4gICAgdXBkYXRlUGxhY2VtZW50OiBmdW5jdGlvbiB1cGRhdGVQbGFjZW1lbnQoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQbGFjZW1lbnQgPSB0aGlzLm1vZGUgPT09ICdob3Jpem9udGFsJyAmJiB0aGlzLmlzRmlyc3RMZXZlbCA/ICdib3R0b20tc3RhcnQnIDogJ3JpZ2h0LXN0YXJ0JztcbiAgICB9LFxuICAgIGluaXRQb3BwZXI6IGZ1bmN0aW9uIGluaXRQb3BwZXIoKSB7XG4gICAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJGVsO1xuICAgICAgdGhpcy5wb3BwZXJFbG0gPSB0aGlzLiRyZWZzLm1lbnU7XG4gICAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuICAgIH1cbiAgfSxcbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHRoaXMuJG9uKCd0b2dnbGUtY29sbGFwc2UnLCB0aGlzLmhhbmRsZUNvbGxhcHNlVG9nZ2xlKTtcbiAgICB0aGlzLiRvbignbW91c2UtZW50ZXItY2hpbGQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczQubW91c2VJbkNoaWxkID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpczQudGltZW91dCk7XG4gICAgfSk7XG4gICAgdGhpcy4kb24oJ21vdXNlLWxlYXZlLWNoaWxkJywgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXM0Lm1vdXNlSW5DaGlsZCA9IGZhbHNlO1xuICAgICAgY2xlYXJUaW1lb3V0KF90aGlzNC50aW1lb3V0KTtcbiAgICB9KTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLnBhcmVudE1lbnUuYWRkU3VibWVudSh0aGlzKTtcbiAgICB0aGlzLnJvb3RNZW51LmFkZFN1Ym1lbnUodGhpcyk7XG4gICAgdGhpcy5pbml0UG9wcGVyKCk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5wYXJlbnRNZW51LnJlbW92ZVN1Ym1lbnUodGhpcyk7XG4gICAgdGhpcy5yb290TWVudS5yZW1vdmVTdWJtZW51KHRoaXMpO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdGhpcy5hY3RpdmUsXG4gICAgICAgIG9wZW5lZCA9IHRoaXMub3BlbmVkLFxuICAgICAgICBwYWRkaW5nU3R5bGUgPSB0aGlzLnBhZGRpbmdTdHlsZSxcbiAgICAgICAgdGl0bGVTdHlsZSA9IHRoaXMudGl0bGVTdHlsZSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yID0gdGhpcy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgIHJvb3RNZW51ID0gdGhpcy5yb290TWVudSxcbiAgICAgICAgY3VycmVudFBsYWNlbWVudCA9IHRoaXMuY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgbWVudVRyYW5zaXRpb25OYW1lID0gdGhpcy5tZW51VHJhbnNpdGlvbk5hbWUsXG4gICAgICAgIG1vZGUgPSB0aGlzLm1vZGUsXG4gICAgICAgIGRpc2FibGVkID0gdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgcG9wcGVyQ2xhc3MgPSB0aGlzLnBvcHBlckNsYXNzLFxuICAgICAgICAkc2xvdHMgPSB0aGlzLiRzbG90cyxcbiAgICAgICAgaXNGaXJzdExldmVsID0gdGhpcy5pc0ZpcnN0TGV2ZWw7XG5cblxuICAgIHZhciBwb3B1cE1lbnUgPSBoKFxuICAgICAgJ3RyYW5zaXRpb24nLFxuICAgICAge1xuICAgICAgICBhdHRyczogeyBuYW1lOiBtZW51VHJhbnNpdGlvbk5hbWUgfVxuICAgICAgfSxcbiAgICAgIFtoKFxuICAgICAgICAnZGl2JyxcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogJ21lbnUnLFxuICAgICAgICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICAgICAgICBuYW1lOiAnc2hvdycsXG4gICAgICAgICAgICB2YWx1ZTogb3BlbmVkXG4gICAgICAgICAgfV0sXG5cbiAgICAgICAgICAnY2xhc3MnOiBbJ2VsLW1lbnUtLScgKyBtb2RlLCBwb3BwZXJDbGFzc10sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgICdtb3VzZWVudGVyJzogZnVuY3Rpb24gbW91c2VlbnRlcigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNS5oYW5kbGVNb3VzZWVudGVyKCRldmVudCwgMTAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbW91c2VsZWF2ZSc6IGZ1bmN0aW9uIG1vdXNlbGVhdmUoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczUuaGFuZGxlTW91c2VsZWF2ZSh0cnVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZm9jdXMnOiBmdW5jdGlvbiBmb2N1cygkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNS5oYW5kbGVNb3VzZWVudGVyKCRldmVudCwgMTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtoKFxuICAgICAgICAgICd1bCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgcm9sZTogJ21lbnUnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2NsYXNzJzogWydlbC1tZW51IGVsLW1lbnUtLXBvcHVwJywgJ2VsLW1lbnUtLXBvcHVwLScgKyBjdXJyZW50UGxhY2VtZW50XSxcbiAgICAgICAgICAgIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogcm9vdE1lbnUuYmFja2dyb3VuZENvbG9yIHx8ICcnIH0gfSxcbiAgICAgICAgICBbJHNsb3RzLmRlZmF1bHRdXG4gICAgICAgICldXG4gICAgICApXVxuICAgICk7XG5cbiAgICB2YXIgaW5saW5lTWVudSA9IGgoJ2VsLWNvbGxhcHNlLXRyYW5zaXRpb24nLCBbaChcbiAgICAgICd1bCcsXG4gICAgICB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgcm9sZTogJ21lbnUnXG4gICAgICAgIH0sXG4gICAgICAgICdjbGFzcyc6ICdlbC1tZW51IGVsLW1lbnUtLWlubGluZScsXG4gICAgICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICAgICAgbmFtZTogJ3Nob3cnLFxuICAgICAgICAgIHZhbHVlOiBvcGVuZWRcbiAgICAgICAgfV0sXG5cbiAgICAgICAgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiByb290TWVudS5iYWNrZ3JvdW5kQ29sb3IgfHwgJycgfSB9LFxuICAgICAgWyRzbG90cy5kZWZhdWx0XVxuICAgICldKTtcblxuICAgIHZhciBzdWJtZW51VGl0bGVJY29uID0gcm9vdE1lbnUubW9kZSA9PT0gJ2hvcml6b250YWwnICYmIGlzRmlyc3RMZXZlbCB8fCByb290TWVudS5tb2RlID09PSAndmVydGljYWwnICYmICFyb290TWVudS5jb2xsYXBzZSA/ICdlbC1pY29uLWFycm93LWRvd24nIDogJ2VsLWljb24tYXJyb3ctcmlnaHQnO1xuXG4gICAgcmV0dXJuIGgoXG4gICAgICAnbGknLFxuICAgICAge1xuICAgICAgICAnY2xhc3MnOiB7XG4gICAgICAgICAgJ2VsLXN1Ym1lbnUnOiB0cnVlLFxuICAgICAgICAgICdpcy1hY3RpdmUnOiBhY3RpdmUsXG4gICAgICAgICAgJ2lzLW9wZW5lZCc6IG9wZW5lZCxcbiAgICAgICAgICAnaXMtZGlzYWJsZWQnOiBkaXNhYmxlZFxuICAgICAgICB9LFxuICAgICAgICBhdHRyczogeyByb2xlOiAnbWVudWl0ZW0nLFxuICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogJ3RydWUnLFxuICAgICAgICAgICdhcmlhLWV4cGFuZGVkJzogb3BlbmVkXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgJ21vdXNlZW50ZXInOiB0aGlzLmhhbmRsZU1vdXNlZW50ZXIsXG4gICAgICAgICAgJ21vdXNlbGVhdmUnOiBmdW5jdGlvbiBtb3VzZWxlYXZlKCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNS5oYW5kbGVNb3VzZWxlYXZlKGZhbHNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdmb2N1cyc6IHRoaXMuaGFuZGxlTW91c2VlbnRlclxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2goXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7XG4gICAgICAgICAgJ2NsYXNzJzogJ2VsLXN1Ym1lbnVfX3RpdGxlJyxcbiAgICAgICAgICByZWY6ICdzdWJtZW51LXRpdGxlJyxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2NsaWNrJzogdGhpcy5oYW5kbGVDbGljayxcbiAgICAgICAgICAgICdtb3VzZWVudGVyJzogdGhpcy5oYW5kbGVUaXRsZU1vdXNlZW50ZXIsXG4gICAgICAgICAgICAnbW91c2VsZWF2ZSc6IHRoaXMuaGFuZGxlVGl0bGVNb3VzZWxlYXZlXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHN0eWxlOiBbcGFkZGluZ1N0eWxlLCB0aXRsZVN0eWxlLCB7IGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yIH1dXG4gICAgICAgIH0sXG4gICAgICAgIFskc2xvdHMudGl0bGUsIGgoJ2knLCB7ICdjbGFzcyc6IFsnZWwtc3VibWVudV9faWNvbi1hcnJvdycsIHN1Ym1lbnVUaXRsZUljb25dIH0pXVxuICAgICAgKSwgdGhpcy5pc01lbnVQb3B1cCA/IHBvcHVwTWVudSA6IGlubGluZU1lbnVdXG4gICAgKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL3N1Ym1lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zdWJtZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHN1Ym1lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvc3VibWVudS52dWVcbnZhciBzdWJtZW51X3JlbmRlciwgc3VibWVudV9zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc3VibWVudV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19zdWJtZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzdWJtZW51X3JlbmRlcixcbiAgc3VibWVudV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHN1Ym1lbnVfYXBpOyB9XG5zdWJtZW51X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvbWVudS9zcmMvc3VibWVudS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3VibWVudSA9IChzdWJtZW51X2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3VibWVudS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zdWJtZW51Lmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3VibWVudS5uYW1lLCBzdWJtZW51KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3N1Ym1lbnUgPSAoc3VibWVudSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmE1ZGJmZWEmXG52YXIgbWVudV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmE1ZGJmZWFfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGlcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1tZW51LWl0ZW1cIixcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIFwiaXMtYWN0aXZlXCI6IF92bS5hY3RpdmUsXG4gICAgICAgIFwiaXMtZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkXG4gICAgICB9LFxuICAgICAgc3R5bGU6IFtcbiAgICAgICAgX3ZtLnBhZGRpbmdTdHlsZSxcbiAgICAgICAgX3ZtLml0ZW1TdHlsZSxcbiAgICAgICAgeyBiYWNrZ3JvdW5kQ29sb3I6IF92bS5iYWNrZ3JvdW5kQ29sb3IgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7IHJvbGU6IFwibWVudWl0ZW1cIiwgdGFiaW5kZXg6IFwiLTFcIiB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IF92bS5oYW5kbGVDbGljayxcbiAgICAgICAgbW91c2VlbnRlcjogX3ZtLm9uTW91c2VFbnRlcixcbiAgICAgICAgZm9jdXM6IF92bS5vbk1vdXNlRW50ZXIsXG4gICAgICAgIGJsdXI6IF92bS5vbk1vdXNlTGVhdmUsXG4gICAgICAgIG1vdXNlbGVhdmU6IF92bS5vbk1vdXNlTGVhdmVcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5wYXJlbnRNZW51LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgPT09IFwiRWxNZW51XCIgJiZcbiAgICAgIF92bS5yb290TWVudS5jb2xsYXBzZSAmJlxuICAgICAgX3ZtLiRzbG90cy50aXRsZVxuICAgICAgICA/IF9jKFwiZWwtdG9vbHRpcFwiLCB7IGF0dHJzOiB7IGVmZmVjdDogXCJkYXJrXCIsIHBsYWNlbWVudDogXCJyaWdodFwiIH0gfSwgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgYXR0cnM6IHsgc2xvdDogXCJjb250ZW50XCIgfSwgc2xvdDogXCJjb250ZW50XCIgfSxcbiAgICAgICAgICAgICAgW192bS5fdChcInRpdGxlXCIpXSxcbiAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICAgICAgICBsZWZ0OiBcIjBcIixcbiAgICAgICAgICAgICAgICAgIHRvcDogXCIwXCIsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICAgICAgICAgICAgICAgIFwiYm94LXNpemluZ1wiOiBcImJvcmRlci1ib3hcIixcbiAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFwiMCAyMHB4XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogW192bS5fdChcImRlZmF1bHRcIiksIF92bS5fdChcInRpdGxlXCIpXVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgbWVudV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmE1ZGJmZWFfc3RhdGljUmVuZGVyRm5zID0gW11cbm1lbnVfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJhNWRiZmVhX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYTVkYmZlYSZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3Rvb2x0aXBcIlxudmFyIHRvb2x0aXBfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XG52YXIgdG9vbHRpcF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih0b29sdGlwXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVudV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsTWVudUl0ZW0nLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbE1lbnVJdGVtJyxcblxuICBtaXhpbnM6IFttZW51X21peGluLCBlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgY29tcG9uZW50czogeyBFbFRvb2x0aXA6IHRvb2x0aXBfZGVmYXVsdC5hIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBpbmRleDoge1xuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgfHwgdmFsID09PSBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgcm91dGU6IFtTdHJpbmcsIE9iamVjdF0sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW5cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIGFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGV4ID09PSB0aGlzLnJvb3RNZW51LmFjdGl2ZUluZGV4O1xuICAgIH0sXG4gICAgaG92ZXJCYWNrZ3JvdW5kOiBmdW5jdGlvbiBob3ZlckJhY2tncm91bmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS5ob3ZlckJhY2tncm91bmQ7XG4gICAgfSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGZ1bmN0aW9uIGJhY2tncm91bmRDb2xvcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3RNZW51LmJhY2tncm91bmRDb2xvciB8fCAnJztcbiAgICB9LFxuICAgIGFjdGl2ZVRleHRDb2xvcjogZnVuY3Rpb24gYWN0aXZlVGV4dENvbG9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUuYWN0aXZlVGV4dENvbG9yIHx8ICcnO1xuICAgIH0sXG4gICAgdGV4dENvbG9yOiBmdW5jdGlvbiB0ZXh0Q29sb3IoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290TWVudS50ZXh0Q29sb3IgfHwgJyc7XG4gICAgfSxcbiAgICBtb2RlOiBmdW5jdGlvbiBtb2RlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdE1lbnUubW9kZTtcbiAgICB9LFxuICAgIGl0ZW1TdHlsZTogZnVuY3Rpb24gaXRlbVN0eWxlKCkge1xuICAgICAgdmFyIHN0eWxlID0ge1xuICAgICAgICBjb2xvcjogdGhpcy5hY3RpdmUgPyB0aGlzLmFjdGl2ZVRleHRDb2xvciA6IHRoaXMudGV4dENvbG9yXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ2hvcml6b250YWwnICYmICF0aGlzLmlzTmVzdGVkKSB7XG4gICAgICAgIHN0eWxlLmJvcmRlckJvdHRvbUNvbG9yID0gdGhpcy5hY3RpdmUgPyB0aGlzLnJvb3RNZW51LmFjdGl2ZVRleHRDb2xvciA/IHRoaXMuYWN0aXZlVGV4dENvbG9yIDogJycgOiAndHJhbnNwYXJlbnQnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG4gICAgaXNOZXN0ZWQ6IGZ1bmN0aW9uIGlzTmVzdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50TWVudSAhPT0gdGhpcy5yb290TWVudTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBvbk1vdXNlRW50ZXI6IGZ1bmN0aW9uIG9uTW91c2VFbnRlcigpIHtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdob3Jpem9udGFsJyAmJiAhdGhpcy5yb290TWVudS5iYWNrZ3JvdW5kQ29sb3IpIHJldHVybjtcbiAgICAgIHRoaXMuJGVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuaG92ZXJCYWNrZ3JvdW5kO1xuICAgIH0sXG4gICAgb25Nb3VzZUxlYXZlOiBmdW5jdGlvbiBvbk1vdXNlTGVhdmUoKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnaG9yaXpvbnRhbCcgJiYgIXRoaXMucm9vdE1lbnUuYmFja2dyb3VuZENvbG9yKSByZXR1cm47XG4gICAgICB0aGlzLiRlbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvcjtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbE1lbnUnLCAnaXRlbS1jbGljaycsIHRoaXMpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjbGljaycsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLnBhcmVudE1lbnUuYWRkSXRlbSh0aGlzKTtcbiAgICB0aGlzLnJvb3RNZW51LmFkZEl0ZW0odGhpcyk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5wYXJlbnRNZW51LnJlbW92ZUl0ZW0odGhpcyk7XG4gICAgdGhpcy5yb290TWVudS5yZW1vdmVJdGVtKHRoaXMpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfbWVudV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG1lbnVfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgbWVudV9pdGVtX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX21lbnVfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWVudV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmE1ZGJmZWFfcmVuZGVyLFxuICBtZW51X2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTVkYmZlYV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIG1lbnVfaXRlbV9hcGk7IH1cbm1lbnVfaXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVudV9pdGVtID0gKG1lbnVfaXRlbV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUtaXRlbS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5tZW51X2l0ZW0uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChtZW51X2l0ZW0ubmFtZSwgbWVudV9pdGVtKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX21lbnVfaXRlbSA9IChtZW51X2l0ZW0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU0M2I3YmRjJlxudmFyIG1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0M2I3YmRjX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtbWVudS1pdGVtLWdyb3VwXCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVudS1pdGVtLWdyb3VwX190aXRsZVwiLFxuICAgICAgICBzdHlsZTogeyBwYWRkaW5nTGVmdDogX3ZtLmxldmVsUGFkZGluZyArIFwicHhcIiB9XG4gICAgICB9LFxuICAgICAgWyFfdm0uJHNsb3RzLnRpdGxlID8gW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldIDogX3ZtLl90KFwidGl0bGVcIildLFxuICAgICAgMlxuICAgICksXG4gICAgX2MoXCJ1bFwiLCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG4gIF0pXG59XG52YXIgbWVudV9pdGVtX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQzYjdiZGNfc3RhdGljUmVuZGVyRm5zID0gW11cbm1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0M2I3YmRjX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NDNiN2JkYyZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxNZW51SXRlbUdyb3VwJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxNZW51SXRlbUdyb3VwJyxcblxuICBpbmplY3Q6IFsncm9vdE1lbnUnXSxcbiAgcHJvcHM6IHtcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWRkaW5nTGVmdDogMjBcbiAgICB9O1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGV2ZWxQYWRkaW5nOiBmdW5jdGlvbiBsZXZlbFBhZGRpbmcoKSB7XG4gICAgICB2YXIgcGFkZGluZyA9IDIwO1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIGlmICh0aGlzLnJvb3RNZW51LmNvbGxhcHNlKSByZXR1cm4gMjA7XG4gICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lICE9PSAnRWxNZW51Jykge1xuICAgICAgICBpZiAocGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgPT09ICdFbFN1Ym1lbnUnKSB7XG4gICAgICAgICAgcGFkZGluZyArPSAyMDtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYWRkaW5nO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lbnUvc3JjL21lbnUtaXRlbS1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX21lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVudS9zcmMvbWVudS1pdGVtLWdyb3VwLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIG1lbnVfaXRlbV9ncm91cF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19tZW51X2l0ZW1fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1lbnVfaXRlbV9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0M2I3YmRjX3JlbmRlcixcbiAgbWVudV9pdGVtX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQzYjdiZGNfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBtZW51X2l0ZW1fZ3JvdXBfYXBpOyB9XG5tZW51X2l0ZW1fZ3JvdXBfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9tZW51L3NyYy9tZW51LWl0ZW0tZ3JvdXAudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1lbnVfaXRlbV9ncm91cCA9IChtZW51X2l0ZW1fZ3JvdXBfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZW51LWl0ZW0tZ3JvdXAvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xubWVudV9pdGVtX2dyb3VwLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQobWVudV9pdGVtX2dyb3VwLm5hbWUsIG1lbnVfaXRlbV9ncm91cCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19tZW51X2l0ZW1fZ3JvdXAgPSAobWVudV9pdGVtX2dyb3VwKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDNkZDc3NCZcbnZhciBpbnB1dHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0M2RkNzc0X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIF92bS50eXBlID09PSBcInRleHRhcmVhXCIgPyBcImVsLXRleHRhcmVhXCIgOiBcImVsLWlucHV0XCIsXG4gICAgICAgIF92bS5pbnB1dFNpemUgPyBcImVsLWlucHV0LS1cIiArIF92bS5pbnB1dFNpemUgOiBcIlwiLFxuICAgICAgICB7XG4gICAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaW5wdXREaXNhYmxlZCxcbiAgICAgICAgICBcImlzLWV4Y2VlZFwiOiBfdm0uaW5wdXRFeGNlZWQsXG4gICAgICAgICAgXCJlbC1pbnB1dC1ncm91cFwiOiBfdm0uJHNsb3RzLnByZXBlbmQgfHwgX3ZtLiRzbG90cy5hcHBlbmQsXG4gICAgICAgICAgXCJlbC1pbnB1dC1ncm91cC0tYXBwZW5kXCI6IF92bS4kc2xvdHMuYXBwZW5kLFxuICAgICAgICAgIFwiZWwtaW5wdXQtZ3JvdXAtLXByZXBlbmRcIjogX3ZtLiRzbG90cy5wcmVwZW5kLFxuICAgICAgICAgIFwiZWwtaW5wdXQtLXByZWZpeFwiOiBfdm0uJHNsb3RzLnByZWZpeCB8fCBfdm0ucHJlZml4SWNvbixcbiAgICAgICAgICBcImVsLWlucHV0LS1zdWZmaXhcIjpcbiAgICAgICAgICAgIF92bS4kc2xvdHMuc3VmZml4IHx8XG4gICAgICAgICAgICBfdm0uc3VmZml4SWNvbiB8fFxuICAgICAgICAgICAgX3ZtLmNsZWFyYWJsZSB8fFxuICAgICAgICAgICAgX3ZtLnNob3dQYXNzd29yZFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgb246IHtcbiAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLmhvdmVyaW5nID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBfdm0uaG92ZXJpbmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0udHlwZSAhPT0gXCJ0ZXh0YXJlYVwiXG4gICAgICAgID8gW1xuICAgICAgICAgICAgX3ZtLiRzbG90cy5wcmVwZW5kXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1ncm91cF9fcHJlcGVuZFwiIH0sXG4gICAgICAgICAgICAgICAgICBbX3ZtLl90KFwicHJlcGVuZFwiKV0sXG4gICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLnR5cGUgIT09IFwidGV4dGFyZWFcIlxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2lubmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4OiBfdm0udGFiaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBfdm0uc2hvd1Bhc3N3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnBhc3N3b3JkVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pbnB1dERpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6IF92bS5yZWFkb25seSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLmF1dG9Db21wbGV0ZSB8fCBfdm0uYXV0b2NvbXBsZXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uc3RhcnQ6IF92bS5oYW5kbGVDb21wb3NpdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb251cGRhdGU6IF92bS5oYW5kbGVDb21wb3NpdGlvblVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uZW5kOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25FbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgIF92bS4kYXR0cnMsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLiRzbG90cy5wcmVmaXggfHwgX3ZtLnByZWZpeEljb25cbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fcHJlZml4XCIgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFwicHJlZml4XCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0ucHJlZml4SWNvblxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5wcmVmaXhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLmdldFN1ZmZpeFZpc2libGUoKVxuICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19zdWZmaXhcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX3N1ZmZpeC1pbm5lclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAhX3ZtLnNob3dDbGVhciB8fFxuICAgICAgICAgICAgICAgICAgICAgICFfdm0uc2hvd1B3ZFZpc2libGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAhX3ZtLmlzV29yZExpbWl0VmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFwic3VmZml4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zdWZmaXhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1ZmZpeEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd0NsZWFyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLWlucHV0X19pY29uIGVsLWljb24tY2lyY2xlLWNsb3NlIGVsLWlucHV0X19jbGVhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBfdm0uY2xlYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5zaG93UHdkVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1pbnB1dF9faWNvbiBlbC1pY29uLXZpZXcgZWwtaW5wdXRfX2NsZWFyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVQYXNzd29yZFZpc2libGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uaXNXb3JkTGltaXRWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19jb3VudFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fY291bnQtaW5uZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRleHRMZW5ndGgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiL1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udXBwZXJMaW1pdCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS52YWxpZGF0ZVN0YXRlXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1wiZWwtaW5wdXRfX3ZhbGlkYXRlSWNvblwiLCBfdm0udmFsaWRhdGVJY29uXVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLiRzbG90cy5hcHBlbmRcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0LWdyb3VwX19hcHBlbmRcIiB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdChcImFwcGVuZFwiKV0sXG4gICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJ0ZXh0YXJlYVwiLFxuICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVmOiBcInRleHRhcmVhXCIsXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGV4dGFyZWFfX2lubmVyXCIsXG4gICAgICAgICAgICAgICAgc3R5bGU6IF92bS50ZXh0YXJlYVN0eWxlLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0YWJpbmRleDogX3ZtLnRhYmluZGV4LFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pbnB1dERpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6IF92bS5yZWFkb25seSxcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLmF1dG9Db21wbGV0ZSB8fCBfdm0uYXV0b2NvbXBsZXRlLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5sYWJlbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uc3RhcnQ6IF92bS5oYW5kbGVDb21wb3NpdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb251cGRhdGU6IF92bS5oYW5kbGVDb21wb3NpdGlvblVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uZW5kOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25FbmQsXG4gICAgICAgICAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUlucHV0LFxuICAgICAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLFxuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcInRleHRhcmVhXCIsXG4gICAgICAgICAgICAgIF92bS4kYXR0cnMsXG4gICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgIF92bS5pc1dvcmRMaW1pdFZpc2libGUgJiYgX3ZtLnR5cGUgPT09IFwidGV4dGFyZWFcIlxuICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19jb3VudFwiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnRleHRMZW5ndGgpICsgXCIvXCIgKyBfdm0uX3MoX3ZtLnVwcGVyTGltaXQpKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIGlucHV0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQzZGQ3NzRfc3RhdGljUmVuZGVyRm5zID0gW11cbmlucHV0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQzZGQ3NzRfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0M2RkNzc0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L3NyYy9jYWxjVGV4dGFyZWFIZWlnaHQuanNcbnZhciBoaWRkZW5UZXh0YXJlYSA9IHZvaWQgMDtcblxudmFyIEhJRERFTl9TVFlMRSA9ICdcXG4gIGhlaWdodDowICFpbXBvcnRhbnQ7XFxuICB2aXNpYmlsaXR5OmhpZGRlbiAhaW1wb3J0YW50O1xcbiAgb3ZlcmZsb3c6aGlkZGVuICFpbXBvcnRhbnQ7XFxuICBwb3NpdGlvbjphYnNvbHV0ZSAhaW1wb3J0YW50O1xcbiAgei1pbmRleDotMTAwMCAhaW1wb3J0YW50O1xcbiAgdG9wOjAgIWltcG9ydGFudDtcXG4gIHJpZ2h0OjAgIWltcG9ydGFudFxcbic7XG5cbnZhciBDT05URVhUX1NUWUxFID0gWydsZXR0ZXItc3BhY2luZycsICdsaW5lLWhlaWdodCcsICdwYWRkaW5nLXRvcCcsICdwYWRkaW5nLWJvdHRvbScsICdmb250LWZhbWlseScsICdmb250LXdlaWdodCcsICdmb250LXNpemUnLCAndGV4dC1yZW5kZXJpbmcnLCAndGV4dC10cmFuc2Zvcm0nLCAnd2lkdGgnLCAndGV4dC1pbmRlbnQnLCAncGFkZGluZy1sZWZ0JywgJ3BhZGRpbmctcmlnaHQnLCAnYm9yZGVyLXdpZHRoJywgJ2JveC1zaXppbmcnXTtcblxuZnVuY3Rpb24gY2FsY3VsYXRlTm9kZVN0eWxpbmcodGFyZ2V0RWxlbWVudCkge1xuICB2YXIgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXRFbGVtZW50KTtcblxuICB2YXIgYm94U2l6aW5nID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm94LXNpemluZycpO1xuXG4gIHZhciBwYWRkaW5nU2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKSkgKyBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctdG9wJykpO1xuXG4gIHZhciBib3JkZXJTaXplID0gcGFyc2VGbG9hdChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItYm90dG9tLXdpZHRoJykpICsgcGFyc2VGbG9hdChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLXdpZHRoJykpO1xuXG4gIHZhciBjb250ZXh0U3R5bGUgPSBDT05URVhUX1NUWUxFLm1hcChmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBuYW1lICsgJzonICsgc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbiAgfSkuam9pbignOycpO1xuXG4gIHJldHVybiB7IGNvbnRleHRTdHlsZTogY29udGV4dFN0eWxlLCBwYWRkaW5nU2l6ZTogcGFkZGluZ1NpemUsIGJvcmRlclNpemU6IGJvcmRlclNpemUsIGJveFNpemluZzogYm94U2l6aW5nIH07XG59XG5cbmZ1bmN0aW9uIGNhbGNUZXh0YXJlYUhlaWdodCh0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBtaW5Sb3dzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuICB2YXIgbWF4Um93cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICBpZiAoIWhpZGRlblRleHRhcmVhKSB7XG4gICAgaGlkZGVuVGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuVGV4dGFyZWEpO1xuICB9XG5cbiAgdmFyIF9jYWxjdWxhdGVOb2RlU3R5bGluZyA9IGNhbGN1bGF0ZU5vZGVTdHlsaW5nKHRhcmdldEVsZW1lbnQpLFxuICAgICAgcGFkZGluZ1NpemUgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcucGFkZGluZ1NpemUsXG4gICAgICBib3JkZXJTaXplID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmJvcmRlclNpemUsXG4gICAgICBib3hTaXppbmcgPSBfY2FsY3VsYXRlTm9kZVN0eWxpbmcuYm94U2l6aW5nLFxuICAgICAgY29udGV4dFN0eWxlID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmNvbnRleHRTdHlsZTtcblxuICBoaWRkZW5UZXh0YXJlYS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgY29udGV4dFN0eWxlICsgJzsnICsgSElEREVOX1NUWUxFKTtcbiAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSB0YXJnZXRFbGVtZW50LnZhbHVlIHx8IHRhcmdldEVsZW1lbnQucGxhY2Vob2xkZXIgfHwgJyc7XG5cbiAgdmFyIGhlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodDtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgIGhlaWdodCA9IGhlaWdodCArIGJvcmRlclNpemU7XG4gIH0gZWxzZSBpZiAoYm94U2l6aW5nID09PSAnY29udGVudC1ib3gnKSB7XG4gICAgaGVpZ2h0ID0gaGVpZ2h0IC0gcGFkZGluZ1NpemU7XG4gIH1cblxuICBoaWRkZW5UZXh0YXJlYS52YWx1ZSA9ICcnO1xuICB2YXIgc2luZ2xlUm93SGVpZ2h0ID0gaGlkZGVuVGV4dGFyZWEuc2Nyb2xsSGVpZ2h0IC0gcGFkZGluZ1NpemU7XG5cbiAgaWYgKG1pblJvd3MgIT09IG51bGwpIHtcbiAgICB2YXIgbWluSGVpZ2h0ID0gc2luZ2xlUm93SGVpZ2h0ICogbWluUm93cztcbiAgICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICAgIG1pbkhlaWdodCA9IG1pbkhlaWdodCArIHBhZGRpbmdTaXplICsgYm9yZGVyU2l6ZTtcbiAgICB9XG4gICAgaGVpZ2h0ID0gTWF0aC5tYXgobWluSGVpZ2h0LCBoZWlnaHQpO1xuICAgIHJlc3VsdC5taW5IZWlnaHQgPSBtaW5IZWlnaHQgKyAncHgnO1xuICB9XG4gIGlmIChtYXhSb3dzICE9PSBudWxsKSB7XG4gICAgdmFyIG1heEhlaWdodCA9IHNpbmdsZVJvd0hlaWdodCAqIG1heFJvd3M7XG4gICAgaWYgKGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgICBtYXhIZWlnaHQgPSBtYXhIZWlnaHQgKyBwYWRkaW5nU2l6ZSArIGJvcmRlclNpemU7XG4gICAgfVxuICAgIGhlaWdodCA9IE1hdGgubWluKG1heEhlaWdodCwgaGVpZ2h0KTtcbiAgfVxuICByZXN1bHQuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgaGlkZGVuVGV4dGFyZWEucGFyZW50Tm9kZSAmJiBoaWRkZW5UZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhpZGRlblRleHRhcmVhKTtcbiAgaGlkZGVuVGV4dGFyZWEgPSBudWxsO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9tZXJnZVwiXG52YXIgbWVyZ2VfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBtZXJnZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihtZXJnZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkXCJcbnZhciBzaGFyZWRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbElucHV0JyxcblxuICBjb21wb25lbnROYW1lOiAnRWxJbnB1dCcsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmEsIG1pZ3JhdGluZ19kZWZhdWx0LmFdLFxuXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dGFyZWFDYWxjU3R5bGU6IHt9LFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2UsXG4gICAgICBpc0NvbXBvc2luZzogZmFsc2UsXG4gICAgICBwYXNzd29yZFZpc2libGU6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIHJlc2l6ZTogU3RyaW5nLFxuICAgIGZvcm06IFN0cmluZyxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICByZWFkb25seTogQm9vbGVhbixcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAndGV4dCdcbiAgICB9LFxuICAgIGF1dG9zaXplOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBhdXRvY29tcGxldGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdvZmYnXG4gICAgfSxcbiAgICAvKiogQERlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uICovXG4gICAgYXV0b0NvbXBsZXRlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgIGZhbHNlICYmIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbGlkYXRlRXZlbnQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzdWZmaXhJY29uOiBTdHJpbmcsXG4gICAgcHJlZml4SWNvbjogU3RyaW5nLFxuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgY2xlYXJhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHNob3dQYXNzd29yZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBzaG93V29yZExpbWl0OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHRhYmluZGV4OiBTdHJpbmdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgdmFsaWRhdGVTdGF0ZTogZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsRm9ybUl0ZW0gPyB0aGlzLmVsRm9ybUl0ZW0udmFsaWRhdGVTdGF0ZSA6ICcnO1xuICAgIH0sXG4gICAgbmVlZFN0YXR1c0ljb246IGZ1bmN0aW9uIG5lZWRTdGF0dXNJY29uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxGb3JtID8gdGhpcy5lbEZvcm0uc3RhdHVzSWNvbiA6IGZhbHNlO1xuICAgIH0sXG4gICAgdmFsaWRhdGVJY29uOiBmdW5jdGlvbiB2YWxpZGF0ZUljb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZGF0aW5nOiAnZWwtaWNvbi1sb2FkaW5nJyxcbiAgICAgICAgc3VjY2VzczogJ2VsLWljb24tY2lyY2xlLWNoZWNrJyxcbiAgICAgICAgZXJyb3I6ICdlbC1pY29uLWNpcmNsZS1jbG9zZSdcbiAgICAgIH1bdGhpcy52YWxpZGF0ZVN0YXRlXTtcbiAgICB9LFxuICAgIHRleHRhcmVhU3R5bGU6IGZ1bmN0aW9uIHRleHRhcmVhU3R5bGUoKSB7XG4gICAgICByZXR1cm4gbWVyZ2VfZGVmYXVsdCgpKHt9LCB0aGlzLnRleHRhcmVhQ2FsY1N0eWxlLCB7IHJlc2l6ZTogdGhpcy5yZXNpemUgfSk7XG4gICAgfSxcbiAgICBpbnB1dFNpemU6IGZ1bmN0aW9uIGlucHV0U2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBpbnB1dERpc2FibGVkOiBmdW5jdGlvbiBpbnB1dERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9LFxuICAgIG5hdGl2ZUlucHV0VmFsdWU6IGZ1bmN0aW9uIG5hdGl2ZUlucHV0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IFN0cmluZyh0aGlzLnZhbHVlKTtcbiAgICB9LFxuICAgIHNob3dDbGVhcjogZnVuY3Rpb24gc2hvd0NsZWFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlICYmICF0aGlzLmlucHV0RGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkgJiYgdGhpcy5uYXRpdmVJbnB1dFZhbHVlICYmICh0aGlzLmZvY3VzZWQgfHwgdGhpcy5ob3ZlcmluZyk7XG4gICAgfSxcbiAgICBzaG93UHdkVmlzaWJsZTogZnVuY3Rpb24gc2hvd1B3ZFZpc2libGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93UGFzc3dvcmQgJiYgIXRoaXMuaW5wdXREaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAoISF0aGlzLm5hdGl2ZUlucHV0VmFsdWUgfHwgdGhpcy5mb2N1c2VkKTtcbiAgICB9LFxuICAgIGlzV29yZExpbWl0VmlzaWJsZTogZnVuY3Rpb24gaXNXb3JkTGltaXRWaXNpYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1dvcmRMaW1pdCAmJiB0aGlzLiRhdHRycy5tYXhsZW5ndGggJiYgKHRoaXMudHlwZSA9PT0gJ3RleHQnIHx8IHRoaXMudHlwZSA9PT0gJ3RleHRhcmVhJykgJiYgIXRoaXMuaW5wdXREaXNhYmxlZCAmJiAhdGhpcy5yZWFkb25seSAmJiAhdGhpcy5zaG93UGFzc3dvcmQ7XG4gICAgfSxcbiAgICB1cHBlckxpbWl0OiBmdW5jdGlvbiB1cHBlckxpbWl0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGF0dHJzLm1heGxlbmd0aDtcbiAgICB9LFxuICAgIHRleHRMZW5ndGg6IGZ1bmN0aW9uIHRleHRMZW5ndGgoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGhpcy52YWx1ZSkubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKHRoaXMudmFsdWUgfHwgJycpLmxlbmd0aDtcbiAgICB9LFxuICAgIGlucHV0RXhjZWVkOiBmdW5jdGlvbiBpbnB1dEV4Y2VlZCgpIHtcbiAgICAgIC8vIHNob3cgZXhjZWVkIHN0eWxlIGlmIGxlbmd0aCBvZiBpbml0aWFsIHZhbHVlIGdyZWF0ZXIgdGhlbiBtYXhsZW5ndGhcbiAgICAgIHJldHVybiB0aGlzLmlzV29yZExpbWl0VmlzaWJsZSAmJiB0aGlzLnRleHRMZW5ndGggPiB0aGlzLnVwcGVyTGltaXQ7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy5yZXNpemVUZXh0YXJlYSk7XG4gICAgICBpZiAodGhpcy52YWxpZGF0ZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCBbdmFsXSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIG5hdGl2ZSBpbnB1dCB2YWx1ZSBpcyBzZXQgZXhwbGljaXRseVxuICAgIC8vIGRvIG5vdCB1c2Ugdi1tb2RlbCAvIDp2YWx1ZSBpbiB0ZW1wbGF0ZVxuICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQ1MjFcbiAgICBuYXRpdmVJbnB1dFZhbHVlOiBmdW5jdGlvbiBuYXRpdmVJbnB1dFZhbHVlKCkge1xuICAgICAgdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKCk7XG4gICAgfSxcblxuICAgIC8vIHdoZW4gY2hhbmdlIGJldHdlZW4gPGlucHV0PiBhbmQgPHRleHRhcmVhPixcbiAgICAvLyB1cGRhdGUgRE9NIGRlcGVuZGVudCB2YWx1ZSBhbmQgc3R5bGVzXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQ4NTdcbiAgICB0eXBlOiBmdW5jdGlvbiB0eXBlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKCk7XG4gICAgICAgIF90aGlzLnJlc2l6ZVRleHRhcmVhKCk7XG4gICAgICAgIF90aGlzLnVwZGF0ZUljb25PZmZzZXQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgdGhpcy5nZXRJbnB1dCgpLmZvY3VzKCk7XG4gICAgfSxcbiAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgdGhpcy5nZXRJbnB1dCgpLmJsdXIoKTtcbiAgICB9LFxuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAnaWNvbic6ICdpY29uIGlzIHJlbW92ZWQsIHVzZSBzdWZmaXgtaWNvbiAvIHByZWZpeC1pY29uIGluc3RlYWQuJyxcbiAgICAgICAgICAnb24taWNvbi1jbGljayc6ICdvbi1pY29uLWNsaWNrIGlzIHJlbW92ZWQuJ1xuICAgICAgICB9LFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAnY2xpY2snOiAnY2xpY2sgaXMgcmVtb3ZlZC4nXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICBoYW5kbGVCbHVyOiBmdW5jdGlvbiBoYW5kbGVCbHVyKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuJGVtaXQoJ2JsdXInLCBldmVudCk7XG4gICAgICBpZiAodGhpcy52YWxpZGF0ZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5ibHVyJywgW3RoaXMudmFsdWVdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KCkge1xuICAgICAgdGhpcy5nZXRJbnB1dCgpLnNlbGVjdCgpO1xuICAgIH0sXG4gICAgcmVzaXplVGV4dGFyZWE6IGZ1bmN0aW9uIHJlc2l6ZVRleHRhcmVhKCkge1xuICAgICAgaWYgKHRoaXMuJGlzU2VydmVyKSByZXR1cm47XG4gICAgICB2YXIgYXV0b3NpemUgPSB0aGlzLmF1dG9zaXplLFxuICAgICAgICAgIHR5cGUgPSB0aGlzLnR5cGU7XG5cbiAgICAgIGlmICh0eXBlICE9PSAndGV4dGFyZWEnKSByZXR1cm47XG4gICAgICBpZiAoIWF1dG9zaXplKSB7XG4gICAgICAgIHRoaXMudGV4dGFyZWFDYWxjU3R5bGUgPSB7XG4gICAgICAgICAgbWluSGVpZ2h0OiBjYWxjVGV4dGFyZWFIZWlnaHQodGhpcy4kcmVmcy50ZXh0YXJlYSkubWluSGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciBtaW5Sb3dzID0gYXV0b3NpemUubWluUm93cztcbiAgICAgIHZhciBtYXhSb3dzID0gYXV0b3NpemUubWF4Um93cztcblxuICAgICAgdGhpcy50ZXh0YXJlYUNhbGNTdHlsZSA9IGNhbGNUZXh0YXJlYUhlaWdodCh0aGlzLiRyZWZzLnRleHRhcmVhLCBtaW5Sb3dzLCBtYXhSb3dzKTtcbiAgICB9LFxuICAgIHNldE5hdGl2ZUlucHV0VmFsdWU6IGZ1bmN0aW9uIHNldE5hdGl2ZUlucHV0VmFsdWUoKSB7XG4gICAgICB2YXIgaW5wdXQgPSB0aGlzLmdldElucHV0KCk7XG4gICAgICBpZiAoIWlucHV0KSByZXR1cm47XG4gICAgICBpZiAoaW5wdXQudmFsdWUgPT09IHRoaXMubmF0aXZlSW5wdXRWYWx1ZSkgcmV0dXJuO1xuICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLm5hdGl2ZUlucHV0VmFsdWU7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoZXZlbnQpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLiRlbWl0KCdmb2N1cycsIGV2ZW50KTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbXBvc2l0aW9uU3RhcnQ6IGZ1bmN0aW9uIGhhbmRsZUNvbXBvc2l0aW9uU3RhcnQoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NvbXBvc2l0aW9uc3RhcnQnLCBldmVudCk7XG4gICAgICB0aGlzLmlzQ29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbXBvc2l0aW9uVXBkYXRlOiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvblVwZGF0ZShldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnY29tcG9zaXRpb251cGRhdGUnLCBldmVudCk7XG4gICAgICB2YXIgdGV4dCA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgIHZhciBsYXN0Q2hhcmFjdGVyID0gdGV4dFt0ZXh0Lmxlbmd0aCAtIDFdIHx8ICcnO1xuICAgICAgdGhpcy5pc0NvbXBvc2luZyA9ICFPYmplY3Qoc2hhcmVkX1tcImlzS29yZWFuXCJdKShsYXN0Q2hhcmFjdGVyKTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbXBvc2l0aW9uRW5kOiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvbkVuZChldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnY29tcG9zaXRpb25lbmQnLCBldmVudCk7XG4gICAgICBpZiAodGhpcy5pc0NvbXBvc2luZykge1xuICAgICAgICB0aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5wdXQoZXZlbnQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZUlucHV0KGV2ZW50KSB7XG4gICAgICAvLyBzaG91bGQgbm90IGVtaXQgaW5wdXQgZHVyaW5nIGNvbXBvc2l0aW9uXG4gICAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzEwNTE2XG4gICAgICBpZiAodGhpcy5pc0NvbXBvc2luZykgcmV0dXJuO1xuXG4gICAgICAvLyBoYWNrIGZvciBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy84NTQ4XG4gICAgICAvLyBzaG91bGQgcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSB3aGVuIHdlIGRvbid0IHN1cHBvcnQgSUVcbiAgICAgIGlmIChldmVudC50YXJnZXQudmFsdWUgPT09IHRoaXMubmF0aXZlSW5wdXRWYWx1ZSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGV2ZW50LnRhcmdldC52YWx1ZSk7XG5cbiAgICAgIC8vIGVuc3VyZSBuYXRpdmUgaW5wdXQgdmFsdWUgaXMgY29udHJvbGxlZFxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xMjg1MFxuICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy5zZXROYXRpdmVJbnB1dFZhbHVlKTtcbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH0sXG4gICAgY2FsY0ljb25PZmZzZXQ6IGZ1bmN0aW9uIGNhbGNJY29uT2Zmc2V0KHBsYWNlKSB7XG4gICAgICB2YXIgZWxMaXN0ID0gW10uc2xpY2UuY2FsbCh0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtaW5wdXRfXycgKyBwbGFjZSkgfHwgW10pO1xuICAgICAgaWYgKCFlbExpc3QubGVuZ3RoKSByZXR1cm47XG4gICAgICB2YXIgZWwgPSBudWxsO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGVsTGlzdFtpXS5wYXJlbnROb2RlID09PSB0aGlzLiRlbCkge1xuICAgICAgICAgIGVsID0gZWxMaXN0W2ldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgICB2YXIgcGVuZGFudE1hcCA9IHtcbiAgICAgICAgc3VmZml4OiAnYXBwZW5kJyxcbiAgICAgICAgcHJlZml4OiAncHJlcGVuZCdcbiAgICAgIH07XG5cbiAgICAgIHZhciBwZW5kYW50ID0gcGVuZGFudE1hcFtwbGFjZV07XG4gICAgICBpZiAodGhpcy4kc2xvdHNbcGVuZGFudF0pIHtcbiAgICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZVgoJyArIChwbGFjZSA9PT0gJ3N1ZmZpeCcgPyAnLScgOiAnJykgKyB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtaW5wdXQtZ3JvdXBfXycgKyBwZW5kYW50KS5vZmZzZXRXaWR0aCArICdweCknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXBkYXRlSWNvbk9mZnNldDogZnVuY3Rpb24gdXBkYXRlSWNvbk9mZnNldCgpIHtcbiAgICAgIHRoaXMuY2FsY0ljb25PZmZzZXQoJ3ByZWZpeCcpO1xuICAgICAgdGhpcy5jYWxjSWNvbk9mZnNldCgnc3VmZml4Jyk7XG4gICAgfSxcbiAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsICcnKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsICcnKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NsZWFyJyk7XG4gICAgfSxcbiAgICBoYW5kbGVQYXNzd29yZFZpc2libGU6IGZ1bmN0aW9uIGhhbmRsZVBhc3N3b3JkVmlzaWJsZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLnBhc3N3b3JkVmlzaWJsZSA9ICF0aGlzLnBhc3N3b3JkVmlzaWJsZTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLmZvY3VzKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldElucHV0OiBmdW5jdGlvbiBnZXRJbnB1dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLmlucHV0IHx8IHRoaXMuJHJlZnMudGV4dGFyZWE7XG4gICAgfSxcbiAgICBnZXRTdWZmaXhWaXNpYmxlOiBmdW5jdGlvbiBnZXRTdWZmaXhWaXNpYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNsb3RzLnN1ZmZpeCB8fCB0aGlzLnN1ZmZpeEljb24gfHwgdGhpcy5zaG93Q2xlYXIgfHwgdGhpcy5zaG93UGFzc3dvcmQgfHwgdGhpcy5pc1dvcmRMaW1pdFZpc2libGUgfHwgdGhpcy52YWxpZGF0ZVN0YXRlICYmIHRoaXMubmVlZFN0YXR1c0ljb247XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2lucHV0U2VsZWN0JywgdGhpcy5zZWxlY3QpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgpO1xuICAgIHRoaXMucmVzaXplVGV4dGFyZWEoKTtcbiAgICB0aGlzLnVwZGF0ZUljb25PZmZzZXQoKTtcbiAgfSxcbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCgpIHtcbiAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZUljb25PZmZzZXQpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaW5wdXR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoaW5wdXR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQvc3JjL2lucHV0LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGlucHV0X2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2lucHV0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBpbnB1dHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0M2RkNzc0X3JlbmRlcixcbiAgaW5wdXR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDNkZDc3NF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGlucHV0X2FwaTsgfVxuaW5wdXRfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19pbnB1dCA9IChpbnB1dF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19pbnB1dC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19pbnB1dC5uYW1lLCBzcmNfaW5wdXQpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfaW5wdXQgPSAoc3JjX2lucHV0KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQyZjhjZjY2JlxudmFyIGlucHV0X251bWJlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyZjhjZjY2X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIFwiZWwtaW5wdXQtbnVtYmVyXCIsXG4gICAgICAgIF92bS5pbnB1dE51bWJlclNpemUgPyBcImVsLWlucHV0LW51bWJlci0tXCIgKyBfdm0uaW5wdXROdW1iZXJTaXplIDogXCJcIixcbiAgICAgICAgeyBcImlzLWRpc2FibGVkXCI6IF92bS5pbnB1dE51bWJlckRpc2FibGVkIH0sXG4gICAgICAgIHsgXCJpcy13aXRob3V0LWNvbnRyb2xzXCI6ICFfdm0uY29udHJvbHMgfSxcbiAgICAgICAgeyBcImlzLWNvbnRyb2xzLXJpZ2h0XCI6IF92bS5jb250cm9sc0F0UmlnaHQgfVxuICAgICAgXSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGRyYWdzdGFydDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLmNvbnRyb2xzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmRlY3JlYXNlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJkZWNyZWFzZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1udW1iZXJfX2RlY3JlYXNlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLm1pbkRpc2FibGVkIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uZGVjcmVhc2UoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczpcbiAgICAgICAgICAgICAgICAgIFwiZWwtaWNvbi1cIiArIChfdm0uY29udHJvbHNBdFJpZ2h0ID8gXCJhcnJvdy1kb3duXCIgOiBcIm1pbnVzXCIpXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLmNvbnRyb2xzXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmluY3JlYXNlLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1udW1iZXJfX2luY3JlYXNlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLm1heERpc2FibGVkIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaW5jcmVhc2UoJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBjbGFzczogXCJlbC1pY29uLVwiICsgKF92bS5jb250cm9sc0F0UmlnaHQgPyBcImFycm93LXVwXCIgOiBcInBsdXNcIilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdmFsdWU6IF92bS5kaXNwbGF5VmFsdWUsXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5wbGFjZWhvbGRlcixcbiAgICAgICAgICBkaXNhYmxlZDogX3ZtLmlucHV0TnVtYmVyRGlzYWJsZWQsXG4gICAgICAgICAgc2l6ZTogX3ZtLmlucHV0TnVtYmVyU2l6ZSxcbiAgICAgICAgICBtYXg6IF92bS5tYXgsXG4gICAgICAgICAgbWluOiBfdm0ubWluLFxuICAgICAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgICAgIGxhYmVsOiBfdm0ubGFiZWxcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBibHVyOiBfdm0uaGFuZGxlQmx1cixcbiAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzLFxuICAgICAgICAgIGlucHV0OiBfdm0uaGFuZGxlSW5wdXQsXG4gICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlSW5wdXRDaGFuZ2VcbiAgICAgICAgfSxcbiAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICBrZXlkb3duOiBbXG4gICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInVwXCIsIDM4LCAkZXZlbnQua2V5LCBbXCJVcFwiLCBcIkFycm93VXBcIl0pXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5pbmNyZWFzZSgkZXZlbnQpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICBcIkRvd25cIixcbiAgICAgICAgICAgICAgICAgIFwiQXJyb3dEb3duXCJcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIHJldHVybiBfdm0uZGVjcmVhc2UoJGV2ZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIGlucHV0X251bWJlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyZjhjZjY2X3N0YXRpY1JlbmRlckZucyA9IFtdXG5pbnB1dF9udW1iZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MmY4Y2Y2Nl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MmY4Y2Y2NiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZGlyZWN0aXZlcy9yZXBlYXQtY2xpY2suanNcblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciByZXBlYXRfY2xpY2sgPSAoe1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIHZhciBpbnRlcnZhbCA9IG51bGw7XG4gICAgdmFyIHN0YXJ0VGltZSA9IHZvaWQgMDtcbiAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICByZXR1cm4gdm5vZGUuY29udGV4dFtiaW5kaW5nLmV4cHJlc3Npb25dLmFwcGx5KCk7XG4gICAgfTtcbiAgICB2YXIgY2xlYXIgPSBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnRUaW1lIDwgMTAwKSB7XG4gICAgICAgIGhhbmRsZXIoKTtcbiAgICAgIH1cbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgaW50ZXJ2YWwgPSBudWxsO1xuICAgIH07XG5cbiAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShlbCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoZS5idXR0b24gIT09IDApIHJldHVybjtcbiAgICAgIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uY2VcIl0pKGRvY3VtZW50LCAnbW91c2V1cCcsIGNsZWFyKTtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVyLCAxMDApO1xuICAgIH0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGlucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbElucHV0TnVtYmVyJyxcbiAgbWl4aW5zOiBbZm9jdXNfZGVmYXVsdCgpKCdpbnB1dCcpXSxcbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG4gIGRpcmVjdGl2ZXM6IHtcbiAgICByZXBlYXRDbGljazogcmVwZWF0X2NsaWNrXG4gIH0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmFcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBzdGVwOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfSxcbiAgICBzdGVwU3RyaWN0bHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgbWF4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiBJbmZpbml0eVxuICAgIH0sXG4gICAgbWluOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAtSW5maW5pdHlcbiAgICB9LFxuICAgIHZhbHVlOiB7fSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgY29udHJvbHM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb250cm9sc1Bvc2l0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgbmFtZTogU3RyaW5nLFxuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgcGxhY2Vob2xkZXI6IFN0cmluZyxcbiAgICBwcmVjaXNpb246IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsID49IDAgJiYgdmFsID09PSBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogMCxcbiAgICAgIHVzZXJJbnB1dDogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZToge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcih2YWx1ZSkge1xuICAgICAgICB2YXIgbmV3VmFsID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgaWYgKG5ld1ZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGlzTmFOKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5zdGVwU3RyaWN0bHkpIHtcbiAgICAgICAgICAgIHZhciBzdGVwUHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb24odGhpcy5zdGVwKTtcbiAgICAgICAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgc3RlcFByZWNpc2lvbik7XG4gICAgICAgICAgICBuZXdWYWwgPSBNYXRoLnJvdW5kKG5ld1ZhbCAvIHRoaXMuc3RlcCkgKiBwcmVjaXNpb25GYWN0b3IgKiB0aGlzLnN0ZXAgLyBwcmVjaXNpb25GYWN0b3I7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5ld1ZhbCA9IHRoaXMudG9QcmVjaXNpb24obmV3VmFsLCB0aGlzLnByZWNpc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChuZXdWYWwgPj0gdGhpcy5tYXgpIG5ld1ZhbCA9IHRoaXMubWF4O1xuICAgICAgICBpZiAobmV3VmFsIDw9IHRoaXMubWluKSBuZXdWYWwgPSB0aGlzLm1pbjtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBuZXdWYWw7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBuZXdWYWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBtaW5EaXNhYmxlZDogZnVuY3Rpb24gbWluRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVjcmVhc2UodGhpcy52YWx1ZSwgdGhpcy5zdGVwKSA8IHRoaXMubWluO1xuICAgIH0sXG4gICAgbWF4RGlzYWJsZWQ6IGZ1bmN0aW9uIG1heERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2luY3JlYXNlKHRoaXMudmFsdWUsIHRoaXMuc3RlcCkgPiB0aGlzLm1heDtcbiAgICB9LFxuICAgIG51bVByZWNpc2lvbjogZnVuY3Rpb24gbnVtUHJlY2lzaW9uKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSxcbiAgICAgICAgICBzdGVwID0gdGhpcy5zdGVwLFxuICAgICAgICAgIGdldFByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uLFxuICAgICAgICAgIHByZWNpc2lvbiA9IHRoaXMucHJlY2lzaW9uO1xuXG4gICAgICB2YXIgc3RlcFByZWNpc2lvbiA9IGdldFByZWNpc2lvbihzdGVwKTtcbiAgICAgIGlmIChwcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RlcFByZWNpc2lvbiA+IHByZWNpc2lvbikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1bSW5wdXROdW1iZXJdcHJlY2lzaW9uIHNob3VsZCBub3QgYmUgbGVzcyB0aGFuIHRoZSBkZWNpbWFsIHBsYWNlcyBvZiBzdGVwJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWNpc2lvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChnZXRQcmVjaXNpb24odmFsdWUpLCBzdGVwUHJlY2lzaW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbnRyb2xzQXRSaWdodDogZnVuY3Rpb24gY29udHJvbHNBdFJpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udHJvbHMgJiYgdGhpcy5jb250cm9sc1Bvc2l0aW9uID09PSAncmlnaHQnO1xuICAgIH0sXG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBpbnB1dE51bWJlclNpemU6IGZ1bmN0aW9uIGlucHV0TnVtYmVyU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBpbnB1dE51bWJlckRpc2FibGVkOiBmdW5jdGlvbiBpbnB1dE51bWJlckRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgISEodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgZGlzcGxheVZhbHVlOiBmdW5jdGlvbiBkaXNwbGF5VmFsdWUoKSB7XG4gICAgICBpZiAodGhpcy51c2VySW5wdXQgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklucHV0O1xuICAgICAgfVxuXG4gICAgICB2YXIgY3VycmVudFZhbHVlID0gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICAgIGlmICh0eXBlb2YgY3VycmVudFZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBpZiAodGhpcy5zdGVwU3RyaWN0bHkpIHtcbiAgICAgICAgICB2YXIgc3RlcFByZWNpc2lvbiA9IHRoaXMuZ2V0UHJlY2lzaW9uKHRoaXMuc3RlcCk7XG4gICAgICAgICAgdmFyIHByZWNpc2lvbkZhY3RvciA9IE1hdGgucG93KDEwLCBzdGVwUHJlY2lzaW9uKTtcbiAgICAgICAgICBjdXJyZW50VmFsdWUgPSBNYXRoLnJvdW5kKGN1cnJlbnRWYWx1ZSAvIHRoaXMuc3RlcCkgKiBwcmVjaXNpb25GYWN0b3IgKiB0aGlzLnN0ZXAgLyBwcmVjaXNpb25GYWN0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRWYWx1ZS50b0ZpeGVkKHRoaXMucHJlY2lzaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihudW0sIHByZWNpc2lvbikge1xuICAgICAgaWYgKHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkKSBwcmVjaXNpb24gPSB0aGlzLm51bVByZWNpc2lvbjtcbiAgICAgIHJldHVybiBwYXJzZUZsb2F0KE1hdGgucm91bmQobnVtICogTWF0aC5wb3coMTAsIHByZWNpc2lvbikpIC8gTWF0aC5wb3coMTAsIHByZWNpc2lvbikpO1xuICAgIH0sXG4gICAgZ2V0UHJlY2lzaW9uOiBmdW5jdGlvbiBnZXRQcmVjaXNpb24odmFsdWUpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgICAgIHZhciB2YWx1ZVN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB2YXIgZG90UG9zaXRpb24gPSB2YWx1ZVN0cmluZy5pbmRleE9mKCcuJyk7XG4gICAgICB2YXIgcHJlY2lzaW9uID0gMDtcbiAgICAgIGlmIChkb3RQb3NpdGlvbiAhPT0gLTEpIHtcbiAgICAgICAgcHJlY2lzaW9uID0gdmFsdWVTdHJpbmcubGVuZ3RoIC0gZG90UG9zaXRpb24gLSAxO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByZWNpc2lvbjtcbiAgICB9LFxuICAgIF9pbmNyZWFzZTogZnVuY3Rpb24gX2luY3JlYXNlKHZhbCwgc3RlcCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInICYmIHZhbCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5udW1QcmVjaXNpb24pO1xuICAgICAgLy8gU29sdmUgdGhlIGFjY3VyYWN5IHByb2JsZW0gb2YgSlMgZGVjaW1hbCBjYWxjdWxhdGlvbiBieSBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBpbnRlZ2VyLlxuICAgICAgcmV0dXJuIHRoaXMudG9QcmVjaXNpb24oKHByZWNpc2lvbkZhY3RvciAqIHZhbCArIHByZWNpc2lvbkZhY3RvciAqIHN0ZXApIC8gcHJlY2lzaW9uRmFjdG9yKTtcbiAgICB9LFxuICAgIF9kZWNyZWFzZTogZnVuY3Rpb24gX2RlY3JlYXNlKHZhbCwgc3RlcCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInICYmIHZhbCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5jdXJyZW50VmFsdWU7XG5cbiAgICAgIHZhciBwcmVjaXNpb25GYWN0b3IgPSBNYXRoLnBvdygxMCwgdGhpcy5udW1QcmVjaXNpb24pO1xuXG4gICAgICByZXR1cm4gdGhpcy50b1ByZWNpc2lvbigocHJlY2lzaW9uRmFjdG9yICogdmFsIC0gcHJlY2lzaW9uRmFjdG9yICogc3RlcCkgLyBwcmVjaXNpb25GYWN0b3IpO1xuICAgIH0sXG4gICAgaW5jcmVhc2U6IGZ1bmN0aW9uIGluY3JlYXNlKCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXROdW1iZXJEaXNhYmxlZCB8fCB0aGlzLm1heERpc2FibGVkKSByZXR1cm47XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlIHx8IDA7XG4gICAgICB2YXIgbmV3VmFsID0gdGhpcy5faW5jcmVhc2UodmFsdWUsIHRoaXMuc3RlcCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO1xuICAgIH0sXG4gICAgZGVjcmVhc2U6IGZ1bmN0aW9uIGRlY3JlYXNlKCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXROdW1iZXJEaXNhYmxlZCB8fCB0aGlzLm1pbkRpc2FibGVkKSByZXR1cm47XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlIHx8IDA7XG4gICAgICB2YXIgbmV3VmFsID0gdGhpcy5fZGVjcmVhc2UodmFsdWUsIHRoaXMuc3RlcCk7XG4gICAgICB0aGlzLnNldEN1cnJlbnRWYWx1ZShuZXdWYWwpO1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIGV2ZW50KTtcbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50VmFsdWU6IGZ1bmN0aW9uIHNldEN1cnJlbnRWYWx1ZShuZXdWYWwpIHtcbiAgICAgIHZhciBvbGRWYWwgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0eXBlb2YgbmV3VmFsID09PSAnbnVtYmVyJyAmJiB0aGlzLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5ld1ZhbCA9IHRoaXMudG9QcmVjaXNpb24obmV3VmFsLCB0aGlzLnByZWNpc2lvbik7XG4gICAgICB9XG4gICAgICBpZiAobmV3VmFsID49IHRoaXMubWF4KSBuZXdWYWwgPSB0aGlzLm1heDtcbiAgICAgIGlmIChuZXdWYWwgPD0gdGhpcy5taW4pIG5ld1ZhbCA9IHRoaXMubWluO1xuICAgICAgaWYgKG9sZFZhbCA9PT0gbmV3VmFsKSByZXR1cm47XG4gICAgICB0aGlzLnVzZXJJbnB1dCA9IG51bGw7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG5ld1ZhbCk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBuZXdWYWwsIG9sZFZhbCk7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbDtcbiAgICB9LFxuICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dCh2YWx1ZSkge1xuICAgICAgdGhpcy51c2VySW5wdXQgPSB2YWx1ZTtcbiAgICB9LFxuICAgIGhhbmRsZUlucHV0Q2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZSh2YWx1ZSkge1xuICAgICAgdmFyIG5ld1ZhbCA9IHZhbHVlID09PSAnJyA/IHVuZGVmaW5lZCA6IE51bWJlcih2YWx1ZSk7XG4gICAgICBpZiAoIWlzTmFOKG5ld1ZhbCkgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJJbnB1dCA9IG51bGw7XG4gICAgfSxcbiAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuc2VsZWN0KCk7XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBpbm5lcklucHV0ID0gdGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dDtcbiAgICBpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgncm9sZScsICdzcGluYnV0dG9uJyk7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVtYXgnLCB0aGlzLm1heCk7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVtaW4nLCB0aGlzLm1pbik7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtdmFsdWVub3cnLCB0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgaW5uZXJJbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCB0aGlzLmlucHV0TnVtYmVyRGlzYWJsZWQpO1xuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIGlmICghdGhpcy4kcmVmcyB8fCAhdGhpcy4kcmVmcy5pbnB1dCkgcmV0dXJuO1xuICAgIHZhciBpbm5lcklucHV0ID0gdGhpcy4kcmVmcy5pbnB1dC4kcmVmcy5pbnB1dDtcbiAgICBpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsIHRoaXMuY3VycmVudFZhbHVlKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaW5wdXRfbnVtYmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGlucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpbnB1dF9udW1iZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaW5wdXRfbnVtYmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBpbnB1dF9udW1iZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MmY4Y2Y2Nl9yZW5kZXIsXG4gIGlucHV0X251bWJlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyZjhjZjY2X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaW5wdXRfbnVtYmVyX2FwaTsgfVxuaW5wdXRfbnVtYmVyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGlucHV0X251bWJlciA9IChpbnB1dF9udW1iZXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaW5wdXRfbnVtYmVyLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoaW5wdXRfbnVtYmVyLm5hbWUsIGlucHV0X251bWJlcik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19pbnB1dF9udW1iZXIgPSAoaW5wdXRfbnVtYmVyKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02OWNkNjI2OCZcbnZhciByYWRpb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2Q2MjY4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9cIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIF92bS5ib3JkZXIgJiYgX3ZtLnJhZGlvU2l6ZSA/IFwiZWwtcmFkaW8tLVwiICsgX3ZtLnJhZGlvU2l6ZSA6IFwiXCIsXG4gICAgICAgIHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCB9LFxuICAgICAgICB7IFwiaXMtZm9jdXNcIjogX3ZtLmZvY3VzIH0sXG4gICAgICAgIHsgXCJpcy1ib3JkZXJlZFwiOiBfdm0uYm9yZGVyIH0sXG4gICAgICAgIHsgXCJpcy1jaGVja2VkXCI6IF92bS5tb2RlbCA9PT0gX3ZtLmxhYmVsIH1cbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IF92bS5tb2RlbCA9PT0gX3ZtLmxhYmVsLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgIHRhYmluZGV4OiBfdm0udGFiSW5kZXhcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInNwYWNlXCIsIDMyLCAkZXZlbnQua2V5LCBbXCIgXCIsIFwiU3BhY2ViYXJcIl0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIF92bS5tb2RlbCA9IF92bS5pc0Rpc2FibGVkID8gX3ZtLm1vZGVsIDogX3ZtLmxhYmVsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvX19pbnB1dFwiLFxuICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICBcImlzLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgXCJpcy1jaGVja2VkXCI6IF92bS5tb2RlbCA9PT0gX3ZtLmxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9fX2lubmVyXCIgfSksXG4gICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbCxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlZjogXCJyYWRpb1wiLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9fX29yaWdpbmFsXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgIHRhYmluZGV4OiBcIi0xXCIsXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ubGFiZWwsXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShfdm0ubW9kZWwsIF92bS5sYWJlbClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSBmYWxzZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjaGFuZ2U6IFtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5tb2RlbCA9IF92bS5sYWJlbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvX19sYWJlbFwiLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKSxcbiAgICAgICAgICAhX3ZtLiRzbG90cy5kZWZhdWx0ID8gW192bS5fdihfdm0uX3MoX3ZtLmxhYmVsKSldIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHJhZGlvdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjljZDYyNjhfc3RhdGljUmVuZGVyRm5zID0gW11cbnJhZGlvdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjljZDYyNjhfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2Q2MjY4JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxSYWRpbycsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuXG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsUmFkaW8nLFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIGxhYmVsOiB7fSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgYm9yZGVyOiBCb29sZWFuLFxuICAgIHNpemU6IFN0cmluZ1xuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvY3VzOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0dyb3VwOiBmdW5jdGlvbiBpc0dyb3VwKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lICE9PSAnRWxSYWRpb0dyb3VwJykge1xuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3JhZGlvR3JvdXAgPSBwYXJlbnQ7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgbW9kZWw6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5fcmFkaW9Hcm91cC52YWx1ZSA6IHRoaXMudmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXApIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbFJhZGlvR3JvdXAnLCAnaW5wdXQnLCBbdmFsXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJHJlZnMucmFkaW8gJiYgKHRoaXMuJHJlZnMucmFkaW8uY2hlY2tlZCA9IHRoaXMubW9kZWwgPT09IHRoaXMubGFiZWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICByYWRpb1NpemU6IGZ1bmN0aW9uIHJhZGlvU2l6ZSgpIHtcbiAgICAgIHZhciB0ZW1SYWRpb1NpemUgPSB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5fcmFkaW9Hcm91cC5yYWRpb0dyb3VwU2l6ZSB8fCB0ZW1SYWRpb1NpemUgOiB0ZW1SYWRpb1NpemU7XG4gICAgfSxcbiAgICBpc0Rpc2FibGVkOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuX3JhZGlvR3JvdXAuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkIDogdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgdGFiSW5kZXg6IGZ1bmN0aW9uIHRhYkluZGV4KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzR3JvdXAgJiYgdGhpcy5tb2RlbCAhPT0gdGhpcy5sYWJlbCA/IC0xIDogMDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy4kZW1pdCgnY2hhbmdlJywgX3RoaXMubW9kZWwpO1xuICAgICAgICBfdGhpcy5pc0dyb3VwICYmIF90aGlzLmRpc3BhdGNoKCdFbFJhZGlvR3JvdXAnLCAnaGFuZGxlQ2hhbmdlJywgX3RoaXMubW9kZWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfcmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHJhZGlvX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3JhZGlvdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByYWRpb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzY5Y2Q2MjY4X3JlbmRlcixcbiAgcmFkaW92dWVfdHlwZV90ZW1wbGF0ZV9pZF82OWNkNjI2OF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHJhZGlvX2FwaTsgfVxucmFkaW9fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19yYWRpbyA9IChyYWRpb19jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19yYWRpby5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19yYWRpby5uYW1lLCBzcmNfcmFkaW8pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfcmFkaW8gPSAoc3JjX3JhZGlvKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD04MThhNzA0YyZcbnZhciByYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBfdm0uX2VsVGFnLFxuICAgIHtcbiAgICAgIHRhZzogXCJjb21wb25lbnRcIixcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvLWdyb3VwXCIsXG4gICAgICBhdHRyczogeyByb2xlOiBcInJhZGlvZ3JvdXBcIiB9LFxuICAgICAgb246IHsga2V5ZG93bjogX3ZtLmhhbmRsZUtleWRvd24gfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIHJhZGlvX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfODE4YTcwNGNfc3RhdGljUmVuZGVyRm5zID0gW11cbnJhZGlvX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfODE4YTcwNGNfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgxOGE3MDRjJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbnZhciBrZXlDb2RlID0gT2JqZWN0LmZyZWV6ZSh7XG4gIExFRlQ6IDM3LFxuICBVUDogMzgsXG4gIFJJR0hUOiAzOSxcbiAgRE9XTjogNDBcbn0pO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmFkaW9fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxSYWRpb0dyb3VwJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxSYWRpb0dyb3VwJyxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGZpbGw6IFN0cmluZyxcbiAgICB0ZXh0Q29sb3I6IFN0cmluZyxcbiAgICBkaXNhYmxlZDogQm9vbGVhblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBfZWxUYWc6IGZ1bmN0aW9uIF9lbFRhZygpIHtcbiAgICAgIHZhciB0YWcgPSAodGhpcy4kdm5vZGUuZGF0YSB8fCB7fSkudGFnO1xuICAgICAgaWYgKCF0YWcgfHwgdGFnID09PSAnY29tcG9uZW50JykgdGFnID0gJ2Rpdic7XG4gICAgICByZXR1cm4gdGFnO1xuICAgIH0sXG4gICAgcmFkaW9Hcm91cFNpemU6IGZ1bmN0aW9uIHJhZGlvR3JvdXBTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kb24oJ2hhbmRsZUNoYW5nZScsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgX3RoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKTtcbiAgICB9KTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAvLyDlvZNyYWRpb0dyb3Vw5rKh5pyJ6buY6K6k6YCJ6aG55pe277yM56ys5LiA5Liq5Y+v5Lul6YCJ5LitVGFi5a+86IiqXG4gICAgdmFyIHJhZGlvcyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1t0eXBlPXJhZGlvXScpO1xuICAgIHZhciBmaXJzdExhYmVsID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9cmFkaW9dJylbMF07XG4gICAgaWYgKCFbXS5zb21lLmNhbGwocmFkaW9zLCBmdW5jdGlvbiAocmFkaW8pIHtcbiAgICAgIHJldHVybiByYWRpby5jaGVja2VkO1xuICAgIH0pICYmIGZpcnN0TGFiZWwpIHtcbiAgICAgIGZpcnN0TGFiZWwudGFiSW5kZXggPSAwO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlS2V5ZG93bjogZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihlKSB7XG4gICAgICAvLyDlt6blj7PkuIrkuIvmjInplK4g5Y+v5Lul5ZyocmFkaW/nu4TlhoXliIfmjaLkuI3lkIzpgInpoblcbiAgICAgIHZhciB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgIHZhciBjbGFzc05hbWUgPSB0YXJnZXQubm9kZU5hbWUgPT09ICdJTlBVVCcgPyAnW3R5cGU9cmFkaW9dJyA6ICdbcm9sZT1yYWRpb10nO1xuICAgICAgdmFyIHJhZGlvcyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoY2xhc3NOYW1lKTtcbiAgICAgIHZhciBsZW5ndGggPSByYWRpb3MubGVuZ3RoO1xuICAgICAgdmFyIGluZGV4ID0gW10uaW5kZXhPZi5jYWxsKHJhZGlvcywgdGFyZ2V0KTtcbiAgICAgIHZhciByb2xlUmFkaW9zID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnW3JvbGU9cmFkaW9dJyk7XG4gICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgICBjYXNlIGtleUNvZGUuTEVGVDpcbiAgICAgICAgY2FzZSBrZXlDb2RlLlVQOlxuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgcm9sZVJhZGlvc1tsZW5ndGggLSAxXS5jbGljaygpO1xuICAgICAgICAgICAgcm9sZVJhZGlvc1tsZW5ndGggLSAxXS5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb2xlUmFkaW9zW2luZGV4IC0gMV0uY2xpY2soKTtcbiAgICAgICAgICAgIHJvbGVSYWRpb3NbaW5kZXggLSAxXS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBrZXlDb2RlLlJJR0hUOlxuICAgICAgICBjYXNlIGtleUNvZGUuRE9XTjpcbiAgICAgICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByb2xlUmFkaW9zWzBdLmNsaWNrKCk7XG4gICAgICAgICAgICByb2xlUmFkaW9zWzBdLmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvbGVSYWRpb3NbaW5kZXggKyAxXS5jbGljaygpO1xuICAgICAgICAgICAgcm9sZVJhZGlvc1tpbmRleCArIDFdLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoX3ZhbHVlKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW3RoaXMudmFsdWVdKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19yYWRpb19ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChyYWRpb19ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tZ3JvdXAudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcmFkaW9fZ3JvdXBfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfcmFkaW9fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJhZGlvX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfODE4YTcwNGNfcmVuZGVyLFxuICByYWRpb19ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzgxOGE3MDRjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcmFkaW9fZ3JvdXBfYXBpOyB9XG5yYWRpb19ncm91cF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1ncm91cC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmFkaW9fZ3JvdXAgPSAocmFkaW9fZ3JvdXBfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYWRpby1ncm91cC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5yYWRpb19ncm91cC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHJhZGlvX2dyb3VwLm5hbWUsIHJhZGlvX2dyb3VwKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3JhZGlvX2dyb3VwID0gKHJhZGlvX2dyb3VwKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MThhNzdhMzImXG52YXIgcmFkaW9fYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfMThhNzdhMzJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGFiZWxcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpby1idXR0b25cIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIF92bS5zaXplID8gXCJlbC1yYWRpby1idXR0b24tLVwiICsgX3ZtLnNpemUgOiBcIlwiLFxuICAgICAgICB7IFwiaXMtYWN0aXZlXCI6IF92bS52YWx1ZSA9PT0gX3ZtLmxhYmVsIH0sXG4gICAgICAgIHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCB9LFxuICAgICAgICB7IFwiaXMtZm9jdXNcIjogX3ZtLmZvY3VzIH1cbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IF92bS52YWx1ZSA9PT0gX3ZtLmxhYmVsLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgIHRhYmluZGV4OiBfdm0udGFiSW5kZXhcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInNwYWNlXCIsIDMyLCAkZXZlbnQua2V5LCBbXCIgXCIsIFwiU3BhY2ViYXJcIl0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIF92bS52YWx1ZSA9IF92bS5pc0Rpc2FibGVkID8gX3ZtLnZhbHVlIDogX3ZtLmxhYmVsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnZhbHVlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2YWx1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYWRpby1idXR0b25fX29yaWctcmFkaW9cIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgIHRhYmluZGV4OiBcIi0xXCIsXG4gICAgICAgICAgYXV0b2NvbXBsZXRlOiBcIm9mZlwiXG4gICAgICAgIH0sXG4gICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0ubGFiZWwsIGNoZWNrZWQ6IF92bS5fcShfdm0udmFsdWUsIF92bS5sYWJlbCkgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICBjaGFuZ2U6IFtcbiAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBfdm0udmFsdWUgPSBfdm0ubGFiZWxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgXSxcbiAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBfdm0uZm9jdXMgPSB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIF92bS5mb2N1cyA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvLWJ1dHRvbl9faW5uZXJcIixcbiAgICAgICAgICBzdHlsZTogX3ZtLnZhbHVlID09PSBfdm0ubGFiZWwgPyBfdm0uYWN0aXZlU3R5bGUgOiBudWxsLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKSxcbiAgICAgICAgICAhX3ZtLiRzbG90cy5kZWZhdWx0ID8gW192bS5fdihfdm0uX3MoX3ZtLmxhYmVsKSldIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHJhZGlvX2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4YTc3YTMyX3N0YXRpY1JlbmRlckZucyA9IFtdXG5yYWRpb19idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOGE3N2EzMl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE4YTc3YTMyJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8tYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciByYWRpb19idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxSYWRpb0J1dHRvbicsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHt9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIG5hbWU6IFN0cmluZ1xuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1czogZmFsc2VcbiAgICB9O1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmFkaW9Hcm91cC52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9yYWRpb0dyb3VwLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF9yYWRpb0dyb3VwOiBmdW5jdGlvbiBfcmFkaW9Hcm91cCgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsUmFkaW9Hcm91cCcpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBhY3RpdmVTdHlsZTogZnVuY3Rpb24gYWN0aXZlU3R5bGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuX3JhZGlvR3JvdXAuZmlsbCB8fCAnJyxcbiAgICAgICAgYm9yZGVyQ29sb3I6IHRoaXMuX3JhZGlvR3JvdXAuZmlsbCB8fCAnJyxcbiAgICAgICAgYm94U2hhZG93OiB0aGlzLl9yYWRpb0dyb3VwLmZpbGwgPyAnLTFweCAwIDAgMCAnICsgdGhpcy5fcmFkaW9Hcm91cC5maWxsIDogJycsXG4gICAgICAgIGNvbG9yOiB0aGlzLl9yYWRpb0dyb3VwLnRleHRDb2xvciB8fCAnJ1xuICAgICAgfTtcbiAgICB9LFxuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgc2l6ZTogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yYWRpb0dyb3VwLnJhZGlvR3JvdXBTaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH0sXG4gICAgaXNEaXNhYmxlZDogZnVuY3Rpb24gaXNEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8IHRoaXMuX3JhZGlvR3JvdXAuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9LFxuICAgIHRhYkluZGV4OiBmdW5jdGlvbiB0YWJJbmRleCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzRGlzYWJsZWQgfHwgdGhpcy5fcmFkaW9Hcm91cCAmJiB0aGlzLnZhbHVlICE9PSB0aGlzLmxhYmVsID8gLTEgOiAwO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLmRpc3BhdGNoKCdFbFJhZGlvR3JvdXAnLCAnaGFuZGxlQ2hhbmdlJywgX3RoaXMudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3JhZGlvX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChyYWRpb19idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWJ1dHRvbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciByYWRpb19idXR0b25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfcmFkaW9fYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByYWRpb19idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOGE3N2EzMl9yZW5kZXIsXG4gIHJhZGlvX2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4YTc3YTMyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcmFkaW9fYnV0dG9uX2FwaTsgfVxucmFkaW9fYnV0dG9uX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLWJ1dHRvbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmFkaW9fYnV0dG9uID0gKHJhZGlvX2J1dHRvbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvLWJ1dHRvbi9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5yYWRpb19idXR0b24uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChyYWRpb19idXR0b24ubmFtZSwgcmFkaW9fYnV0dG9uKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3JhZGlvX2J1dHRvbiA9IChyYWRpb19idXR0b24pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQwMzg3MDc0JlxudmFyIGNoZWNrYm94dnVlX3R5cGVfdGVtcGxhdGVfaWRfZDAzODcwNzRfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGFiZWxcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveFwiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgX3ZtLmJvcmRlciAmJiBfdm0uY2hlY2tib3hTaXplXG4gICAgICAgICAgPyBcImVsLWNoZWNrYm94LS1cIiArIF92bS5jaGVja2JveFNpemVcbiAgICAgICAgICA6IFwiXCIsXG4gICAgICAgIHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCB9LFxuICAgICAgICB7IFwiaXMtYm9yZGVyZWRcIjogX3ZtLmJvcmRlciB9LFxuICAgICAgICB7IFwiaXMtY2hlY2tlZFwiOiBfdm0uaXNDaGVja2VkIH1cbiAgICAgIF0sXG4gICAgICBhdHRyczogeyBpZDogX3ZtLmlkIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94X19pbnB1dFwiLFxuICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICBcImlzLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgXCJpcy1jaGVja2VkXCI6IF92bS5pc0NoZWNrZWQsXG4gICAgICAgICAgICBcImlzLWluZGV0ZXJtaW5hdGVcIjogX3ZtLmluZGV0ZXJtaW5hdGUsXG4gICAgICAgICAgICBcImlzLWZvY3VzXCI6IF92bS5mb2N1c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHRhYmluZGV4OiBfdm0uaW5kZXRlcm1pbmF0ZSA/IDAgOiBmYWxzZSxcbiAgICAgICAgICAgIHJvbGU6IF92bS5pbmRldGVybWluYXRlID8gXCJjaGVja2JveFwiIDogZmFsc2UsXG4gICAgICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBfdm0uaW5kZXRlcm1pbmF0ZSA/IFwibWl4ZWRcIiA6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX2lubmVyXCIgfSksXG4gICAgICAgICAgX3ZtLnRydWVMYWJlbCB8fCBfdm0uZmFsc2VMYWJlbFxuICAgICAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWxcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3hfX29yaWdpbmFsXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogX3ZtLmluZGV0ZXJtaW5hdGUgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgICAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgXCJ0cnVlLXZhbHVlXCI6IF92bS50cnVlTGFiZWwsXG4gICAgICAgICAgICAgICAgICBcImZhbHNlLXZhbHVlXCI6IF92bS5mYWxzZUxhYmVsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkb21Qcm9wczoge1xuICAgICAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ubW9kZWwpXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5tb2RlbCwgbnVsbCkgPiAtMVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fcShfdm0ubW9kZWwsIF92bS50cnVlTGFiZWwpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IF92bS50cnVlTGFiZWwgOiBfdm0uZmFsc2VMYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA8IDAgJiYgKF92bS5tb2RlbCA9ICQkYS5jb25jYXQoWyQkdl0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLm1vZGVsID0gJCRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwgPSAkJGNcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IHRydWVcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbCxcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtb2RlbFwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9fb3JpZ2luYWxcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiBfdm0uaW5kZXRlcm1pbmF0ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgY2hlY2tlZDogQXJyYXkuaXNBcnJheShfdm0ubW9kZWwpXG4gICAgICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5tb2RlbCwgX3ZtLmxhYmVsKSA+IC0xXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLm1vZGVsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBbXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAkJGVsID0gJGV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICQkYyA9ICQkZWwuY2hlY2tlZCA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkJHYgPSBfdm0ubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICQkaSA9IF92bS5faSgkJGEsICQkdilcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLm1vZGVsID0gJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfdm0ubW9kZWwgPSAkJGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCAkJGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbCA9ICQkY1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF92bS4kc2xvdHMuZGVmYXVsdCB8fCBfdm0ubGFiZWxcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveF9fbGFiZWxcIiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uX3QoXCJkZWZhdWx0XCIpLFxuICAgICAgICAgICAgICAhX3ZtLiRzbG90cy5kZWZhdWx0ID8gW192bS5fdihfdm0uX3MoX3ZtLmxhYmVsKSldIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgY2hlY2tib3h2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMDM4NzA3NF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuY2hlY2tib3h2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMDM4NzA3NF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDAzODcwNzQmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2hlY2tib3h2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDaGVja2JveCcsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbENoZWNrYm94JyxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWxmTW9kZWw6IGZhbHNlLFxuICAgICAgZm9jdXM6IGZhbHNlLFxuICAgICAgaXNMaW1pdEV4Y2VlZGVkOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIG1vZGVsOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuc3RvcmUgOiB0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5zZWxmTW9kZWw7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXApIHtcbiAgICAgICAgICB0aGlzLmlzTGltaXRFeGNlZWRlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAubWluICE9PSB1bmRlZmluZWQgJiYgdmFsLmxlbmd0aCA8IHRoaXMuX2NoZWNrYm94R3JvdXAubWluICYmICh0aGlzLmlzTGltaXRFeGNlZWRlZCA9IHRydWUpO1xuXG4gICAgICAgICAgdGhpcy5fY2hlY2tib3hHcm91cC5tYXggIT09IHVuZGVmaW5lZCAmJiB2YWwubGVuZ3RoID4gdGhpcy5fY2hlY2tib3hHcm91cC5tYXggJiYgKHRoaXMuaXNMaW1pdEV4Y2VlZGVkID0gdHJ1ZSk7XG5cbiAgICAgICAgICB0aGlzLmlzTGltaXRFeGNlZWRlZCA9PT0gZmFsc2UgJiYgdGhpcy5kaXNwYXRjaCgnRWxDaGVja2JveEdyb3VwJywgJ2lucHV0JywgW3ZhbF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgICAgICB0aGlzLnNlbGZNb2RlbCA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpc0NoZWNrZWQ6IGZ1bmN0aW9uIGlzQ2hlY2tlZCgpIHtcbiAgICAgIGlmICh7fS50b1N0cmluZy5jYWxsKHRoaXMubW9kZWwpID09PSAnW29iamVjdCBCb29sZWFuXScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWw7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuaW5kZXhPZih0aGlzLmxhYmVsKSA+IC0xO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGVsICE9PSBudWxsICYmIHRoaXMubW9kZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbCA9PT0gdGhpcy50cnVlTGFiZWw7XG4gICAgICB9XG4gICAgfSxcbiAgICBpc0dyb3VwOiBmdW5jdGlvbiBpc0dyb3VwKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lICE9PSAnRWxDaGVja2JveEdyb3VwJykge1xuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2NoZWNrYm94R3JvdXAgPSBwYXJlbnQ7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIHN0b3JlOiBmdW5jdGlvbiBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jaGVja2JveEdyb3VwID8gdGhpcy5fY2hlY2tib3hHcm91cC52YWx1ZSA6IHRoaXMudmFsdWU7XG4gICAgfSxcblxuXG4gICAgLyogdXNlZCB0byBtYWtlIHRoZSBpc0Rpc2FibGVkIGp1ZGdtZW50IHVuZGVyIG1heC9taW4gcHJvcHMgKi9cbiAgICBpc0xpbWl0RGlzYWJsZWQ6IGZ1bmN0aW9uIGlzTGltaXREaXNhYmxlZCgpIHtcbiAgICAgIHZhciBfY2hlY2tib3hHcm91cCA9IHRoaXMuX2NoZWNrYm94R3JvdXAsXG4gICAgICAgICAgbWF4ID0gX2NoZWNrYm94R3JvdXAubWF4LFxuICAgICAgICAgIG1pbiA9IF9jaGVja2JveEdyb3VwLm1pbjtcblxuICAgICAgcmV0dXJuICEhKG1heCB8fCBtaW4pICYmIHRoaXMubW9kZWwubGVuZ3RoID49IG1heCAmJiAhdGhpcy5pc0NoZWNrZWQgfHwgdGhpcy5tb2RlbC5sZW5ndGggPD0gbWluICYmIHRoaXMuaXNDaGVja2VkO1xuICAgIH0sXG4gICAgaXNEaXNhYmxlZDogZnVuY3Rpb24gaXNEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzR3JvdXAgPyB0aGlzLl9jaGVja2JveEdyb3VwLmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZCB8fCB0aGlzLmlzTGltaXREaXNhYmxlZCA6IHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9LFxuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgY2hlY2tib3hTaXplOiBmdW5jdGlvbiBjaGVja2JveFNpemUoKSB7XG4gICAgICB2YXIgdGVtQ2hlY2tib3hTaXplID0gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuX2NoZWNrYm94R3JvdXAuY2hlY2tib3hHcm91cFNpemUgfHwgdGVtQ2hlY2tib3hTaXplIDogdGVtQ2hlY2tib3hTaXplO1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7fSxcbiAgICBsYWJlbDoge30sXG4gICAgaW5kZXRlcm1pbmF0ZTogQm9vbGVhbixcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBjaGVja2VkOiBCb29sZWFuLFxuICAgIG5hbWU6IFN0cmluZyxcbiAgICB0cnVlTGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgZmFsc2VMYWJlbDogW1N0cmluZywgTnVtYmVyXSxcbiAgICBpZDogU3RyaW5nLCAvKiDlvZNpbmRldGVybWluYXRl5Li655yf5pe277yM5Li6Y29udHJvbHPmj5Dkvpvnm7jlhbPov57nmoRjaGVja2JveOeahGlk77yM6KGo5piO5YWD57Sg6Ze055qE5o6n5Yi25YWz57O7Ki9cbiAgICBjb250cm9sczogU3RyaW5nLCAvKiDlvZNpbmRldGVybWluYXRl5Li655yf5pe277yM5Li6Y29udHJvbHPmj5Dkvpvnm7jlhbPov57nmoRjaGVja2JveOeahGlk77yM6KGo5piO5YWD57Sg6Ze055qE5o6n5Yi25YWz57O7Ki9cbiAgICBib3JkZXI6IEJvb2xlYW4sXG4gICAgc2l6ZTogU3RyaW5nXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFkZFRvU3RvcmU6IGZ1bmN0aW9uIGFkZFRvU3RvcmUoKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsKSAmJiB0aGlzLm1vZGVsLmluZGV4T2YodGhpcy5sYWJlbCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMubW9kZWwucHVzaCh0aGlzLmxhYmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLnRydWVMYWJlbCB8fCB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmlzTGltaXRFeGNlZWRlZCkgcmV0dXJuO1xuICAgICAgdmFyIHZhbHVlID0gdm9pZCAwO1xuICAgICAgaWYgKGV2LnRhcmdldC5jaGVja2VkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy50cnVlTGFiZWwgPT09IHVuZGVmaW5lZCA/IHRydWUgOiB0aGlzLnRydWVMYWJlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5mYWxzZUxhYmVsID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHRoaXMuZmFsc2VMYWJlbDtcbiAgICAgIH1cbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlLCBldik7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5pc0dyb3VwKSB7XG4gICAgICAgICAgX3RoaXMuZGlzcGF0Y2goJ0VsQ2hlY2tib3hHcm91cCcsICdjaGFuZ2UnLCBbX3RoaXMuX2NoZWNrYm94R3JvdXAudmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5jaGVja2VkICYmIHRoaXMuYWRkVG9TdG9yZSgpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIC8vIOS4umluZGV0ZXJtaW5hdGXlhYPntKAg5re75YqgYXJpYS1jb250cm9scyDlsZ7mgKdcbiAgICBpZiAodGhpcy5pbmRldGVybWluYXRlKSB7XG4gICAgICB0aGlzLiRlbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnLCB0aGlzLmNvbnRyb2xzKTtcbiAgICB9XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShfdmFsdWUpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCBfdmFsdWUpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NoZWNrYm94dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNoZWNrYm94dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjaGVja2JveF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jaGVja2JveHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY2hlY2tib3h2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kMDM4NzA3NF9yZW5kZXIsXG4gIGNoZWNrYm94dnVlX3R5cGVfdGVtcGxhdGVfaWRfZDAzODcwNzRfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjaGVja2JveF9hcGk7IH1cbmNoZWNrYm94X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2hlY2tib3ggPSAoY2hlY2tib3hfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfY2hlY2tib3guaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfY2hlY2tib3gubmFtZSwgc3JjX2NoZWNrYm94KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NoZWNrYm94ID0gKHNyY19jaGVja2JveCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ3OGU5MDZlJlxudmFyIGNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ3OGU5MDZlX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3gtYnV0dG9uXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICBfdm0uc2l6ZSA/IFwiZWwtY2hlY2tib3gtYnV0dG9uLS1cIiArIF92bS5zaXplIDogXCJcIixcbiAgICAgICAgeyBcImlzLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkIH0sXG4gICAgICAgIHsgXCJpcy1jaGVja2VkXCI6IF92bS5pc0NoZWNrZWQgfSxcbiAgICAgICAgeyBcImlzLWZvY3VzXCI6IF92bS5mb2N1cyB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJjaGVja2JveFwiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBfdm0uaXNDaGVja2VkLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWRcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS50cnVlTGFiZWwgfHwgX3ZtLmZhbHNlTGFiZWxcbiAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1vZGVsLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwibW9kZWxcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3gtYnV0dG9uX19vcmlnaW5hbFwiLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgdHlwZTogXCJjaGVja2JveFwiLFxuICAgICAgICAgICAgICBuYW1lOiBfdm0ubmFtZSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgICBcInRydWUtdmFsdWVcIjogX3ZtLnRydWVMYWJlbCxcbiAgICAgICAgICAgICAgXCJmYWxzZS12YWx1ZVwiOiBfdm0uZmFsc2VMYWJlbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKVxuICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5tb2RlbCwgbnVsbCkgPiAtMVxuICAgICAgICAgICAgICAgIDogX3ZtLl9xKF92bS5tb2RlbCwgX3ZtLnRydWVMYWJlbClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjaGFuZ2U6IFtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyBfdm0udHJ1ZUxhYmVsIDogX3ZtLmZhbHNlTGFiZWxcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgJCRpID0gX3ZtLl9pKCQkYSwgJCR2KVxuICAgICAgICAgICAgICAgICAgICBpZiAoJCRlbC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpIDwgMCAmJiAoX3ZtLm1vZGVsID0gJCRhLmNvbmNhdChbJCR2XSkpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgJCRpID4gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChfdm0ubW9kZWwgPSAkJGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsICQkaSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgkJGEuc2xpY2UoJCRpICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfdm0ubW9kZWwgPSAkJGNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5mb2N1cyA9IHRydWVcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIDogX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbCxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNoZWNrYm94LWJ1dHRvbl9fb3JpZ2luYWxcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHR5cGU6IFwiY2hlY2tib3hcIixcbiAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ubGFiZWwsXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IEFycmF5LmlzQXJyYXkoX3ZtLm1vZGVsKVxuICAgICAgICAgICAgICAgID8gX3ZtLl9pKF92bS5tb2RlbCwgX3ZtLmxhYmVsKSA+IC0xXG4gICAgICAgICAgICAgICAgOiBfdm0ubW9kZWxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjaGFuZ2U6IFtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIHZhciAkJGEgPSBfdm0ubW9kZWwsXG4gICAgICAgICAgICAgICAgICAgICQkZWwgPSAkZXZlbnQudGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAkJGMgPSAkJGVsLmNoZWNrZWQgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KCQkYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICQkdiA9IF92bS5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPSBfdm0uX2koJCRhLCAkJHYpXG4gICAgICAgICAgICAgICAgICAgIGlmICgkJGVsLmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPCAwICYmIChfdm0ubW9kZWwgPSAkJGEuY29uY2F0KFskJHZdKSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAkJGkgPiAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5tb2RlbCA9ICQkYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgJCRpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCQkYS5zbGljZSgkJGkgKyAxKSkpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5tb2RlbCA9ICQkY1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICBfdm0uJHNsb3RzLmRlZmF1bHQgfHwgX3ZtLmxhYmVsXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2hlY2tib3gtYnV0dG9uX19pbm5lclwiLFxuICAgICAgICAgICAgICBzdHlsZTogX3ZtLmlzQ2hlY2tlZCA/IF92bS5hY3RpdmVTdHlsZSA6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiLCBbX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKV0pXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdXG4gIClcbn1cbnZhciBjaGVja2JveF9idXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF80NzhlOTA2ZV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuY2hlY2tib3hfYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfNDc4ZTkwNmVfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtYnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NzhlOTA2ZSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWJ1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjaGVja2JveF9idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDaGVja2JveEJ1dHRvbicsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGZNb2RlbDogZmFsc2UsXG4gICAgICBmb2N1czogZmFsc2UsXG4gICAgICBpc0xpbWl0RXhjZWVkZWQ6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIGxhYmVsOiB7fSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBjaGVja2VkOiBCb29sZWFuLFxuICAgIG5hbWU6IFN0cmluZyxcbiAgICB0cnVlTGFiZWw6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgZmFsc2VMYWJlbDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIG1vZGVsOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAgPyB0aGlzLnN0b3JlIDogdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy52YWx1ZSA6IHRoaXMuc2VsZk1vZGVsO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgICAgICBpZiAodGhpcy5fY2hlY2tib3hHcm91cCkge1xuICAgICAgICAgIHRoaXMuaXNMaW1pdEV4Y2VlZGVkID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hlY2tib3hHcm91cC5taW4gIT09IHVuZGVmaW5lZCAmJiB2YWwubGVuZ3RoIDwgdGhpcy5fY2hlY2tib3hHcm91cC5taW4gJiYgKHRoaXMuaXNMaW1pdEV4Y2VlZGVkID0gdHJ1ZSk7XG5cbiAgICAgICAgICB0aGlzLl9jaGVja2JveEdyb3VwLm1heCAhPT0gdW5kZWZpbmVkICYmIHZhbC5sZW5ndGggPiB0aGlzLl9jaGVja2JveEdyb3VwLm1heCAmJiAodGhpcy5pc0xpbWl0RXhjZWVkZWQgPSB0cnVlKTtcblxuICAgICAgICAgIHRoaXMuaXNMaW1pdEV4Y2VlZGVkID09PSBmYWxzZSAmJiB0aGlzLmRpc3BhdGNoKCdFbENoZWNrYm94R3JvdXAnLCAnaW5wdXQnLCBbdmFsXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2VsZk1vZGVsID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGlzQ2hlY2tlZDogZnVuY3Rpb24gaXNDaGVja2VkKCkge1xuICAgICAgaWYgKHt9LnRvU3RyaW5nLmNhbGwodGhpcy5tb2RlbCkgPT09ICdbb2JqZWN0IEJvb2xlYW5dJykge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLm1vZGVsKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpID4gLTE7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZWwgIT09IG51bGwgJiYgdGhpcy5tb2RlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGVsID09PSB0aGlzLnRydWVMYWJlbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIF9jaGVja2JveEdyb3VwOiBmdW5jdGlvbiBfY2hlY2tib3hHcm91cCgpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGlmIChwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZSAhPT0gJ0VsQ2hlY2tib3hHcm91cCcpIHtcbiAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBzdG9yZTogZnVuY3Rpb24gc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hlY2tib3hHcm91cCA/IHRoaXMuX2NoZWNrYm94R3JvdXAudmFsdWUgOiB0aGlzLnZhbHVlO1xuICAgIH0sXG4gICAgYWN0aXZlU3R5bGU6IGZ1bmN0aW9uIGFjdGl2ZVN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLl9jaGVja2JveEdyb3VwLmZpbGwgfHwgJycsXG4gICAgICAgIGJvcmRlckNvbG9yOiB0aGlzLl9jaGVja2JveEdyb3VwLmZpbGwgfHwgJycsXG4gICAgICAgIGNvbG9yOiB0aGlzLl9jaGVja2JveEdyb3VwLnRleHRDb2xvciB8fCAnJyxcbiAgICAgICAgJ2JveC1zaGFkb3cnOiAnLTFweCAwIDAgMCAnICsgdGhpcy5fY2hlY2tib3hHcm91cC5maWxsXG5cbiAgICAgIH07XG4gICAgfSxcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIHNpemU6IGZ1bmN0aW9uIHNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY2hlY2tib3hHcm91cC5jaGVja2JveEdyb3VwU2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuXG5cbiAgICAvKiB1c2VkIHRvIG1ha2UgdGhlIGlzRGlzYWJsZWQganVkZ21lbnQgdW5kZXIgbWF4L21pbiBwcm9wcyAqL1xuICAgIGlzTGltaXREaXNhYmxlZDogZnVuY3Rpb24gaXNMaW1pdERpc2FibGVkKCkge1xuICAgICAgdmFyIF9jaGVja2JveEdyb3VwMiA9IHRoaXMuX2NoZWNrYm94R3JvdXAsXG4gICAgICAgICAgbWF4ID0gX2NoZWNrYm94R3JvdXAyLm1heCxcbiAgICAgICAgICBtaW4gPSBfY2hlY2tib3hHcm91cDIubWluO1xuXG4gICAgICByZXR1cm4gISEobWF4IHx8IG1pbikgJiYgdGhpcy5tb2RlbC5sZW5ndGggPj0gbWF4ICYmICF0aGlzLmlzQ2hlY2tlZCB8fCB0aGlzLm1vZGVsLmxlbmd0aCA8PSBtaW4gJiYgdGhpcy5pc0NoZWNrZWQ7XG4gICAgfSxcbiAgICBpc0Rpc2FibGVkOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrYm94R3JvdXAgPyB0aGlzLl9jaGVja2JveEdyb3VwLmRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZCB8fCB0aGlzLmlzTGltaXREaXNhYmxlZCA6IHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUb1N0b3JlOiBmdW5jdGlvbiBhZGRUb1N0b3JlKCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5tb2RlbCkgJiYgdGhpcy5tb2RlbC5pbmRleE9mKHRoaXMubGFiZWwpID09PSAtMSkge1xuICAgICAgICB0aGlzLm1vZGVsLnB1c2godGhpcy5sYWJlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy50cnVlTGFiZWwgfHwgdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5pc0xpbWl0RXhjZWVkZWQpIHJldHVybjtcbiAgICAgIHZhciB2YWx1ZSA9IHZvaWQgMDtcbiAgICAgIGlmIChldi50YXJnZXQuY2hlY2tlZCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMudHJ1ZUxhYmVsID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy50cnVlTGFiZWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZmFsc2VMYWJlbCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiB0aGlzLmZhbHNlTGFiZWw7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSwgZXYpO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX2NoZWNrYm94R3JvdXApIHtcbiAgICAgICAgICBfdGhpcy5kaXNwYXRjaCgnRWxDaGVja2JveEdyb3VwJywgJ2NoYW5nZScsIFtfdGhpcy5fY2hlY2tib3hHcm91cC52YWx1ZV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLmNoZWNrZWQgJiYgdGhpcy5hZGRUb1N0b3JlKCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfY2hlY2tib3hfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtYnV0dG9uLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNoZWNrYm94X2J1dHRvbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jaGVja2JveF9idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGNoZWNrYm94X2J1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ3OGU5MDZlX3JlbmRlcixcbiAgY2hlY2tib3hfYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfNDc4ZTkwNmVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjaGVja2JveF9idXR0b25fYXBpOyB9XG5jaGVja2JveF9idXR0b25fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jaGVja2JveC9zcmMvY2hlY2tib3gtYnV0dG9uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjaGVja2JveF9idXR0b24gPSAoY2hlY2tib3hfYnV0dG9uX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gtYnV0dG9uL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNoZWNrYm94X2J1dHRvbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNoZWNrYm94X2J1dHRvbi5uYW1lLCBjaGVja2JveF9idXR0b24pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY2hlY2tib3hfYnV0dG9uID0gKGNoZWNrYm94X2J1dHRvbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzI4OWEyOTAmXG52YXIgY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF83Mjg5YTI5MF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jaGVja2JveC1ncm91cFwiLFxuICAgICAgYXR0cnM6IHsgcm9sZTogXCJncm91cFwiLCBcImFyaWEtbGFiZWxcIjogXCJjaGVja2JveC1ncm91cFwiIH1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBjaGVja2JveF9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyODlhMjkwX3N0YXRpY1JlbmRlckZucyA9IFtdXG5jaGVja2JveF9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzcyODlhMjkwX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03Mjg5YTI5MCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2hlY2tib3hHcm91cCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsQ2hlY2tib3hHcm91cCcsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIG1pbjogTnVtYmVyLFxuICAgIG1heDogTnVtYmVyLFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBmaWxsOiBTdHJpbmcsXG4gICAgdGV4dENvbG9yOiBTdHJpbmdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgY2hlY2tib3hHcm91cFNpemU6IGZ1bmN0aW9uIGNoZWNrYm94R3JvdXBTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoX3ZhbHVlKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW192YWx1ZV0pO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2NoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNoZWNrYm94X2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94L3NyYy9jaGVja2JveC1ncm91cC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjaGVja2JveF9ncm91cF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jaGVja2JveF9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY2hlY2tib3hfZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF83Mjg5YTI5MF9yZW5kZXIsXG4gIGNoZWNrYm94X2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNzI4OWEyOTBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjaGVja2JveF9ncm91cF9hcGk7IH1cbmNoZWNrYm94X2dyb3VwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2hlY2tib3gvc3JjL2NoZWNrYm94LWdyb3VwLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjaGVja2JveF9ncm91cCA9IChjaGVja2JveF9ncm91cF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NoZWNrYm94LWdyb3VwL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNoZWNrYm94X2dyb3VwLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoY2hlY2tib3hfZ3JvdXAubmFtZSwgY2hlY2tib3hfZ3JvdXApO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY2hlY2tib3hfZ3JvdXAgPSAoY2hlY2tib3hfZ3JvdXApO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zd2l0Y2gvc3JjL2NvbXBvbmVudC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmRjZDhmYmImXG52YXIgY29tcG9uZW50dnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRjZDhmYmJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3dpdGNoXCIsXG4gICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6IF92bS5zd2l0Y2hEaXNhYmxlZCwgXCJpcy1jaGVja2VkXCI6IF92bS5jaGVja2VkIH0sXG4gICAgICBhdHRyczoge1xuICAgICAgICByb2xlOiBcInN3aXRjaFwiLFxuICAgICAgICBcImFyaWEtY2hlY2tlZFwiOiBfdm0uY2hlY2tlZCxcbiAgICAgICAgXCJhcmlhLWRpc2FibGVkXCI6IF92bS5zd2l0Y2hEaXNhYmxlZFxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIHJldHVybiBfdm0uc3dpdGNoVmFsdWUoJGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXN3aXRjaF9faW5wdXRcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0eXBlOiBcImNoZWNrYm94XCIsXG4gICAgICAgICAgaWQ6IF92bS5pZCxcbiAgICAgICAgICBuYW1lOiBfdm0ubmFtZSxcbiAgICAgICAgICBcInRydWUtdmFsdWVcIjogX3ZtLmFjdGl2ZVZhbHVlLFxuICAgICAgICAgIFwiZmFsc2UtdmFsdWVcIjogX3ZtLmluYWN0aXZlVmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IF92bS5zd2l0Y2hEaXNhYmxlZFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNoYW5nZTogX3ZtLmhhbmRsZUNoYW5nZSxcbiAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdm0uc3dpdGNoVmFsdWUoJGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBfdm0uaW5hY3RpdmVJY29uQ2xhc3MgfHwgX3ZtLmluYWN0aXZlVGV4dFxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgXCJlbC1zd2l0Y2hfX2xhYmVsXCIsXG4gICAgICAgICAgICAgICAgXCJlbC1zd2l0Y2hfX2xhYmVsLS1sZWZ0XCIsXG4gICAgICAgICAgICAgICAgIV92bS5jaGVja2VkID8gXCJpcy1hY3RpdmVcIiA6IFwiXCJcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLmluYWN0aXZlSWNvbkNsYXNzXG4gICAgICAgICAgICAgICAgPyBfYyhcImlcIiwgeyBjbGFzczogW192bS5pbmFjdGl2ZUljb25DbGFzc10gfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAhX3ZtLmluYWN0aXZlSWNvbkNsYXNzICYmIF92bS5pbmFjdGl2ZVRleHRcbiAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogX3ZtLmNoZWNrZWQgfSB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLmluYWN0aXZlVGV4dCkpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfYyhcInNwYW5cIiwge1xuICAgICAgICByZWY6IFwiY29yZVwiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zd2l0Y2hfX2NvcmVcIixcbiAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5jb3JlV2lkdGggKyBcInB4XCIgfVxuICAgICAgfSksXG4gICAgICBfdm0uYWN0aXZlSWNvbkNsYXNzIHx8IF92bS5hY3RpdmVUZXh0XG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICBcImVsLXN3aXRjaF9fbGFiZWxcIixcbiAgICAgICAgICAgICAgICBcImVsLXN3aXRjaF9fbGFiZWwtLXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgX3ZtLmNoZWNrZWQgPyBcImlzLWFjdGl2ZVwiIDogXCJcIlxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uYWN0aXZlSWNvbkNsYXNzXG4gICAgICAgICAgICAgICAgPyBfYyhcImlcIiwgeyBjbGFzczogW192bS5hY3RpdmVJY29uQ2xhc3NdIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgIV92bS5hY3RpdmVJY29uQ2xhc3MgJiYgX3ZtLmFjdGl2ZVRleHRcbiAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IGF0dHJzOiB7IFwiYXJpYS1oaWRkZW5cIjogIV92bS5jaGVja2VkIH0gfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5hY3RpdmVUZXh0KSlcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkY2Q4ZmJiX3N0YXRpY1JlbmRlckZucyA9IFtdXG5jb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGNkOGZiYl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N3aXRjaC9zcmMvY29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZGNkOGZiYiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzd2l0Y2hfc3JjX2NvbXBvbmVudHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFN3aXRjaCcsXG4gIG1peGluczogW2ZvY3VzX2RlZmF1bHQoKSgnaW5wdXQnKSwgbWlncmF0aW5nX2RlZmF1bHQuYSwgZW1pdHRlcl9kZWZhdWx0LmFdLFxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHdpZHRoOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiA0MFxuICAgIH0sXG4gICAgYWN0aXZlSWNvbkNsYXNzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgaW5hY3RpdmVJY29uQ2xhc3M6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBhY3RpdmVUZXh0OiBTdHJpbmcsXG4gICAgaW5hY3RpdmVUZXh0OiBTdHJpbmcsXG4gICAgYWN0aXZlQ29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBpbmFjdGl2ZUNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgYWN0aXZlVmFsdWU6IHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBpbmFjdGl2ZVZhbHVlOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIG5hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICB2YWxpZGF0ZUV2ZW50OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaWQ6IFN0cmluZ1xuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3JlV2lkdGg6IHRoaXMud2lkdGhcbiAgICB9O1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIGlmICghflt0aGlzLmFjdGl2ZVZhbHVlLCB0aGlzLmluYWN0aXZlVmFsdWVdLmluZGV4T2YodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdGhpcy5pbmFjdGl2ZVZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjaGVja2VkOiBmdW5jdGlvbiBjaGVja2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IHRoaXMuYWN0aXZlVmFsdWU7XG4gICAgfSxcbiAgICBzd2l0Y2hEaXNhYmxlZDogZnVuY3Rpb24gc3dpdGNoRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH1cbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICBjaGVja2VkOiBmdW5jdGlvbiBjaGVja2VkKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5jaGVja2VkID0gdGhpcy5jaGVja2VkO1xuICAgICAgaWYgKHRoaXMuYWN0aXZlQ29sb3IgfHwgdGhpcy5pbmFjdGl2ZUNvbG9yKSB7XG4gICAgICAgIHRoaXMuc2V0QmFja2dyb3VuZENvbG9yKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52YWxpZGF0ZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCBbdGhpcy52YWx1ZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgdmFsID0gdGhpcy5jaGVja2VkID8gdGhpcy5pbmFjdGl2ZVZhbHVlIDogdGhpcy5hY3RpdmVWYWx1ZTtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCk7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIHNldCBpbnB1dCdzIGNoZWNrZWQgcHJvcGVydHlcbiAgICAgICAgLy8gaW4gY2FzZSBwYXJlbnQgcmVmdXNlcyB0byBjaGFuZ2UgY29tcG9uZW50J3MgdmFsdWVcbiAgICAgICAgaWYgKF90aGlzLiRyZWZzLmlucHV0KSB7XG4gICAgICAgICAgX3RoaXMuJHJlZnMuaW5wdXQuY2hlY2tlZCA9IF90aGlzLmNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc2V0QmFja2dyb3VuZENvbG9yOiBmdW5jdGlvbiBzZXRCYWNrZ3JvdW5kQ29sb3IoKSB7XG4gICAgICB2YXIgbmV3Q29sb3IgPSB0aGlzLmNoZWNrZWQgPyB0aGlzLmFjdGl2ZUNvbG9yIDogdGhpcy5pbmFjdGl2ZUNvbG9yO1xuICAgICAgdGhpcy4kcmVmcy5jb3JlLnN0eWxlLmJvcmRlckNvbG9yID0gbmV3Q29sb3I7XG4gICAgICB0aGlzLiRyZWZzLmNvcmUuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gbmV3Q29sb3I7XG4gICAgfSxcbiAgICBzd2l0Y2hWYWx1ZTogZnVuY3Rpb24gc3dpdGNoVmFsdWUoKSB7XG4gICAgICAhdGhpcy5zd2l0Y2hEaXNhYmxlZCAmJiB0aGlzLmhhbmRsZUNoYW5nZSgpO1xuICAgIH0sXG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge1xuICAgICAgICAgICdvbi1jb2xvcic6ICdvbi1jb2xvciBpcyByZW5hbWVkIHRvIGFjdGl2ZS1jb2xvci4nLFxuICAgICAgICAgICdvZmYtY29sb3InOiAnb2ZmLWNvbG9yIGlzIHJlbmFtZWQgdG8gaW5hY3RpdmUtY29sb3IuJyxcbiAgICAgICAgICAnb24tdGV4dCc6ICdvbi10ZXh0IGlzIHJlbmFtZWQgdG8gYWN0aXZlLXRleHQuJyxcbiAgICAgICAgICAnb2ZmLXRleHQnOiAnb2ZmLXRleHQgaXMgcmVuYW1lZCB0byBpbmFjdGl2ZS10ZXh0LicsXG4gICAgICAgICAgJ29uLXZhbHVlJzogJ29uLXZhbHVlIGlzIHJlbmFtZWQgdG8gYWN0aXZlLXZhbHVlLicsXG4gICAgICAgICAgJ29mZi12YWx1ZSc6ICdvZmYtdmFsdWUgaXMgcmVuYW1lZCB0byBpbmFjdGl2ZS12YWx1ZS4nLFxuICAgICAgICAgICdvbi1pY29uLWNsYXNzJzogJ29uLWljb24tY2xhc3MgaXMgcmVuYW1lZCB0byBhY3RpdmUtaWNvbi1jbGFzcy4nLFxuICAgICAgICAgICdvZmYtaWNvbi1jbGFzcyc6ICdvZmYtaWNvbi1jbGFzcyBpcyByZW5hbWVkIHRvIGluYWN0aXZlLWljb24tY2xhc3MuJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICB0aGlzLmNvcmVXaWR0aCA9IHRoaXMud2lkdGggfHwgNDA7XG4gICAgaWYgKHRoaXMuYWN0aXZlQ29sb3IgfHwgdGhpcy5pbmFjdGl2ZUNvbG9yKSB7XG4gICAgICB0aGlzLnNldEJhY2tncm91bmRDb2xvcigpO1xuICAgIH1cbiAgICB0aGlzLiRyZWZzLmlucHV0LmNoZWNrZWQgPSB0aGlzLmNoZWNrZWQ7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zd2l0Y2gvc3JjL2NvbXBvbmVudC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc3dpdGNoX3NyY19jb21wb25lbnR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc3dpdGNoX3NyY19jb21wb25lbnR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3dpdGNoL3NyYy9jb21wb25lbnQudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc3JjX2NvbXBvbmVudF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX3N3aXRjaF9zcmNfY29tcG9uZW50dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjb21wb25lbnR2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGNkOGZiYl9yZW5kZXIsXG4gIGNvbXBvbmVudHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkY2Q4ZmJiX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc3JjX2NvbXBvbmVudF9hcGk7IH1cbnNyY19jb21wb25lbnRfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zd2l0Y2gvc3JjL2NvbXBvbmVudC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3dpdGNoX3NyY19jb21wb25lbnQgPSAoc3JjX2NvbXBvbmVudF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N3aXRjaC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zd2l0Y2hfc3JjX2NvbXBvbmVudC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHN3aXRjaF9zcmNfY29tcG9uZW50Lm5hbWUsIHN3aXRjaF9zcmNfY29tcG9uZW50KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3N3aXRjaCA9IChzd2l0Y2hfc3JjX2NvbXBvbmVudCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZTRhYWRlNiZcbnZhciBzZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZTRhYWRlNl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLmhhbmRsZUNsb3NlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFuZGxlQ2xvc2VcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0XCIsXG4gICAgICBjbGFzczogW192bS5zZWxlY3RTaXplID8gXCJlbC1zZWxlY3QtLVwiICsgX3ZtLnNlbGVjdFNpemUgOiBcIlwiXSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICByZXR1cm4gX3ZtLnRvZ2dsZU1lbnUoJGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0ubXVsdGlwbGVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlZjogXCJ0YWdzXCIsXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdF9fdGFnc1wiLFxuICAgICAgICAgICAgICBzdHlsZTogeyBcIm1heC13aWR0aFwiOiBfdm0uaW5wdXRXaWR0aCAtIDMyICsgXCJweFwiLCB3aWR0aDogXCIxMDAlXCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLmNvbGxhcHNlVGFncyAmJiBfdm0uc2VsZWN0ZWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtdGFnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6ICFfdm0uc2VsZWN0RGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogX3ZtLmNvbGxhcHNlVGFnU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXQ6IF92bS5zZWxlY3RlZFswXS5oaXRTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGUtdHJhbnNpdGlvbnNcIjogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kZWxldGVUYWcoJGV2ZW50LCBfdm0uc2VsZWN0ZWRbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX3RhZ3MtdGV4dFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zZWxlY3RlZFswXS5jdXJyZW50TGFiZWwpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnNlbGVjdGVkLmxlbmd0aCA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC10YWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IF92bS5jb2xsYXBzZVRhZ1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGUtdHJhbnNpdGlvbnNcIjogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdF9fdGFncy10ZXh0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIisgXCIgKyBfdm0uX3MoX3ZtLnNlbGVjdGVkLmxlbmd0aCAtIDEpKV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICFfdm0uY29sbGFwc2VUYWdzXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJ0cmFuc2l0aW9uLWdyb3VwXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgb246IHsgXCJhZnRlci1sZWF2ZVwiOiBfdm0ucmVzZXRJbnB1dEhlaWdodCB9IH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0uc2VsZWN0ZWQsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVsLXRhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IF92bS5nZXRWYWx1ZUtleShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zYWJsZTogIV92bS5zZWxlY3REaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBfdm0uY29sbGFwc2VUYWdTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdDogaXRlbS5oaXRTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpc2FibGUtdHJhbnNpdGlvbnNcIjogXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5kZWxldGVUYWcoJGV2ZW50LCBpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0X190YWdzLXRleHRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhpdGVtLmN1cnJlbnRMYWJlbCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5maWx0ZXJhYmxlXG4gICAgICAgICAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwicXVlcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdF9faW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtfdm0uc2VsZWN0U2l6ZSA/IFwiaXMtXCIgKyBfdm0uc2VsZWN0U2l6ZSA6IFwiXCJdLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgIFwiZmxleC1ncm93XCI6IFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBfdm0uaW5wdXRMZW5ndGggLyAoX3ZtLmlucHV0V2lkdGggLSAzMikgKyBcIiVcIixcbiAgICAgICAgICAgICAgICAgICAgICBcIm1heC13aWR0aFwiOiBfdm0uaW5wdXRXaWR0aCAtIDQyICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5zZWxlY3REaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5hdXRvQ29tcGxldGUgfHwgX3ZtLmF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogX3ZtLnF1ZXJ5IH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zb2Z0Rm9jdXMgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAga2V5dXA6IF92bS5tYW5hZ2VQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0ucmVzZXRJbnB1dFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkRvd25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiQXJyb3dEb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVOYXZpZ2F0ZShcIm5leHRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInVwXCIsIDM4LCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFycm93VXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZU5hdmlnYXRlKFwicHJldlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnNlbGVjdE9wdGlvbigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlc2NcIiwgMjcsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRXNjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVzY2FwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnZpc2libGUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbOCwgNDZdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcIkJhY2tzcGFjZVwiLCBcIkRlbGV0ZVwiLCBcIkRlbFwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmRlbGV0ZVByZXZUYWcoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidGFiXCIsIDksICRldmVudC5rZXksIFwiVGFiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnZpc2libGUgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb25zdGFydDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9udXBkYXRlOiBfdm0uaGFuZGxlQ29tcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb25lbmQ6IF92bS5oYW5kbGVDb21wb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5xdWVyeSA9ICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGVib3VuY2VkUXVlcnlDaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfYyhcbiAgICAgICAgXCJlbC1pbnB1dFwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBcInJlZmVyZW5jZVwiLFxuICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZm9jdXNcIjogX3ZtLnZpc2libGUgfSxcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLmN1cnJlbnRQbGFjZWhvbGRlcixcbiAgICAgICAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgICAgICAgaWQ6IF92bS5pZCxcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLmF1dG9Db21wbGV0ZSB8fCBfdm0uYXV0b2NvbXBsZXRlLFxuICAgICAgICAgICAgc2l6ZTogX3ZtLnNlbGVjdFNpemUsXG4gICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnNlbGVjdERpc2FibGVkLFxuICAgICAgICAgICAgcmVhZG9ubHk6IF92bS5yZWFkb25seSxcbiAgICAgICAgICAgIFwidmFsaWRhdGUtZXZlbnRcIjogZmFsc2UsXG4gICAgICAgICAgICB0YWJpbmRleDogX3ZtLm11bHRpcGxlICYmIF92bS5maWx0ZXJhYmxlID8gXCItMVwiIDogbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICBibHVyOiBfdm0uaGFuZGxlQmx1cixcbiAgICAgICAgICAgIGlucHV0OiBfdm0uZGVib3VuY2VkT25JbnB1dENoYW5nZSxcbiAgICAgICAgICAgIGNvbXBvc2l0aW9uc3RhcnQ6IF92bS5oYW5kbGVDb21wb3NpdGlvbixcbiAgICAgICAgICAgIGNvbXBvc2l0aW9udXBkYXRlOiBfdm0uaGFuZGxlQ29tcG9zaXRpb24sXG4gICAgICAgICAgICBjb21wb3NpdGlvbmVuZDogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAga2V5ZG93bjogW1xuICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRvd25cIiwgNDAsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgXCJEb3duXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiQXJyb3dEb3duXCJcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgIF92bS5oYW5kbGVOYXZpZ2F0ZShcIm5leHRcIilcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ1cFwiLCAzOCwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICBcIlVwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiQXJyb3dVcFwiXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICBfdm0uaGFuZGxlTmF2aWdhdGUoXCJwcmV2XCIpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZW50ZXJcIiwgMTMsICRldmVudC5rZXksIFwiRW50ZXJcIilcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5zZWxlY3RPcHRpb24oJGV2ZW50KVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVzY1wiLCAyNywgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICBcIkVzY1wiLFxuICAgICAgICAgICAgICAgICAgICBcIkVzY2FwZVwiXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICBfdm0udmlzaWJsZSA9IGZhbHNlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidGFiXCIsIDksICRldmVudC5rZXksIFwiVGFiXCIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdm0udmlzaWJsZSA9IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgX3ZtLmlucHV0SG92ZXJpbmcgPSB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5pbnB1dEhvdmVyaW5nID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnNlbGVjdGVkTGFiZWwsXG4gICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgIF92bS5zZWxlY3RlZExhYmVsID0gJCR2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzZWxlY3RlZExhYmVsXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uJHNsb3RzLnByZWZpeFxuICAgICAgICAgICAgPyBfYyhcInRlbXBsYXRlXCIsIHsgc2xvdDogXCJwcmVmaXhcIiB9LCBbX3ZtLl90KFwicHJlZml4XCIpXSwgMilcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX2MoXCJ0ZW1wbGF0ZVwiLCB7IHNsb3Q6IFwic3VmZml4XCIgfSwgW1xuICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAhX3ZtLnNob3dDbG9zZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIXNob3dDbG9zZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgIFwiZWwtc2VsZWN0X19jYXJldFwiLFxuICAgICAgICAgICAgICAgIFwiZWwtaW5wdXRfX2ljb25cIixcbiAgICAgICAgICAgICAgICBcImVsLWljb24tXCIgKyBfdm0uaWNvbkNsYXNzXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX3ZtLnNob3dDbG9zZVxuICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1zZWxlY3RfX2NhcmV0IGVsLWlucHV0X19pY29uIGVsLWljb24tY2lyY2xlLWNsb3NlXCIsXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsZWFyQ2xpY2sgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApLFxuICAgICAgX2MoXG4gICAgICAgIFwidHJhbnNpdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIFwiYmVmb3JlLWVudGVyXCI6IF92bS5oYW5kbGVNZW51RW50ZXIsXG4gICAgICAgICAgICBcImFmdGVyLWxlYXZlXCI6IF92bS5kb0Rlc3Ryb3lcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZWwtc2VsZWN0LW1lbnVcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSAmJiBfdm0uZW1wdHlUZXh0ICE9PSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZSAmJiBlbXB0eVRleHQgIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlZjogXCJwb3BwZXJcIixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgXCJhcHBlbmQtdG8tYm9keVwiOiBfdm0ucG9wcGVyQXBwZW5kVG9Cb2R5IH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZWwtc2Nyb2xsYmFyXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm9wdGlvbnMubGVuZ3RoID4gMCAmJiAhX3ZtLmxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJvcHRpb25zLmxlbmd0aCA+IDAgJiYgIWxvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgcmVmOiBcInNjcm9sbGJhclwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJpcy1lbXB0eVwiOlxuICAgICAgICAgICAgICAgICAgICAgICFfdm0uYWxsb3dDcmVhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlcnkgJiZcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uZmlsdGVyZWRPcHRpb25zQ291bnQgPT09IDBcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICB0YWc6IFwidWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJ3cmFwLWNsYXNzXCI6IFwiZWwtc2VsZWN0LWRyb3Bkb3duX193cmFwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwidmlldy1jbGFzc1wiOiBcImVsLXNlbGVjdC1kcm9wZG93bl9fbGlzdFwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uc2hvd05ld09wdGlvblxuICAgICAgICAgICAgICAgICAgICA/IF9jKFwiZWwtb3B0aW9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHZhbHVlOiBfdm0ucXVlcnksIGNyZWF0ZWQ6IFwiXCIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0uX3QoXCJkZWZhdWx0XCIpXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF92bS5lbXB0eVRleHQgJiZcbiAgICAgICAgICAgICAgKCFfdm0uYWxsb3dDcmVhdGUgfHxcbiAgICAgICAgICAgICAgICBfdm0ubG9hZGluZyB8fFxuICAgICAgICAgICAgICAgIChfdm0uYWxsb3dDcmVhdGUgJiYgX3ZtLm9wdGlvbnMubGVuZ3RoID09PSAwKSlcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLiRzbG90cy5lbXB0eVxuICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLl90KFwiZW1wdHlcIilcbiAgICAgICAgICAgICAgICAgICAgICA6IF9jKFwicFwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1kcm9wZG93bl9fZW1wdHlcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLmVtcHR5VGV4dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHNlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBlNGFhZGU2X3N0YXRpY1JlbmRlckZucyA9IFtdXG5zZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wZTRhYWRlNl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wZTRhYWRlNiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDY4Mjg3NDgmXG52YXIgc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4Mjg3NDhfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWRyb3Bkb3duIGVsLXBvcHBlclwiLFxuICAgICAgY2xhc3M6IFt7IFwiaXMtbXVsdGlwbGVcIjogX3ZtLiRwYXJlbnQubXVsdGlwbGUgfSwgX3ZtLnBvcHBlckNsYXNzXSxcbiAgICAgIHN0eWxlOiB7IG1pbldpZHRoOiBfdm0ubWluV2lkdGggfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ODI4NzQ4X3N0YXRpY1JlbmRlckZucyA9IFtdXG5zZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNjgyODc0OCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsU2VsZWN0RHJvcGRvd24nLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFNlbGVjdERyb3Bkb3duJyxcblxuICBtaXhpbnM6IFt2dWVfcG9wcGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICBwbGFjZW1lbnQ6IHtcbiAgICAgIGRlZmF1bHQ6ICdib3R0b20tc3RhcnQnXG4gICAgfSxcblxuICAgIGJvdW5kYXJpZXNQYWRkaW5nOiB7XG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcblxuICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdwdUFjY2VsZXJhdGlvbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdmlzaWJsZUFycm93OiB7XG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcblxuICAgIGFwcGVuZFRvQm9keToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWluV2lkdGg6ICcnXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcG9wcGVyQ2xhc3M6IGZ1bmN0aW9uIHBvcHBlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5wb3BwZXJDbGFzcztcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnJHBhcmVudC5pbnB1dFdpZHRoJzogZnVuY3Rpb24gJHBhcmVudElucHV0V2lkdGgoKSB7XG4gICAgICB0aGlzLm1pbldpZHRoID0gdGhpcy4kcGFyZW50LiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCc7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kcGFyZW50LiRyZWZzLnJlZmVyZW5jZS4kZWw7XG4gICAgdGhpcy4kcGFyZW50LnBvcHBlckVsbSA9IHRoaXMucG9wcGVyRWxtID0gdGhpcy4kZWw7XG4gICAgdGhpcy4kb24oJ3VwZGF0ZVBvcHBlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy4kcGFyZW50LnZpc2libGUpIF90aGlzLnVwZGF0ZVBvcHBlcigpO1xuICAgIH0pO1xuICAgIHRoaXMuJG9uKCdkZXN0cm95UG9wcGVyJywgdGhpcy5kZXN0cm95UG9wcGVyKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBzZWxlY3RfZHJvcGRvd25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9yZW5kZXIsXG4gIHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ODI4NzQ4X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc2VsZWN0X2Ryb3Bkb3duX2FwaTsgfVxuc2VsZWN0X2Ryb3Bkb3duX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNlbGVjdF9kcm9wZG93biA9IChzZWxlY3RfZHJvcGRvd25fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2E0NGM2NDImXG52YXIgb3B0aW9udnVlX3R5cGVfdGVtcGxhdGVfaWRfN2E0NGM2NDJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwibGlcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWRyb3Bkb3duX19pdGVtXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBzZWxlY3RlZDogX3ZtLml0ZW1TZWxlY3RlZCxcbiAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQgfHwgX3ZtLmdyb3VwRGlzYWJsZWQgfHwgX3ZtLmxpbWl0UmVhY2hlZCxcbiAgICAgICAgaG92ZXI6IF92bS5ob3ZlclxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXI6IF92bS5ob3Zlckl0ZW0sXG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICByZXR1cm4gX3ZtLnNlbGVjdE9wdGlvbkNsaWNrKCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIiwgW19jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uY3VycmVudExhYmVsKSldKV0pXSxcbiAgICAyXG4gIClcbn1cbnZhciBvcHRpb252dWVfdHlwZV90ZW1wbGF0ZV9pZF83YTQ0YzY0Ml9zdGF0aWNSZW5kZXJGbnMgPSBbXVxub3B0aW9udnVlX3R5cGVfdGVtcGxhdGVfaWRfN2E0NGM2NDJfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2E0NGM2NDImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG9wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBuYW1lOiAnRWxPcHRpb24nLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbE9wdGlvbicsXG5cbiAgaW5qZWN0OiBbJ3NlbGVjdCddLFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBsYWJlbDogW1N0cmluZywgTnVtYmVyXSxcbiAgICBjcmVhdGVkOiBCb29sZWFuLFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5kZXg6IC0xLFxuICAgICAgZ3JvdXBEaXNhYmxlZDogZmFsc2UsXG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgaGl0U3RhdGU6IGZhbHNlLFxuICAgICAgaG92ZXI6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIGlzT2JqZWN0KCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzLnZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBvYmplY3RdJztcbiAgICB9LFxuICAgIGN1cnJlbnRMYWJlbDogZnVuY3Rpb24gY3VycmVudExhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGFiZWwgfHwgKHRoaXMuaXNPYmplY3QgPyAnJyA6IHRoaXMudmFsdWUpO1xuICAgIH0sXG4gICAgY3VycmVudFZhbHVlOiBmdW5jdGlvbiBjdXJyZW50VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB0aGlzLmxhYmVsIHx8ICcnO1xuICAgIH0sXG4gICAgaXRlbVNlbGVjdGVkOiBmdW5jdGlvbiBpdGVtU2VsZWN0ZWQoKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0Lm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRXF1YWwodGhpcy52YWx1ZSwgdGhpcy5zZWxlY3QudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnModGhpcy5zZWxlY3QudmFsdWUsIHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbGltaXRSZWFjaGVkOiBmdW5jdGlvbiBsaW1pdFJlYWNoZWQoKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLml0ZW1TZWxlY3RlZCAmJiAodGhpcy5zZWxlY3QudmFsdWUgfHwgW10pLmxlbmd0aCA+PSB0aGlzLnNlbGVjdC5tdWx0aXBsZUxpbWl0ICYmIHRoaXMuc2VsZWN0Lm11bHRpcGxlTGltaXQgPiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGN1cnJlbnRMYWJlbDogZnVuY3Rpb24gY3VycmVudExhYmVsKCkge1xuICAgICAgaWYgKCF0aGlzLmNyZWF0ZWQgJiYgIXRoaXMuc2VsZWN0LnJlbW90ZSkgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnc2V0U2VsZWN0ZWQnKTtcbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwsIG9sZFZhbCkge1xuICAgICAgdmFyIF9zZWxlY3QgPSB0aGlzLnNlbGVjdCxcbiAgICAgICAgICByZW1vdGUgPSBfc2VsZWN0LnJlbW90ZSxcbiAgICAgICAgICB2YWx1ZUtleSA9IF9zZWxlY3QudmFsdWVLZXk7XG5cbiAgICAgIGlmICghdGhpcy5jcmVhdGVkICYmICFyZW1vdGUpIHtcbiAgICAgICAgaWYgKHZhbHVlS2V5ICYmICh0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWwpKSA9PT0gJ29iamVjdCcgJiYgKHR5cGVvZiBvbGRWYWwgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG9sZFZhbCkpID09PSAnb2JqZWN0JyAmJiB2YWxbdmFsdWVLZXldID09PSBvbGRWYWxbdmFsdWVLZXldKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ3NldFNlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0VxdWFsOiBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgICAgIGlmICghdGhpcy5pc09iamVjdCkge1xuICAgICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZUtleSA9IHRoaXMuc2VsZWN0LnZhbHVlS2V5O1xuICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGEsIHZhbHVlS2V5KSA9PT0gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGIsIHZhbHVlS2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbiBjb250YWlucygpIHtcbiAgICAgIHZhciBhcnIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICAgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgaWYgKCF0aGlzLmlzT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBhcnIgJiYgYXJyLmluZGV4T2YodGFyZ2V0KSA+IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlS2V5ID0gdGhpcy5zZWxlY3QudmFsdWVLZXk7XG4gICAgICAgIHJldHVybiBhcnIgJiYgYXJyLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGl0ZW0sIHZhbHVlS2V5KSA9PT0gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKHRhcmdldCwgdmFsdWVLZXkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUdyb3VwRGlzYWJsZWQ6IGZ1bmN0aW9uIGhhbmRsZUdyb3VwRGlzYWJsZWQodmFsKSB7XG4gICAgICB0aGlzLmdyb3VwRGlzYWJsZWQgPSB2YWw7XG4gICAgfSxcbiAgICBob3Zlckl0ZW06IGZ1bmN0aW9uIGhvdmVySXRlbSgpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5ncm91cERpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LmhvdmVySW5kZXggPSB0aGlzLnNlbGVjdC5vcHRpb25zLmluZGV4T2YodGhpcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3RPcHRpb25DbGljazogZnVuY3Rpb24gc2VsZWN0T3B0aW9uQ2xpY2soKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiB0aGlzLmdyb3VwRGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnaGFuZGxlT3B0aW9uQ2xpY2snLCBbdGhpcywgdHJ1ZV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgcXVlcnlDaGFuZ2U6IGZ1bmN0aW9uIHF1ZXJ5Q2hhbmdlKHF1ZXJ5KSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBuZXcgUmVnRXhwKE9iamVjdCh1dGlsX1tcImVzY2FwZVJlZ2V4cFN0cmluZ1wiXSkocXVlcnkpLCAnaScpLnRlc3QodGhpcy5jdXJyZW50TGFiZWwpIHx8IHRoaXMuY3JlYXRlZDtcbiAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LmZpbHRlcmVkT3B0aW9uc0NvdW50LS07XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zZWxlY3Qub3B0aW9ucy5wdXNoKHRoaXMpO1xuICAgIHRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMucHVzaCh0aGlzKTtcbiAgICB0aGlzLnNlbGVjdC5vcHRpb25zQ291bnQrKztcbiAgICB0aGlzLnNlbGVjdC5maWx0ZXJlZE9wdGlvbnNDb3VudCsrO1xuXG4gICAgdGhpcy4kb24oJ3F1ZXJ5Q2hhbmdlJywgdGhpcy5xdWVyeUNoYW5nZSk7XG4gICAgdGhpcy4kb24oJ2hhbmRsZUdyb3VwRGlzYWJsZWQnLCB0aGlzLmhhbmRsZUdyb3VwRGlzYWJsZWQpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHZhciBfc2VsZWN0MiA9IHRoaXMuc2VsZWN0LFxuICAgICAgICBzZWxlY3RlZCA9IF9zZWxlY3QyLnNlbGVjdGVkLFxuICAgICAgICBtdWx0aXBsZSA9IF9zZWxlY3QyLm11bHRpcGxlO1xuXG4gICAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IG11bHRpcGxlID8gc2VsZWN0ZWQgOiBbc2VsZWN0ZWRdO1xuICAgIHZhciBpbmRleCA9IHRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMuaW5kZXhPZih0aGlzKTtcbiAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkT3B0aW9ucy5pbmRleE9mKHRoaXMpO1xuXG4gICAgLy8gaWYgb3B0aW9uIGlzIG5vdCBzZWxlY3RlZCwgcmVtb3ZlIGl0IGZyb20gY2FjaGVcbiAgICBpZiAoaW5kZXggPiAtMSAmJiBzZWxlY3RlZEluZGV4IDwgMCkge1xuICAgICAgdGhpcy5zZWxlY3QuY2FjaGVkT3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdC5vbk9wdGlvbkRlc3Ryb3kodGhpcy5zZWxlY3Qub3B0aW9ucy5pbmRleE9mKHRoaXMpKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfb3B0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG9wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBvcHRpb25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfb3B0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBvcHRpb252dWVfdHlwZV90ZW1wbGF0ZV9pZF83YTQ0YzY0Ml9yZW5kZXIsXG4gIG9wdGlvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdhNDRjNjQyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgb3B0aW9uX2FwaTsgfVxub3B0aW9uX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19vcHRpb24gPSAob3B0aW9uX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi90YWdcIlxudmFyIHRhZ18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcbnZhciB0YWdfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odGFnXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9yZXNpemUtZXZlbnRcIlxudmFyIHJlc2l6ZV9ldmVudF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbC1pbnRvLXZpZXdcIlxudmFyIHNjcm9sbF9pbnRvX3ZpZXdfID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XG52YXIgc2Nyb2xsX2ludG9fdmlld19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzY3JvbGxfaW50b192aWV3Xyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9uYXZpZ2F0aW9uLW1peGluLmpzXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBuYXZpZ2F0aW9uX21peGluID0gKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaG92ZXJPcHRpb246IC0xXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9uc0FsbERpc2FibGVkOiBmdW5jdGlvbiBvcHRpb25zQWxsRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24udmlzaWJsZTtcbiAgICAgIH0pLmV2ZXJ5KGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5kaXNhYmxlZDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGhvdmVySW5kZXg6IGZ1bmN0aW9uIGhvdmVySW5kZXgodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgdmFsID4gLTEpIHtcbiAgICAgICAgdGhpcy5ob3Zlck9wdGlvbiA9IHRoaXMub3B0aW9uc1t2YWxdIHx8IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zLmZvckVhY2goZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICBvcHRpb24uaG92ZXIgPSBfdGhpcy5ob3Zlck9wdGlvbiA9PT0gb3B0aW9uO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBuYXZpZ2F0ZU9wdGlvbnM6IGZ1bmN0aW9uIG5hdmlnYXRlT3B0aW9ucyhkaXJlY3Rpb24pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMudmlzaWJsZSkge1xuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50ID09PSAwKSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMub3B0aW9uc0FsbERpc2FibGVkKSB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCsrO1xuICAgICAgICAgIGlmICh0aGlzLmhvdmVySW5kZXggPT09IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3ByZXYnKSB7XG4gICAgICAgICAgdGhpcy5ob3ZlckluZGV4LS07XG4gICAgICAgICAgaWYgKHRoaXMuaG92ZXJJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IHRoaXMub3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF07XG4gICAgICAgIGlmIChvcHRpb24uZGlzYWJsZWQgPT09IHRydWUgfHwgb3B0aW9uLmdyb3VwRGlzYWJsZWQgPT09IHRydWUgfHwgIW9wdGlvbi52aXNpYmxlKSB7XG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZU9wdGlvbnMoZGlyZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5zY3JvbGxUb09wdGlvbihfdGhpczIuaG92ZXJPcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmEsIGxvY2FsZV9kZWZhdWx0LmEsIGZvY3VzX2RlZmF1bHQoKSgncmVmZXJlbmNlJyksIG5hdmlnYXRpb25fbWl4aW5dLFxuXG4gIG5hbWU6ICdFbFNlbGVjdCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsU2VsZWN0JyxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdzZWxlY3QnOiB0aGlzXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICByZWFkb25seTogZnVuY3Rpb24gcmVhZG9ubHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZmlsdGVyYWJsZSB8fCB0aGlzLm11bHRpcGxlIHx8ICFPYmplY3QodXRpbF9bXCJpc0lFXCJdKSgpICYmICFPYmplY3QodXRpbF9bXCJpc0VkZ2VcIl0pKCkgJiYgIXRoaXMudmlzaWJsZTtcbiAgICB9LFxuICAgIHNob3dDbG9zZTogZnVuY3Rpb24gc2hvd0Nsb3NlKCkge1xuICAgICAgdmFyIGhhc1ZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwIDogdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gJyc7XG4gICAgICB2YXIgY3JpdGVyaWEgPSB0aGlzLmNsZWFyYWJsZSAmJiAhdGhpcy5zZWxlY3REaXNhYmxlZCAmJiB0aGlzLmlucHV0SG92ZXJpbmcgJiYgaGFzVmFsdWU7XG4gICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgfSxcbiAgICBpY29uQ2xhc3M6IGZ1bmN0aW9uIGljb25DbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbW90ZSAmJiB0aGlzLmZpbHRlcmFibGUgPyAnJyA6IHRoaXMudmlzaWJsZSA/ICdhcnJvdy11cCBpcy1yZXZlcnNlJyA6ICdhcnJvdy11cCc7XG4gICAgfSxcbiAgICBkZWJvdW5jZTogZnVuY3Rpb24gZGVib3VuY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1vdGUgPyAzMDAgOiAwO1xuICAgIH0sXG4gICAgZW1wdHlUZXh0OiBmdW5jdGlvbiBlbXB0eVRleHQoKSB7XG4gICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdUZXh0IHx8IHRoaXMudCgnZWwuc2VsZWN0LmxvYWRpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW90ZSAmJiB0aGlzLnF1ZXJ5ID09PSAnJyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUgJiYgdGhpcy5xdWVyeSAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubm9NYXRjaFRleHQgfHwgdGhpcy50KCdlbC5zZWxlY3Qubm9NYXRjaCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubm9EYXRhVGV4dCB8fCB0aGlzLnQoJ2VsLnNlbGVjdC5ub0RhdGEnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBzaG93TmV3T3B0aW9uOiBmdW5jdGlvbiBzaG93TmV3T3B0aW9uKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGhhc0V4aXN0aW5nT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiAhb3B0aW9uLmNyZWF0ZWQ7XG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5jdXJyZW50TGFiZWwgPT09IF90aGlzLnF1ZXJ5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJhYmxlICYmIHRoaXMuYWxsb3dDcmVhdGUgJiYgdGhpcy5xdWVyeSAhPT0gJycgJiYgIWhhc0V4aXN0aW5nT3B0aW9uO1xuICAgIH0sXG4gICAgc2VsZWN0U2l6ZTogZnVuY3Rpb24gc2VsZWN0U2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBzZWxlY3REaXNhYmxlZDogZnVuY3Rpb24gc2VsZWN0RGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgY29sbGFwc2VUYWdTaXplOiBmdW5jdGlvbiBjb2xsYXBzZVRhZ1NpemUoKSB7XG4gICAgICByZXR1cm4gWydzbWFsbCcsICdtaW5pJ10uaW5kZXhPZih0aGlzLnNlbGVjdFNpemUpID4gLTEgPyAnbWluaScgOiAnc21hbGwnO1xuICAgIH0sXG4gICAgcHJvcFBsYWNlaG9sZGVyOiBmdW5jdGlvbiBwcm9wUGxhY2Vob2xkZXIoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGxhY2Vob2xkZXIgIT09ICd1bmRlZmluZWQnID8gdGhpcy5wbGFjZWhvbGRlciA6IHRoaXMudCgnZWwuc2VsZWN0LnBsYWNlaG9sZGVyJyk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEsXG4gICAgRWxTZWxlY3RNZW51OiBzZWxlY3RfZHJvcGRvd24sXG4gICAgRWxPcHRpb246IHNyY19vcHRpb24sXG4gICAgRWxUYWc6IHRhZ19kZWZhdWx0LmEsXG4gICAgRWxTY3JvbGxiYXI6IHNjcm9sbGJhcl9kZWZhdWx0LmFcbiAgfSxcblxuICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogY2xpY2tvdXRzaWRlX2RlZmF1bHQuYSB9LFxuXG4gIHByb3BzOiB7XG4gICAgbmFtZTogU3RyaW5nLFxuICAgIGlkOiBTdHJpbmcsXG4gICAgdmFsdWU6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBhdXRvY29tcGxldGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdvZmYnXG4gICAgfSxcbiAgICAvKiogQERlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uICovXG4gICAgYXV0b0NvbXBsZXRlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgIGZhbHNlICYmIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGF1dG9tYXRpY0Ryb3Bkb3duOiBCb29sZWFuLFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBjbGVhcmFibGU6IEJvb2xlYW4sXG4gICAgZmlsdGVyYWJsZTogQm9vbGVhbixcbiAgICBhbGxvd0NyZWF0ZTogQm9vbGVhbixcbiAgICBsb2FkaW5nOiBCb29sZWFuLFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgcmVtb3RlOiBCb29sZWFuLFxuICAgIGxvYWRpbmdUZXh0OiBTdHJpbmcsXG4gICAgbm9NYXRjaFRleHQ6IFN0cmluZyxcbiAgICBub0RhdGFUZXh0OiBTdHJpbmcsXG4gICAgcmVtb3RlTWV0aG9kOiBGdW5jdGlvbixcbiAgICBmaWx0ZXJNZXRob2Q6IEZ1bmN0aW9uLFxuICAgIG11bHRpcGxlOiBCb29sZWFuLFxuICAgIG11bHRpcGxlTGltaXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIHBsYWNlaG9sZGVyOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIGRlZmF1bHRGaXJzdE9wdGlvbjogQm9vbGVhbixcbiAgICByZXNlcnZlS2V5d29yZDogQm9vbGVhbixcbiAgICB2YWx1ZUtleToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3ZhbHVlJ1xuICAgIH0sXG4gICAgY29sbGFwc2VUYWdzOiBCb29sZWFuLFxuICAgIHBvcHBlckFwcGVuZFRvQm9keToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW9uczogW10sXG4gICAgICBjYWNoZWRPcHRpb25zOiBbXSxcbiAgICAgIGNyZWF0ZWRMYWJlbDogbnVsbCxcbiAgICAgIGNyZWF0ZWRTZWxlY3RlZDogZmFsc2UsXG4gICAgICBzZWxlY3RlZDogdGhpcy5tdWx0aXBsZSA/IFtdIDoge30sXG4gICAgICBpbnB1dExlbmd0aDogMjAsXG4gICAgICBpbnB1dFdpZHRoOiAwLFxuICAgICAgaW5pdGlhbElucHV0SGVpZ2h0OiAwLFxuICAgICAgY2FjaGVkUGxhY2VIb2xkZXI6ICcnLFxuICAgICAgb3B0aW9uc0NvdW50OiAwLFxuICAgICAgZmlsdGVyZWRPcHRpb25zQ291bnQ6IDAsXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIHNvZnRGb2N1czogZmFsc2UsXG4gICAgICBzZWxlY3RlZExhYmVsOiAnJyxcbiAgICAgIGhvdmVySW5kZXg6IC0xLFxuICAgICAgcXVlcnk6ICcnLFxuICAgICAgcHJldmlvdXNRdWVyeTogbnVsbCxcbiAgICAgIGlucHV0SG92ZXJpbmc6IGZhbHNlLFxuICAgICAgY3VycmVudFBsYWNlaG9sZGVyOiAnJyxcbiAgICAgIG1lbnVWaXNpYmxlT25Gb2N1czogZmFsc2UsXG4gICAgICBpc09uQ29tcG9zaXRpb246IGZhbHNlLFxuICAgICAgaXNTaWxlbnRCbHVyOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHNlbGVjdERpc2FibGVkOiBmdW5jdGlvbiBzZWxlY3REaXNhYmxlZCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByb3BQbGFjZWhvbGRlcjogZnVuY3Rpb24gcHJvcFBsYWNlaG9sZGVyKHZhbCkge1xuICAgICAgdGhpcy5jYWNoZWRQbGFjZUhvbGRlciA9IHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdmFsO1xuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTtcbiAgICAgICAgaWYgKHZhbCAmJiB2YWwubGVuZ3RoID4gMCB8fCB0aGlzLiRyZWZzLmlucHV0ICYmIHRoaXMucXVlcnkgIT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMuY2FjaGVkUGxhY2VIb2xkZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiAhdGhpcy5yZXNlcnZlS2V5d29yZCkge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlKHRoaXMucXVlcnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldFNlbGVjdGVkKCk7XG4gICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmICF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuaW5wdXRMZW5ndGggPSAyMDtcbiAgICAgIH1cbiAgICAgIGlmICghT2JqZWN0KHV0aWxfW1widmFsdWVFcXVhbHNcIl0pKHZhbCwgb2xkVmFsKSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgdmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZpc2libGU6IGZ1bmN0aW9uIHZpc2libGUodmFsKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAnZGVzdHJveVBvcHBlcicpO1xuICAgICAgICBpZiAodGhpcy4kcmVmcy5pbnB1dCkge1xuICAgICAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5wcmV2aW91c1F1ZXJ5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gJyc7XG4gICAgICAgIHRoaXMuaW5wdXRMZW5ndGggPSAyMDtcbiAgICAgICAgdGhpcy5tZW51VmlzaWJsZU9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldEhvdmVySW5kZXgoKTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpczMuJHJlZnMuaW5wdXQgJiYgX3RoaXMzLiRyZWZzLmlucHV0LnZhbHVlID09PSAnJyAmJiBfdGhpczMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBfdGhpczMuY3VycmVudFBsYWNlaG9sZGVyID0gX3RoaXMzLmNhY2hlZFBsYWNlSG9sZGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmIHRoaXMuYWxsb3dDcmVhdGUgJiYgdGhpcy5jcmVhdGVkU2VsZWN0ZWQgJiYgdGhpcy5jcmVhdGVkTGFiZWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gdGhpcy5jcmVhdGVkTGFiZWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSB0aGlzLnNlbGVjdGVkLmN1cnJlbnRMYWJlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHRoaXMucXVlcnkgPSB0aGlzLnNlbGVjdGVkTGFiZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5yZW1vdGUgPyAnJyA6IHRoaXMuc2VsZWN0ZWRMYWJlbDtcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlKHRoaXMucXVlcnkpO1xuICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ3F1ZXJ5Q2hhbmdlJywgJycpO1xuICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb25Hcm91cCcsICdxdWVyeUNoYW5nZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZExhYmVsKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdGhpcy5zZWxlY3RlZExhYmVsO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJGVtaXQoJ3Zpc2libGUtY2hhbmdlJywgdmFsKTtcbiAgICB9LFxuICAgIG9wdGlvbnM6IGZ1bmN0aW9uIG9wdGlvbnMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuJGlzU2VydmVyKSByZXR1cm47XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzNC5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgICAgfVxuICAgICAgdmFyIGlucHV0cyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0Jyk7XG4gICAgICBpZiAoW10uaW5kZXhPZi5jYWxsKGlucHV0cywgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbiAmJiAodGhpcy5maWx0ZXJhYmxlIHx8IHRoaXMucmVtb3RlKSAmJiB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50KSB7XG4gICAgICAgIHRoaXMuY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZU5hdmlnYXRlOiBmdW5jdGlvbiBoYW5kbGVOYXZpZ2F0ZShkaXJlY3Rpb24pIHtcbiAgICAgIGlmICh0aGlzLmlzT25Db21wb3NpdGlvbikgcmV0dXJuO1xuXG4gICAgICB0aGlzLm5hdmlnYXRlT3B0aW9ucyhkaXJlY3Rpb24pO1xuICAgIH0sXG4gICAgaGFuZGxlQ29tcG9zaXRpb246IGZ1bmN0aW9uIGhhbmRsZUNvbXBvc2l0aW9uKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIHRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJykge1xuICAgICAgICB0aGlzLmlzT25Db21wb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgIHJldHVybiBfdGhpczUuaGFuZGxlUXVlcnlDaGFuZ2UodGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0W3RleHQubGVuZ3RoIC0gMV0gfHwgJyc7XG4gICAgICAgIHRoaXMuaXNPbkNvbXBvc2l0aW9uID0gIU9iamVjdChzaGFyZWRfW1wiaXNLb3JlYW5cIl0pKGxhc3RDaGFyYWN0ZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlUXVlcnlDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVF1ZXJ5Q2hhbmdlKHZhbCkge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLnByZXZpb3VzUXVlcnkgPT09IHZhbCB8fCB0aGlzLmlzT25Db21wb3NpdGlvbikgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNRdWVyeSA9PT0gbnVsbCAmJiAodHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLnJlbW90ZU1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1F1ZXJ5ID0gdmFsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnByZXZpb3VzUXVlcnkgPSB2YWw7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczYudmlzaWJsZSkgX3RoaXM2LmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsICd1cGRhdGVQb3BwZXInKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmZpbHRlcmFibGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBsZW5ndGggPSBfdGhpczYuJHJlZnMuaW5wdXQudmFsdWUubGVuZ3RoICogMTUgKyAyMDtcbiAgICAgICAgICBfdGhpczYuaW5wdXRMZW5ndGggPSBfdGhpczYuY29sbGFwc2VUYWdzID8gTWF0aC5taW4oNTAsIGxlbmd0aCkgOiBsZW5ndGg7XG4gICAgICAgICAgX3RoaXM2Lm1hbmFnZVBsYWNlaG9sZGVyKCk7XG4gICAgICAgICAgX3RoaXM2LnJlc2V0SW5wdXRIZWlnaHQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZW1vdGUgJiYgdHlwZW9mIHRoaXMucmVtb3RlTWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLnJlbW90ZU1ldGhvZCh2YWwpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5maWx0ZXJNZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNZXRob2QodmFsKTtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uR3JvdXAnLCAncXVlcnlDaGFuZ2UnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQgPSB0aGlzLm9wdGlvbnNDb3VudDtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ3F1ZXJ5Q2hhbmdlJywgdmFsKTtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uR3JvdXAnLCAncXVlcnlDaGFuZ2UnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbiAmJiAodGhpcy5maWx0ZXJhYmxlIHx8IHRoaXMucmVtb3RlKSAmJiB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50KSB7XG4gICAgICAgIHRoaXMuY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjcm9sbFRvT3B0aW9uOiBmdW5jdGlvbiBzY3JvbGxUb09wdGlvbihvcHRpb24pIHtcbiAgICAgIHZhciB0YXJnZXQgPSBBcnJheS5pc0FycmF5KG9wdGlvbikgJiYgb3B0aW9uWzBdID8gb3B0aW9uWzBdLiRlbCA6IG9wdGlvbi4kZWw7XG4gICAgICBpZiAodGhpcy4kcmVmcy5wb3BwZXIgJiYgdGFyZ2V0KSB7XG4gICAgICAgIHZhciBtZW51ID0gdGhpcy4kcmVmcy5wb3BwZXIuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1zZWxlY3QtZHJvcGRvd25fX3dyYXAnKTtcbiAgICAgICAgc2Nyb2xsX2ludG9fdmlld19kZWZhdWx0KCkobWVudSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJHJlZnMuc2Nyb2xsYmFyICYmIHRoaXMuJHJlZnMuc2Nyb2xsYmFyLmhhbmRsZVNjcm9sbCgpO1xuICAgIH0sXG4gICAgaGFuZGxlTWVudUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNZW51RW50ZXIoKSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXM3LnNjcm9sbFRvT3B0aW9uKF90aGlzNy5zZWxlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGVtaXRDaGFuZ2U6IGZ1bmN0aW9uIGVtaXRDaGFuZ2UodmFsKSB7XG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcInZhbHVlRXF1YWxzXCJdKSh0aGlzLnZhbHVlLCB2YWwpKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRPcHRpb246IGZ1bmN0aW9uIGdldE9wdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG9wdGlvbiA9IHZvaWQgMDtcbiAgICAgIHZhciBpc09iamVjdCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3Qgb2JqZWN0XSc7XG4gICAgICB2YXIgaXNOdWxsID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBudWxsXSc7XG4gICAgICB2YXIgaXNVbmRlZmluZWQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IHVuZGVmaW5lZF0nO1xuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5jYWNoZWRPcHRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBjYWNoZWRPcHRpb24gPSB0aGlzLmNhY2hlZE9wdGlvbnNbaV07XG4gICAgICAgIHZhciBpc0VxdWFsID0gaXNPYmplY3QgPyBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoY2FjaGVkT3B0aW9uLnZhbHVlLCB0aGlzLnZhbHVlS2V5KSA9PT0gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKHZhbHVlLCB0aGlzLnZhbHVlS2V5KSA6IGNhY2hlZE9wdGlvbi52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgIGlmIChpc0VxdWFsKSB7XG4gICAgICAgICAgb3B0aW9uID0gY2FjaGVkT3B0aW9uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uKSByZXR1cm4gb3B0aW9uO1xuICAgICAgdmFyIGxhYmVsID0gIWlzT2JqZWN0ICYmICFpc051bGwgJiYgIWlzVW5kZWZpbmVkID8gU3RyaW5nKHZhbHVlKSA6ICcnO1xuICAgICAgdmFyIG5ld09wdGlvbiA9IHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBjdXJyZW50TGFiZWw6IGxhYmVsXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgbmV3T3B0aW9uLmhpdFN0YXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3T3B0aW9uO1xuICAgIH0sXG4gICAgc2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uIHNldFNlbGVjdGVkKCkge1xuICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5nZXRPcHRpb24odGhpcy52YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb24uY3JlYXRlZCkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlZExhYmVsID0gb3B0aW9uLmN1cnJlbnRMYWJlbDtcbiAgICAgICAgICB0aGlzLmNyZWF0ZWRTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVkU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSBvcHRpb24uY3VycmVudExhYmVsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gb3B0aW9uO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWxlY3RlZExhYmVsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goX3RoaXM4LmdldE9wdGlvbih2YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSByZXN1bHQ7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzOC5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkge1xuICAgICAgaWYgKCF0aGlzLnNvZnRGb2N1cykge1xuICAgICAgICBpZiAodGhpcy5hdXRvbWF0aWNEcm9wZG93biB8fCB0aGlzLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmICF0aGlzLnZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMubWVudVZpc2libGVPbkZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCdmb2N1cycsIGV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc29mdEZvY3VzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLiRyZWZzLnJlZmVyZW5jZS5ibHVyKCk7XG4gICAgfSxcbiAgICBoYW5kbGVCbHVyOiBmdW5jdGlvbiBoYW5kbGVCbHVyKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXM5ID0gdGhpcztcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczkuaXNTaWxlbnRCbHVyKSB7XG4gICAgICAgICAgX3RoaXM5LmlzU2lsZW50Qmx1ciA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzOS4kZW1pdCgnYmx1cicsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSwgNTApO1xuICAgICAgdGhpcy5zb2Z0Rm9jdXMgPSBmYWxzZTtcbiAgICB9LFxuICAgIGhhbmRsZUNsZWFyQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsZWFyQ2xpY2soZXZlbnQpIHtcbiAgICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWQoZXZlbnQpO1xuICAgIH0sXG4gICAgZG9EZXN0cm95OiBmdW5jdGlvbiBkb0Rlc3Ryb3koKSB7XG4gICAgICB0aGlzLiRyZWZzLnBvcHBlciAmJiB0aGlzLiRyZWZzLnBvcHBlci5kb0Rlc3Ryb3koKTtcbiAgICB9LFxuICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIH0sXG4gICAgdG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlOiBmdW5jdGlvbiB0b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoaGl0KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZCkpIHJldHVybjtcbiAgICAgIHZhciBvcHRpb24gPSB0aGlzLnNlbGVjdGVkW3RoaXMuc2VsZWN0ZWQubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoIW9wdGlvbikgcmV0dXJuO1xuXG4gICAgICBpZiAoaGl0ID09PSB0cnVlIHx8IGhpdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgb3B0aW9uLmhpdFN0YXRlID0gaGl0O1xuICAgICAgICByZXR1cm4gaGl0O1xuICAgICAgfVxuXG4gICAgICBvcHRpb24uaGl0U3RhdGUgPSAhb3B0aW9uLmhpdFN0YXRlO1xuICAgICAgcmV0dXJuIG9wdGlvbi5oaXRTdGF0ZTtcbiAgICB9LFxuICAgIGRlbGV0ZVByZXZUYWc6IGZ1bmN0aW9uIGRlbGV0ZVByZXZUYWcoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0LnZhbHVlLmxlbmd0aCA8PSAwICYmICF0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZSgpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcbiAgICAgICAgdmFsdWUucG9wKCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWFuYWdlUGxhY2Vob2xkZXI6IGZ1bmN0aW9uIG1hbmFnZVBsYWNlaG9sZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFBsYWNlaG9sZGVyICE9PSAnJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMuJHJlZnMuaW5wdXQudmFsdWUgPyAnJyA6IHRoaXMuY2FjaGVkUGxhY2VIb2xkZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNldElucHV0U3RhdGU6IGZ1bmN0aW9uIHJlc2V0SW5wdXRTdGF0ZShlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlICE9PSA4KSB0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZShmYWxzZSk7XG4gICAgICB0aGlzLmlucHV0TGVuZ3RoID0gdGhpcy4kcmVmcy5pbnB1dC52YWx1ZS5sZW5ndGggKiAxNSArIDIwO1xuICAgICAgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgfSxcbiAgICByZXNldElucHV0SGVpZ2h0OiBmdW5jdGlvbiByZXNldElucHV0SGVpZ2h0KCkge1xuICAgICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5jb2xsYXBzZVRhZ3MgJiYgIXRoaXMuZmlsdGVyYWJsZSkgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMTAuJHJlZnMucmVmZXJlbmNlKSByZXR1cm47XG4gICAgICAgIHZhciBpbnB1dENoaWxkTm9kZXMgPSBfdGhpczEwLiRyZWZzLnJlZmVyZW5jZS4kZWwuY2hpbGROb2RlcztcbiAgICAgICAgdmFyIGlucHV0ID0gW10uZmlsdGVyLmNhbGwoaW5wdXRDaGlsZE5vZGVzLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnRhZ05hbWUgPT09ICdJTlBVVCc7XG4gICAgICAgIH0pWzBdO1xuICAgICAgICB2YXIgdGFncyA9IF90aGlzMTAuJHJlZnMudGFncztcbiAgICAgICAgdmFyIHRhZ3NIZWlnaHQgPSB0YWdzID8gTWF0aC5yb3VuZCh0YWdzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgOiAwO1xuICAgICAgICB2YXIgc2l6ZUluTWFwID0gX3RoaXMxMC5pbml0aWFsSW5wdXRIZWlnaHQgfHwgNDA7XG4gICAgICAgIGlucHV0LnN0eWxlLmhlaWdodCA9IF90aGlzMTAuc2VsZWN0ZWQubGVuZ3RoID09PSAwID8gc2l6ZUluTWFwICsgJ3B4JyA6IE1hdGgubWF4KHRhZ3MgPyB0YWdzSGVpZ2h0ICsgKHRhZ3NIZWlnaHQgPiBzaXplSW5NYXAgPyA2IDogMCkgOiAwLCBzaXplSW5NYXApICsgJ3B4JztcbiAgICAgICAgaWYgKF90aGlzMTAudmlzaWJsZSAmJiBfdGhpczEwLmVtcHR5VGV4dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBfdGhpczEwLmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsICd1cGRhdGVQb3BwZXInKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICByZXNldEhvdmVySW5kZXg6IGZ1bmN0aW9uIHJlc2V0SG92ZXJJbmRleCgpIHtcbiAgICAgIHZhciBfdGhpczExID0gdGhpcztcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMxMS5tdWx0aXBsZSkge1xuICAgICAgICAgIF90aGlzMTEuaG92ZXJJbmRleCA9IF90aGlzMTEub3B0aW9ucy5pbmRleE9mKF90aGlzMTEuc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChfdGhpczExLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIF90aGlzMTEuaG92ZXJJbmRleCA9IE1hdGgubWluLmFwcGx5KG51bGwsIF90aGlzMTEuc2VsZWN0ZWQubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczExLm9wdGlvbnMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMxMS5ob3ZlckluZGV4ID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAzMDApO1xuICAgIH0sXG4gICAgaGFuZGxlT3B0aW9uU2VsZWN0OiBmdW5jdGlvbiBoYW5kbGVPcHRpb25TZWxlY3Qob3B0aW9uLCBieUNsaWNrKSB7XG4gICAgICB2YXIgX3RoaXMxMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9ICh0aGlzLnZhbHVlIHx8IFtdKS5zbGljZSgpO1xuICAgICAgICB2YXIgb3B0aW9uSW5kZXggPSB0aGlzLmdldFZhbHVlSW5kZXgodmFsdWUsIG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb25JbmRleCA+IC0xKSB7XG4gICAgICAgICAgdmFsdWUuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm11bHRpcGxlTGltaXQgPD0gMCB8fCB2YWx1ZS5sZW5ndGggPCB0aGlzLm11bHRpcGxlTGltaXQpIHtcbiAgICAgICAgICB2YWx1ZS5wdXNoKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSh2YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb24uY3JlYXRlZCkge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlKCcnKTtcbiAgICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gMjA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBvcHRpb24udmFsdWUpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2Uob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzU2lsZW50Qmx1ciA9IGJ5Q2xpY2s7XG4gICAgICB0aGlzLnNldFNvZnRGb2N1cygpO1xuICAgICAgaWYgKHRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczEyLnNjcm9sbFRvT3B0aW9uKG9wdGlvbik7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNldFNvZnRGb2N1czogZnVuY3Rpb24gc2V0U29mdEZvY3VzKCkge1xuICAgICAgdGhpcy5zb2Z0Rm9jdXMgPSB0cnVlO1xuICAgICAgdmFyIGlucHV0ID0gdGhpcy4kcmVmcy5pbnB1dCB8fCB0aGlzLiRyZWZzLnJlZmVyZW5jZTtcbiAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VmFsdWVJbmRleDogZnVuY3Rpb24gZ2V0VmFsdWVJbmRleCgpIHtcbiAgICAgIHZhciBhcnIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzWzFdO1xuXG4gICAgICB2YXIgaXNPYmplY3QgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IG9iamVjdF0nO1xuICAgICAgaWYgKCFpc09iamVjdCkge1xuICAgICAgICByZXR1cm4gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlS2V5ID0gdGhpcy52YWx1ZUtleTtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgICAgaWYgKE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShpdGVtLCB2YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKSh2YWx1ZSwgdmFsdWVLZXkpKSB7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9nZ2xlTWVudTogZnVuY3Rpb24gdG9nZ2xlTWVudSgpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3REaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5tZW51VmlzaWJsZU9uRm9jdXMpIHtcbiAgICAgICAgICB0aGlzLm1lbnVWaXNpYmxlT25Gb2N1cyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICh0aGlzLiRyZWZzLmlucHV0IHx8IHRoaXMuJHJlZnMucmVmZXJlbmNlKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3RPcHRpb246IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlTWVudSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVPcHRpb25TZWxlY3QodGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBkZWxldGVTZWxlY3RlZDogZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IFtdIDogJyc7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSh2YWx1ZSk7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NsZWFyJyk7XG4gICAgfSxcbiAgICBkZWxldGVUYWc6IGZ1bmN0aW9uIGRlbGV0ZVRhZyhldmVudCwgdGFnKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkLmluZGV4T2YodGFnKTtcbiAgICAgIGlmIChpbmRleCA+IC0xICYmICF0aGlzLnNlbGVjdERpc2FibGVkKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcbiAgICAgICAgdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3JlbW92ZS10YWcnLCB0YWcudmFsdWUpO1xuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBvbklucHV0Q2hhbmdlOiBmdW5jdGlvbiBvbklucHV0Q2hhbmdlKCkge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLnF1ZXJ5ICE9PSB0aGlzLnNlbGVjdGVkTGFiZWwpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uT3B0aW9uRGVzdHJveTogZnVuY3Rpb24gb25PcHRpb25EZXN0cm95KGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3VudC0tO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50LS07XG4gICAgICAgIHRoaXMub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVzZXRJbnB1dFdpZHRoOiBmdW5jdGlvbiByZXNldElucHV0V2lkdGgoKSB7XG4gICAgICB0aGlzLmlucHV0V2lkdGggPSB0aGlzLiRyZWZzLnJlZmVyZW5jZS4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfSxcbiAgICBoYW5kbGVSZXNpemU6IGZ1bmN0aW9uIGhhbmRsZVJlc2l6ZSgpIHtcbiAgICAgIHRoaXMucmVzZXRJbnB1dFdpZHRoKCk7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgfSxcbiAgICBjaGVja0RlZmF1bHRGaXJzdE9wdGlvbjogZnVuY3Rpb24gY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKSB7XG4gICAgICB0aGlzLmhvdmVySW5kZXggPSAtMTtcbiAgICAgIC8vIGhpZ2hsaWdodCB0aGUgY3JlYXRlZCBvcHRpb25cbiAgICAgIHZhciBoYXNDcmVhdGVkID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNbaV0uY3JlYXRlZCkge1xuICAgICAgICAgIGhhc0NyZWF0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChoYXNDcmVhdGVkKSByZXR1cm47XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pICE9PSB0aGlzLm9wdGlvbnMubGVuZ3RoOyArK19pKSB7XG4gICAgICAgIHZhciBvcHRpb24gPSB0aGlzLm9wdGlvbnNbX2ldO1xuICAgICAgICBpZiAodGhpcy5xdWVyeSkge1xuICAgICAgICAgIC8vIGhpZ2hsaWdodCBmaXJzdCBvcHRpb25zIHRoYXQgcGFzc2VzIHRoZSBmaWx0ZXJcbiAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmdyb3VwRGlzYWJsZWQgJiYgb3B0aW9uLnZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IF9pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGhpZ2hsaWdodCBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uXG4gICAgICAgICAgaWYgKG9wdGlvbi5pdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IF9pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRWYWx1ZUtleTogZnVuY3Rpb24gZ2V0VmFsdWVLZXkoaXRlbSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpICE9PSAnW29iamVjdCBvYmplY3RdJykge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoaXRlbS52YWx1ZSwgdGhpcy52YWx1ZUtleSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzMTMgPSB0aGlzO1xuXG4gICAgdGhpcy5jYWNoZWRQbGFjZUhvbGRlciA9IHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdGhpcy5wcm9wUGxhY2Vob2xkZXI7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgW10pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCAnJyk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWJvdW5jZWRPbklucHV0Q2hhbmdlID0gZGVib3VuY2VfZGVmYXVsdCgpKHRoaXMuZGVib3VuY2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMTMub25JbnB1dENoYW5nZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kZWJvdW5jZWRRdWVyeUNoYW5nZSA9IGRlYm91bmNlX2RlZmF1bHQoKSh0aGlzLmRlYm91bmNlLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMxMy5oYW5kbGVRdWVyeUNoYW5nZShlLnRhcmdldC52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRvbignaGFuZGxlT3B0aW9uQ2xpY2snLCB0aGlzLmhhbmRsZU9wdGlvblNlbGVjdCk7XG4gICAgdGhpcy4kb24oJ3NldFNlbGVjdGVkJywgdGhpcy5zZXRTZWxlY3RlZCk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzMTQgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG4gICAgfVxuICAgIE9iamVjdChyZXNpemVfZXZlbnRfW1wiYWRkUmVzaXplTGlzdGVuZXJcIl0pKHRoaXMuJGVsLCB0aGlzLmhhbmRsZVJlc2l6ZSk7XG5cbiAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG4gICAgaWYgKHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuJGVsKSB7XG4gICAgICB2YXIgc2l6ZU1hcCA9IHtcbiAgICAgICAgbWVkaXVtOiAzNixcbiAgICAgICAgc21hbGw6IDMyLFxuICAgICAgICBtaW5pOiAyOFxuICAgICAgfTtcbiAgICAgIHZhciBpbnB1dCA9IHJlZmVyZW5jZS4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIHRoaXMuaW5pdGlhbElucHV0SGVpZ2h0ID0gaW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IHx8IHNpemVNYXBbdGhpcy5zZWxlY3RTaXplXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVtb3RlICYmIHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgIH1cbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAocmVmZXJlbmNlICYmIHJlZmVyZW5jZS4kZWwpIHtcbiAgICAgICAgX3RoaXMxNC5pbnB1dFdpZHRoID0gcmVmZXJlbmNlLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNldFNlbGVjdGVkKCk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuJGVsICYmIHRoaXMuaGFuZGxlUmVzaXplKSBPYmplY3QocmVzaXplX2V2ZW50X1tcInJlbW92ZVJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy5oYW5kbGVSZXNpemUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNlbGVjdF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHNlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzBlNGFhZGU2X3JlbmRlcixcbiAgc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMGU0YWFkZTZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzZWxlY3RfYXBpOyB9XG5zZWxlY3RfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3NlbGVjdCA9IChzZWxlY3RfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3QvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX3NlbGVjdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19zZWxlY3QubmFtZSwgc3JjX3NlbGVjdCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19zZWxlY3QgPSAoc3JjX3NlbGVjdCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL29wdGlvbi9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfb3B0aW9uLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX29wdGlvbi5uYW1lLCBzcmNfb3B0aW9uKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX29wdGlvbiA9IChzcmNfb3B0aW9uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY2ODVlNWRlJlxudmFyIG9wdGlvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY2ODVlNWRlX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInVsXCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1ncm91cF9fd3JhcFwiXG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0LWdyb3VwX190aXRsZVwiIH0sIFtcbiAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwpKVxuICAgICAgXSksXG4gICAgICBfYyhcImxpXCIsIFtcbiAgICAgICAgX2MoXCJ1bFwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1ncm91cFwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbiAgICAgIF0pXG4gICAgXVxuICApXG59XG52YXIgb3B0aW9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjY4NWU1ZGVfc3RhdGljUmVuZGVyRm5zID0gW11cbm9wdGlvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY2ODVlNWRlX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY2ODVlNWRlJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi1ncm91cC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG9wdGlvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBuYW1lOiAnRWxPcHRpb25Hcm91cCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsT3B0aW9uR3JvdXAnLFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IFN0cmluZyxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IHRydWVcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICBkaXNhYmxlZDogZnVuY3Rpb24gZGlzYWJsZWQodmFsKSB7XG4gICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb24nLCAnaGFuZGxlR3JvdXBEaXNhYmxlZCcsIHZhbCk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBxdWVyeUNoYW5nZTogZnVuY3Rpb24gcXVlcnlDaGFuZ2UoKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSB0aGlzLiRjaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KHRoaXMuJGNoaWxkcmVuKSAmJiB0aGlzLiRjaGlsZHJlbi5zb21lKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi52aXNpYmxlID09PSB0cnVlO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy4kb24oJ3F1ZXJ5Q2hhbmdlJywgdGhpcy5xdWVyeUNoYW5nZSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbE9wdGlvbicsICdoYW5kbGVHcm91cERpc2FibGVkJywgdGhpcy5kaXNhYmxlZCk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19vcHRpb25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAob3B0aW9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLWdyb3VwLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIG9wdGlvbl9ncm91cF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19vcHRpb25fZ3JvdXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG9wdGlvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY2ODVlNWRlX3JlbmRlcixcbiAgb3B0aW9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjY4NWU1ZGVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBvcHRpb25fZ3JvdXBfYXBpOyB9XG5vcHRpb25fZ3JvdXBfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi1ncm91cC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgb3B0aW9uX2dyb3VwID0gKG9wdGlvbl9ncm91cF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL29wdGlvbi1ncm91cC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5vcHRpb25fZ3JvdXAuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChvcHRpb25fZ3JvdXAubmFtZSwgb3B0aW9uX2dyb3VwKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX29wdGlvbl9ncm91cCA9IChvcHRpb25fZ3JvdXApO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2E4NTlmYjQmXG52YXIgYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2E4NTlmYjRfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYnV0dG9uXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtYnV0dG9uXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICBfdm0udHlwZSA/IFwiZWwtYnV0dG9uLS1cIiArIF92bS50eXBlIDogXCJcIixcbiAgICAgICAgX3ZtLmJ1dHRvblNpemUgPyBcImVsLWJ1dHRvbi0tXCIgKyBfdm0uYnV0dG9uU2l6ZSA6IFwiXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBcImlzLWRpc2FibGVkXCI6IF92bS5idXR0b25EaXNhYmxlZCxcbiAgICAgICAgICBcImlzLWxvYWRpbmdcIjogX3ZtLmxvYWRpbmcsXG4gICAgICAgICAgXCJpcy1wbGFpblwiOiBfdm0ucGxhaW4sXG4gICAgICAgICAgXCJpcy1yb3VuZFwiOiBfdm0ucm91bmQsXG4gICAgICAgICAgXCJpcy1jaXJjbGVcIjogX3ZtLmNpcmNsZVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgZGlzYWJsZWQ6IF92bS5idXR0b25EaXNhYmxlZCB8fCBfdm0ubG9hZGluZyxcbiAgICAgICAgYXV0b2ZvY3VzOiBfdm0uYXV0b2ZvY3VzLFxuICAgICAgICB0eXBlOiBfdm0ubmF0aXZlVHlwZVxuICAgICAgfSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xpY2sgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLmxvYWRpbmcgPyBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWxvYWRpbmdcIiB9KSA6IF92bS5fZSgpLFxuICAgICAgX3ZtLmljb24gJiYgIV92bS5sb2FkaW5nID8gX2MoXCJpXCIsIHsgY2xhc3M6IF92bS5pY29uIH0pIDogX3ZtLl9lKCksXG4gICAgICBfdm0uJHNsb3RzLmRlZmF1bHQgPyBfYyhcInNwYW5cIiwgW192bS5fdChcImRlZmF1bHRcIildLCAyKSA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2E4NTlmYjRfc3RhdGljUmVuZGVyRm5zID0gW11cbmJ1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NhODU5ZmI0X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNhODU5ZmI0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEJ1dHRvbicsXG5cbiAgaW5qZWN0OiB7XG4gICAgZWxGb3JtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGVmYXVsdCdcbiAgICB9LFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBpY29uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgbmF0aXZlVHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2J1dHRvbidcbiAgICB9LFxuICAgIGxvYWRpbmc6IEJvb2xlYW4sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgcGxhaW46IEJvb2xlYW4sXG4gICAgYXV0b2ZvY3VzOiBCb29sZWFuLFxuICAgIHJvdW5kOiBCb29sZWFuLFxuICAgIGNpcmNsZTogQm9vbGVhblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBidXR0b25TaXplOiBmdW5jdGlvbiBidXR0b25TaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuICAgIGJ1dHRvbkRpc2FibGVkOiBmdW5jdGlvbiBidXR0b25EaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLnByb3BzRGF0YS5oYXNPd25Qcm9wZXJ0eSgnZGlzYWJsZWQnKSA/IHRoaXMuZGlzYWJsZWQgOiAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2dCkge1xuICAgICAgdGhpcy4kZW1pdCgnY2xpY2snLCBldnQpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGJ1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBidXR0b25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYTg1OWZiNF9yZW5kZXIsXG4gIGJ1dHRvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NhODU5ZmI0X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYnV0dG9uX2FwaTsgfVxuYnV0dG9uX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19idXR0b24gPSAoYnV0dG9uX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnV0dG9uL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19idXR0b24uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfYnV0dG9uLm5hbWUsIHNyY19idXR0b24pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfYnV0dG9uID0gKHNyY19idXR0b24pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q4NjYxZDAmXG52YXIgYnV0dG9uX2dyb3VwdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2Q4NjYxZDBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtYnV0dG9uLWdyb3VwXCIgfSwgW192bS5fdChcImRlZmF1bHRcIildLCAyKVxufVxudmFyIGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODY2MWQwX3N0YXRpY1JlbmRlckZucyA9IFtdXG5idXR0b25fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDg2NjFkMF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zZDg2NjFkMCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEJ1dHRvbkdyb3VwJ1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2J1dHRvbi9zcmMvYnV0dG9uLWdyb3VwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYnV0dG9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24vc3JjL2J1dHRvbi1ncm91cC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBidXR0b25fZ3JvdXBfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfYnV0dG9uX2dyb3VwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBidXR0b25fZ3JvdXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDg2NjFkMF9yZW5kZXIsXG4gIGJ1dHRvbl9ncm91cHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkODY2MWQwX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYnV0dG9uX2dyb3VwX2FwaTsgfVxuYnV0dG9uX2dyb3VwX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYnV0dG9uL3NyYy9idXR0b24tZ3JvdXAudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJ1dHRvbl9ncm91cCA9IChidXR0b25fZ3JvdXBfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9idXR0b24tZ3JvdXAvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYnV0dG9uX2dyb3VwLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoYnV0dG9uX2dyb3VwLm5hbWUsIGJ1dHRvbl9ncm91cCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19idXR0b25fZ3JvdXAgPSAoYnV0dG9uX2dyb3VwKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00OTNmZTM0ZSZcbnZhciB0YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ5M2ZlMzRlX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICB7XG4gICAgICAgICAgXCJlbC10YWJsZS0tZml0XCI6IF92bS5maXQsXG4gICAgICAgICAgXCJlbC10YWJsZS0tc3RyaXBlZFwiOiBfdm0uc3RyaXBlLFxuICAgICAgICAgIFwiZWwtdGFibGUtLWJvcmRlclwiOiBfdm0uYm9yZGVyIHx8IF92bS5pc0dyb3VwLFxuICAgICAgICAgIFwiZWwtdGFibGUtLWhpZGRlblwiOiBfdm0uaXNIaWRkZW4sXG4gICAgICAgICAgXCJlbC10YWJsZS0tZ3JvdXBcIjogX3ZtLmlzR3JvdXAsXG4gICAgICAgICAgXCJlbC10YWJsZS0tZmx1aWQtaGVpZ2h0XCI6IF92bS5tYXhIZWlnaHQsXG4gICAgICAgICAgXCJlbC10YWJsZS0tc2Nyb2xsYWJsZS14XCI6IF92bS5sYXlvdXQuc2Nyb2xsWCxcbiAgICAgICAgICBcImVsLXRhYmxlLS1zY3JvbGxhYmxlLXlcIjogX3ZtLmxheW91dC5zY3JvbGxZLFxuICAgICAgICAgIFwiZWwtdGFibGUtLWVuYWJsZS1yb3ctaG92ZXJcIjogIV92bS5zdG9yZS5zdGF0ZXMuaXNDb21wbGV4LFxuICAgICAgICAgIFwiZWwtdGFibGUtLWVuYWJsZS1yb3ctdHJhbnNpdGlvblwiOlxuICAgICAgICAgICAgKF92bS5zdG9yZS5zdGF0ZXMuZGF0YSB8fCBbXSkubGVuZ3RoICE9PSAwICYmXG4gICAgICAgICAgICAoX3ZtLnN0b3JlLnN0YXRlcy5kYXRhIHx8IFtdKS5sZW5ndGggPCAxMDBcbiAgICAgICAgfSxcbiAgICAgICAgX3ZtLnRhYmxlU2l6ZSA/IFwiZWwtdGFibGUtLVwiICsgX3ZtLnRhYmxlU2l6ZSA6IFwiXCJcbiAgICAgIF0sXG4gICAgICBvbjoge1xuICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBfdm0uaGFuZGxlTW91c2VMZWF2ZSgkZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHJlZjogXCJoaWRkZW5Db2x1bW5zXCIsIHN0YXRpY0NsYXNzOiBcImhpZGRlbi1jb2x1bW5zXCIgfSxcbiAgICAgICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgICAgICAyXG4gICAgICApLFxuICAgICAgX3ZtLnNob3dIZWFkZXJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vdXNld2hlZWxcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb3VzZXdoZWVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhbmRsZUhlYWRlckZvb3Rlck1vdXNld2hlZWwsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUhlYWRlckZvb3Rlck1vdXNld2hlZWxcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVmOiBcImhlYWRlcldyYXBwZXJcIixcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2hlYWRlci13cmFwcGVyXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwidGFibGUtaGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IFwidGFibGVIZWFkZXJcIixcbiAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5sYXlvdXQuYm9keVdpZHRoID8gX3ZtLmxheW91dC5ib2R5V2lkdGggKyBcInB4XCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgc3RvcmU6IF92bS5zdG9yZSxcbiAgICAgICAgICAgICAgICAgIGJvcmRlcjogX3ZtLmJvcmRlcixcbiAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC1zb3J0XCI6IF92bS5kZWZhdWx0U29ydFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6IFwiYm9keVdyYXBwZXJcIixcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fYm9keS13cmFwcGVyXCIsXG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIF92bS5sYXlvdXQuc2Nyb2xsWFxuICAgICAgICAgICAgICA/IFwiaXMtc2Nyb2xsaW5nLVwiICsgX3ZtLnNjcm9sbFBvc2l0aW9uXG4gICAgICAgICAgICAgIDogXCJpcy1zY3JvbGxpbmctbm9uZVwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdHlsZTogW192bS5ib2R5SGVpZ2h0XVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJ0YWJsZS1ib2R5XCIsIHtcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIHdpZHRoOiBfdm0uYm9keVdpZHRoXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgY29udGV4dDogX3ZtLmNvbnRleHQsXG4gICAgICAgICAgICAgIHN0b3JlOiBfdm0uc3RvcmUsXG4gICAgICAgICAgICAgIHN0cmlwZTogX3ZtLnN0cmlwZSxcbiAgICAgICAgICAgICAgXCJyb3ctY2xhc3MtbmFtZVwiOiBfdm0ucm93Q2xhc3NOYW1lLFxuICAgICAgICAgICAgICBcInJvdy1zdHlsZVwiOiBfdm0ucm93U3R5bGUsXG4gICAgICAgICAgICAgIGhpZ2hsaWdodDogX3ZtLmhpZ2hsaWdodEN1cnJlbnRSb3dcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICAhX3ZtLmRhdGEgfHwgX3ZtLmRhdGEubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVmOiBcImVtcHR5QmxvY2tcIixcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19lbXB0eS1ibG9ja1wiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5lbXB0eUJsb2NrU3R5bGVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZW1wdHktdGV4dFwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3QoXCJlbXB0eVwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0uZW1wdHlUZXh0IHx8IF92bS50KFwiZWwudGFibGUuZW1wdHlUZXh0XCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLiRzbG90cy5hcHBlbmRcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICByZWY6IFwiYXBwZW5kV3JhcHBlclwiLFxuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2FwcGVuZC13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfdm0uX3QoXCJhcHBlbmRcIildLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLnNob3dTdW1tYXJ5XG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kYXRhICYmIF92bS5kYXRhLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW91c2V3aGVlbFwiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vdXNld2hlZWxcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaGFuZGxlSGVhZGVyRm9vdGVyTW91c2V3aGVlbCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFuZGxlSGVhZGVyRm9vdGVyTW91c2V3aGVlbFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZWY6IFwiZm9vdGVyV3JhcHBlclwiLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZm9vdGVyLXdyYXBwZXJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJ0YWJsZS1mb290ZXJcIiwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLmxheW91dC5ib2R5V2lkdGggPyBfdm0ubGF5b3V0LmJvZHlXaWR0aCArIFwicHhcIiA6IFwiXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBzdG9yZTogX3ZtLnN0b3JlLFxuICAgICAgICAgICAgICAgICAgYm9yZGVyOiBfdm0uYm9yZGVyLFxuICAgICAgICAgICAgICAgICAgXCJzdW0tdGV4dFwiOiBfdm0uc3VtVGV4dCB8fCBfdm0udChcImVsLnRhYmxlLnN1bVRleHRcIiksXG4gICAgICAgICAgICAgICAgICBcInN1bW1hcnktbWV0aG9kXCI6IF92bS5zdW1tYXJ5TWV0aG9kLFxuICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LXNvcnRcIjogX3ZtLmRlZmF1bHRTb3J0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uZml4ZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vdXNld2hlZWxcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb3VzZXdoZWVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhbmRsZUZpeGVkTW91c2V3aGVlbCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFuZGxlRml4ZWRNb3VzZXdoZWVsXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlZjogXCJmaXhlZFdyYXBwZXJcIixcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkXCIsXG4gICAgICAgICAgICAgIHN0eWxlOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5sYXlvdXQuZml4ZWRXaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IF92bS5sYXlvdXQuZml4ZWRXaWR0aCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF92bS5maXhlZEhlaWdodFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uc2hvd0hlYWRlclxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICByZWY6IFwiZml4ZWRIZWFkZXJXcmFwcGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLWhlYWRlci13cmFwcGVyXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwidGFibGUtaGVhZGVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJmaXhlZFRhYmxlSGVhZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLmJvZHlXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkOiBcImxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBfdm0uYm9yZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZTogX3ZtLnN0b3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVmOiBcImZpeGVkQm9keVdyYXBwZXJcIixcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19maXhlZC1ib2R5LXdyYXBwZXJcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0b3A6IF92bS5sYXlvdXQuaGVhZGVySGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5maXhlZEJvZHlIZWlnaHRcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwidGFibGUtYm9keVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5ib2R5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBmaXhlZDogXCJsZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IF92bS5zdG9yZSxcbiAgICAgICAgICAgICAgICAgICAgICBzdHJpcGU6IF92bS5zdHJpcGUsXG4gICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBfdm0uaGlnaGxpZ2h0Q3VycmVudFJvdyxcbiAgICAgICAgICAgICAgICAgICAgICBcInJvdy1jbGFzcy1uYW1lXCI6IF92bS5yb3dDbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgXCJyb3ctc3R5bGVcIjogX3ZtLnJvd1N0eWxlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLiRzbG90cy5hcHBlbmRcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fYXBwZW5kLWd1dHRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBfdm0ubGF5b3V0LmFwcGVuZEhlaWdodCArIFwicHhcIiB9XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uc2hvd1N1bW1hcnlcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kYXRhICYmIF92bS5kYXRhLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiBcImZpeGVkRm9vdGVyV3JhcHBlclwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInRhYmxlLWZvb3RlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLmJvZHlXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkOiBcImxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiBfdm0uYm9yZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInN1bS10ZXh0XCI6IF92bS5zdW1UZXh0IHx8IF92bS50KFwiZWwudGFibGUuc3VtVGV4dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdW1tYXJ5LW1ldGhvZFwiOiBfdm0uc3VtbWFyeU1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IF92bS5zdG9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vdXNld2hlZWxcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb3VzZXdoZWVsXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhbmRsZUZpeGVkTW91c2V3aGVlbCxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFuZGxlRml4ZWRNb3VzZXdoZWVsXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlZjogXCJyaWdodEZpeGVkV3JhcHBlclwiLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZV9fZml4ZWQtcmlnaHRcIixcbiAgICAgICAgICAgICAgc3R5bGU6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLmxheW91dC5yaWdodEZpeGVkV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyBfdm0ubGF5b3V0LnJpZ2h0Rml4ZWRXaWR0aCArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICByaWdodDogX3ZtLmxheW91dC5zY3JvbGxZXG4gICAgICAgICAgICAgICAgICAgID8gKF92bS5ib3JkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLmxheW91dC5ndXR0ZXJXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0ubGF5b3V0Lmd1dHRlcldpZHRoIHx8IDApICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgX3ZtLmZpeGVkSGVpZ2h0XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5zaG93SGVhZGVyXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJyaWdodEZpeGVkSGVhZGVyV3JhcHBlclwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19maXhlZC1oZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInRhYmxlLWhlYWRlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWY6IFwicmlnaHRGaXhlZFRhYmxlSGVhZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLmJvZHlXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogX3ZtLmJvcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmU6IF92bS5zdG9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlZjogXCJyaWdodEZpeGVkQm9keVdyYXBwZXJcIixcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19maXhlZC1ib2R5LXdyYXBwZXJcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0b3A6IF92bS5sYXlvdXQuaGVhZGVySGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5maXhlZEJvZHlIZWlnaHRcbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwidGFibGUtYm9keVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IF92bS5ib2R5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBmaXhlZDogXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBfdm0uc3RvcmUsXG4gICAgICAgICAgICAgICAgICAgICAgc3RyaXBlOiBfdm0uc3RyaXBlLFxuICAgICAgICAgICAgICAgICAgICAgIFwicm93LWNsYXNzLW5hbWVcIjogX3ZtLnJvd0NsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBcInJvdy1zdHlsZVwiOiBfdm0ucm93U3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0OiBfdm0uaGlnaGxpZ2h0Q3VycmVudFJvd1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS4kc2xvdHMuYXBwZW5kXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2FwcGVuZC1ndXR0ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogX3ZtLmxheW91dC5hcHBlbmRIZWlnaHQgKyBcInB4XCIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLnNob3dTdW1tYXJ5XG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGF0YSAmJiBfdm0uZGF0YS5sZW5ndGggPiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJyaWdodEZpeGVkRm9vdGVyV3JhcHBlclwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19maXhlZC1mb290ZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInRhYmxlLWZvb3RlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLmJvZHlXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkOiBcInJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogX3ZtLmJvcmRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdW0tdGV4dFwiOiBfdm0uc3VtVGV4dCB8fCBfdm0udChcImVsLnRhYmxlLnN1bVRleHRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwic3VtbWFyeS1tZXRob2RcIjogX3ZtLnN1bW1hcnlNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlOiBfdm0uc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgcmVmOiBcInJpZ2h0Rml4ZWRQYXRjaFwiLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGVfX2ZpeGVkLXJpZ2h0LXBhdGNoXCIsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICB3aWR0aDogX3ZtLmxheW91dC5zY3JvbGxZID8gX3ZtLmxheW91dC5ndXR0ZXJXaWR0aCArIFwicHhcIiA6IFwiMFwiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IF92bS5sYXlvdXQuaGVhZGVySGVpZ2h0ICsgXCJweFwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0ucmVzaXplUHJveHlWaXNpYmxlLFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJyZXNpemVQcm94eVZpc2libGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgcmVmOiBcInJlc2l6ZVByb3h5XCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlX19jb2x1bW4tcmVzaXplLXByb3h5XCJcbiAgICAgIH0pXG4gICAgXVxuICApXG59XG52YXIgdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF80OTNmZTM0ZV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF80OTNmZTM0ZV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDkzZmUzNGUmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9jaGVja2JveFwiXG52YXIgY2hlY2tib3hfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XG52YXIgY2hlY2tib3hfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY2hlY2tib3hfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInRocm90dGxlLWRlYm91bmNlXCJcbnZhciBleHRlcm5hbF90aHJvdHRsZV9kZWJvdW5jZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcIm5vcm1hbGl6ZS13aGVlbFwiXG52YXIgZXh0ZXJuYWxfbm9ybWFsaXplX3doZWVsXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzgpO1xudmFyIGV4dGVybmFsX25vcm1hbGl6ZV93aGVlbF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9ub3JtYWxpemVfd2hlZWxfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvZGlyZWN0aXZlcy9tb3VzZXdoZWVsLmpzXG5cblxudmFyIGlzRmlyZWZveCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgPiAtMTtcblxudmFyIG1vdXNld2hlZWxfbW91c2V3aGVlbCA9IGZ1bmN0aW9uIG1vdXNld2hlZWwoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGlzRmlyZWZveCA/ICdET01Nb3VzZVNjcm9sbCcgOiAnbW91c2V3aGVlbCcsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgdmFyIG5vcm1hbGl6ZWQgPSBleHRlcm5hbF9ub3JtYWxpemVfd2hlZWxfZGVmYXVsdCgpKGV2ZW50KTtcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrLmFwcGx5KHRoaXMsIFtldmVudCwgbm9ybWFsaXplZF0pO1xuICAgIH0pO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkaXJlY3RpdmVzX21vdXNld2hlZWwgPSAoe1xuICBiaW5kOiBmdW5jdGlvbiBiaW5kKGVsLCBiaW5kaW5nKSB7XG4gICAgbW91c2V3aGVlbF9tb3VzZXdoZWVsKGVsLCBiaW5kaW5nLnZhbHVlKTtcbiAgfVxufSk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwidnVlXCJcbnZhciBleHRlcm5hbF92dWVfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcbnZhciBleHRlcm5hbF92dWVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfdnVlXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3V0aWwuanNcbnZhciB1dGlsX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cblxuXG52YXIgZ2V0Q2VsbCA9IGZ1bmN0aW9uIGdldENlbGwoZXZlbnQpIHtcbiAgdmFyIGNlbGwgPSBldmVudC50YXJnZXQ7XG5cbiAgd2hpbGUgKGNlbGwgJiYgY2VsbC50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdIVE1MJykge1xuICAgIGlmIChjZWxsLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ1REJykge1xuICAgICAgcmV0dXJuIGNlbGw7XG4gICAgfVxuICAgIGNlbGwgPSBjZWxsLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciB1dGlsX2lzT2JqZWN0ID0gZnVuY3Rpb24gaXNPYmplY3Qob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiB1dGlsX3R5cGVvZihvYmopKSA9PT0gJ29iamVjdCc7XG59O1xuXG52YXIgdXRpbF9vcmRlckJ5ID0gZnVuY3Rpb24gb3JkZXJCeShhcnJheSwgc29ydEtleSwgcmV2ZXJzZSwgc29ydE1ldGhvZCwgc29ydEJ5KSB7XG4gIGlmICghc29ydEtleSAmJiAhc29ydE1ldGhvZCAmJiAoIXNvcnRCeSB8fCBBcnJheS5pc0FycmF5KHNvcnRCeSkgJiYgIXNvcnRCeS5sZW5ndGgpKSB7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIGlmICh0eXBlb2YgcmV2ZXJzZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXZlcnNlID0gcmV2ZXJzZSA9PT0gJ2Rlc2NlbmRpbmcnID8gLTEgOiAxO1xuICB9IGVsc2Uge1xuICAgIHJldmVyc2UgPSByZXZlcnNlICYmIHJldmVyc2UgPCAwID8gLTEgOiAxO1xuICB9XG4gIHZhciBnZXRLZXkgPSBzb3J0TWV0aG9kID8gbnVsbCA6IGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICBpZiAoc29ydEJ5KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc29ydEJ5KSkge1xuICAgICAgICBzb3J0QnkgPSBbc29ydEJ5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzb3J0QnkubWFwKGZ1bmN0aW9uIChieSkge1xuICAgICAgICBpZiAodHlwZW9mIGJ5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkodmFsdWUsIGJ5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYnkodmFsdWUsIGluZGV4LCBhcnJheSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc29ydEtleSAhPT0gJyRrZXknKSB7XG4gICAgICBpZiAodXRpbF9pc09iamVjdCh2YWx1ZSkgJiYgJyR2YWx1ZScgaW4gdmFsdWUpIHZhbHVlID0gdmFsdWUuJHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gW3V0aWxfaXNPYmplY3QodmFsdWUpID8gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKHZhbHVlLCBzb3J0S2V5KSA6IHZhbHVlXTtcbiAgfTtcbiAgdmFyIGNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICBpZiAoc29ydE1ldGhvZCkge1xuICAgICAgcmV0dXJuIHNvcnRNZXRob2QoYS52YWx1ZSwgYi52YWx1ZSk7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhLmtleS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGEua2V5W2ldIDwgYi5rZXlbaV0pIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKGEua2V5W2ldID4gYi5rZXlbaV0pIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9O1xuICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAga2V5OiBnZXRLZXkgPyBnZXRLZXkodmFsdWUsIGluZGV4KSA6IG51bGxcbiAgICB9O1xuICB9KS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIG9yZGVyID0gY29tcGFyZShhLCBiKTtcbiAgICBpZiAoIW9yZGVyKSB7XG4gICAgICAvLyBtYWtlIHN0YWJsZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Tb3J0aW5nX2FsZ29yaXRobSNTdGFiaWxpdHlcbiAgICAgIG9yZGVyID0gYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgfVxuICAgIHJldHVybiBvcmRlciAqIHJldmVyc2U7XG4gIH0pLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICB9KTtcbn07XG5cbnZhciBnZXRDb2x1bW5CeUlkID0gZnVuY3Rpb24gZ2V0Q29sdW1uQnlJZCh0YWJsZSwgY29sdW1uSWQpIHtcbiAgdmFyIGNvbHVtbiA9IG51bGw7XG4gIHRhYmxlLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChpdGVtLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgY29sdW1uID0gaXRlbTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29sdW1uO1xufTtcblxudmFyIGdldENvbHVtbkJ5S2V5ID0gZnVuY3Rpb24gZ2V0Q29sdW1uQnlLZXkodGFibGUsIGNvbHVtbktleSkge1xuICB2YXIgY29sdW1uID0gbnVsbDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0YWJsZS5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSB0YWJsZS5jb2x1bW5zW2ldO1xuICAgIGlmIChpdGVtLmNvbHVtbktleSA9PT0gY29sdW1uS2V5KSB7XG4gICAgICBjb2x1bW4gPSBpdGVtO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb2x1bW47XG59O1xuXG52YXIgZ2V0Q29sdW1uQnlDZWxsID0gZnVuY3Rpb24gZ2V0Q29sdW1uQnlDZWxsKHRhYmxlLCBjZWxsKSB7XG4gIHZhciBtYXRjaGVzID0gKGNlbGwuY2xhc3NOYW1lIHx8ICcnKS5tYXRjaCgvZWwtdGFibGVfW15cXHNdKy9nbSk7XG4gIGlmIChtYXRjaGVzKSB7XG4gICAgcmV0dXJuIGdldENvbHVtbkJ5SWQodGFibGUsIG1hdGNoZXNbMF0pO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxudmFyIGdldFJvd0lkZW50aXR5ID0gZnVuY3Rpb24gZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpIHtcbiAgaWYgKCFyb3cpIHRocm93IG5ldyBFcnJvcigncm93IGlzIHJlcXVpcmVkIHdoZW4gZ2V0IHJvdyBpZGVudGl0eScpO1xuICBpZiAodHlwZW9mIHJvd0tleSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAocm93S2V5LmluZGV4T2YoJy4nKSA8IDApIHtcbiAgICAgIHJldHVybiByb3dbcm93S2V5XTtcbiAgICB9XG4gICAgdmFyIGtleSA9IHJvd0tleS5zcGxpdCgnLicpO1xuICAgIHZhciBjdXJyZW50ID0gcm93O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50ID0gY3VycmVudFtrZXlbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbiAgfSBlbHNlIGlmICh0eXBlb2Ygcm93S2V5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHJvd0tleS5jYWxsKG51bGwsIHJvdyk7XG4gIH1cbn07XG5cbnZhciBnZXRLZXlzTWFwID0gZnVuY3Rpb24gZ2V0S2V5c01hcChhcnJheSwgcm93S2V5KSB7XG4gIHZhciBhcnJheU1hcCA9IHt9O1xuICAoYXJyYXkgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHJvdywgaW5kZXgpIHtcbiAgICBhcnJheU1hcFtnZXRSb3dJZGVudGl0eShyb3csIHJvd0tleSldID0geyByb3c6IHJvdywgaW5kZXg6IGluZGV4IH07XG4gIH0pO1xuICByZXR1cm4gYXJyYXlNYXA7XG59O1xuXG5mdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgY29uZmlnKSB7XG4gIHZhciBvcHRpb25zID0ge307XG4gIHZhciBrZXkgPSB2b2lkIDA7XG4gIGZvciAoa2V5IGluIGRlZmF1bHRzKSB7XG4gICAgb3B0aW9uc1trZXldID0gZGVmYXVsdHNba2V5XTtcbiAgfVxuICBmb3IgKGtleSBpbiBjb25maWcpIHtcbiAgICBpZiAoaGFzT3duKGNvbmZpZywga2V5KSkge1xuICAgICAgdmFyIHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2lkdGgod2lkdGgpIHtcbiAgaWYgKHdpZHRoICE9PSB1bmRlZmluZWQpIHtcbiAgICB3aWR0aCA9IHBhcnNlSW50KHdpZHRoLCAxMCk7XG4gICAgaWYgKGlzTmFOKHdpZHRoKSkge1xuICAgICAgd2lkdGggPSBudWxsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gd2lkdGg7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWluV2lkdGgobWluV2lkdGgpIHtcbiAgaWYgKHR5cGVvZiBtaW5XaWR0aCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtaW5XaWR0aCA9IHBhcnNlV2lkdGgobWluV2lkdGgpO1xuICAgIGlmIChpc05hTihtaW5XaWR0aCkpIHtcbiAgICAgIG1pbldpZHRoID0gODA7XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW5XaWR0aDtcbn07XG5cbmZ1bmN0aW9uIHBhcnNlSGVpZ2h0KGhlaWdodCkge1xuICBpZiAodHlwZW9mIGhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG4gIGlmICh0eXBlb2YgaGVpZ2h0ID09PSAnc3RyaW5nJykge1xuICAgIGlmICgvXlxcZCsoPzpweCk/JC8udGVzdChoZWlnaHQpKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoaGVpZ2h0LCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmVkdXhqcy9yZWR1eC9ibG9iL21hc3Rlci9zcmMvY29tcG9zZS5qc1xuZnVuY3Rpb24gY29tcG9zZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIHJldHVybiBhcmc7XG4gICAgfTtcbiAgfVxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGEoYi5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b2dnbGVSb3dTdGF0dXMoc3RhdHVzQXJyLCByb3csIG5ld1ZhbCkge1xuICB2YXIgY2hhbmdlZCA9IGZhbHNlO1xuICB2YXIgaW5kZXggPSBzdGF0dXNBcnIuaW5kZXhPZihyb3cpO1xuICB2YXIgaW5jbHVkZWQgPSBpbmRleCAhPT0gLTE7XG5cbiAgdmFyIGFkZFJvdyA9IGZ1bmN0aW9uIGFkZFJvdygpIHtcbiAgICBzdGF0dXNBcnIucHVzaChyb3cpO1xuICAgIGNoYW5nZWQgPSB0cnVlO1xuICB9O1xuICB2YXIgcmVtb3ZlUm93ID0gZnVuY3Rpb24gcmVtb3ZlUm93KCkge1xuICAgIHN0YXR1c0Fyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGNoYW5nZWQgPSB0cnVlO1xuICB9O1xuXG4gIGlmICh0eXBlb2YgbmV3VmFsID09PSAnYm9vbGVhbicpIHtcbiAgICBpZiAobmV3VmFsICYmICFpbmNsdWRlZCkge1xuICAgICAgYWRkUm93KCk7XG4gICAgfSBlbHNlIGlmICghbmV3VmFsICYmIGluY2x1ZGVkKSB7XG4gICAgICByZW1vdmVSb3coKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGluY2x1ZGVkKSB7XG4gICAgICByZW1vdmVSb3coKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWRkUm93KCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBjaGFuZ2VkO1xufVxuXG5mdW5jdGlvbiB3YWxrVHJlZU5vZGUocm9vdCwgY2IpIHtcbiAgdmFyIGNoaWxkcmVuS2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAnY2hpbGRyZW4nO1xuICB2YXIgbGF6eUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogJ2hhc0NoaWxkcmVuJztcblxuICB2YXIgaXNOaWwgPSBmdW5jdGlvbiBpc05pbChhcnJheSkge1xuICAgIHJldHVybiAhKEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3dhbGtlcihwYXJlbnQsIGNoaWxkcmVuLCBsZXZlbCkge1xuICAgIGNiKHBhcmVudCwgY2hpbGRyZW4sIGxldmVsKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbVtsYXp5S2V5XSkge1xuICAgICAgICBjYihpdGVtLCBudWxsLCBsZXZlbCArIDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgY2hpbGRyZW4gPSBpdGVtW2NoaWxkcmVuS2V5XTtcbiAgICAgIGlmICghaXNOaWwoY2hpbGRyZW4pKSB7XG4gICAgICAgIF93YWxrZXIoaXRlbSwgY2hpbGRyZW4sIGxldmVsICsgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByb290LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICBpZiAoaXRlbVtsYXp5S2V5XSkge1xuICAgICAgY2IoaXRlbSwgbnVsbCwgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjaGlsZHJlbiA9IGl0ZW1bY2hpbGRyZW5LZXldO1xuICAgIGlmICghaXNOaWwoY2hpbGRyZW4pKSB7XG4gICAgICBfd2Fsa2VyKGl0ZW0sIGNoaWxkcmVuLCAwKTtcbiAgICB9XG4gIH0pO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvc3RvcmUvZXhwYW5kLmpzXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZXhwYW5kID0gKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVzOiB7XG4gICAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IGZhbHNlLFxuICAgICAgICBleHBhbmRSb3dzOiBbXVxuICAgICAgfVxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlRXhwYW5kUm93czogZnVuY3Rpb24gdXBkYXRlRXhwYW5kUm93cygpIHtcbiAgICAgIHZhciBfc3RhdGVzID0gdGhpcy5zdGF0ZXMsXG4gICAgICAgICAgX3N0YXRlcyRkYXRhID0gX3N0YXRlcy5kYXRhLFxuICAgICAgICAgIGRhdGEgPSBfc3RhdGVzJGRhdGEgPT09IHVuZGVmaW5lZCA/IFtdIDogX3N0YXRlcyRkYXRhLFxuICAgICAgICAgIHJvd0tleSA9IF9zdGF0ZXMucm93S2V5LFxuICAgICAgICAgIGRlZmF1bHRFeHBhbmRBbGwgPSBfc3RhdGVzLmRlZmF1bHRFeHBhbmRBbGwsXG4gICAgICAgICAgZXhwYW5kUm93cyA9IF9zdGF0ZXMuZXhwYW5kUm93cztcblxuICAgICAgaWYgKGRlZmF1bHRFeHBhbmRBbGwpIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93cyA9IGRhdGEuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAocm93S2V5KSB7XG4gICAgICAgIC8vIFRPRE/vvJrov5nph4znmoTku6PnoIHlj6/ku6XkvJjljJZcbiAgICAgICAgdmFyIGV4cGFuZFJvd3NNYXAgPSBnZXRLZXlzTWFwKGV4cGFuZFJvd3MsIHJvd0tleSk7XG4gICAgICAgIHRoaXMuc3RhdGVzLmV4cGFuZFJvd3MgPSBkYXRhLnJlZHVjZShmdW5jdGlvbiAocHJldiwgcm93KSB7XG4gICAgICAgICAgdmFyIHJvd0lkID0gZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpO1xuICAgICAgICAgIHZhciByb3dJbmZvID0gZXhwYW5kUm93c01hcFtyb3dJZF07XG4gICAgICAgICAgaWYgKHJvd0luZm8pIHtcbiAgICAgICAgICAgIHByZXYucHVzaChyb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgfSwgW10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93cyA9IFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9nZ2xlUm93RXhwYW5zaW9uOiBmdW5jdGlvbiB0b2dnbGVSb3dFeHBhbnNpb24ocm93LCBleHBhbmRlZCkge1xuICAgICAgdmFyIGNoYW5nZWQgPSB0b2dnbGVSb3dTdGF0dXModGhpcy5zdGF0ZXMuZXhwYW5kUm93cywgcm93LCBleHBhbmRlZCk7XG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgcm93LCB0aGlzLnN0YXRlcy5leHBhbmRSb3dzLnNsaWNlKCkpO1xuICAgICAgICB0aGlzLnNjaGVkdWxlTGF5b3V0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRFeHBhbmRSb3dLZXlzOiBmdW5jdGlvbiBzZXRFeHBhbmRSb3dLZXlzKHJvd0tleXMpIHtcbiAgICAgIHRoaXMuYXNzZXJ0Um93S2V5KCk7XG4gICAgICAvLyBUT0RP77ya6L+Z6YeM55qE5Luj56CB5Y+v5Lul5LyY5YyWXG4gICAgICB2YXIgX3N0YXRlczIgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICBkYXRhID0gX3N0YXRlczIuZGF0YSxcbiAgICAgICAgICByb3dLZXkgPSBfc3RhdGVzMi5yb3dLZXk7XG5cbiAgICAgIHZhciBrZXlzTWFwID0gZ2V0S2V5c01hcChkYXRhLCByb3dLZXkpO1xuICAgICAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93cyA9IHJvd0tleXMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXIpIHtcbiAgICAgICAgdmFyIGluZm8gPSBrZXlzTWFwW2N1cl07XG4gICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgcHJldi5wdXNoKGluZm8ucm93KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIFtdKTtcbiAgICB9LFxuICAgIGlzUm93RXhwYW5kZWQ6IGZ1bmN0aW9uIGlzUm93RXhwYW5kZWQocm93KSB7XG4gICAgICB2YXIgX3N0YXRlczMgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICBfc3RhdGVzMyRleHBhbmRSb3dzID0gX3N0YXRlczMuZXhwYW5kUm93cyxcbiAgICAgICAgICBleHBhbmRSb3dzID0gX3N0YXRlczMkZXhwYW5kUm93cyA9PT0gdW5kZWZpbmVkID8gW10gOiBfc3RhdGVzMyRleHBhbmRSb3dzLFxuICAgICAgICAgIHJvd0tleSA9IF9zdGF0ZXMzLnJvd0tleTtcblxuICAgICAgaWYgKHJvd0tleSkge1xuICAgICAgICB2YXIgZXhwYW5kTWFwID0gZ2V0S2V5c01hcChleHBhbmRSb3dzLCByb3dLZXkpO1xuICAgICAgICByZXR1cm4gISFleHBhbmRNYXBbZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHBhbmRSb3dzLmluZGV4T2Yocm93KSAhPT0gLTE7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3N0b3JlL2N1cnJlbnQuanNcblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHN0b3JlX2N1cnJlbnQgPSAoe1xuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0ZXM6IHtcbiAgICAgICAgLy8g5LiN5Y+v5ZON5bqU55qE77yM6K6+572uIGN1cnJlbnRSb3dLZXkg5pe277yMZGF0YSDkuI3kuIDlrprlrZjlnKjvvIzkuZ/orrjml6Dms5Xnrpflh7rmraPnoa7nmoQgY3VycmVudFJvd1xuICAgICAgICAvLyDmioror6XlgLznvJPlrZjkuIDkuIvvvIzlvZPnlKjmiLfngrnlh7vkv67mlLkgY3VycmVudFJvdyDml7bvvIzmioror6XlgLzph43nva7kuLogbnVsbFxuICAgICAgICBfY3VycmVudFJvd0tleTogbnVsbCxcbiAgICAgICAgY3VycmVudFJvdzogbnVsbFxuICAgICAgfVxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgc2V0Q3VycmVudFJvd0tleTogZnVuY3Rpb24gc2V0Q3VycmVudFJvd0tleShrZXkpIHtcbiAgICAgIHRoaXMuYXNzZXJ0Um93S2V5KCk7XG4gICAgICB0aGlzLnN0YXRlcy5fY3VycmVudFJvd0tleSA9IGtleTtcbiAgICAgIHRoaXMuc2V0Q3VycmVudFJvd0J5S2V5KGtleSk7XG4gICAgfSxcbiAgICByZXN0b3JlQ3VycmVudFJvd0tleTogZnVuY3Rpb24gcmVzdG9yZUN1cnJlbnRSb3dLZXkoKSB7XG4gICAgICB0aGlzLnN0YXRlcy5fY3VycmVudFJvd0tleSA9IG51bGw7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50Um93QnlLZXk6IGZ1bmN0aW9uIHNldEN1cnJlbnRSb3dCeUtleShrZXkpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgIHZhciBfc3RhdGVzJGRhdGEgPSBzdGF0ZXMuZGF0YSxcbiAgICAgICAgICBkYXRhID0gX3N0YXRlcyRkYXRhID09PSB1bmRlZmluZWQgPyBbXSA6IF9zdGF0ZXMkZGF0YSxcbiAgICAgICAgICByb3dLZXkgPSBzdGF0ZXMucm93S2V5O1xuXG4gICAgICB2YXIgY3VycmVudFJvdyA9IG51bGw7XG4gICAgICBpZiAocm93S2V5KSB7XG4gICAgICAgIGN1cnJlbnRSb3cgPSBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRcIl0pKGRhdGEsIGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGdldFJvd0lkZW50aXR5KGl0ZW0sIHJvd0tleSkgPT09IGtleTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzdGF0ZXMuY3VycmVudFJvdyA9IGN1cnJlbnRSb3c7XG4gICAgfSxcbiAgICB1cGRhdGVDdXJyZW50Um93OiBmdW5jdGlvbiB1cGRhdGVDdXJyZW50Um93KGN1cnJlbnRSb3cpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICB0YWJsZSA9IHRoaXMudGFibGU7XG5cbiAgICAgIHZhciBvbGRDdXJyZW50Um93ID0gc3RhdGVzLmN1cnJlbnRSb3c7XG4gICAgICBpZiAoY3VycmVudFJvdyAmJiBjdXJyZW50Um93ICE9PSBvbGRDdXJyZW50Um93KSB7XG4gICAgICAgIHN0YXRlcy5jdXJyZW50Um93ID0gY3VycmVudFJvdztcbiAgICAgICAgdGFibGUuJGVtaXQoJ2N1cnJlbnQtY2hhbmdlJywgY3VycmVudFJvdywgb2xkQ3VycmVudFJvdyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghY3VycmVudFJvdyAmJiBvbGRDdXJyZW50Um93KSB7XG4gICAgICAgIHN0YXRlcy5jdXJyZW50Um93ID0gbnVsbDtcbiAgICAgICAgdGFibGUuJGVtaXQoJ2N1cnJlbnQtY2hhbmdlJywgbnVsbCwgb2xkQ3VycmVudFJvdyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVDdXJyZW50Um93RGF0YTogZnVuY3Rpb24gdXBkYXRlQ3VycmVudFJvd0RhdGEoKSB7XG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXMsXG4gICAgICAgICAgdGFibGUgPSB0aGlzLnRhYmxlO1xuICAgICAgdmFyIHJvd0tleSA9IHN0YXRlcy5yb3dLZXksXG4gICAgICAgICAgX2N1cnJlbnRSb3dLZXkgPSBzdGF0ZXMuX2N1cnJlbnRSb3dLZXk7XG4gICAgICAvLyBkYXRhIOS4uiBudWxsIOaXtu+8jOino+aehOaXtueahOm7mOiupOWAvOS8muiiq+W/veeVpVxuXG4gICAgICB2YXIgZGF0YSA9IHN0YXRlcy5kYXRhIHx8IFtdO1xuICAgICAgdmFyIG9sZEN1cnJlbnRSb3cgPSBzdGF0ZXMuY3VycmVudFJvdztcblxuICAgICAgLy8g5b2TIGN1cnJlbnRSb3cg5LiN5ZyoIGRhdGEg5Lit5pe25bCd6K+V5pu05paw5pWw5o2uXG4gICAgICBpZiAoZGF0YS5pbmRleE9mKG9sZEN1cnJlbnRSb3cpID09PSAtMSAmJiBvbGRDdXJyZW50Um93KSB7XG4gICAgICAgIGlmIChyb3dLZXkpIHtcbiAgICAgICAgICB2YXIgY3VycmVudFJvd0tleSA9IGdldFJvd0lkZW50aXR5KG9sZEN1cnJlbnRSb3csIHJvd0tleSk7XG4gICAgICAgICAgdGhpcy5zZXRDdXJyZW50Um93QnlLZXkoY3VycmVudFJvd0tleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGVzLmN1cnJlbnRSb3cgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZXMuY3VycmVudFJvdyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRhYmxlLiRlbWl0KCdjdXJyZW50LWNoYW5nZScsIG51bGwsIG9sZEN1cnJlbnRSb3cpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKF9jdXJyZW50Um93S2V5KSB7XG4gICAgICAgIC8vIOaKiuWIneWni+aXtuS4i+iuvue9rueahCByb3dLZXkg6L2s5YyW5oiQIHJvd0RhdGFcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50Um93QnlLZXkoX2N1cnJlbnRSb3dLZXkpO1xuICAgICAgICB0aGlzLnJlc3RvcmVDdXJyZW50Um93S2V5KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3N0b3JlL3RyZWUuanNcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0cmVlID0gKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVzOiB7XG4gICAgICAgIC8vIGRlZmF1bHRFeHBhbmRBbGwg5a2Y5Zyo5LqOIGV4cGFuZC5qcyDkuK3vvIzov5nph4zkuI3ph43lpI3mt7vliqBcbiAgICAgICAgLy8g5Zyo5bGV5byA6KGM5Lit77yMZXhwYW5kUm93S2V5cyDkvJrooqvovazljJbmiJAgZXhwYW5kUm93c++8jGV4cGFuZFJvd0tleXMg6L+Z5Liq5bGe5oCn5Y+q5piv6K6w5b2V5LqGIFRyZWVUYWJsZSDooYznmoTlsZXlvIBcbiAgICAgICAgLy8gVE9ETzog5ouG5YiG5Li654us56uL55qEIFRyZWVUYWJsZe+8jOe7n+S4gOeUqOazlVxuICAgICAgICBleHBhbmRSb3dLZXlzOiBbXSxcbiAgICAgICAgdHJlZURhdGE6IHt9LFxuICAgICAgICBpbmRlbnQ6IDE2LFxuICAgICAgICBsYXp5OiBmYWxzZSxcbiAgICAgICAgbGF6eVRyZWVOb2RlTWFwOiB7fSxcbiAgICAgICAgbGF6eUNvbHVtbklkZW50aWZpZXI6ICdoYXNDaGlsZHJlbicsXG4gICAgICAgIGNoaWxkcmVuQ29sdW1uTmFtZTogJ2NoaWxkcmVuJ1xuICAgICAgfVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIC8vIOW1jOWFpeWei+eahOaVsOaNru+8jHdhdGNoIOaXoOazleaYr+ajgOa1i+WIsOWPmOWMliBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNDk5OFxuICAgIC8vIFRPRE86IOS9v+eUqCBjb21wdXRlZCDop6PlhrPor6Xpl67popjvvIzmmK/lkKbkvJrpgKDmiJDmgKfog73pl67popjvvJ9cbiAgICAvLyBAcmV0dXJuIHsgaWQ6IHsgbGV2ZWwsIGNoaWxkcmVuIH0gfVxuICAgIG5vcm1hbGl6ZWREYXRhOiBmdW5jdGlvbiBub3JtYWxpemVkRGF0YSgpIHtcbiAgICAgIGlmICghdGhpcy5zdGF0ZXMucm93S2V5KSByZXR1cm4ge307XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuc3RhdGVzLmRhdGEgfHwgW107XG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemUoZGF0YSk7XG4gICAgfSxcblxuICAgIC8vIEByZXR1cm4geyBpZDogeyBjaGlsZHJlbiB9IH1cbiAgICAvLyDpkojlr7nmh5LliqDovb3nmoTmg4XlvaLvvIzkuI3lpITnkIbltYzlpZfmlbDmja5cbiAgICBub3JtYWxpemVkTGF6eU5vZGU6IGZ1bmN0aW9uIG5vcm1hbGl6ZWRMYXp5Tm9kZSgpIHtcbiAgICAgIHZhciBfc3RhdGVzID0gdGhpcy5zdGF0ZXMsXG4gICAgICAgICAgcm93S2V5ID0gX3N0YXRlcy5yb3dLZXksXG4gICAgICAgICAgbGF6eVRyZWVOb2RlTWFwID0gX3N0YXRlcy5sYXp5VHJlZU5vZGVNYXAsXG4gICAgICAgICAgbGF6eUNvbHVtbklkZW50aWZpZXIgPSBfc3RhdGVzLmxhenlDb2x1bW5JZGVudGlmaWVyO1xuXG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGxhenlUcmVlTm9kZU1hcCk7XG4gICAgICB2YXIgcmVzID0ge307XG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSByZXR1cm4gcmVzO1xuICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKGxhenlUcmVlTm9kZU1hcFtrZXldLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBpdGVtID0geyBjaGlsZHJlbjogW10gfTtcbiAgICAgICAgICBsYXp5VHJlZU5vZGVNYXBba2V5XS5mb3JFYWNoKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Um93S2V5ID0gZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpO1xuICAgICAgICAgICAgaXRlbS5jaGlsZHJlbi5wdXNoKGN1cnJlbnRSb3dLZXkpO1xuICAgICAgICAgICAgaWYgKHJvd1tsYXp5Q29sdW1uSWRlbnRpZmllcl0gJiYgIXJlc1tjdXJyZW50Um93S2V5XSkge1xuICAgICAgICAgICAgICByZXNbY3VycmVudFJvd0tleV0gPSB7IGNoaWxkcmVuOiBbXSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlc1trZXldID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG5vcm1hbGl6ZWREYXRhOiAndXBkYXRlVHJlZURhdGEnLFxuICAgIG5vcm1hbGl6ZWRMYXp5Tm9kZTogJ3VwZGF0ZVRyZWVEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShkYXRhKSB7XG4gICAgICB2YXIgX3N0YXRlczIgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICBjaGlsZHJlbkNvbHVtbk5hbWUgPSBfc3RhdGVzMi5jaGlsZHJlbkNvbHVtbk5hbWUsXG4gICAgICAgICAgbGF6eUNvbHVtbklkZW50aWZpZXIgPSBfc3RhdGVzMi5sYXp5Q29sdW1uSWRlbnRpZmllcixcbiAgICAgICAgICByb3dLZXkgPSBfc3RhdGVzMi5yb3dLZXksXG4gICAgICAgICAgbGF6eSA9IF9zdGF0ZXMyLmxhenk7XG5cbiAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgIHdhbGtUcmVlTm9kZShkYXRhLCBmdW5jdGlvbiAocGFyZW50LCBjaGlsZHJlbiwgbGV2ZWwpIHtcbiAgICAgICAgdmFyIHBhcmVudElkID0gZ2V0Um93SWRlbnRpdHkocGFyZW50LCByb3dLZXkpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICByZXNbcGFyZW50SWRdID0ge1xuICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLm1hcChmdW5jdGlvbiAocm93KSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRSb3dJZGVudGl0eShyb3csIHJvd0tleSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGxldmVsOiBsZXZlbFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAobGF6eSkge1xuICAgICAgICAgIC8vIOW9kyBjaGlsZHJlbiDkuI3lrZjlnKjkuJQgbGF6eSDkuLogdHJ1Ze+8jOivpeiKgueCueWNs+S4uuaHkuWKoOi9veeahOiKgueCuVxuICAgICAgICAgIHJlc1twYXJlbnRJZF0gPSB7XG4gICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICBsYXp5OiB0cnVlLFxuICAgICAgICAgICAgbGV2ZWw6IGxldmVsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSwgY2hpbGRyZW5Db2x1bW5OYW1lLCBsYXp5Q29sdW1uSWRlbnRpZmllcik7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgdXBkYXRlVHJlZURhdGE6IGZ1bmN0aW9uIHVwZGF0ZVRyZWVEYXRhKCkge1xuICAgICAgdmFyIG5lc3RlZCA9IHRoaXMubm9ybWFsaXplZERhdGE7XG4gICAgICB2YXIgbm9ybWFsaXplZExhenlOb2RlID0gdGhpcy5ub3JtYWxpemVkTGF6eU5vZGU7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG5lc3RlZCk7XG4gICAgICB2YXIgbmV3VHJlZURhdGEgPSB7fTtcbiAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIgX3N0YXRlczMgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICAgIG9sZFRyZWVEYXRhID0gX3N0YXRlczMudHJlZURhdGEsXG4gICAgICAgICAgICBkZWZhdWx0RXhwYW5kQWxsID0gX3N0YXRlczMuZGVmYXVsdEV4cGFuZEFsbCxcbiAgICAgICAgICAgIGV4cGFuZFJvd0tleXMgPSBfc3RhdGVzMy5leHBhbmRSb3dLZXlzLFxuICAgICAgICAgICAgbGF6eSA9IF9zdGF0ZXMzLmxhenk7XG5cbiAgICAgICAgdmFyIHJvb3RMYXp5Um93S2V5cyA9IFtdO1xuICAgICAgICB2YXIgZ2V0RXhwYW5kZWQgPSBmdW5jdGlvbiBnZXRFeHBhbmRlZChvbGRWYWx1ZSwga2V5KSB7XG4gICAgICAgICAgdmFyIGluY2x1ZGVkID0gZGVmYXVsdEV4cGFuZEFsbCB8fCBleHBhbmRSb3dLZXlzICYmIGV4cGFuZFJvd0tleXMuaW5kZXhPZihrZXkpICE9PSAtMTtcbiAgICAgICAgICByZXR1cm4gISEob2xkVmFsdWUgJiYgb2xkVmFsdWUuZXhwYW5kZWQgfHwgaW5jbHVkZWQpO1xuICAgICAgICB9O1xuICAgICAgICAvLyDlkIjlubYgZXhwYW5kZWQg5LiOIGRpc3BsYXnvvIznoa7kv53mlbDmja7liLfmlrDlkI7vvIznirbmgIHkuI3lj5hcbiAgICAgICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRUcmVlRGF0YVtrZXldO1xuICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IF9leHRlbmRzKHt9LCBuZXN0ZWRba2V5XSk7XG4gICAgICAgICAgbmV3VmFsdWUuZXhwYW5kZWQgPSBnZXRFeHBhbmRlZChvbGRWYWx1ZSwga2V5KTtcbiAgICAgICAgICBpZiAobmV3VmFsdWUubGF6eSkge1xuICAgICAgICAgICAgdmFyIF9yZWYgPSBvbGRWYWx1ZSB8fCB7fSxcbiAgICAgICAgICAgICAgICBfcmVmJGxvYWRlZCA9IF9yZWYubG9hZGVkLFxuICAgICAgICAgICAgICAgIGxvYWRlZCA9IF9yZWYkbG9hZGVkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkbG9hZGVkLFxuICAgICAgICAgICAgICAgIF9yZWYkbG9hZGluZyA9IF9yZWYubG9hZGluZyxcbiAgICAgICAgICAgICAgICBsb2FkaW5nID0gX3JlZiRsb2FkaW5nID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkbG9hZGluZztcblxuICAgICAgICAgICAgbmV3VmFsdWUubG9hZGVkID0gISFsb2FkZWQ7XG4gICAgICAgICAgICBuZXdWYWx1ZS5sb2FkaW5nID0gISFsb2FkaW5nO1xuICAgICAgICAgICAgcm9vdExhenlSb3dLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3VHJlZURhdGFba2V5XSA9IG5ld1ZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8g5qC55o2u5oeS5Yqg6L295pWw5o2u5pu05pawIHRyZWVEYXRhXG4gICAgICAgIHZhciBsYXp5S2V5cyA9IE9iamVjdC5rZXlzKG5vcm1hbGl6ZWRMYXp5Tm9kZSk7XG4gICAgICAgIGlmIChsYXp5ICYmIGxhenlLZXlzLmxlbmd0aCAmJiByb290TGF6eVJvd0tleXMubGVuZ3RoKSB7XG4gICAgICAgICAgbGF6eUtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBvbGRUcmVlRGF0YVtrZXldO1xuICAgICAgICAgICAgdmFyIGxhenlOb2RlQ2hpbGRyZW4gPSBub3JtYWxpemVkTGF6eU5vZGVba2V5XS5jaGlsZHJlbjtcbiAgICAgICAgICAgIGlmIChyb290TGF6eVJvd0tleXMuaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAvLyDmh5LliqDovb3nmoQgcm9vdCDoioLngrnvvIzmm7TmlrDkuIDkuIvljp/mnInnmoTmlbDmja7vvIzljp/mnaXnmoQgY2hpbGRyZW4g5LiA5a6a5piv56m65pWw57uEXG4gICAgICAgICAgICAgIGlmIChuZXdUcmVlRGF0YVtrZXldLmNoaWxkcmVuLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW0VsVGFibGVdY2hpbGRyZW4gbXVzdCBiZSBhbiBlbXB0eSBhcnJheS4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBuZXdUcmVlRGF0YVtrZXldLmNoaWxkcmVuID0gbGF6eU5vZGVDaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBfcmVmMiA9IG9sZFZhbHVlIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgX3JlZjIkbG9hZGVkID0gX3JlZjIubG9hZGVkLFxuICAgICAgICAgICAgICAgICAgbG9hZGVkID0gX3JlZjIkbG9hZGVkID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYyJGxvYWRlZCxcbiAgICAgICAgICAgICAgICAgIF9yZWYyJGxvYWRpbmcgPSBfcmVmMi5sb2FkaW5nLFxuICAgICAgICAgICAgICAgICAgbG9hZGluZyA9IF9yZWYyJGxvYWRpbmcgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZjIkbG9hZGluZztcblxuICAgICAgICAgICAgICBuZXdUcmVlRGF0YVtrZXldID0ge1xuICAgICAgICAgICAgICAgIGxhenk6IHRydWUsXG4gICAgICAgICAgICAgICAgbG9hZGVkOiAhIWxvYWRlZCxcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiAhIWxvYWRpbmcsXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGdldEV4cGFuZGVkKG9sZFZhbHVlLCBrZXkpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBsYXp5Tm9kZUNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGxldmVsOiAnJ1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlcy50cmVlRGF0YSA9IG5ld1RyZWVEYXRhO1xuICAgICAgdGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKTtcbiAgICB9LFxuICAgIHVwZGF0ZVRyZWVFeHBhbmRLZXlzOiBmdW5jdGlvbiB1cGRhdGVUcmVlRXhwYW5kS2V5cyh2YWx1ZSkge1xuICAgICAgdGhpcy5zdGF0ZXMuZXhwYW5kUm93S2V5cyA9IHZhbHVlO1xuICAgICAgdGhpcy51cGRhdGVUcmVlRGF0YSgpO1xuICAgIH0sXG4gICAgdG9nZ2xlVHJlZUV4cGFuc2lvbjogZnVuY3Rpb24gdG9nZ2xlVHJlZUV4cGFuc2lvbihyb3csIGV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmFzc2VydFJvd0tleSgpO1xuXG4gICAgICB2YXIgX3N0YXRlczQgPSB0aGlzLnN0YXRlcyxcbiAgICAgICAgICByb3dLZXkgPSBfc3RhdGVzNC5yb3dLZXksXG4gICAgICAgICAgdHJlZURhdGEgPSBfc3RhdGVzNC50cmVlRGF0YTtcblxuICAgICAgdmFyIGlkID0gZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpO1xuICAgICAgdmFyIGRhdGEgPSBpZCAmJiB0cmVlRGF0YVtpZF07XG4gICAgICBpZiAoaWQgJiYgZGF0YSAmJiAnZXhwYW5kZWQnIGluIGRhdGEpIHtcbiAgICAgICAgdmFyIG9sZEV4cGFuZGVkID0gZGF0YS5leHBhbmRlZDtcbiAgICAgICAgZXhwYW5kZWQgPSB0eXBlb2YgZXhwYW5kZWQgPT09ICd1bmRlZmluZWQnID8gIWRhdGEuZXhwYW5kZWQgOiBleHBhbmRlZDtcbiAgICAgICAgdHJlZURhdGFbaWRdLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIGlmIChvbGRFeHBhbmRlZCAhPT0gZXhwYW5kZWQpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgcm93LCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxvYWRPclRvZ2dsZTogZnVuY3Rpb24gbG9hZE9yVG9nZ2xlKHJvdykge1xuICAgICAgdGhpcy5hc3NlcnRSb3dLZXkoKTtcbiAgICAgIHZhciBfc3RhdGVzNSA9IHRoaXMuc3RhdGVzLFxuICAgICAgICAgIGxhenkgPSBfc3RhdGVzNS5sYXp5LFxuICAgICAgICAgIHRyZWVEYXRhID0gX3N0YXRlczUudHJlZURhdGEsXG4gICAgICAgICAgcm93S2V5ID0gX3N0YXRlczUucm93S2V5O1xuXG4gICAgICB2YXIgaWQgPSBnZXRSb3dJZGVudGl0eShyb3csIHJvd0tleSk7XG4gICAgICB2YXIgZGF0YSA9IHRyZWVEYXRhW2lkXTtcbiAgICAgIGlmIChsYXp5ICYmIGRhdGEgJiYgJ2xvYWRlZCcgaW4gZGF0YSAmJiAhZGF0YS5sb2FkZWQpIHtcbiAgICAgICAgdGhpcy5sb2FkRGF0YShyb3csIGlkLCBkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9nZ2xlVHJlZUV4cGFuc2lvbihyb3cpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbG9hZERhdGE6IGZ1bmN0aW9uIGxvYWREYXRhKHJvdywga2V5LCB0cmVlTm9kZSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGxvYWQgPSB0aGlzLnRhYmxlLmxvYWQ7XG4gICAgICB2YXIgcmF3VHJlZURhdGEgPSB0aGlzLnN0YXRlcy50cmVlRGF0YTtcblxuICAgICAgaWYgKGxvYWQgJiYgIXJhd1RyZWVEYXRhW2tleV0ubG9hZGVkKSB7XG4gICAgICAgIHJhd1RyZWVEYXRhW2tleV0ubG9hZGluZyA9IHRydWU7XG4gICAgICAgIGxvYWQocm93LCB0cmVlTm9kZSwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignW0VsVGFibGVdIGRhdGEgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgX3N0YXRlczYgPSBfdGhpcy5zdGF0ZXMsXG4gICAgICAgICAgICAgIGxhenlUcmVlTm9kZU1hcCA9IF9zdGF0ZXM2LmxhenlUcmVlTm9kZU1hcCxcbiAgICAgICAgICAgICAgdHJlZURhdGEgPSBfc3RhdGVzNi50cmVlRGF0YTtcblxuICAgICAgICAgIHRyZWVEYXRhW2tleV0ubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRyZWVEYXRhW2tleV0ubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICB0cmVlRGF0YVtrZXldLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIF90aGlzLiRzZXQobGF6eVRyZWVOb2RlTWFwLCBrZXksIGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfdGhpcy50YWJsZS4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHJvdywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9zdG9yZS93YXRjaGVyLmpzXG5cblxuXG5cblxuXG5cbnZhciB3YXRjaGVyX3NvcnREYXRhID0gZnVuY3Rpb24gc29ydERhdGEoZGF0YSwgc3RhdGVzKSB7XG4gIHZhciBzb3J0aW5nQ29sdW1uID0gc3RhdGVzLnNvcnRpbmdDb2x1bW47XG4gIGlmICghc29ydGluZ0NvbHVtbiB8fCB0eXBlb2Ygc29ydGluZ0NvbHVtbi5zb3J0YWJsZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICByZXR1cm4gdXRpbF9vcmRlckJ5KGRhdGEsIHN0YXRlcy5zb3J0UHJvcCwgc3RhdGVzLnNvcnRPcmRlciwgc29ydGluZ0NvbHVtbi5zb3J0TWV0aG9kLCBzb3J0aW5nQ29sdW1uLnNvcnRCeSk7XG59O1xuXG52YXIgZG9GbGF0dGVuQ29sdW1ucyA9IGZ1bmN0aW9uIGRvRmxhdHRlbkNvbHVtbnMoY29sdW1ucykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbi5jaGlsZHJlbikge1xuICAgICAgcmVzdWx0LnB1c2guYXBwbHkocmVzdWx0LCBkb0ZsYXR0ZW5Db2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB3YXRjaGVyID0gKGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEuZXh0ZW5kKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdGVzOiB7XG4gICAgICAgIC8vIDMuMCDniYjmnKzlkI7opoHmsYLlv4Xpobvorr7nva7or6XlsZ7mgKdcbiAgICAgICAgcm93S2V5OiBudWxsLFxuXG4gICAgICAgIC8vIOa4suafk+eahOaVsOaNruadpea6kO+8jOaYr+WvuSB0YWJsZSDkuK3nmoQgZGF0YSDov4fmu6TmjpLluo/lkI7nmoTnu5PmnpxcbiAgICAgICAgZGF0YTogW10sXG5cbiAgICAgICAgLy8g5piv5ZCm5YyF5ZCr5Zu65a6a5YiXXG4gICAgICAgIGlzQ29tcGxleDogZmFsc2UsXG5cbiAgICAgICAgLy8g5YiXXG4gICAgICAgIF9jb2x1bW5zOiBbXSwgLy8g5LiN5Y+v5ZON5bqU55qEXG4gICAgICAgIG9yaWdpbkNvbHVtbnM6IFtdLFxuICAgICAgICBjb2x1bW5zOiBbXSxcbiAgICAgICAgZml4ZWRDb2x1bW5zOiBbXSxcbiAgICAgICAgcmlnaHRGaXhlZENvbHVtbnM6IFtdLFxuICAgICAgICBsZWFmQ29sdW1uczogW10sXG4gICAgICAgIGZpeGVkTGVhZkNvbHVtbnM6IFtdLFxuICAgICAgICByaWdodEZpeGVkTGVhZkNvbHVtbnM6IFtdLFxuICAgICAgICBsZWFmQ29sdW1uc0xlbmd0aDogMCxcbiAgICAgICAgZml4ZWRMZWFmQ29sdW1uc0xlbmd0aDogMCxcbiAgICAgICAgcmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoOiAwLFxuXG4gICAgICAgIC8vIOmAieaLqVxuICAgICAgICBpc0FsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgICAgcmVzZXJ2ZVNlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgIHNlbGVjdE9uSW5kZXRlcm1pbmF0ZTogZmFsc2UsXG4gICAgICAgIHNlbGVjdGFibGU6IG51bGwsXG5cbiAgICAgICAgLy8g6L+H5rukXG4gICAgICAgIGZpbHRlcnM6IHt9LCAvLyDkuI3lj6/lk43lupTnmoRcbiAgICAgICAgZmlsdGVyZWREYXRhOiBudWxsLFxuXG4gICAgICAgIC8vIOaOkuW6j1xuICAgICAgICBzb3J0aW5nQ29sdW1uOiBudWxsLFxuICAgICAgICBzb3J0UHJvcDogbnVsbCxcbiAgICAgICAgc29ydE9yZGVyOiBudWxsLFxuXG4gICAgICAgIGhvdmVyUm93OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuXG4gIG1peGluczogW2V4cGFuZCwgc3RvcmVfY3VycmVudCwgdHJlZV0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIOajgOafpSByb3dLZXkg5piv5ZCm5a2Y5ZyoXG4gICAgYXNzZXJ0Um93S2V5OiBmdW5jdGlvbiBhc3NlcnRSb3dLZXkoKSB7XG4gICAgICB2YXIgcm93S2V5ID0gdGhpcy5zdGF0ZXMucm93S2V5O1xuICAgICAgaWYgKCFyb3dLZXkpIHRocm93IG5ldyBFcnJvcignW0VsVGFibGVdIHByb3Agcm93LWtleSBpcyByZXF1aXJlZCcpO1xuICAgIH0sXG5cblxuICAgIC8vIOabtOaWsOWIl1xuICAgIHVwZGF0ZUNvbHVtbnM6IGZ1bmN0aW9uIHVwZGF0ZUNvbHVtbnMoKSB7XG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICB2YXIgX2NvbHVtbnMgPSBzdGF0ZXMuX2NvbHVtbnMgfHwgW107XG4gICAgICBzdGF0ZXMuZml4ZWRDb2x1bW5zID0gX2NvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5maXhlZCA9PT0gdHJ1ZSB8fCBjb2x1bW4uZml4ZWQgPT09ICdsZWZ0JztcbiAgICAgIH0pO1xuICAgICAgc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zID0gX2NvbHVtbnMuZmlsdGVyKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5maXhlZCA9PT0gJ3JpZ2h0JztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdGVzLmZpeGVkQ29sdW1ucy5sZW5ndGggPiAwICYmIF9jb2x1bW5zWzBdICYmIF9jb2x1bW5zWzBdLnR5cGUgPT09ICdzZWxlY3Rpb24nICYmICFfY29sdW1uc1swXS5maXhlZCkge1xuICAgICAgICBfY29sdW1uc1swXS5maXhlZCA9IHRydWU7XG4gICAgICAgIHN0YXRlcy5maXhlZENvbHVtbnMudW5zaGlmdChfY29sdW1uc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBub3RGaXhlZENvbHVtbnMgPSBfY29sdW1ucy5maWx0ZXIoZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gIWNvbHVtbi5maXhlZDtcbiAgICAgIH0pO1xuICAgICAgc3RhdGVzLm9yaWdpbkNvbHVtbnMgPSBbXS5jb25jYXQoc3RhdGVzLmZpeGVkQ29sdW1ucykuY29uY2F0KG5vdEZpeGVkQ29sdW1ucykuY29uY2F0KHN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucyk7XG5cbiAgICAgIHZhciBsZWFmQ29sdW1ucyA9IGRvRmxhdHRlbkNvbHVtbnMobm90Rml4ZWRDb2x1bW5zKTtcbiAgICAgIHZhciBmaXhlZExlYWZDb2x1bW5zID0gZG9GbGF0dGVuQ29sdW1ucyhzdGF0ZXMuZml4ZWRDb2x1bW5zKTtcbiAgICAgIHZhciByaWdodEZpeGVkTGVhZkNvbHVtbnMgPSBkb0ZsYXR0ZW5Db2x1bW5zKHN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucyk7XG5cbiAgICAgIHN0YXRlcy5sZWFmQ29sdW1uc0xlbmd0aCA9IGxlYWZDb2x1bW5zLmxlbmd0aDtcbiAgICAgIHN0YXRlcy5maXhlZExlYWZDb2x1bW5zTGVuZ3RoID0gZml4ZWRMZWFmQ29sdW1ucy5sZW5ndGg7XG4gICAgICBzdGF0ZXMucmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoID0gcmlnaHRGaXhlZExlYWZDb2x1bW5zLmxlbmd0aDtcblxuICAgICAgc3RhdGVzLmNvbHVtbnMgPSBbXS5jb25jYXQoZml4ZWRMZWFmQ29sdW1ucykuY29uY2F0KGxlYWZDb2x1bW5zKS5jb25jYXQocmlnaHRGaXhlZExlYWZDb2x1bW5zKTtcbiAgICAgIHN0YXRlcy5pc0NvbXBsZXggPSBzdGF0ZXMuZml4ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHwgc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfSxcblxuXG4gICAgLy8g5pu05pawIERPTVxuICAgIHNjaGVkdWxlTGF5b3V0OiBmdW5jdGlvbiBzY2hlZHVsZUxheW91dChuZWVkVXBkYXRlQ29sdW1ucykge1xuICAgICAgaWYgKG5lZWRVcGRhdGVDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29sdW1ucygpO1xuICAgICAgfVxuICAgICAgdGhpcy50YWJsZS5kZWJvdW5jZWRVcGRhdGVMYXlvdXQoKTtcbiAgICB9LFxuXG5cbiAgICAvLyDpgInmi6lcbiAgICBpc1NlbGVjdGVkOiBmdW5jdGlvbiBpc1NlbGVjdGVkKHJvdykge1xuICAgICAgdmFyIF9zdGF0ZXMkc2VsZWN0aW9uID0gdGhpcy5zdGF0ZXMuc2VsZWN0aW9uLFxuICAgICAgICAgIHNlbGVjdGlvbiA9IF9zdGF0ZXMkc2VsZWN0aW9uID09PSB1bmRlZmluZWQgPyBbXSA6IF9zdGF0ZXMkc2VsZWN0aW9uO1xuXG4gICAgICByZXR1cm4gc2VsZWN0aW9uLmluZGV4T2Yocm93KSA+IC0xO1xuICAgIH0sXG4gICAgY2xlYXJTZWxlY3Rpb246IGZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgc3RhdGVzLmlzQWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBvbGRTZWxlY3Rpb24gPSBzdGF0ZXMuc2VsZWN0aW9uO1xuICAgICAgaWYgKG9sZFNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGVzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgW10pO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYW5TZWxlY3Rpb246IGZ1bmN0aW9uIGNsZWFuU2VsZWN0aW9uKCkge1xuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgdmFyIGRhdGEgPSBzdGF0ZXMuZGF0YSxcbiAgICAgICAgICByb3dLZXkgPSBzdGF0ZXMucm93S2V5LFxuICAgICAgICAgIHNlbGVjdGlvbiA9IHN0YXRlcy5zZWxlY3Rpb247XG5cbiAgICAgIHZhciBkZWxldGVkID0gdm9pZCAwO1xuICAgICAgaWYgKHJvd0tleSkge1xuICAgICAgICBkZWxldGVkID0gW107XG4gICAgICAgIHZhciBzZWxlY3RlZE1hcCA9IGdldEtleXNNYXAoc2VsZWN0aW9uLCByb3dLZXkpO1xuICAgICAgICB2YXIgZGF0YU1hcCA9IGdldEtleXNNYXAoZGF0YSwgcm93S2V5KTtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHNlbGVjdGVkTWFwKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkTWFwLmhhc093blByb3BlcnR5KGtleSkgJiYgIWRhdGFNYXBba2V5XSkge1xuICAgICAgICAgICAgZGVsZXRlZC5wdXNoKHNlbGVjdGVkTWFwW2tleV0ucm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZWQgPSBzZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGEuaW5kZXhPZihpdGVtKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGRlbGV0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHZhciBuZXdTZWxlY3Rpb24gPSBzZWxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZWQuaW5kZXhPZihpdGVtKSA9PT0gLTE7XG4gICAgICAgIH0pO1xuICAgICAgICBzdGF0ZXMuc2VsZWN0aW9uID0gbmV3U2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgbmV3U2VsZWN0aW9uLnNsaWNlKCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9nZ2xlUm93U2VsZWN0aW9uOiBmdW5jdGlvbiB0b2dnbGVSb3dTZWxlY3Rpb24ocm93LCBzZWxlY3RlZCkge1xuICAgICAgdmFyIGVtaXRDaGFuZ2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XG5cbiAgICAgIHZhciBjaGFuZ2VkID0gdG9nZ2xlUm93U3RhdHVzKHRoaXMuc3RhdGVzLnNlbGVjdGlvbiwgcm93LCBzZWxlY3RlZCk7XG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB2YXIgbmV3U2VsZWN0aW9uID0gKHRoaXMuc3RhdGVzLnNlbGVjdGlvbiB8fCBbXSkuc2xpY2UoKTtcbiAgICAgICAgLy8g6LCD55SoIEFQSSDkv67mlLnpgInkuK3lgLzvvIzkuI3op6blj5Egc2VsZWN0IOS6i+S7tlxuICAgICAgICBpZiAoZW1pdENoYW5nZSkge1xuICAgICAgICAgIHRoaXMudGFibGUuJGVtaXQoJ3NlbGVjdCcsIG5ld1NlbGVjdGlvbiwgcm93KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgbmV3U2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIF90b2dnbGVBbGxTZWxlY3Rpb246IGZ1bmN0aW9uIF90b2dnbGVBbGxTZWxlY3Rpb24oKSB7XG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICB2YXIgX3N0YXRlcyRkYXRhID0gc3RhdGVzLmRhdGEsXG4gICAgICAgICAgZGF0YSA9IF9zdGF0ZXMkZGF0YSA9PT0gdW5kZWZpbmVkID8gW10gOiBfc3RhdGVzJGRhdGEsXG4gICAgICAgICAgc2VsZWN0aW9uID0gc3RhdGVzLnNlbGVjdGlvbjtcbiAgICAgIC8vIHdoZW4gb25seSBzb21lIHJvd3MgYXJlIHNlbGVjdGVkIChidXQgbm90IGFsbCksIHNlbGVjdCBvciBkZXNlbGVjdCBhbGwgb2YgdGhlbVxuICAgICAgLy8gZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBzZWxlY3RPbkluZGV0ZXJtaW5hdGVcblxuICAgICAgdmFyIHZhbHVlID0gc3RhdGVzLnNlbGVjdE9uSW5kZXRlcm1pbmF0ZSA/ICFzdGF0ZXMuaXNBbGxTZWxlY3RlZCA6ICEoc3RhdGVzLmlzQWxsU2VsZWN0ZWQgfHwgc2VsZWN0aW9uLmxlbmd0aCk7XG4gICAgICBzdGF0ZXMuaXNBbGxTZWxlY3RlZCA9IHZhbHVlO1xuXG4gICAgICB2YXIgc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgICAgIGlmIChzdGF0ZXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChzdGF0ZXMuc2VsZWN0YWJsZS5jYWxsKG51bGwsIHJvdywgaW5kZXgpICYmIHRvZ2dsZVJvd1N0YXR1cyhzZWxlY3Rpb24sIHJvdywgdmFsdWUpKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRvZ2dsZVJvd1N0YXR1cyhzZWxlY3Rpb24sIHJvdywgdmFsdWUpKSB7XG4gICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3Rpb24tY2hhbmdlJywgc2VsZWN0aW9uID8gc2VsZWN0aW9uLnNsaWNlKCkgOiBbXSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYmxlLiRlbWl0KCdzZWxlY3QtYWxsJywgc2VsZWN0aW9uKTtcbiAgICB9LFxuICAgIHVwZGF0ZVNlbGVjdGlvbkJ5Um93S2V5OiBmdW5jdGlvbiB1cGRhdGVTZWxlY3Rpb25CeVJvd0tleSgpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBzdGF0ZXMuc2VsZWN0aW9uLFxuICAgICAgICAgIHJvd0tleSA9IHN0YXRlcy5yb3dLZXksXG4gICAgICAgICAgZGF0YSA9IHN0YXRlcy5kYXRhO1xuXG4gICAgICB2YXIgc2VsZWN0ZWRNYXAgPSBnZXRLZXlzTWFwKHNlbGVjdGlvbiwgcm93S2V5KTtcbiAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAocm93KSB7XG4gICAgICAgIHZhciByb3dJZCA9IGdldFJvd0lkZW50aXR5KHJvdywgcm93S2V5KTtcbiAgICAgICAgdmFyIHJvd0luZm8gPSBzZWxlY3RlZE1hcFtyb3dJZF07XG4gICAgICAgIGlmIChyb3dJbmZvKSB7XG4gICAgICAgICAgc2VsZWN0aW9uW3Jvd0luZm8uaW5kZXhdID0gcm93O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZUFsbFNlbGVjdGVkOiBmdW5jdGlvbiB1cGRhdGVBbGxTZWxlY3RlZCgpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgIHZhciBzZWxlY3Rpb24gPSBzdGF0ZXMuc2VsZWN0aW9uLFxuICAgICAgICAgIHJvd0tleSA9IHN0YXRlcy5yb3dLZXksXG4gICAgICAgICAgc2VsZWN0YWJsZSA9IHN0YXRlcy5zZWxlY3RhYmxlO1xuICAgICAgLy8gZGF0YSDkuLogbnVsbCDml7bvvIzop6PmnoTml7bnmoTpu5jorqTlgLzkvJrooqvlv73nlaVcblxuICAgICAgdmFyIGRhdGEgPSBzdGF0ZXMuZGF0YSB8fCBbXTtcbiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBzdGF0ZXMuaXNBbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzZWxlY3RlZE1hcCA9IHZvaWQgMDtcbiAgICAgIGlmIChyb3dLZXkpIHtcbiAgICAgICAgc2VsZWN0ZWRNYXAgPSBnZXRLZXlzTWFwKHNlbGVjdGlvbiwgcm93S2V5KTtcbiAgICAgIH1cbiAgICAgIHZhciBpc1NlbGVjdGVkID0gZnVuY3Rpb24gaXNTZWxlY3RlZChyb3cpIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkTWFwKSB7XG4gICAgICAgICAgcmV0dXJuICEhc2VsZWN0ZWRNYXBbZ2V0Um93SWRlbnRpdHkocm93LCByb3dLZXkpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uLmluZGV4T2Yocm93KSAhPT0gLTE7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgaXNBbGxTZWxlY3RlZCA9IHRydWU7XG4gICAgICB2YXIgc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMCwgaiA9IGRhdGEubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgIHZhciBpdGVtID0gZGF0YVtpXTtcbiAgICAgICAgdmFyIGlzUm93U2VsZWN0YWJsZSA9IHNlbGVjdGFibGUgJiYgc2VsZWN0YWJsZS5jYWxsKG51bGwsIGl0ZW0sIGkpO1xuICAgICAgICBpZiAoIWlzU2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgICAgICBpZiAoIXNlbGVjdGFibGUgfHwgaXNSb3dTZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICBpc0FsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZWN0ZWRDb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAwKSBpc0FsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICBzdGF0ZXMuaXNBbGxTZWxlY3RlZCA9IGlzQWxsU2VsZWN0ZWQ7XG4gICAgfSxcblxuXG4gICAgLy8g6L+H5ruk5LiO5o6S5bqPXG4gICAgdXBkYXRlRmlsdGVyczogZnVuY3Rpb24gdXBkYXRlRmlsdGVycyhjb2x1bW5zLCB2YWx1ZXMpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb2x1bW5zKSkge1xuICAgICAgICBjb2x1bW5zID0gW2NvbHVtbnNdO1xuICAgICAgfVxuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgdmFyIGZpbHRlcnMgPSB7fTtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sKSB7XG4gICAgICAgIHN0YXRlcy5maWx0ZXJzW2NvbC5pZF0gPSB2YWx1ZXM7XG4gICAgICAgIGZpbHRlcnNbY29sLmNvbHVtbktleSB8fCBjb2wuaWRdID0gdmFsdWVzO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH0sXG4gICAgdXBkYXRlU29ydDogZnVuY3Rpb24gdXBkYXRlU29ydChjb2x1bW4sIHByb3AsIG9yZGVyKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZXMuc29ydGluZ0NvbHVtbiAmJiB0aGlzLnN0YXRlcy5zb3J0aW5nQ29sdW1uICE9PSBjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5zdGF0ZXMuc29ydGluZ0NvbHVtbi5vcmRlciA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlcy5zb3J0aW5nQ29sdW1uID0gY29sdW1uO1xuICAgICAgdGhpcy5zdGF0ZXMuc29ydFByb3AgPSBwcm9wO1xuICAgICAgdGhpcy5zdGF0ZXMuc29ydE9yZGVyID0gb3JkZXI7XG4gICAgfSxcbiAgICBleGVjRmlsdGVyOiBmdW5jdGlvbiBleGVjRmlsdGVyKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgdmFyIF9kYXRhID0gc3RhdGVzLl9kYXRhLFxuICAgICAgICAgIGZpbHRlcnMgPSBzdGF0ZXMuZmlsdGVycztcblxuICAgICAgdmFyIGRhdGEgPSBfZGF0YTtcblxuICAgICAgT2JqZWN0LmtleXMoZmlsdGVycykuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uSWQpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHN0YXRlcy5maWx0ZXJzW2NvbHVtbklkXTtcbiAgICAgICAgaWYgKCF2YWx1ZXMgfHwgdmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICB2YXIgY29sdW1uID0gZ2V0Q29sdW1uQnlJZChfdGhpcy5zdGF0ZXMsIGNvbHVtbklkKTtcbiAgICAgICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZmlsdGVyTWV0aG9kKSB7XG4gICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMuc29tZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5maWx0ZXJNZXRob2QuY2FsbChudWxsLCB2YWx1ZSwgcm93LCBjb2x1bW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzdGF0ZXMuZmlsdGVyZWREYXRhID0gZGF0YTtcbiAgICB9LFxuICAgIGV4ZWNTb3J0OiBmdW5jdGlvbiBleGVjU29ydCgpIHtcbiAgICAgIHZhciBzdGF0ZXMgPSB0aGlzLnN0YXRlcztcbiAgICAgIHN0YXRlcy5kYXRhID0gd2F0Y2hlcl9zb3J0RGF0YShzdGF0ZXMuZmlsdGVyZWREYXRhLCBzdGF0ZXMpO1xuICAgIH0sXG5cblxuICAgIC8vIOagueaNriBmaWx0ZXJzIOS4jiBzb3J0IOWOu+i/h+a7pCBkYXRhXG4gICAgZXhlY1F1ZXJ5OiBmdW5jdGlvbiBleGVjUXVlcnkoaWdub3JlKSB7XG4gICAgICBpZiAoIShpZ25vcmUgJiYgaWdub3JlLmZpbHRlcikpIHtcbiAgICAgICAgdGhpcy5leGVjRmlsdGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4ZWNTb3J0KCk7XG4gICAgfSxcbiAgICBjbGVhckZpbHRlcjogZnVuY3Rpb24gY2xlYXJGaWx0ZXIoY29sdW1uS2V5cykge1xuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RhdGVzO1xuICAgICAgdmFyIF90YWJsZSQkcmVmcyA9IHRoaXMudGFibGUuJHJlZnMsXG4gICAgICAgICAgdGFibGVIZWFkZXIgPSBfdGFibGUkJHJlZnMudGFibGVIZWFkZXIsXG4gICAgICAgICAgZml4ZWRUYWJsZUhlYWRlciA9IF90YWJsZSQkcmVmcy5maXhlZFRhYmxlSGVhZGVyLFxuICAgICAgICAgIHJpZ2h0Rml4ZWRUYWJsZUhlYWRlciA9IF90YWJsZSQkcmVmcy5yaWdodEZpeGVkVGFibGVIZWFkZXI7XG5cblxuICAgICAgdmFyIHBhbmVscyA9IHt9O1xuICAgICAgaWYgKHRhYmxlSGVhZGVyKSBwYW5lbHMgPSBtZXJnZV9kZWZhdWx0KCkocGFuZWxzLCB0YWJsZUhlYWRlci5maWx0ZXJQYW5lbHMpO1xuICAgICAgaWYgKGZpeGVkVGFibGVIZWFkZXIpIHBhbmVscyA9IG1lcmdlX2RlZmF1bHQoKShwYW5lbHMsIGZpeGVkVGFibGVIZWFkZXIuZmlsdGVyUGFuZWxzKTtcbiAgICAgIGlmIChyaWdodEZpeGVkVGFibGVIZWFkZXIpIHBhbmVscyA9IG1lcmdlX2RlZmF1bHQoKShwYW5lbHMsIHJpZ2h0Rml4ZWRUYWJsZUhlYWRlci5maWx0ZXJQYW5lbHMpO1xuXG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKHBhbmVscyk7XG4gICAgICBpZiAoIWtleXMubGVuZ3RoKSByZXR1cm47XG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uS2V5cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29sdW1uS2V5cyA9IFtjb2x1bW5LZXlzXTtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uS2V5cykpIHtcbiAgICAgICAgdmFyIGNvbHVtbnMgPSBjb2x1bW5LZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGdldENvbHVtbkJ5S2V5KHN0YXRlcywga2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgdmFyIGNvbHVtbiA9IGNvbHVtbnMuZmluZChmdW5jdGlvbiAoY29sKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sLmlkID09PSBrZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgLy8gVE9ETzog5LyY5YyW6L+Z6YeM55qE5Luj56CBXG4gICAgICAgICAgICBwYW5lbHNba2V5XS5maWx0ZXJlZFZhbHVlID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb21taXQoJ2ZpbHRlckNoYW5nZScsIHtcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbnMsXG4gICAgICAgICAgdmFsdWVzOiBbXSxcbiAgICAgICAgICBzaWxlbnQ6IHRydWUsXG4gICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIC8vIFRPRE86IOS8mOWMlui/memHjOeahOS7o+eggVxuICAgICAgICAgIHBhbmVsc1trZXldLmZpbHRlcmVkVmFsdWUgPSBbXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RhdGVzLmZpbHRlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5jb21taXQoJ2ZpbHRlckNoYW5nZScsIHtcbiAgICAgICAgICBjb2x1bW46IHt9LFxuICAgICAgICAgIHZhbHVlczogW10sXG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJTb3J0OiBmdW5jdGlvbiBjbGVhclNvcnQoKSB7XG4gICAgICB2YXIgc3RhdGVzID0gdGhpcy5zdGF0ZXM7XG4gICAgICBpZiAoIXN0YXRlcy5zb3J0aW5nQ29sdW1uKSByZXR1cm47XG5cbiAgICAgIHRoaXMudXBkYXRlU29ydChudWxsLCBudWxsLCBudWxsKTtcbiAgICAgIHRoaXMuY29tbWl0KCdjaGFuZ2VTb3J0Q29uZGl0aW9uJywge1xuICAgICAgICBzaWxlbnQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH0sXG5cblxuICAgIC8vIOmAgumFjeWxgu+8jGV4cGFuZC1yb3cta2V5cyDlnKggRXhwYW5kIOS4jiBUcmVlVGFibGUg5Lit6YO95pyJ5L2/55SoXG4gICAgc2V0RXhwYW5kUm93S2V5c0FkYXB0ZXI6IGZ1bmN0aW9uIHNldEV4cGFuZFJvd0tleXNBZGFwdGVyKHZhbCkge1xuICAgICAgLy8g6L+Z6YeM5Lya6Kem5Y+R6aKd5aSW55qE6K6h566X77yM5L2G5Li65LqG5YW85a655oCn77yM5pqC5pe26L+Z5LmI5YGaXG4gICAgICB0aGlzLnNldEV4cGFuZFJvd0tleXModmFsKTtcbiAgICAgIHRoaXMudXBkYXRlVHJlZUV4cGFuZEtleXModmFsKTtcbiAgICB9LFxuXG5cbiAgICAvLyDlsZXlvIDooYzkuI4gVHJlZVRhYmxlIOmDveimgeS9v+eUqFxuICAgIHRvZ2dsZVJvd0V4cGFuc2lvbkFkYXB0ZXI6IGZ1bmN0aW9uIHRvZ2dsZVJvd0V4cGFuc2lvbkFkYXB0ZXIocm93LCBleHBhbmRlZCkge1xuICAgICAgdmFyIGhhc0V4cGFuZENvbHVtbiA9IHRoaXMuc3RhdGVzLmNvbHVtbnMuc29tZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgdHlwZSA9IF9yZWYudHlwZTtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdleHBhbmQnO1xuICAgICAgfSk7XG4gICAgICBpZiAoaGFzRXhwYW5kQ29sdW1uKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUm93RXhwYW5zaW9uKHJvdywgZXhwYW5kZWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50b2dnbGVUcmVlRXhwYW5zaW9uKHJvdywgZXhwYW5kZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSkpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvc3RvcmUvaW5kZXguanNcblxuXG5cblxud2F0Y2hlci5wcm90b3R5cGUubXV0YXRpb25zID0ge1xuICBzZXREYXRhOiBmdW5jdGlvbiBzZXREYXRhKHN0YXRlcywgZGF0YSkge1xuICAgIHZhciBkYXRhSW5zdGFuY2VDaGFuZ2VkID0gc3RhdGVzLl9kYXRhICE9PSBkYXRhO1xuICAgIHN0YXRlcy5fZGF0YSA9IGRhdGE7XG5cbiAgICB0aGlzLmV4ZWNRdWVyeSgpO1xuICAgIC8vIOaVsOaNruWPmOWMlu+8jOabtOaWsOmDqOWIhuaVsOaNruOAglxuICAgIC8vIOayoeacieS9v+eUqCBjb21wdXRlZO+8jOiAjOaYr+aJi+WKqOabtOaWsOmDqOWIhuaVsOaNriBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy82NjYwI2lzc3VlY29tbWVudC0zMzE0MTcxNDBcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRSb3dEYXRhKCk7XG4gICAgdGhpcy51cGRhdGVFeHBhbmRSb3dzKCk7XG4gICAgaWYgKHN0YXRlcy5yZXNlcnZlU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmFzc2VydFJvd0tleSgpO1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25CeVJvd0tleSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGF0YUluc3RhbmNlQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNsZWFuU2VsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlQWxsU2VsZWN0ZWQoKTtcblxuICAgIHRoaXMudXBkYXRlVGFibGVTY3JvbGxZKCk7XG4gIH0sXG4gIGluc2VydENvbHVtbjogZnVuY3Rpb24gaW5zZXJ0Q29sdW1uKHN0YXRlcywgY29sdW1uLCBpbmRleCwgcGFyZW50KSB7XG4gICAgdmFyIGFycmF5ID0gc3RhdGVzLl9jb2x1bW5zO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGFycmF5ID0gcGFyZW50LmNoaWxkcmVuO1xuICAgICAgaWYgKCFhcnJheSkgYXJyYXkgPSBwYXJlbnQuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAwLCBjb2x1bW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnJheS5wdXNoKGNvbHVtbik7XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnc2VsZWN0aW9uJykge1xuICAgICAgc3RhdGVzLnNlbGVjdGFibGUgPSBjb2x1bW4uc2VsZWN0YWJsZTtcbiAgICAgIHN0YXRlcy5yZXNlcnZlU2VsZWN0aW9uID0gY29sdW1uLnJlc2VydmVTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGUuJHJlYWR5KSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTsgLy8gaGFjayBmb3IgZHluYW1pY3MgaW5zZXJ0IGNvbHVtblxuICAgICAgdGhpcy5zY2hlZHVsZUxheW91dCgpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlQ29sdW1uOiBmdW5jdGlvbiByZW1vdmVDb2x1bW4oc3RhdGVzLCBjb2x1bW4sIHBhcmVudCkge1xuICAgIHZhciBhcnJheSA9IHN0YXRlcy5fY29sdW1ucztcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBhcnJheSA9IHBhcmVudC5jaGlsZHJlbjtcbiAgICAgIGlmICghYXJyYXkpIGFycmF5ID0gcGFyZW50LmNoaWxkcmVuID0gW107XG4gICAgfVxuICAgIGlmIChhcnJheSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGFycmF5LmluZGV4T2YoY29sdW1uKSwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGUuJHJlYWR5KSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTsgLy8gaGFjayBmb3IgZHluYW1pY3MgcmVtb3ZlIGNvbHVtblxuICAgICAgdGhpcy5zY2hlZHVsZUxheW91dCgpO1xuICAgIH1cbiAgfSxcbiAgc29ydDogZnVuY3Rpb24gc29ydChzdGF0ZXMsIG9wdGlvbnMpIHtcbiAgICB2YXIgcHJvcCA9IG9wdGlvbnMucHJvcCxcbiAgICAgICAgb3JkZXIgPSBvcHRpb25zLm9yZGVyLFxuICAgICAgICBpbml0ID0gb3B0aW9ucy5pbml0O1xuXG4gICAgaWYgKHByb3ApIHtcbiAgICAgIHZhciBjb2x1bW4gPSBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRcIl0pKHN0YXRlcy5jb2x1bW5zLCBmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ucHJvcGVydHkgPT09IHByb3A7XG4gICAgICB9KTtcbiAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgY29sdW1uLm9yZGVyID0gb3JkZXI7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydChjb2x1bW4sIHByb3AsIG9yZGVyKTtcbiAgICAgICAgdGhpcy5jb21taXQoJ2NoYW5nZVNvcnRDb25kaXRpb24nLCB7IGluaXQ6IGluaXQgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjaGFuZ2VTb3J0Q29uZGl0aW9uOiBmdW5jdGlvbiBjaGFuZ2VTb3J0Q29uZGl0aW9uKHN0YXRlcywgb3B0aW9ucykge1xuICAgIC8vIOS/ruWkjSBwciBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L3B1bGwvMTUwMTIg5a+86Ie055qEIGJ1Z1xuICAgIHZhciBjb2x1bW4gPSBzdGF0ZXMuc29ydGluZ0NvbHVtbixcbiAgICAgICAgcHJvcCA9IHN0YXRlcy5zb3J0UHJvcCxcbiAgICAgICAgb3JkZXIgPSBzdGF0ZXMuc29ydE9yZGVyO1xuXG4gICAgaWYgKG9yZGVyID09PSBudWxsKSB7XG4gICAgICBzdGF0ZXMuc29ydGluZ0NvbHVtbiA9IG51bGw7XG4gICAgICBzdGF0ZXMuc29ydFByb3AgPSBudWxsO1xuICAgIH1cbiAgICB2YXIgaW5nb3JlID0geyBmaWx0ZXI6IHRydWUgfTtcbiAgICB0aGlzLmV4ZWNRdWVyeShpbmdvcmUpO1xuXG4gICAgaWYgKCFvcHRpb25zIHx8ICEob3B0aW9ucy5zaWxlbnQgfHwgb3B0aW9ucy5pbml0KSkge1xuICAgICAgdGhpcy50YWJsZS4kZW1pdCgnc29ydC1jaGFuZ2UnLCB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICBwcm9wOiBwcm9wLFxuICAgICAgICBvcmRlcjogb3JkZXJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGFibGVTY3JvbGxZKCk7XG4gIH0sXG4gIGZpbHRlckNoYW5nZTogZnVuY3Rpb24gZmlsdGVyQ2hhbmdlKHN0YXRlcywgb3B0aW9ucykge1xuICAgIHZhciBjb2x1bW4gPSBvcHRpb25zLmNvbHVtbixcbiAgICAgICAgdmFsdWVzID0gb3B0aW9ucy52YWx1ZXMsXG4gICAgICAgIHNpbGVudCA9IG9wdGlvbnMuc2lsZW50O1xuXG4gICAgdmFyIG5ld0ZpbHRlcnMgPSB0aGlzLnVwZGF0ZUZpbHRlcnMoY29sdW1uLCB2YWx1ZXMpO1xuXG4gICAgdGhpcy5leGVjUXVlcnkoKTtcblxuICAgIGlmICghc2lsZW50KSB7XG4gICAgICB0aGlzLnRhYmxlLiRlbWl0KCdmaWx0ZXItY2hhbmdlJywgbmV3RmlsdGVycyk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUYWJsZVNjcm9sbFkoKTtcbiAgfSxcbiAgdG9nZ2xlQWxsU2VsZWN0aW9uOiBmdW5jdGlvbiB0b2dnbGVBbGxTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy50b2dnbGVBbGxTZWxlY3Rpb24oKTtcbiAgfSxcbiAgcm93U2VsZWN0ZWRDaGFuZ2VkOiBmdW5jdGlvbiByb3dTZWxlY3RlZENoYW5nZWQoc3RhdGVzLCByb3cpIHtcbiAgICB0aGlzLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3cpO1xuICAgIHRoaXMudXBkYXRlQWxsU2VsZWN0ZWQoKTtcbiAgfSxcbiAgc2V0SG92ZXJSb3c6IGZ1bmN0aW9uIHNldEhvdmVyUm93KHN0YXRlcywgcm93KSB7XG4gICAgc3RhdGVzLmhvdmVyUm93ID0gcm93O1xuICB9LFxuICBzZXRDdXJyZW50Um93OiBmdW5jdGlvbiBzZXRDdXJyZW50Um93KHN0YXRlcywgcm93KSB7XG4gICAgdGhpcy51cGRhdGVDdXJyZW50Um93KHJvdyk7XG4gIH1cbn07XG5cbndhdGNoZXIucHJvdG90eXBlLmNvbW1pdCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBtdXRhdGlvbnMgPSB0aGlzLm11dGF0aW9ucztcbiAgaWYgKG11dGF0aW9uc1tuYW1lXSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgbXV0YXRpb25zW25hbWVdLmFwcGx5KHRoaXMsIFt0aGlzLnN0YXRlc10uY29uY2F0KGFyZ3MpKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbiBub3QgZm91bmQ6ICcgKyBuYW1lKTtcbiAgfVxufTtcblxud2F0Y2hlci5wcm90b3R5cGUudXBkYXRlVGFibGVTY3JvbGxZID0gZnVuY3Rpb24gKCkge1xuICBleHRlcm5hbF92dWVfZGVmYXVsdC5hLm5leHRUaWNrKHRoaXMudGFibGUudXBkYXRlU2Nyb2xsWSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfc3RvcmUgPSAod2F0Y2hlcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9zdG9yZS9oZWxwZXIuanNcblxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVN0b3JlKHRhYmxlKSB7XG4gIHZhciBpbml0aWFsU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICghdGFibGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhYmxlIGlzIHJlcXVpcmVkLicpO1xuICB9XG5cbiAgdmFyIHN0b3JlID0gbmV3IHNyY19zdG9yZSgpO1xuICBzdG9yZS50YWJsZSA9IHRhYmxlO1xuICAvLyBmaXggaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTQwNzVcbiAgLy8gcmVsYXRlZCBwciBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L3B1bGwvMTQxNDZcbiAgc3RvcmUudG9nZ2xlQWxsU2VsZWN0aW9uID0gZGVib3VuY2VfZGVmYXVsdCgpKDEwLCBzdG9yZS5fdG9nZ2xlQWxsU2VsZWN0aW9uKTtcbiAgT2JqZWN0LmtleXMoaW5pdGlhbFN0YXRlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBzdG9yZS5zdGF0ZXNba2V5XSA9IGluaXRpYWxTdGF0ZVtrZXldO1xuICB9KTtcbiAgcmV0dXJuIHN0b3JlO1xufVxuXG5mdW5jdGlvbiBtYXBTdGF0ZXMobWFwcGVyKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgT2JqZWN0LmtleXMobWFwcGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgdmFsdWUgPSBtYXBwZXJba2V5XTtcbiAgICB2YXIgZm4gPSB2b2lkIDA7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZuID0gZnVuY3Rpb24gZm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlLnN0YXRlc1t2YWx1ZV07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBmbiA9IGZ1bmN0aW9uIGZuKCkge1xuICAgICAgICByZXR1cm4gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLnN0b3JlLnN0YXRlcyk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdpbnZhbGlkIHZhbHVlIHR5cGUnKTtcbiAgICB9XG4gICAgaWYgKGZuKSB7XG4gICAgICByZXNba2V5XSA9IGZuO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXM7XG59O1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbGJhci13aWR0aFwiXG52YXIgc2Nyb2xsYmFyX3dpZHRoXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xudmFyIHNjcm9sbGJhcl93aWR0aF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzY3JvbGxiYXJfd2lkdGhfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdGFibGUtbGF5b3V0LmpzXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5cblxuXG5cbnZhciB0YWJsZV9sYXlvdXRfVGFibGVMYXlvdXQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFRhYmxlTGF5b3V0KG9wdGlvbnMpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGFibGVMYXlvdXQpO1xuXG4gICAgdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICB0aGlzLnRhYmxlID0gbnVsbDtcbiAgICB0aGlzLnN0b3JlID0gbnVsbDtcbiAgICB0aGlzLmNvbHVtbnMgPSBudWxsO1xuICAgIHRoaXMuZml0ID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dIZWFkZXIgPSB0cnVlO1xuXG4gICAgdGhpcy5oZWlnaHQgPSBudWxsO1xuICAgIHRoaXMuc2Nyb2xsWCA9IGZhbHNlO1xuICAgIHRoaXMuc2Nyb2xsWSA9IGZhbHNlO1xuICAgIHRoaXMuYm9keVdpZHRoID0gbnVsbDtcbiAgICB0aGlzLmZpeGVkV2lkdGggPSBudWxsO1xuICAgIHRoaXMucmlnaHRGaXhlZFdpZHRoID0gbnVsbDtcbiAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gbnVsbDtcbiAgICB0aGlzLmhlYWRlckhlaWdodCA9IDQ0OyAvLyBUYWJsZSBIZWFkZXIgSGVpZ2h0XG4gICAgdGhpcy5hcHBlbmRIZWlnaHQgPSAwOyAvLyBBcHBlbmQgU2xvdCBIZWlnaHRcbiAgICB0aGlzLmZvb3RlckhlaWdodCA9IDQ0OyAvLyBUYWJsZSBGb290ZXIgSGVpZ2h0XG4gICAgdGhpcy52aWV3cG9ydEhlaWdodCA9IG51bGw7IC8vIFRhYmxlIEhlaWdodCAtIFNjcm9sbCBCYXIgSGVpZ2h0XG4gICAgdGhpcy5ib2R5SGVpZ2h0ID0gbnVsbDsgLy8gVGFibGUgSGVpZ2h0IC0gVGFibGUgSGVhZGVyIEhlaWdodFxuICAgIHRoaXMuZml4ZWRCb2R5SGVpZ2h0ID0gbnVsbDsgLy8gVGFibGUgSGVpZ2h0IC0gVGFibGUgSGVhZGVyIEhlaWdodCAtIFNjcm9sbCBCYXIgSGVpZ2h0XG4gICAgdGhpcy5ndXR0ZXJXaWR0aCA9IHNjcm9sbGJhcl93aWR0aF9kZWZhdWx0KCkoKTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgdGhpc1tuYW1lXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnRhYmxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RhYmxlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0b3JlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3N0b3JlIGlzIHJlcXVpcmVkIGZvciBUYWJsZSBMYXlvdXQnKTtcbiAgICB9XG4gIH1cblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlU2Nyb2xsWSA9IGZ1bmN0aW9uIHVwZGF0ZVNjcm9sbFkoKSB7XG4gICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIGlmIChoZWlnaHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICB2YXIgYm9keVdyYXBwZXIgPSB0aGlzLnRhYmxlLmJvZHlXcmFwcGVyO1xuICAgIGlmICh0aGlzLnRhYmxlLiRlbCAmJiBib2R5V3JhcHBlcikge1xuICAgICAgdmFyIGJvZHkgPSBib2R5V3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuZWwtdGFibGVfX2JvZHknKTtcbiAgICAgIHZhciBwcmV2U2Nyb2xsWSA9IHRoaXMuc2Nyb2xsWTtcbiAgICAgIHZhciBzY3JvbGxZID0gYm9keS5vZmZzZXRIZWlnaHQgPiB0aGlzLmJvZHlIZWlnaHQ7XG4gICAgICB0aGlzLnNjcm9sbFkgPSBzY3JvbGxZO1xuICAgICAgcmV0dXJuIHByZXZTY3JvbGxZICE9PSBzY3JvbGxZO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgVGFibGVMYXlvdXQucHJvdG90eXBlLnNldEhlaWdodCA9IGZ1bmN0aW9uIHNldEhlaWdodCh2YWx1ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgcHJvcCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ2hlaWdodCc7XG5cbiAgICBpZiAoZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gICAgdmFyIGVsID0gdGhpcy50YWJsZS4kZWw7XG4gICAgdmFsdWUgPSBwYXJzZUhlaWdodCh2YWx1ZSk7XG4gICAgdGhpcy5oZWlnaHQgPSB2YWx1ZTtcblxuICAgIGlmICghZWwgJiYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSkgcmV0dXJuIGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnNldEhlaWdodCh2YWx1ZSwgcHJvcCk7XG4gICAgfSk7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgZWwuc3R5bGVbcHJvcF0gPSB2YWx1ZSArICdweCc7XG4gICAgICB0aGlzLnVwZGF0ZUVsc0hlaWdodCgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgZWwuc3R5bGVbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIHRoaXMudXBkYXRlRWxzSGVpZ2h0KCk7XG4gICAgfVxuICB9O1xuXG4gIFRhYmxlTGF5b3V0LnByb3RvdHlwZS5zZXRNYXhIZWlnaHQgPSBmdW5jdGlvbiBzZXRNYXhIZWlnaHQodmFsdWUpIHtcbiAgICB0aGlzLnNldEhlaWdodCh2YWx1ZSwgJ21heC1oZWlnaHQnKTtcbiAgfTtcblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUuZ2V0RmxhdHRlbkNvbHVtbnMgPSBmdW5jdGlvbiBnZXRGbGF0dGVuQ29sdW1ucygpIHtcbiAgICB2YXIgZmxhdHRlbkNvbHVtbnMgPSBbXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMudGFibGUuY29sdW1ucztcbiAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgaWYgKGNvbHVtbi5pc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgIGZsYXR0ZW5Db2x1bW5zLnB1c2guYXBwbHkoZmxhdHRlbkNvbHVtbnMsIGNvbHVtbi5jb2x1bW5zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsYXR0ZW5Db2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBmbGF0dGVuQ29sdW1ucztcbiAgfTtcblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlRWxzSGVpZ2h0ID0gZnVuY3Rpb24gdXBkYXRlRWxzSGVpZ2h0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgaWYgKCF0aGlzLnRhYmxlLiRyZWFkeSkgcmV0dXJuIGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMi51cGRhdGVFbHNIZWlnaHQoKTtcbiAgICB9KTtcbiAgICB2YXIgX3RhYmxlJCRyZWZzID0gdGhpcy50YWJsZS4kcmVmcyxcbiAgICAgICAgaGVhZGVyV3JhcHBlciA9IF90YWJsZSQkcmVmcy5oZWFkZXJXcmFwcGVyLFxuICAgICAgICBhcHBlbmRXcmFwcGVyID0gX3RhYmxlJCRyZWZzLmFwcGVuZFdyYXBwZXIsXG4gICAgICAgIGZvb3RlcldyYXBwZXIgPSBfdGFibGUkJHJlZnMuZm9vdGVyV3JhcHBlcjtcblxuICAgIHRoaXMuYXBwZW5kSGVpZ2h0ID0gYXBwZW5kV3JhcHBlciA/IGFwcGVuZFdyYXBwZXIub2Zmc2V0SGVpZ2h0IDogMDtcblxuICAgIGlmICh0aGlzLnNob3dIZWFkZXIgJiYgIWhlYWRlcldyYXBwZXIpIHJldHVybjtcblxuICAgIC8vIGZpeCBpc3N1ZSAoaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9wdWxsLzE2OTU2KVxuICAgIHZhciBoZWFkZXJUckVsbSA9IGhlYWRlcldyYXBwZXIgPyBoZWFkZXJXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5lbC10YWJsZV9faGVhZGVyIHRyJykgOiBudWxsO1xuICAgIHZhciBub25lSGVhZGVyID0gdGhpcy5oZWFkZXJEaXNwbGF5Tm9uZShoZWFkZXJUckVsbSk7XG5cbiAgICB2YXIgaGVhZGVySGVpZ2h0ID0gdGhpcy5oZWFkZXJIZWlnaHQgPSAhdGhpcy5zaG93SGVhZGVyID8gMCA6IGhlYWRlcldyYXBwZXIub2Zmc2V0SGVpZ2h0O1xuICAgIGlmICh0aGlzLnNob3dIZWFkZXIgJiYgIW5vbmVIZWFkZXIgJiYgaGVhZGVyV3JhcHBlci5vZmZzZXRXaWR0aCA+IDAgJiYgKHRoaXMudGFibGUuY29sdW1ucyB8fCBbXSkubGVuZ3RoID4gMCAmJiBoZWFkZXJIZWlnaHQgPCAyKSB7XG4gICAgICByZXR1cm4gZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIudXBkYXRlRWxzSGVpZ2h0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHRhYmxlSGVpZ2h0ID0gdGhpcy50YWJsZUhlaWdodCA9IHRoaXMudGFibGUuJGVsLmNsaWVudEhlaWdodDtcbiAgICB2YXIgZm9vdGVySGVpZ2h0ID0gdGhpcy5mb290ZXJIZWlnaHQgPSBmb290ZXJXcmFwcGVyID8gZm9vdGVyV3JhcHBlci5vZmZzZXRIZWlnaHQgOiAwO1xuICAgIGlmICh0aGlzLmhlaWdodCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5SGVpZ2h0ID0gdGFibGVIZWlnaHQgLSBoZWFkZXJIZWlnaHQgLSBmb290ZXJIZWlnaHQgKyAoZm9vdGVyV3JhcHBlciA/IDEgOiAwKTtcbiAgICB9XG4gICAgdGhpcy5maXhlZEJvZHlIZWlnaHQgPSB0aGlzLnNjcm9sbFggPyB0aGlzLmJvZHlIZWlnaHQgLSB0aGlzLmd1dHRlcldpZHRoIDogdGhpcy5ib2R5SGVpZ2h0O1xuXG4gICAgdmFyIG5vRGF0YSA9ICEodGhpcy5zdG9yZS5zdGF0ZXMuZGF0YSAmJiB0aGlzLnN0b3JlLnN0YXRlcy5kYXRhLmxlbmd0aCk7XG4gICAgdGhpcy52aWV3cG9ydEhlaWdodCA9IHRoaXMuc2Nyb2xsWCA/IHRhYmxlSGVpZ2h0IC0gKG5vRGF0YSA/IDAgOiB0aGlzLmd1dHRlcldpZHRoKSA6IHRhYmxlSGVpZ2h0O1xuICAgIHRoaXMudXBkYXRlU2Nyb2xsWSgpO1xuICAgIHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCdzY3JvbGxhYmxlJyk7XG4gIH07XG5cbiAgVGFibGVMYXlvdXQucHJvdG90eXBlLmhlYWRlckRpc3BsYXlOb25lID0gZnVuY3Rpb24gaGVhZGVyRGlzcGxheU5vbmUoZWxtKSB7XG4gICAgaWYgKCFlbG0pIHJldHVybiB0cnVlO1xuICAgIHZhciBoZWFkZXJDaGlsZCA9IGVsbTtcbiAgICB3aGlsZSAoaGVhZGVyQ2hpbGQudGFnTmFtZSAhPT0gJ0RJVicpIHtcbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKGhlYWRlckNoaWxkKS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBoZWFkZXJDaGlsZCA9IGhlYWRlckNoaWxkLnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUudXBkYXRlQ29sdW1uc1dpZHRoID0gZnVuY3Rpb24gdXBkYXRlQ29sdW1uc1dpZHRoKCkge1xuICAgIGlmIChleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICB2YXIgZml0ID0gdGhpcy5maXQ7XG4gICAgdmFyIGJvZHlXaWR0aCA9IHRoaXMudGFibGUuJGVsLmNsaWVudFdpZHRoO1xuICAgIHZhciBib2R5TWluV2lkdGggPSAwO1xuXG4gICAgdmFyIGZsYXR0ZW5Db2x1bW5zID0gdGhpcy5nZXRGbGF0dGVuQ29sdW1ucygpO1xuICAgIHZhciBmbGV4Q29sdW1ucyA9IGZsYXR0ZW5Db2x1bW5zLmZpbHRlcihmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbi53aWR0aCAhPT0gJ251bWJlcic7XG4gICAgfSk7XG5cbiAgICBmbGF0dGVuQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgIC8vIENsZWFuIHRob3NlIGNvbHVtbnMgd2hvc2Ugd2lkdGggY2hhbmdlZCBmcm9tIGZsZXggdG8gdW5mbGV4XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi53aWR0aCA9PT0gJ251bWJlcicgJiYgY29sdW1uLnJlYWxXaWR0aCkgY29sdW1uLnJlYWxXaWR0aCA9IG51bGw7XG4gICAgfSk7XG5cbiAgICBpZiAoZmxleENvbHVtbnMubGVuZ3RoID4gMCAmJiBmaXQpIHtcbiAgICAgIGZsYXR0ZW5Db2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICBib2R5TWluV2lkdGggKz0gY29sdW1uLndpZHRoIHx8IGNvbHVtbi5taW5XaWR0aCB8fCA4MDtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgc2Nyb2xsWVdpZHRoID0gdGhpcy5zY3JvbGxZID8gdGhpcy5ndXR0ZXJXaWR0aCA6IDA7XG5cbiAgICAgIGlmIChib2R5TWluV2lkdGggPD0gYm9keVdpZHRoIC0gc2Nyb2xsWVdpZHRoKSB7XG4gICAgICAgIC8vIERPTidUIEhBVkUgU0NST0xMIEJBUlxuICAgICAgICB0aGlzLnNjcm9sbFggPSBmYWxzZTtcblxuICAgICAgICB2YXIgdG90YWxGbGV4V2lkdGggPSBib2R5V2lkdGggLSBzY3JvbGxZV2lkdGggLSBib2R5TWluV2lkdGg7XG5cbiAgICAgICAgaWYgKGZsZXhDb2x1bW5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGZsZXhDb2x1bW5zWzBdLnJlYWxXaWR0aCA9IChmbGV4Q29sdW1uc1swXS5taW5XaWR0aCB8fCA4MCkgKyB0b3RhbEZsZXhXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYWxsQ29sdW1uc1dpZHRoID0gZmxleENvbHVtbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2ICsgKGNvbHVtbi5taW5XaWR0aCB8fCA4MCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgdmFyIGZsZXhXaWR0aFBlclBpeGVsID0gdG90YWxGbGV4V2lkdGggLyBhbGxDb2x1bW5zV2lkdGg7XG4gICAgICAgICAgdmFyIG5vbmVGaXJzdFdpZHRoID0gMDtcblxuICAgICAgICAgIGZsZXhDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIGZsZXhXaWR0aCA9IE1hdGguZmxvb3IoKGNvbHVtbi5taW5XaWR0aCB8fCA4MCkgKiBmbGV4V2lkdGhQZXJQaXhlbCk7XG4gICAgICAgICAgICBub25lRmlyc3RXaWR0aCArPSBmbGV4V2lkdGg7XG4gICAgICAgICAgICBjb2x1bW4ucmVhbFdpZHRoID0gKGNvbHVtbi5taW5XaWR0aCB8fCA4MCkgKyBmbGV4V2lkdGg7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBmbGV4Q29sdW1uc1swXS5yZWFsV2lkdGggPSAoZmxleENvbHVtbnNbMF0ubWluV2lkdGggfHwgODApICsgdG90YWxGbGV4V2lkdGggLSBub25lRmlyc3RXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSEFWRSBIT1JJWk9OVEFMIFNDUk9MTCBCQVJcbiAgICAgICAgdGhpcy5zY3JvbGxYID0gdHJ1ZTtcbiAgICAgICAgZmxleENvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgICAgY29sdW1uLnJlYWxXaWR0aCA9IGNvbHVtbi5taW5XaWR0aDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keVdpZHRoID0gTWF0aC5tYXgoYm9keU1pbldpZHRoLCBib2R5V2lkdGgpO1xuICAgICAgdGhpcy50YWJsZS5yZXNpemVTdGF0ZS53aWR0aCA9IHRoaXMuYm9keVdpZHRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGF0dGVuQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgaWYgKCFjb2x1bW4ud2lkdGggJiYgIWNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICAgIGNvbHVtbi5yZWFsV2lkdGggPSA4MDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4ucmVhbFdpZHRoID0gY29sdW1uLndpZHRoIHx8IGNvbHVtbi5taW5XaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJvZHlNaW5XaWR0aCArPSBjb2x1bW4ucmVhbFdpZHRoO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNjcm9sbFggPSBib2R5TWluV2lkdGggPiBib2R5V2lkdGg7XG5cbiAgICAgIHRoaXMuYm9keVdpZHRoID0gYm9keU1pbldpZHRoO1xuICAgIH1cblxuICAgIHZhciBmaXhlZENvbHVtbnMgPSB0aGlzLnN0b3JlLnN0YXRlcy5maXhlZENvbHVtbnM7XG5cbiAgICBpZiAoZml4ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBmaXhlZFdpZHRoID0gMDtcbiAgICAgIGZpeGVkQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICAgICAgZml4ZWRXaWR0aCArPSBjb2x1bW4ucmVhbFdpZHRoIHx8IGNvbHVtbi53aWR0aDtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmZpeGVkV2lkdGggPSBmaXhlZFdpZHRoO1xuICAgIH1cblxuICAgIHZhciByaWdodEZpeGVkQ29sdW1ucyA9IHRoaXMuc3RvcmUuc3RhdGVzLnJpZ2h0Rml4ZWRDb2x1bW5zO1xuICAgIGlmIChyaWdodEZpeGVkQ29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgcmlnaHRGaXhlZFdpZHRoID0gMDtcbiAgICAgIHJpZ2h0Rml4ZWRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICByaWdodEZpeGVkV2lkdGggKz0gY29sdW1uLnJlYWxXaWR0aCB8fCBjb2x1bW4ud2lkdGg7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yaWdodEZpeGVkV2lkdGggPSByaWdodEZpeGVkV2lkdGg7XG4gICAgfVxuXG4gICAgdGhpcy5ub3RpZnlPYnNlcnZlcnMoJ2NvbHVtbnMnKTtcbiAgfTtcblxuICBUYWJsZUxheW91dC5wcm90b3R5cGUuYWRkT2JzZXJ2ZXIgPSBmdW5jdGlvbiBhZGRPYnNlcnZlcihvYnNlcnZlcikge1xuICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2gob2JzZXJ2ZXIpO1xuICB9O1xuXG4gIFRhYmxlTGF5b3V0LnByb3RvdHlwZS5yZW1vdmVPYnNlcnZlciA9IGZ1bmN0aW9uIHJlbW92ZU9ic2VydmVyKG9ic2VydmVyKSB7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5vYnNlcnZlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH07XG5cbiAgVGFibGVMYXlvdXQucHJvdG90eXBlLm5vdGlmeU9ic2VydmVycyA9IGZ1bmN0aW9uIG5vdGlmeU9ic2VydmVycyhldmVudCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzO1xuICAgIG9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgc3dpdGNoIChldmVudCkge1xuICAgICAgICBjYXNlICdjb2x1bW5zJzpcbiAgICAgICAgICBvYnNlcnZlci5vbkNvbHVtbnNDaGFuZ2UoX3RoaXMzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2Nyb2xsYWJsZSc6XG4gICAgICAgICAgb2JzZXJ2ZXIub25TY3JvbGxhYmxlQ2hhbmdlKF90aGlzMyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUYWJsZSBMYXlvdXQgZG9uXFwndCBoYXZlIGV2ZW50ICcgKyBldmVudCArICcuJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgcmV0dXJuIFRhYmxlTGF5b3V0O1xufSgpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWJsZV9sYXlvdXQgPSAodGFibGVfbGF5b3V0X1RhYmxlTGF5b3V0KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2xheW91dC1vYnNlcnZlci5qc1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbGF5b3V0X29ic2VydmVyID0gKHtcbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLnRhYmxlTGF5b3V0LmFkZE9ic2VydmVyKHRoaXMpO1xuICB9LFxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLnRhYmxlTGF5b3V0LnJlbW92ZU9ic2VydmVyKHRoaXMpO1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJsZUxheW91dDogZnVuY3Rpb24gdGFibGVMYXlvdXQoKSB7XG4gICAgICB2YXIgbGF5b3V0ID0gdGhpcy5sYXlvdXQ7XG4gICAgICBpZiAoIWxheW91dCAmJiB0aGlzLnRhYmxlKSB7XG4gICAgICAgIGxheW91dCA9IHRoaXMudGFibGUubGF5b3V0O1xuICAgICAgfVxuICAgICAgaWYgKCFsYXlvdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgdGFibGUgbGF5b3V0LicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxheW91dDtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLm9uQ29sdW1uc0NoYW5nZSh0aGlzLnRhYmxlTGF5b3V0KTtcbiAgICB0aGlzLm9uU2Nyb2xsYWJsZUNoYW5nZSh0aGlzLnRhYmxlTGF5b3V0KTtcbiAgfSxcbiAgdXBkYXRlZDogZnVuY3Rpb24gdXBkYXRlZCgpIHtcbiAgICBpZiAodGhpcy5fX3VwZGF0ZWRfXykgcmV0dXJuO1xuICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlKHRoaXMudGFibGVMYXlvdXQpO1xuICAgIHRoaXMub25TY3JvbGxhYmxlQ2hhbmdlKHRoaXMudGFibGVMYXlvdXQpO1xuICAgIHRoaXMuX191cGRhdGVkX18gPSB0cnVlO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIG9uQ29sdW1uc0NoYW5nZTogZnVuY3Rpb24gb25Db2x1bW5zQ2hhbmdlKGxheW91dCkge1xuICAgICAgdmFyIGNvbHMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdjb2xncm91cCA+IGNvbCcpO1xuICAgICAgaWYgKCFjb2xzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgdmFyIGZsYXR0ZW5Db2x1bW5zID0gbGF5b3V0LmdldEZsYXR0ZW5Db2x1bW5zKCk7XG4gICAgICB2YXIgY29sdW1uc01hcCA9IHt9O1xuICAgICAgZmxhdHRlbkNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIGNvbHVtbnNNYXBbY29sdW1uLmlkXSA9IGNvbHVtbjtcbiAgICAgIH0pO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBjb2xzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICB2YXIgY29sID0gY29sc1tpXTtcbiAgICAgICAgdmFyIG5hbWUgPSBjb2wuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG4gICAgICAgIHZhciBjb2x1bW4gPSBjb2x1bW5zTWFwW25hbWVdO1xuICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgY29sLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBjb2x1bW4ucmVhbFdpZHRoIHx8IGNvbHVtbi53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG9uU2Nyb2xsYWJsZUNoYW5nZTogZnVuY3Rpb24gb25TY3JvbGxhYmxlQ2hhbmdlKGxheW91dCkge1xuICAgICAgdmFyIGNvbHMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdjb2xncm91cCA+IGNvbFtuYW1lPWd1dHRlcl0nKTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gY29scy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbCA9IGNvbHNbaV07XG4gICAgICAgIGNvbC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgbGF5b3V0LnNjcm9sbFkgPyBsYXlvdXQuZ3V0dGVyV2lkdGggOiAnMCcpO1xuICAgICAgfVxuICAgICAgdmFyIHRocyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoLmd1dHRlcicpO1xuICAgICAgZm9yICh2YXIgX2kgPSAwLCBfaiA9IHRocy5sZW5ndGg7IF9pIDwgX2o7IF9pKyspIHtcbiAgICAgICAgdmFyIHRoID0gdGhzW19pXTtcbiAgICAgICAgdGguc3R5bGUud2lkdGggPSBsYXlvdXQuc2Nyb2xsWSA/IGxheW91dC5ndXR0ZXJXaWR0aCArICdweCcgOiAnMCc7XG4gICAgICAgIHRoLnN0eWxlLmRpc3BsYXkgPSBsYXlvdXQuc2Nyb2xsWSA/ICcnIDogJ25vbmUnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS1yb3cuanNcbnZhciB0YWJsZV9yb3dfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYmxlX3JvdyA9ICh7XG4gIG5hbWU6ICdFbFRhYmxlUm93JyxcbiAgcHJvcHM6IFsnY29sdW1ucycsICdyb3cnLCAnaW5kZXgnLCAnaXNTZWxlY3RlZCcsICdpc0V4cGFuZGVkJywgJ3N0b3JlJywgJ2NvbnRleHQnLCAnZmlyc3REZWZhdWx0Q29sdW1uSW5kZXgnLCAndHJlZVJvd0RhdGEnLCAndHJlZUluZGVudCcsICdjb2x1bW5zSGlkZGVuJywgJ2dldFNwYW4nLCAnZ2V0Q29sc3BhblJlYWxXaWR0aCcsICdnZXRDZWxsU3R5bGUnLCAnZ2V0Q2VsbENsYXNzJywgJ2hhbmRsZUNlbGxNb3VzZUxlYXZlJywgJ2hhbmRsZUNlbGxNb3VzZUVudGVyJywgJ2ZpeGVkJ10sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgaCA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuY29sdW1ucyxcbiAgICAgICAgcm93ID0gdGhpcy5yb3csXG4gICAgICAgICRpbmRleCA9IHRoaXMuaW5kZXgsXG4gICAgICAgIHN0b3JlID0gdGhpcy5zdG9yZSxcbiAgICAgICAgY29udGV4dCA9IHRoaXMuY29udGV4dCxcbiAgICAgICAgZmlyc3REZWZhdWx0Q29sdW1uSW5kZXggPSB0aGlzLmZpcnN0RGVmYXVsdENvbHVtbkluZGV4LFxuICAgICAgICB0cmVlUm93RGF0YSA9IHRoaXMudHJlZVJvd0RhdGEsXG4gICAgICAgIHRyZWVJbmRlbnQgPSB0aGlzLnRyZWVJbmRlbnQsXG4gICAgICAgIF9jb2x1bW5zSGlkZGVuID0gdGhpcy5jb2x1bW5zSGlkZGVuLFxuICAgICAgICBjb2x1bW5zSGlkZGVuID0gX2NvbHVtbnNIaWRkZW4gPT09IHVuZGVmaW5lZCA/IFtdIDogX2NvbHVtbnNIaWRkZW4sXG4gICAgICAgIGlzU2VsZWN0ZWQgPSB0aGlzLmlzU2VsZWN0ZWQsXG4gICAgICAgIGlzRXhwYW5kZWQgPSB0aGlzLmlzRXhwYW5kZWQ7XG5cblxuICAgIHJldHVybiBoKCd0cicsIFtjb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uLCBjZWxsSW5kZXgpIHtcbiAgICAgIHZhciBfZ2V0U3BhbiA9IF90aGlzLmdldFNwYW4ocm93LCBjb2x1bW4sICRpbmRleCwgY2VsbEluZGV4KSxcbiAgICAgICAgICByb3dzcGFuID0gX2dldFNwYW4ucm93c3BhbixcbiAgICAgICAgICBjb2xzcGFuID0gX2dldFNwYW4uY29sc3BhbjtcblxuICAgICAgaWYgKCFyb3dzcGFuIHx8ICFjb2xzcGFuKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIGNvbHVtbkRhdGEgPSB0YWJsZV9yb3dfZXh0ZW5kcyh7fSwgY29sdW1uKTtcbiAgICAgIGNvbHVtbkRhdGEucmVhbFdpZHRoID0gX3RoaXMuZ2V0Q29sc3BhblJlYWxXaWR0aChjb2x1bW5zLCBjb2xzcGFuLCBjZWxsSW5kZXgpO1xuICAgICAgdmFyIGRhdGEgPSB7XG4gICAgICAgIHN0b3JlOiBzdG9yZSxcbiAgICAgICAgaXNTZWxlY3RlZDogaXNTZWxlY3RlZCxcbiAgICAgICAgaXNFeHBhbmRlZDogaXNFeHBhbmRlZCxcbiAgICAgICAgX3NlbGY6IGNvbnRleHQsXG4gICAgICAgIGNvbHVtbjogY29sdW1uRGF0YSxcbiAgICAgICAgcm93OiByb3csXG4gICAgICAgICRpbmRleDogJGluZGV4XG4gICAgICB9O1xuICAgICAgaWYgKGNlbGxJbmRleCA9PT0gZmlyc3REZWZhdWx0Q29sdW1uSW5kZXggJiYgdHJlZVJvd0RhdGEpIHtcbiAgICAgICAgZGF0YS50cmVlTm9kZSA9IHtcbiAgICAgICAgICBpbmRlbnQ6IHRyZWVSb3dEYXRhLmxldmVsICogdHJlZUluZGVudCxcbiAgICAgICAgICBsZXZlbDogdHJlZVJvd0RhdGEubGV2ZWxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHR5cGVvZiB0cmVlUm93RGF0YS5leHBhbmRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgZGF0YS50cmVlTm9kZS5leHBhbmRlZCA9IHRyZWVSb3dEYXRhLmV4cGFuZGVkO1xuICAgICAgICAgIC8vIOihqOaYjuaYr+aHkuWKoOi9vVxuICAgICAgICAgIGlmICgnbG9hZGluZycgaW4gdHJlZVJvd0RhdGEpIHtcbiAgICAgICAgICAgIGRhdGEudHJlZU5vZGUubG9hZGluZyA9IHRyZWVSb3dEYXRhLmxvYWRpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgnbm9MYXp5Q2hpbGRyZW4nIGluIHRyZWVSb3dEYXRhKSB7XG4gICAgICAgICAgICBkYXRhLnRyZWVOb2RlLm5vTGF6eUNoaWxkcmVuID0gdHJlZVJvd0RhdGEubm9MYXp5Q2hpbGRyZW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ3RkJyxcbiAgICAgICAge1xuICAgICAgICAgIHN0eWxlOiBfdGhpcy5nZXRDZWxsU3R5bGUoJGluZGV4LCBjZWxsSW5kZXgsIHJvdywgY29sdW1uKSxcbiAgICAgICAgICAnY2xhc3MnOiBfdGhpcy5nZXRDZWxsQ2xhc3MoJGluZGV4LCBjZWxsSW5kZXgsIHJvdywgY29sdW1uKSxcbiAgICAgICAgICBhdHRyczogeyByb3dzcGFuOiByb3dzcGFuLFxuICAgICAgICAgICAgY29sc3BhbjogY29sc3BhblxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgICdtb3VzZWVudGVyJzogZnVuY3Rpb24gbW91c2VlbnRlcigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUNlbGxNb3VzZUVudGVyKCRldmVudCwgcm93KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnbW91c2VsZWF2ZSc6IF90aGlzLmhhbmRsZUNlbGxNb3VzZUxlYXZlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbY29sdW1uLnJlbmRlckNlbGwuY2FsbChfdGhpcy5fcmVuZGVyUHJveHksIF90aGlzLiRjcmVhdGVFbGVtZW50LCBkYXRhLCBjb2x1bW5zSGlkZGVuW2NlbGxJbmRleF0pXVxuICAgICAgKTtcbiAgICB9KV0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLWJvZHkuanNcbnZhciB0YWJsZV9ib2R5X3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbnZhciB0YWJsZV9ib2R5X2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYmxlX2JvZHkgPSAoe1xuICBuYW1lOiAnRWxUYWJsZUJvZHknLFxuXG4gIG1peGluczogW2xheW91dF9vYnNlcnZlcl0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYSxcbiAgICBFbFRvb2x0aXA6IHRvb2x0aXBfZGVmYXVsdC5hLFxuICAgIFRhYmxlUm93OiB0YWJsZV9yb3dcbiAgfSxcblxuICBwcm9wczoge1xuICAgIHN0b3JlOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgc3RyaXBlOiBCb29sZWFuLFxuICAgIGNvbnRleHQ6IHt9LFxuICAgIHJvd0NsYXNzTmFtZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgIHJvd1N0eWxlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgZml4ZWQ6IFN0cmluZyxcbiAgICBoaWdobGlnaHQ6IEJvb2xlYW5cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBkYXRhID0gdGhpcy5kYXRhIHx8IFtdO1xuICAgIHJldHVybiBoKFxuICAgICAgJ3RhYmxlJyxcbiAgICAgIHtcbiAgICAgICAgJ2NsYXNzJzogJ2VsLXRhYmxlX19ib2R5JyxcbiAgICAgICAgYXR0cnM6IHsgY2VsbHNwYWNpbmc6ICcwJyxcbiAgICAgICAgICBjZWxscGFkZGluZzogJzAnLFxuICAgICAgICAgIGJvcmRlcjogJzAnIH1cbiAgICAgIH0sXG4gICAgICBbaCgnY29sZ3JvdXAnLCBbdGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBoKCdjb2wnLCB7XG4gICAgICAgICAgYXR0cnM6IHsgbmFtZTogY29sdW1uLmlkIH0sXG4gICAgICAgICAga2V5OiBjb2x1bW4uaWQgfSk7XG4gICAgICB9KV0pLCBoKCd0Ym9keScsIFtkYXRhLnJlZHVjZShmdW5jdGlvbiAoYWNjLCByb3cpIHtcbiAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQoX3RoaXMud3JhcHBlZFJvd1JlbmRlcihyb3csIGFjYy5sZW5ndGgpKTtcbiAgICAgIH0sIFtdKSwgaCgnZWwtdG9vbHRpcCcsIHtcbiAgICAgICAgYXR0cnM6IHsgZWZmZWN0OiB0aGlzLnRhYmxlLnRvb2x0aXBFZmZlY3QsIHBsYWNlbWVudDogJ3RvcCcsIGNvbnRlbnQ6IHRoaXMudG9vbHRpcENvbnRlbnQgfSxcbiAgICAgICAgcmVmOiAndG9vbHRpcCcgfSldKV1cbiAgICApO1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHRhYmxlX2JvZHlfZXh0ZW5kcyh7XG4gICAgdGFibGU6IGZ1bmN0aW9uIHRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudDtcbiAgICB9XG4gIH0sIG1hcFN0YXRlcyh7XG4gICAgZGF0YTogJ2RhdGEnLFxuICAgIGNvbHVtbnM6ICdjb2x1bW5zJyxcbiAgICB0cmVlSW5kZW50OiAnaW5kZW50JyxcbiAgICBsZWZ0Rml4ZWRMZWFmQ291bnQ6ICdmaXhlZExlYWZDb2x1bW5zTGVuZ3RoJyxcbiAgICByaWdodEZpeGVkTGVhZkNvdW50OiAncmlnaHRGaXhlZExlYWZDb2x1bW5zTGVuZ3RoJyxcbiAgICBjb2x1bW5zQ291bnQ6IGZ1bmN0aW9uIGNvbHVtbnNDb3VudChzdGF0ZXMpIHtcbiAgICAgIHJldHVybiBzdGF0ZXMuY29sdW1ucy5sZW5ndGg7XG4gICAgfSxcbiAgICBsZWZ0Rml4ZWRDb3VudDogZnVuY3Rpb24gbGVmdEZpeGVkQ291bnQoc3RhdGVzKSB7XG4gICAgICByZXR1cm4gc3RhdGVzLmZpeGVkQ29sdW1ucy5sZW5ndGg7XG4gICAgfSxcbiAgICByaWdodEZpeGVkQ291bnQ6IGZ1bmN0aW9uIHJpZ2h0Rml4ZWRDb3VudChzdGF0ZXMpIHtcbiAgICAgIHJldHVybiBzdGF0ZXMucmlnaHRGaXhlZENvbHVtbnMubGVuZ3RoO1xuICAgIH0sXG4gICAgaGFzRXhwYW5kQ29sdW1uOiBmdW5jdGlvbiBoYXNFeHBhbmRDb2x1bW4oc3RhdGVzKSB7XG4gICAgICByZXR1cm4gc3RhdGVzLmNvbHVtbnMuc29tZShmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICB2YXIgdHlwZSA9IF9yZWYudHlwZTtcbiAgICAgICAgcmV0dXJuIHR5cGUgPT09ICdleHBhbmQnO1xuICAgICAgfSk7XG4gICAgfVxuICB9KSwge1xuICAgIGNvbHVtbnNIaWRkZW46IGZ1bmN0aW9uIGNvbHVtbnNIaWRkZW4oKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5pc0NvbHVtbkhpZGRlbihpbmRleCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGZpcnN0RGVmYXVsdENvbHVtbkluZGV4OiBmdW5jdGlvbiBmaXJzdERlZmF1bHRDb2x1bW5JbmRleCgpIHtcbiAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRJbmRleFwiXSkodGhpcy5jb2x1bW5zLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgdmFyIHR5cGUgPSBfcmVmMi50eXBlO1xuICAgICAgICByZXR1cm4gdHlwZSA9PT0gJ2RlZmF1bHQnO1xuICAgICAgfSk7XG4gICAgfVxuICB9KSxcblxuICB3YXRjaDoge1xuICAgIC8vIGRvbid0IHRyaWdnZXIgZ2V0dGVyIG9mIGN1cnJlbnRSb3cgaW4gZ2V0Q2VsbENsYXNzLiBzZWUgaHR0cHM6Ly9qc2ZpZGRsZS5uZXQvb2UyYjRocXQvXG4gICAgLy8gdXBkYXRlIERPTSBtYW51YWxseS4gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvcHVsbC8xMzk1NC9maWxlcyNkaWZmLTliNDUwYzAwZDBhOWRlYzBmZmFkNWEzMTc2OTcyZTQwXG4gICAgJ3N0b3JlLnN0YXRlcy5ob3ZlclJvdyc6IGZ1bmN0aW9uIHN0b3JlU3RhdGVzSG92ZXJSb3cobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuc3RvcmUuc3RhdGVzLmlzQ29tcGxleCB8fCB0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgdmFyIHJhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gICAgICBpZiAoIXJhZikge1xuICAgICAgICByYWYgPSBmdW5jdGlvbiByYWYoZm4pIHtcbiAgICAgICAgICByZXR1cm4gc2V0VGltZW91dChmbiwgMTYpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmFmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJvd3MgPSBfdGhpczMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5lbC10YWJsZV9fcm93Jyk7XG4gICAgICAgIHZhciBvbGRSb3cgPSByb3dzW29sZFZhbF07XG4gICAgICAgIHZhciBuZXdSb3cgPSByb3dzW25ld1ZhbF07XG4gICAgICAgIGlmIChvbGRSb3cpIHtcbiAgICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKShvbGRSb3csICdob3Zlci1yb3cnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3Um93KSB7XG4gICAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkobmV3Um93LCAnaG92ZXItcm93Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b29sdGlwQ29udGVudDogJydcbiAgICB9O1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuYWN0aXZhdGVUb29sdGlwID0gZGVib3VuY2VfZGVmYXVsdCgpKDUwLCBmdW5jdGlvbiAodG9vbHRpcCkge1xuICAgICAgcmV0dXJuIHRvb2x0aXAuaGFuZGxlU2hvd1BvcHBlcigpO1xuICAgIH0pO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEtleU9mUm93OiBmdW5jdGlvbiBnZXRLZXlPZlJvdyhyb3csIGluZGV4KSB7XG4gICAgICB2YXIgcm93S2V5ID0gdGhpcy50YWJsZS5yb3dLZXk7XG4gICAgICBpZiAocm93S2V5KSB7XG4gICAgICAgIHJldHVybiBnZXRSb3dJZGVudGl0eShyb3csIHJvd0tleSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfSxcbiAgICBpc0NvbHVtbkhpZGRlbjogZnVuY3Rpb24gaXNDb2x1bW5IaWRkZW4oaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmZpeGVkID09PSB0cnVlIHx8IHRoaXMuZml4ZWQgPT09ICdsZWZ0Jykge1xuICAgICAgICByZXR1cm4gaW5kZXggPj0gdGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZml4ZWQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5jb2x1bW5zQ291bnQgLSB0aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW5kZXggPCB0aGlzLmxlZnRGaXhlZExlYWZDb3VudCB8fCBpbmRleCA+PSB0aGlzLmNvbHVtbnNDb3VudCAtIHRoaXMucmlnaHRGaXhlZExlYWZDb3VudDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFNwYW46IGZ1bmN0aW9uIGdldFNwYW4ocm93LCBjb2x1bW4sIHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgICAgdmFyIHJvd3NwYW4gPSAxO1xuICAgICAgdmFyIGNvbHNwYW4gPSAxO1xuICAgICAgdmFyIGZuID0gdGhpcy50YWJsZS5zcGFuTWV0aG9kO1xuICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgcmVzdWx0ID0gZm4oe1xuICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByb3dzcGFuID0gcmVzdWx0WzBdO1xuICAgICAgICAgIGNvbHNwYW4gPSByZXN1bHRbMV07XG4gICAgICAgIH0gZWxzZSBpZiAoKHR5cGVvZiByZXN1bHQgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiB0YWJsZV9ib2R5X3R5cGVvZihyZXN1bHQpKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByb3dzcGFuID0gcmVzdWx0LnJvd3NwYW47XG4gICAgICAgICAgY29sc3BhbiA9IHJlc3VsdC5jb2xzcGFuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyByb3dzcGFuOiByb3dzcGFuLCBjb2xzcGFuOiBjb2xzcGFuIH07XG4gICAgfSxcbiAgICBnZXRSb3dTdHlsZTogZnVuY3Rpb24gZ2V0Um93U3R5bGUocm93LCByb3dJbmRleCkge1xuICAgICAgdmFyIHJvd1N0eWxlID0gdGhpcy50YWJsZS5yb3dTdHlsZTtcbiAgICAgIGlmICh0eXBlb2Ygcm93U3R5bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHJvd1N0eWxlLmNhbGwobnVsbCwge1xuICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByb3dTdHlsZSB8fCBudWxsO1xuICAgIH0sXG4gICAgZ2V0Um93Q2xhc3M6IGZ1bmN0aW9uIGdldFJvd0NsYXNzKHJvdywgcm93SW5kZXgpIHtcbiAgICAgIHZhciBjbGFzc2VzID0gWydlbC10YWJsZV9fcm93J107XG4gICAgICBpZiAodGhpcy50YWJsZS5oaWdobGlnaHRDdXJyZW50Um93ICYmIHJvdyA9PT0gdGhpcy5zdG9yZS5zdGF0ZXMuY3VycmVudFJvdykge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2N1cnJlbnQtcm93Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0cmlwZSAmJiByb3dJbmRleCAlIDIgPT09IDEpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdlbC10YWJsZV9fcm93LS1zdHJpcGVkJyk7XG4gICAgICB9XG4gICAgICB2YXIgcm93Q2xhc3NOYW1lID0gdGhpcy50YWJsZS5yb3dDbGFzc05hbWU7XG4gICAgICBpZiAodHlwZW9mIHJvd0NsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKHJvd0NsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dDbGFzc05hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKHJvd0NsYXNzTmFtZS5jYWxsKG51bGwsIHtcbiAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICByb3dJbmRleDogcm93SW5kZXhcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zdG9yZS5zdGF0ZXMuZXhwYW5kUm93cy5pbmRleE9mKHJvdykgPiAtMSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2V4cGFuZGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgIH0sXG4gICAgZ2V0Q2VsbFN0eWxlOiBmdW5jdGlvbiBnZXRDZWxsU3R5bGUocm93SW5kZXgsIGNvbHVtbkluZGV4LCByb3csIGNvbHVtbikge1xuICAgICAgdmFyIGNlbGxTdHlsZSA9IHRoaXMudGFibGUuY2VsbFN0eWxlO1xuICAgICAgaWYgKHR5cGVvZiBjZWxsU3R5bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNlbGxTdHlsZS5jYWxsKG51bGwsIHtcbiAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNlbGxTdHlsZTtcbiAgICB9LFxuICAgIGdldENlbGxDbGFzczogZnVuY3Rpb24gZ2V0Q2VsbENsYXNzKHJvd0luZGV4LCBjb2x1bW5JbmRleCwgcm93LCBjb2x1bW4pIHtcbiAgICAgIHZhciBjbGFzc2VzID0gW2NvbHVtbi5pZCwgY29sdW1uLmFsaWduLCBjb2x1bW4uY2xhc3NOYW1lXTtcblxuICAgICAgaWYgKHRoaXMuaXNDb2x1bW5IaWRkZW4oY29sdW1uSW5kZXgpKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnaXMtaGlkZGVuJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjZWxsQ2xhc3NOYW1lID0gdGhpcy50YWJsZS5jZWxsQ2xhc3NOYW1lO1xuICAgICAgaWYgKHR5cGVvZiBjZWxsQ2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbGFzc2VzLnB1c2goY2VsbENsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjZWxsQ2xhc3NOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChjZWxsQ2xhc3NOYW1lLmNhbGwobnVsbCwge1xuICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgY29sdW1uOiBjb2x1bW5cbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBjbGFzc2VzLnB1c2goJ2VsLXRhYmxlX19jZWxsJyk7XG5cbiAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgICB9LFxuICAgIGdldENvbHNwYW5SZWFsV2lkdGg6IGZ1bmN0aW9uIGdldENvbHNwYW5SZWFsV2lkdGgoY29sdW1ucywgY29sc3BhbiwgaW5kZXgpIHtcbiAgICAgIGlmIChjb2xzcGFuIDwgMSkge1xuICAgICAgICByZXR1cm4gY29sdW1uc1tpbmRleF0ucmVhbFdpZHRoO1xuICAgICAgfVxuICAgICAgdmFyIHdpZHRoQXJyID0gY29sdW1ucy5tYXAoZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICAgIHZhciByZWFsV2lkdGggPSBfcmVmMy5yZWFsV2lkdGg7XG4gICAgICAgIHJldHVybiByZWFsV2lkdGg7XG4gICAgICB9KS5zbGljZShpbmRleCwgaW5kZXggKyBjb2xzcGFuKTtcbiAgICAgIHJldHVybiB3aWR0aEFyci5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGFjYyArIHdpZHRoO1xuICAgICAgfSwgLTEpO1xuICAgIH0sXG4gICAgaGFuZGxlQ2VsbE1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZUNlbGxNb3VzZUVudGVyKGV2ZW50LCByb3cpIHtcbiAgICAgIHZhciB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgICB2YXIgY2VsbCA9IGdldENlbGwoZXZlbnQpO1xuXG4gICAgICBpZiAoY2VsbCkge1xuICAgICAgICB2YXIgY29sdW1uID0gZ2V0Q29sdW1uQnlDZWxsKHRhYmxlLCBjZWxsKTtcbiAgICAgICAgdmFyIGhvdmVyU3RhdGUgPSB0YWJsZS5ob3ZlclN0YXRlID0geyBjZWxsOiBjZWxsLCBjb2x1bW46IGNvbHVtbiwgcm93OiByb3cgfTtcbiAgICAgICAgdGFibGUuJGVtaXQoJ2NlbGwtbW91c2UtZW50ZXInLCBob3ZlclN0YXRlLnJvdywgaG92ZXJTdGF0ZS5jb2x1bW4sIGhvdmVyU3RhdGUuY2VsbCwgZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyDliKTmlq3mmK/lkKZ0ZXh0LW92ZXJmbG93LCDlpoLmnpzmmK/lsLHmmL7npLp0b29sdGlwXG4gICAgICB2YXIgY2VsbENoaWxkID0gZXZlbnQudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJy5jZWxsJyk7XG4gICAgICBpZiAoIShPYmplY3QoZG9tX1tcImhhc0NsYXNzXCJdKShjZWxsQ2hpbGQsICdlbC10b29sdGlwJykgJiYgY2VsbENoaWxkLmNoaWxkTm9kZXMubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyB1c2UgcmFuZ2Ugd2lkdGggaW5zdGVhZCBvZiBzY3JvbGxXaWR0aCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdGV4dCBpcyBvdmVyZmxvd2luZ1xuICAgICAgLy8gdG8gYWRkcmVzcyBhIHBvdGVudGlhbCBGaXJlRm94IGJ1ZzogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3NDU0MyNjM1xuICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNldFN0YXJ0KGNlbGxDaGlsZCwgMCk7XG4gICAgICByYW5nZS5zZXRFbmQoY2VsbENoaWxkLCBjZWxsQ2hpbGQuY2hpbGROb2Rlcy5sZW5ndGgpO1xuICAgICAgdmFyIHJhbmdlV2lkdGggPSByYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIHZhciBwYWRkaW5nID0gKHBhcnNlSW50KE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGNlbGxDaGlsZCwgJ3BhZGRpbmdMZWZ0JyksIDEwKSB8fCAwKSArIChwYXJzZUludChPYmplY3QoZG9tX1tcImdldFN0eWxlXCJdKShjZWxsQ2hpbGQsICdwYWRkaW5nUmlnaHQnKSwgMTApIHx8IDApO1xuICAgICAgaWYgKChyYW5nZVdpZHRoICsgcGFkZGluZyA+IGNlbGxDaGlsZC5vZmZzZXRXaWR0aCB8fCBjZWxsQ2hpbGQuc2Nyb2xsV2lkdGggPiBjZWxsQ2hpbGQub2Zmc2V0V2lkdGgpICYmIHRoaXMuJHJlZnMudG9vbHRpcCkge1xuICAgICAgICB2YXIgdG9vbHRpcCA9IHRoaXMuJHJlZnMudG9vbHRpcDtcbiAgICAgICAgLy8gVE9ETyDkvJrlvJXotbfmlbTkuKogVGFibGUg55qE6YeN5paw5riy5p+T77yM6ZyA6KaB5LyY5YyWXG4gICAgICAgIHRoaXMudG9vbHRpcENvbnRlbnQgPSBjZWxsLmlubmVyVGV4dCB8fCBjZWxsLnRleHRDb250ZW50O1xuICAgICAgICB0b29sdGlwLnJlZmVyZW5jZUVsbSA9IGNlbGw7XG4gICAgICAgIHRvb2x0aXAuJHJlZnMucG9wcGVyICYmICh0b29sdGlwLiRyZWZzLnBvcHBlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKTtcbiAgICAgICAgdG9vbHRpcC5kb0Rlc3Ryb3koKTtcbiAgICAgICAgdG9vbHRpcC5zZXRFeHBlY3RlZFN0YXRlKHRydWUpO1xuICAgICAgICB0aGlzLmFjdGl2YXRlVG9vbHRpcCh0b29sdGlwKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNlbGxNb3VzZUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVDZWxsTW91c2VMZWF2ZShldmVudCkge1xuICAgICAgdmFyIHRvb2x0aXAgPSB0aGlzLiRyZWZzLnRvb2x0aXA7XG4gICAgICBpZiAodG9vbHRpcCkge1xuICAgICAgICB0b29sdGlwLnNldEV4cGVjdGVkU3RhdGUoZmFsc2UpO1xuICAgICAgICB0b29sdGlwLmhhbmRsZUNsb3NlUG9wcGVyKCk7XG4gICAgICB9XG4gICAgICB2YXIgY2VsbCA9IGdldENlbGwoZXZlbnQpO1xuICAgICAgaWYgKCFjZWxsKSByZXR1cm47XG5cbiAgICAgIHZhciBvbGRIb3ZlclN0YXRlID0gdGhpcy50YWJsZS5ob3ZlclN0YXRlIHx8IHt9O1xuICAgICAgdGhpcy50YWJsZS4kZW1pdCgnY2VsbC1tb3VzZS1sZWF2ZScsIG9sZEhvdmVyU3RhdGUucm93LCBvbGRIb3ZlclN0YXRlLmNvbHVtbiwgb2xkSG92ZXJTdGF0ZS5jZWxsLCBldmVudCk7XG4gICAgfSxcblxuXG4gICAgaGFuZGxlTW91c2VFbnRlcjogZGVib3VuY2VfZGVmYXVsdCgpKDMwLCBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdzZXRIb3ZlclJvdycsIGluZGV4KTtcbiAgICB9KSxcblxuICAgIGhhbmRsZU1vdXNlTGVhdmU6IGRlYm91bmNlX2RlZmF1bHQoKSgzMCwgZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3NldEhvdmVyUm93JywgbnVsbCk7XG4gICAgfSksXG5cbiAgICBoYW5kbGVDb250ZXh0TWVudTogZnVuY3Rpb24gaGFuZGxlQ29udGV4dE1lbnUoZXZlbnQsIHJvdykge1xuICAgICAgdGhpcy5oYW5kbGVFdmVudChldmVudCwgcm93LCAnY29udGV4dG1lbnUnKTtcbiAgICB9LFxuICAgIGhhbmRsZURvdWJsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVEb3VibGVDbGljayhldmVudCwgcm93KSB7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50KGV2ZW50LCByb3csICdkYmxjbGljaycpO1xuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50LCByb3cpIHtcbiAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdzZXRDdXJyZW50Um93Jywgcm93KTtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQoZXZlbnQsIHJvdywgJ2NsaWNrJyk7XG4gICAgfSxcbiAgICBoYW5kbGVFdmVudDogZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnQsIHJvdywgbmFtZSkge1xuICAgICAgdmFyIHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICAgIHZhciBjZWxsID0gZ2V0Q2VsbChldmVudCk7XG4gICAgICB2YXIgY29sdW1uID0gdm9pZCAwO1xuICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgY29sdW1uID0gZ2V0Q29sdW1uQnlDZWxsKHRhYmxlLCBjZWxsKTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIHRhYmxlLiRlbWl0KCdjZWxsLScgKyBuYW1lLCByb3csIGNvbHVtbiwgY2VsbCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0YWJsZS4kZW1pdCgncm93LScgKyBuYW1lLCByb3csIGNvbHVtbiwgZXZlbnQpO1xuICAgIH0sXG4gICAgcm93UmVuZGVyOiBmdW5jdGlvbiByb3dSZW5kZXIocm93LCAkaW5kZXgsIHRyZWVSb3dEYXRhKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGggPSB0aGlzLiRjcmVhdGVFbGVtZW50O1xuICAgICAgdmFyIHRyZWVJbmRlbnQgPSB0aGlzLnRyZWVJbmRlbnQsXG4gICAgICAgICAgY29sdW1ucyA9IHRoaXMuY29sdW1ucyxcbiAgICAgICAgICBmaXJzdERlZmF1bHRDb2x1bW5JbmRleCA9IHRoaXMuZmlyc3REZWZhdWx0Q29sdW1uSW5kZXg7XG5cbiAgICAgIHZhciByb3dDbGFzc2VzID0gdGhpcy5nZXRSb3dDbGFzcyhyb3csICRpbmRleCk7XG4gICAgICB2YXIgZGlzcGxheSA9IHRydWU7XG4gICAgICBpZiAodHJlZVJvd0RhdGEpIHtcbiAgICAgICAgcm93Q2xhc3Nlcy5wdXNoKCdlbC10YWJsZV9fcm93LS1sZXZlbC0nICsgdHJlZVJvd0RhdGEubGV2ZWwpO1xuICAgICAgICBkaXNwbGF5ID0gdHJlZVJvd0RhdGEuZGlzcGxheTtcbiAgICAgIH1cbiAgICAgIC8vIOaMh+S7pCB2LXNob3cg5Lya6KaG55uWIHJvdy1zdHlsZSDkuK0gZGlzcGxheVxuICAgICAgLy8g5L2/55SoIDpzdHlsZSDku6Pmm78gdi1zaG93IGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE2OTk1XG4gICAgICB2YXIgZGlzcGxheVN0eWxlID0gZGlzcGxheSA/IG51bGwgOiB7XG4gICAgICAgIGRpc3BsYXk6ICdub25lJ1xuICAgICAgfTtcbiAgICAgIHJldHVybiBoKHRhYmxlX3Jvdywge1xuICAgICAgICBzdHlsZTogW2Rpc3BsYXlTdHlsZSwgdGhpcy5nZXRSb3dTdHlsZShyb3csICRpbmRleCldLFxuICAgICAgICAnY2xhc3MnOiByb3dDbGFzc2VzLFxuICAgICAgICBrZXk6IHRoaXMuZ2V0S2V5T2ZSb3cocm93LCAkaW5kZXgpLFxuICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICdkYmxjbGljayc6IGZ1bmN0aW9uIGRibGNsaWNrKCRldmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5oYW5kbGVEb3VibGVDbGljaygkZXZlbnQsIHJvdyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAnY2xpY2snOiBmdW5jdGlvbiBjbGljaygkZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuaGFuZGxlQ2xpY2soJGV2ZW50LCByb3cpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2NvbnRleHRtZW51JzogZnVuY3Rpb24gY29udGV4dG1lbnUoJGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LmhhbmRsZUNvbnRleHRNZW51KCRldmVudCwgcm93KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdtb3VzZWVudGVyJzogZnVuY3Rpb24gbW91c2VlbnRlcihfKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXM0LmhhbmRsZU1vdXNlRW50ZXIoJGluZGV4KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICdtb3VzZWxlYXZlJzogdGhpcy5oYW5kbGVNb3VzZUxlYXZlXG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgICByb3c6IHJvdyxcbiAgICAgICAgICBpbmRleDogJGluZGV4LFxuICAgICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dCB8fCB0aGlzLnRhYmxlLiR2bm9kZS5jb250ZXh0LFxuICAgICAgICAgIGZpcnN0RGVmYXVsdENvbHVtbkluZGV4OiBmaXJzdERlZmF1bHRDb2x1bW5JbmRleCxcbiAgICAgICAgICB0cmVlUm93RGF0YTogdHJlZVJvd0RhdGEsXG4gICAgICAgICAgdHJlZUluZGVudDogdHJlZUluZGVudCxcbiAgICAgICAgICBjb2x1bW5zSGlkZGVuOiB0aGlzLmNvbHVtbnNIaWRkZW4sXG4gICAgICAgICAgZ2V0U3BhbjogdGhpcy5nZXRTcGFuLFxuICAgICAgICAgIGdldENvbHNwYW5SZWFsV2lkdGg6IHRoaXMuZ2V0Q29sc3BhblJlYWxXaWR0aCxcbiAgICAgICAgICBnZXRDZWxsU3R5bGU6IHRoaXMuZ2V0Q2VsbFN0eWxlLFxuICAgICAgICAgIGdldENlbGxDbGFzczogdGhpcy5nZXRDZWxsQ2xhc3MsXG4gICAgICAgICAgaGFuZGxlQ2VsbE1vdXNlRW50ZXI6IHRoaXMuaGFuZGxlQ2VsbE1vdXNlRW50ZXIsXG4gICAgICAgICAgaGFuZGxlQ2VsbE1vdXNlTGVhdmU6IHRoaXMuaGFuZGxlQ2VsbE1vdXNlTGVhdmUsXG4gICAgICAgICAgaXNTZWxlY3RlZDogdGhpcy5zdG9yZS5pc1NlbGVjdGVkKHJvdyksXG4gICAgICAgICAgaXNFeHBhbmRlZDogdGhpcy5zdG9yZS5zdGF0ZXMuZXhwYW5kUm93cy5pbmRleE9mKHJvdykgPiAtMSxcbiAgICAgICAgICBmaXhlZDogdGhpcy5maXhlZFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHdyYXBwZWRSb3dSZW5kZXI6IGZ1bmN0aW9uIHdyYXBwZWRSb3dSZW5kZXIocm93LCAkaW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgaCA9IHRoaXMuJGNyZWF0ZUVsZW1lbnQ7XG5cbiAgICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgICB2YXIgaXNSb3dFeHBhbmRlZCA9IHN0b3JlLmlzUm93RXhwYW5kZWQsXG4gICAgICAgICAgYXNzZXJ0Um93S2V5ID0gc3RvcmUuYXNzZXJ0Um93S2V5O1xuICAgICAgdmFyIF9zdG9yZSRzdGF0ZXMgPSBzdG9yZS5zdGF0ZXMsXG4gICAgICAgICAgdHJlZURhdGEgPSBfc3RvcmUkc3RhdGVzLnRyZWVEYXRhLFxuICAgICAgICAgIGxhenlUcmVlTm9kZU1hcCA9IF9zdG9yZSRzdGF0ZXMubGF6eVRyZWVOb2RlTWFwLFxuICAgICAgICAgIGNoaWxkcmVuQ29sdW1uTmFtZSA9IF9zdG9yZSRzdGF0ZXMuY2hpbGRyZW5Db2x1bW5OYW1lLFxuICAgICAgICAgIHJvd0tleSA9IF9zdG9yZSRzdGF0ZXMucm93S2V5O1xuXG4gICAgICBpZiAodGhpcy5oYXNFeHBhbmRDb2x1bW4gJiYgaXNSb3dFeHBhbmRlZChyb3cpKSB7XG4gICAgICAgIHZhciByZW5kZXJFeHBhbmRlZCA9IHRoaXMudGFibGUucmVuZGVyRXhwYW5kZWQ7XG4gICAgICAgIHZhciB0ciA9IHRoaXMucm93UmVuZGVyKHJvdywgJGluZGV4KTtcbiAgICAgICAgaWYgKCFyZW5kZXJFeHBhbmRlZCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tFbGVtZW50IEVycm9yXXJlbmRlckV4cGFuZGVkIGlzIHJlcXVpcmVkLicpO1xuICAgICAgICAgIHJldHVybiB0cjtcbiAgICAgICAgfVxuICAgICAgICAvLyDkvb/nlKjkuoznu7TmlbDnu4TvvIzpgb/lhY3kv67mlLkgJGluZGV4XG4gICAgICAgIHJldHVybiBbW3RyLCBoKFxuICAgICAgICAgICd0cicsXG4gICAgICAgICAgeyBrZXk6ICdleHBhbmRlZC1yb3dfXycgKyB0ci5rZXkgfSxcbiAgICAgICAgICBbaChcbiAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7IGNvbHNwYW46IHRoaXMuY29sdW1uc0NvdW50IH0sXG4gICAgICAgICAgICAgICdjbGFzcyc6ICdlbC10YWJsZV9fY2VsbCBlbC10YWJsZV9fZXhwYW5kZWQtY2VsbCcgfSxcbiAgICAgICAgICAgIFtyZW5kZXJFeHBhbmRlZCh0aGlzLiRjcmVhdGVFbGVtZW50LCB7IHJvdzogcm93LCAkaW5kZXg6ICRpbmRleCwgc3RvcmU6IHRoaXMuc3RvcmUgfSldXG4gICAgICAgICAgKV1cbiAgICAgICAgKV1dO1xuICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyh0cmVlRGF0YSkubGVuZ3RoKSB7XG4gICAgICAgIGFzc2VydFJvd0tleSgpO1xuICAgICAgICAvLyBUcmVlVGFibGUg5pe277yMcm93S2V5IOW/hemhu+eUseeUqOaIt+iuvuWumu+8jOS4jeS9v+eUqCBnZXRLZXlPZlJvdyDorqHnrpdcbiAgICAgICAgLy8g5Zyo6LCD55SoIHJvd1JlbmRlciDlh73mlbDml7bvvIzku43nhLbkvJrorqHnrpcgcm93S2V577yM5LiN5aSq5aW955qE5pON5L2cXG4gICAgICAgIHZhciBrZXkgPSBnZXRSb3dJZGVudGl0eShyb3csIHJvd0tleSk7XG4gICAgICAgIHZhciBjdXIgPSB0cmVlRGF0YVtrZXldO1xuICAgICAgICB2YXIgdHJlZVJvd0RhdGEgPSBudWxsO1xuICAgICAgICBpZiAoY3VyKSB7XG4gICAgICAgICAgdHJlZVJvd0RhdGEgPSB7XG4gICAgICAgICAgICBleHBhbmRlZDogY3VyLmV4cGFuZGVkLFxuICAgICAgICAgICAgbGV2ZWw6IGN1ci5sZXZlbCxcbiAgICAgICAgICAgIGRpc3BsYXk6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0eXBlb2YgY3VyLmxhenkgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXIubG9hZGVkID09PSAnYm9vbGVhbicgJiYgY3VyLmxvYWRlZCkge1xuICAgICAgICAgICAgICB0cmVlUm93RGF0YS5ub0xhenlDaGlsZHJlbiA9ICEoY3VyLmNoaWxkcmVuICYmIGN1ci5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJlZVJvd0RhdGEubG9hZGluZyA9IGN1ci5sb2FkaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgdG1wID0gW3RoaXMucm93UmVuZGVyKHJvdywgJGluZGV4LCB0cmVlUm93RGF0YSldO1xuICAgICAgICAvLyDmuLLmn5PltYzlpZfmlbDmja5cbiAgICAgICAgaWYgKGN1cikge1xuICAgICAgICAgIC8vIGN1cnJlbnRSb3cg6K6w5b2V55qE5pivIGluZGV477yM5omA5Lul6L+Y6ZyA5Li75Yqo5aKe5YqgIFRyZWVUYWJsZSDnmoQgaW5kZXhcbiAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgdmFyIHRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2UoY2hpbGRyZW4sIHBhcmVudCkge1xuICAgICAgICAgICAgaWYgKCEoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoICYmIHBhcmVudCkpIHJldHVybjtcbiAgICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgLy8g54i26IqC54K555qEIGRpc3BsYXkg54q25oCB5b2x5ZON5a2Q6IqC54K555qE5pi+56S654q25oCBXG4gICAgICAgICAgICAgIHZhciBpbm5lclRyZWVSb3dEYXRhID0ge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IHBhcmVudC5kaXNwbGF5ICYmIHBhcmVudC5leHBhbmRlZCxcbiAgICAgICAgICAgICAgICBsZXZlbDogcGFyZW50LmxldmVsICsgMVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB2YXIgY2hpbGRLZXkgPSBnZXRSb3dJZGVudGl0eShub2RlLCByb3dLZXkpO1xuICAgICAgICAgICAgICBpZiAoY2hpbGRLZXkgPT09IHVuZGVmaW5lZCB8fCBjaGlsZEtleSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZm9yIG5lc3RlZCBkYXRhIGl0ZW0sIHJvdy1rZXkgaXMgcmVxdWlyZWQuJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY3VyID0gdGFibGVfYm9keV9leHRlbmRzKHt9LCB0cmVlRGF0YVtjaGlsZEtleV0pO1xuICAgICAgICAgICAgICAvLyDlr7nkuo7lvZPliY3oioLngrnvvIzliIbmiJDmnInml6DlrZDoioLngrnkuKTnp43mg4XlhrXjgIJcbiAgICAgICAgICAgICAgLy8g5aaC5p6c5YyF5ZCr5a2Q6IqC54K555qE77yM6K6+572uIGV4cGFuZGVkIOWxnuaAp+OAglxuICAgICAgICAgICAgICAvLyDlr7nkuo7lroPlrZDoioLngrnnmoQgZGlzcGxheSDlsZ7mgKfnlLHlroPmnKzouqvnmoQgZXhwYW5kZWQg5LiOIGRpc3BsYXkg5YWx5ZCM5Yaz5a6a44CCXG4gICAgICAgICAgICAgIGlmIChjdXIpIHtcbiAgICAgICAgICAgICAgICBpbm5lclRyZWVSb3dEYXRhLmV4cGFuZGVkID0gY3VyLmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIC8vIOaHkuWKoOi9veeahOafkOS6m+iKgueCue+8jGxldmVsIOacquefpVxuICAgICAgICAgICAgICAgIGN1ci5sZXZlbCA9IGN1ci5sZXZlbCB8fCBpbm5lclRyZWVSb3dEYXRhLmxldmVsO1xuICAgICAgICAgICAgICAgIGN1ci5kaXNwbGF5ID0gISEoY3VyLmV4cGFuZGVkICYmIGlubmVyVHJlZVJvd0RhdGEuZGlzcGxheSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXIubGF6eSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1ci5sb2FkZWQgPT09ICdib29sZWFuJyAmJiBjdXIubG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyVHJlZVJvd0RhdGEubm9MYXp5Q2hpbGRyZW4gPSAhKGN1ci5jaGlsZHJlbiAmJiBjdXIuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlubmVyVHJlZVJvd0RhdGEubG9hZGluZyA9IGN1ci5sb2FkaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKF90aGlzNS5yb3dSZW5kZXIobm9kZSwgJGluZGV4ICsgaSwgaW5uZXJUcmVlUm93RGF0YSkpO1xuICAgICAgICAgICAgICBpZiAoY3VyKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9ub2RlcyA9IGxhenlUcmVlTm9kZU1hcFtjaGlsZEtleV0gfHwgbm9kZVtjaGlsZHJlbkNvbHVtbk5hbWVdO1xuICAgICAgICAgICAgICAgIHRyYXZlcnNlKF9ub2RlcywgY3VyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICAvLyDlr7nkuo4gcm9vdCDoioLngrnvvIxkaXNwbGF5IOS4gOWumuS4uiB0cnVlXG4gICAgICAgICAgY3VyLmRpc3BsYXkgPSB0cnVlO1xuICAgICAgICAgIHZhciBub2RlcyA9IGxhenlUcmVlTm9kZU1hcFtrZXldIHx8IHJvd1tjaGlsZHJlbkNvbHVtbk5hbWVdO1xuICAgICAgICAgIHRyYXZlcnNlKG5vZGVzLCBjdXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0bXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dSZW5kZXIocm93LCAkaW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYmxlL3NyYy9maWx0ZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmMmM5MTlmJlxudmFyIGZpbHRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmMmM5MTlmX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRyYW5zaXRpb25cIiwgeyBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSB9LCBbXG4gICAgX3ZtLm11bHRpcGxlXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVPdXRzaWRlQ2xpY2ssXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVPdXRzaWRlQ2xpY2tcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dQb3BwZXIsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93UG9wcGVyXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC10YWJsZS1maWx0ZXJfX2NvbnRlbnRcIiB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImVsLXNjcm9sbGJhclwiLFxuICAgICAgICAgICAgICAgICAgeyBhdHRyczogeyBcIndyYXAtY2xhc3NcIjogXCJlbC10YWJsZS1maWx0ZXJfX3dyYXBcIiB9IH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiZWwtY2hlY2tib3gtZ3JvdXBcIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZS1maWx0ZXJfX2NoZWNrYm94LWdyb3VwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmZpbHRlcmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZmlsdGVyZWRWYWx1ZSA9ICQkdlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImZpbHRlcmVkVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5maWx0ZXJzLCBmdW5jdGlvbihmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1jaGVja2JveFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IGtleTogZmlsdGVyLnZhbHVlLCBhdHRyczogeyBsYWJlbDogZmlsdGVyLnZhbHVlIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoZmlsdGVyLnRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10YWJsZS1maWx0ZXJfX2JvdHRvbVwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6IF92bS5maWx0ZXJlZFZhbHVlLmxlbmd0aCA9PT0gMCB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6IF92bS5maWx0ZXJlZFZhbHVlLmxlbmd0aCA9PT0gMCB9LFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDb25maXJtIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwudGFibGUuY29uZmlybUZpbHRlclwiKSkpXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7IG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlUmVzZXQgfSB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udChcImVsLnRhYmxlLnJlc2V0RmlsdGVyXCIpKSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICA6IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVPdXRzaWRlQ2xpY2ssXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVPdXRzaWRlQ2xpY2tcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dQb3BwZXIsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93UG9wcGVyXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlclwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXRhYmxlLWZpbHRlcl9fbGlzdFwiIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGFibGUtZmlsdGVyX19saXN0LWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcImlzLWFjdGl2ZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmZpbHRlclZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5maWx0ZXJWYWx1ZSA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVTZWxlY3QobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0udChcImVsLnRhYmxlLmNsZWFyRmlsdGVyXCIpKSldXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLmZpbHRlcnMsIGZ1bmN0aW9uKGZpbHRlcikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGZpbHRlci52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWJsZS1maWx0ZXJfX2xpc3QtaXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtYWN0aXZlXCI6IF92bS5pc0FjdGl2ZShmaWx0ZXIpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgbGFiZWw6IGZpbHRlci52YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVTZWxlY3QoZmlsdGVyLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoZmlsdGVyLnRleHQpKV1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAyXG4gICAgICAgICAgICApXG4gICAgICAgICAgXVxuICAgICAgICApXG4gIF0pXG59XG52YXIgZmlsdGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2YyYzkxOWZfc3RhdGljUmVuZGVyRm5zID0gW11cbmZpbHRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmMmM5MTlmX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2ZpbHRlci1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2YyYzkxOWYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL2Ryb3Bkb3duLmpzXG5cbnZhciBkcm9wZG93bnMgPSBbXTtcblxuIWV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEucHJvdG90eXBlLiRpc1NlcnZlciAmJiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkge1xuICBkcm9wZG93bnMuZm9yRWFjaChmdW5jdGlvbiAoZHJvcGRvd24pIHtcbiAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmICghZHJvcGRvd24gfHwgIWRyb3Bkb3duLiRlbCkgcmV0dXJuO1xuICAgIGlmICh0YXJnZXQgPT09IGRyb3Bkb3duLiRlbCB8fCBkcm9wZG93bi4kZWwuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcm9wZG93bi5oYW5kbGVPdXRzaWRlQ2xpY2sgJiYgZHJvcGRvd24uaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50KTtcbiAgfSk7XG59KTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Ryb3Bkb3duID0gKHtcbiAgb3BlbjogZnVuY3Rpb24gb3BlbihpbnN0YW5jZSkge1xuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgZHJvcGRvd25zLnB1c2goaW5zdGFuY2UpO1xuICAgIH1cbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKGluc3RhbmNlKSB7XG4gICAgdmFyIGluZGV4ID0gZHJvcGRvd25zLmluZGV4T2YoaW5zdGFuY2UpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIGRyb3Bkb3ducy5zcGxpY2UoaW5zdGFuY2UsIDEpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvY2hlY2tib3gtZ3JvdXBcIlxudmFyIGNoZWNrYm94X2dyb3VwXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIGNoZWNrYm94X2dyb3VwX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNoZWNrYm94X2dyb3VwXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYmxlL3NyYy9maWx0ZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGZpbHRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFRhYmxlRmlsdGVyUGFuZWwnLFxuXG4gIG1peGluczogW3Z1ZV9wb3BwZXJfZGVmYXVsdC5hLCBsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBkaXJlY3RpdmVzOiB7XG4gICAgQ2xpY2tvdXRzaWRlOiBjbGlja291dHNpZGVfZGVmYXVsdC5hXG4gIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYSxcbiAgICBFbENoZWNrYm94R3JvdXA6IGNoZWNrYm94X2dyb3VwX2RlZmF1bHQuYSxcbiAgICBFbFNjcm9sbGJhcjogc2Nyb2xsYmFyX2RlZmF1bHQuYVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgcGxhY2VtZW50OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnYm90dG9tLWVuZCdcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQWN0aXZlOiBmdW5jdGlvbiBpc0FjdGl2ZShmaWx0ZXIpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgPT09IHRoaXMuZmlsdGVyVmFsdWU7XG4gICAgfSxcbiAgICBoYW5kbGVPdXRzaWRlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZU91dHNpZGVDbGljaygpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgICB9LCAxNik7XG4gICAgfSxcbiAgICBoYW5kbGVDb25maXJtOiBmdW5jdGlvbiBoYW5kbGVDb25maXJtKCkge1xuICAgICAgdGhpcy5jb25maXJtRmlsdGVyKHRoaXMuZmlsdGVyZWRWYWx1ZSk7XG4gICAgICB0aGlzLmhhbmRsZU91dHNpZGVDbGljaygpO1xuICAgIH0sXG4gICAgaGFuZGxlUmVzZXQ6IGZ1bmN0aW9uIGhhbmRsZVJlc2V0KCkge1xuICAgICAgdGhpcy5maWx0ZXJlZFZhbHVlID0gW107XG4gICAgICB0aGlzLmNvbmZpcm1GaWx0ZXIodGhpcy5maWx0ZXJlZFZhbHVlKTtcbiAgICAgIHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrKCk7XG4gICAgfSxcbiAgICBoYW5kbGVTZWxlY3Q6IGZ1bmN0aW9uIGhhbmRsZVNlbGVjdChmaWx0ZXJWYWx1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlO1xuXG4gICAgICBpZiAodHlwZW9mIGZpbHRlclZhbHVlICE9PSAndW5kZWZpbmVkJyAmJiBmaWx0ZXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbmZpcm1GaWx0ZXIodGhpcy5maWx0ZXJlZFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybUZpbHRlcihbXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrKCk7XG4gICAgfSxcbiAgICBjb25maXJtRmlsdGVyOiBmdW5jdGlvbiBjb25maXJtRmlsdGVyKGZpbHRlcmVkVmFsdWUpIHtcbiAgICAgIHRoaXMudGFibGUuc3RvcmUuY29tbWl0KCdmaWx0ZXJDaGFuZ2UnLCB7XG4gICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgIHZhbHVlczogZmlsdGVyZWRWYWx1ZVxuICAgICAgfSk7XG4gICAgICB0aGlzLnRhYmxlLnN0b3JlLnVwZGF0ZUFsbFNlbGVjdGVkKCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYmxlOiBudWxsLFxuICAgICAgY2VsbDogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGZpbHRlcnM6IGZ1bmN0aW9uIGZpbHRlcnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW4gJiYgdGhpcy5jb2x1bW4uZmlsdGVycztcbiAgICB9LFxuXG5cbiAgICBmaWx0ZXJWYWx1ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5jb2x1bW4uZmlsdGVyZWRWYWx1ZSB8fCBbXSlbMF07XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRWYWx1ZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkVmFsdWUuc3BsaWNlKDAsIDEsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFZhbHVlLnNwbGljZSgwLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyZWRWYWx1ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbikge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJlZFZhbHVlIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4pIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbi5maWx0ZXJlZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGZ1bmN0aW9uIG11bHRpcGxlKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5maWx0ZXJNdWx0aXBsZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5wb3BwZXJFbG0gPSB0aGlzLiRlbDtcbiAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuY2VsbDtcbiAgICB0aGlzLnRhYmxlLmJvZHlXcmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi51cGRhdGVQb3BwZXIoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuJHdhdGNoKCdzaG93UG9wcGVyJywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAoX3RoaXMyLmNvbHVtbikgX3RoaXMyLmNvbHVtbi5maWx0ZXJPcGVuZWQgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBzcmNfZHJvcGRvd24ub3BlbihfdGhpczIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3JjX2Ryb3Bkb3duLmNsb3NlKF90aGlzMik7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93UG9wcGVyOiBmdW5jdGlvbiBzaG93UG9wcGVyKHZhbCkge1xuICAgICAgaWYgKHZhbCA9PT0gdHJ1ZSAmJiBwYXJzZUludCh0aGlzLnBvcHBlckpTLl9wb3BwZXIuc3R5bGUuekluZGV4LCAxMCkgPCBwb3B1cF9bXCJQb3B1cE1hbmFnZXJcIl0uekluZGV4KSB7XG4gICAgICAgIHRoaXMucG9wcGVySlMuX3BvcHBlci5zdHlsZS56SW5kZXggPSBwb3B1cF9bXCJQb3B1cE1hbmFnZXJcIl0ubmV4dFpJbmRleCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9maWx0ZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19maWx0ZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZmlsdGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9maWx0ZXItcGFuZWwudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgZmlsdGVyX3BhbmVsX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2ZpbHRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgZmlsdGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2YyYzkxOWZfcmVuZGVyLFxuICBmaWx0ZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZjJjOTE5Zl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGZpbHRlcl9wYW5lbF9hcGk7IH1cbmZpbHRlcl9wYW5lbF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3RhYmxlL3NyYy9maWx0ZXItcGFuZWwudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGZpbHRlcl9wYW5lbCA9IChmaWx0ZXJfcGFuZWxfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdGFibGUtaGVhZGVyLmpzXG52YXIgdGFibGVfaGVhZGVyX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5cblxuXG5cblxuXG5cbnZhciBnZXRBbGxDb2x1bW5zID0gZnVuY3Rpb24gZ2V0QWxsQ29sdW1ucyhjb2x1bW5zKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uLmNoaWxkcmVuKSB7XG4gICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgICAgcmVzdWx0LnB1c2guYXBwbHkocmVzdWx0LCBnZXRBbGxDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgY29udmVydFRvUm93cyA9IGZ1bmN0aW9uIGNvbnZlcnRUb1Jvd3Mob3JpZ2luQ29sdW1ucykge1xuICB2YXIgbWF4TGV2ZWwgPSAxO1xuICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShjb2x1bW4sIHBhcmVudCkge1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGNvbHVtbi5sZXZlbCA9IHBhcmVudC5sZXZlbCArIDE7XG4gICAgICBpZiAobWF4TGV2ZWwgPCBjb2x1bW4ubGV2ZWwpIHtcbiAgICAgICAgbWF4TGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb2x1bW4uY2hpbGRyZW4pIHtcbiAgICAgIHZhciBjb2xTcGFuID0gMDtcbiAgICAgIGNvbHVtbi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChzdWJDb2x1bW4pIHtcbiAgICAgICAgdHJhdmVyc2Uoc3ViQ29sdW1uLCBjb2x1bW4pO1xuICAgICAgICBjb2xTcGFuICs9IHN1YkNvbHVtbi5jb2xTcGFuO1xuICAgICAgfSk7XG4gICAgICBjb2x1bW4uY29sU3BhbiA9IGNvbFNwYW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbi5jb2xTcGFuID0gMTtcbiAgICB9XG4gIH07XG5cbiAgb3JpZ2luQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBjb2x1bW4ubGV2ZWwgPSAxO1xuICAgIHRyYXZlcnNlKGNvbHVtbik7XG4gIH0pO1xuXG4gIHZhciByb3dzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWF4TGV2ZWw7IGkrKykge1xuICAgIHJvd3MucHVzaChbXSk7XG4gIH1cblxuICB2YXIgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMob3JpZ2luQ29sdW1ucyk7XG5cbiAgYWxsQ29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjb2x1bW4pIHtcbiAgICBpZiAoIWNvbHVtbi5jaGlsZHJlbikge1xuICAgICAgY29sdW1uLnJvd1NwYW4gPSBtYXhMZXZlbCAtIGNvbHVtbi5sZXZlbCArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbi5yb3dTcGFuID0gMTtcbiAgICB9XG4gICAgcm93c1tjb2x1bW4ubGV2ZWwgLSAxXS5wdXNoKGNvbHVtbik7XG4gIH0pO1xuXG4gIHJldHVybiByb3dzO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFibGVfaGVhZGVyID0gKHtcbiAgbmFtZTogJ0VsVGFibGVIZWFkZXInLFxuXG4gIG1peGluczogW2xheW91dF9vYnNlcnZlcl0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3JpZ2luQ29sdW1ucyA9IHRoaXMuc3RvcmUuc3RhdGVzLm9yaWdpbkNvbHVtbnM7XG4gICAgdmFyIGNvbHVtblJvd3MgPSBjb252ZXJ0VG9Sb3dzKG9yaWdpbkNvbHVtbnMsIHRoaXMuY29sdW1ucyk7XG4gICAgLy8g5piv5ZCm5oul5pyJ5aSa57qn6KGo5aS0XG4gICAgdmFyIGlzR3JvdXAgPSBjb2x1bW5Sb3dzLmxlbmd0aCA+IDE7XG4gICAgaWYgKGlzR3JvdXApIHRoaXMuJHBhcmVudC5pc0dyb3VwID0gdHJ1ZTtcbiAgICByZXR1cm4gaChcbiAgICAgICd0YWJsZScsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6ICdlbC10YWJsZV9faGVhZGVyJyxcbiAgICAgICAgYXR0cnM6IHsgY2VsbHNwYWNpbmc6ICcwJyxcbiAgICAgICAgICBjZWxscGFkZGluZzogJzAnLFxuICAgICAgICAgIGJvcmRlcjogJzAnIH1cbiAgICAgIH0sXG4gICAgICBbaCgnY29sZ3JvdXAnLCBbdGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBoKCdjb2wnLCB7XG4gICAgICAgICAgYXR0cnM6IHsgbmFtZTogY29sdW1uLmlkIH0sXG4gICAgICAgICAga2V5OiBjb2x1bW4uaWQgfSk7XG4gICAgICB9KSwgdGhpcy5oYXNHdXR0ZXIgPyBoKCdjb2wnLCB7XG4gICAgICAgIGF0dHJzOiB7IG5hbWU6ICdndXR0ZXInIH1cbiAgICAgIH0pIDogJyddKSwgaChcbiAgICAgICAgJ3RoZWFkJyxcbiAgICAgICAgeyAnY2xhc3MnOiBbeyAnaXMtZ3JvdXAnOiBpc0dyb3VwLCAnaGFzLWd1dHRlcic6IHRoaXMuaGFzR3V0dGVyIH1dIH0sXG4gICAgICAgIFt0aGlzLl9sKGNvbHVtblJvd3MsIGZ1bmN0aW9uIChjb2x1bW5zLCByb3dJbmRleCkge1xuICAgICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICAgJ3RyJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6IF90aGlzLmdldEhlYWRlclJvd1N0eWxlKHJvd0luZGV4KSxcbiAgICAgICAgICAgICAgJ2NsYXNzJzogX3RoaXMuZ2V0SGVhZGVyUm93Q2xhc3Mocm93SW5kZXgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW2NvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4sIGNlbGxJbmRleCkge1xuICAgICAgICAgICAgICByZXR1cm4gaChcbiAgICAgICAgICAgICAgICAndGgnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHNwYW46IGNvbHVtbi5jb2xTcGFuLFxuICAgICAgICAgICAgICAgICAgICByb3dzcGFuOiBjb2x1bW4ucm93U3BhblxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICdtb3VzZW1vdmUnOiBmdW5jdGlvbiBtb3VzZW1vdmUoJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZU1vdXNlTW92ZSgkZXZlbnQsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdtb3VzZW91dCc6IF90aGlzLmhhbmRsZU1vdXNlT3V0LFxuICAgICAgICAgICAgICAgICAgICAnbW91c2Vkb3duJzogZnVuY3Rpb24gbW91c2Vkb3duKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVNb3VzZURvd24oJGV2ZW50LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAnY2xpY2snOiBmdW5jdGlvbiBjbGljaygkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlSGVhZGVyQ2xpY2soJGV2ZW50LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAnY29udGV4dG1lbnUnOiBmdW5jdGlvbiBjb250ZXh0bWVudSgkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlSGVhZGVyQ29udGV4dE1lbnUoJGV2ZW50LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICBzdHlsZTogX3RoaXMuZ2V0SGVhZGVyQ2VsbFN0eWxlKHJvd0luZGV4LCBjZWxsSW5kZXgsIGNvbHVtbnMsIGNvbHVtbiksXG4gICAgICAgICAgICAgICAgICAnY2xhc3MnOiBfdGhpcy5nZXRIZWFkZXJDZWxsQ2xhc3Mocm93SW5kZXgsIGNlbGxJbmRleCwgY29sdW1ucywgY29sdW1uKSxcbiAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uLmlkIH0sXG4gICAgICAgICAgICAgICAgW2goXG4gICAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICAgIHsgJ2NsYXNzJzogWydjZWxsJywgY29sdW1uLmZpbHRlcmVkVmFsdWUgJiYgY29sdW1uLmZpbHRlcmVkVmFsdWUubGVuZ3RoID4gMCA/ICdoaWdobGlnaHQnIDogJycsIGNvbHVtbi5sYWJlbENsYXNzTmFtZV0gfSxcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW4ucmVuZGVySGVhZGVyID8gY29sdW1uLnJlbmRlckhlYWRlci5jYWxsKF90aGlzLl9yZW5kZXJQcm94eSwgaCwgeyBjb2x1bW46IGNvbHVtbiwgJGluZGV4OiBjZWxsSW5kZXgsIHN0b3JlOiBfdGhpcy5zdG9yZSwgX3NlbGY6IF90aGlzLiRwYXJlbnQuJHZub2RlLmNvbnRleHQgfSkgOiBjb2x1bW4ubGFiZWwsIGNvbHVtbi5zb3J0YWJsZSA/IGgoXG4gICAgICAgICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICdjbGFzcyc6ICdjYXJldC13cmFwcGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVTb3J0Q2xpY2soJGV2ZW50LCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW2goJ2knLCB7ICdjbGFzcyc6ICdzb3J0LWNhcmV0IGFzY2VuZGluZycsXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlU29ydENsaWNrKCRldmVudCwgY29sdW1uLCAnYXNjZW5kaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSwgaCgnaScsIHsgJ2NsYXNzJzogJ3NvcnQtY2FyZXQgZGVzY2VuZGluZycsXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlU29ydENsaWNrKCRldmVudCwgY29sdW1uLCAnZGVzY2VuZGluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSldXG4gICAgICAgICAgICAgICAgICApIDogJycsIGNvbHVtbi5maWx0ZXJhYmxlID8gaChcbiAgICAgICAgICAgICAgICAgICAgJ3NwYW4nLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzJzogJ2VsLXRhYmxlX19jb2x1bW4tZmlsdGVyLXRyaWdnZXInLFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2xpY2snOiBmdW5jdGlvbiBjbGljaygkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZpbHRlckNsaWNrKCRldmVudCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiBbJ2VsLWljb24tYXJyb3ctZG93bicsIGNvbHVtbi5maWx0ZXJPcGVuZWQgPyAnZWwtaWNvbi1hcnJvdy11cCcgOiAnJ10gfSldXG4gICAgICAgICAgICAgICAgICApIDogJyddXG4gICAgICAgICAgICAgICAgKV1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLCBfdGhpcy5oYXNHdXR0ZXIgPyBoKCd0aCcsIHsgJ2NsYXNzJzogJ2VsLXRhYmxlX19jZWxsIGd1dHRlcicgfSkgOiAnJ11cbiAgICAgICAgICApO1xuICAgICAgICB9KV1cbiAgICAgICldXG4gICAgKTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgZml4ZWQ6IFN0cmluZyxcbiAgICBzdG9yZToge1xuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGJvcmRlcjogQm9vbGVhbixcbiAgICBkZWZhdWx0U29ydDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJvcDogJycsXG4gICAgICAgICAgb3JkZXI6ICcnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbENoZWNrYm94OiBjaGVja2JveF9kZWZhdWx0LmFcbiAgfSxcblxuICBjb21wdXRlZDogdGFibGVfaGVhZGVyX2V4dGVuZHMoe1xuICAgIHRhYmxlOiBmdW5jdGlvbiB0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQ7XG4gICAgfSxcbiAgICBoYXNHdXR0ZXI6IGZ1bmN0aW9uIGhhc0d1dHRlcigpIHtcbiAgICAgIHJldHVybiAhdGhpcy5maXhlZCAmJiB0aGlzLnRhYmxlTGF5b3V0Lmd1dHRlcldpZHRoO1xuICAgIH1cbiAgfSwgbWFwU3RhdGVzKHtcbiAgICBjb2x1bW5zOiAnY29sdW1ucycsXG4gICAgaXNBbGxTZWxlY3RlZDogJ2lzQWxsU2VsZWN0ZWQnLFxuICAgIGxlZnRGaXhlZExlYWZDb3VudDogJ2ZpeGVkTGVhZkNvbHVtbnNMZW5ndGgnLFxuICAgIHJpZ2h0Rml4ZWRMZWFmQ291bnQ6ICdyaWdodEZpeGVkTGVhZkNvbHVtbnNMZW5ndGgnLFxuICAgIGNvbHVtbnNDb3VudDogZnVuY3Rpb24gY29sdW1uc0NvdW50KHN0YXRlcykge1xuICAgICAgcmV0dXJuIHN0YXRlcy5jb2x1bW5zLmxlbmd0aDtcbiAgICB9LFxuICAgIGxlZnRGaXhlZENvdW50OiBmdW5jdGlvbiBsZWZ0Rml4ZWRDb3VudChzdGF0ZXMpIHtcbiAgICAgIHJldHVybiBzdGF0ZXMuZml4ZWRDb2x1bW5zLmxlbmd0aDtcbiAgICB9LFxuICAgIHJpZ2h0Rml4ZWRDb3VudDogZnVuY3Rpb24gcmlnaHRGaXhlZENvdW50KHN0YXRlcykge1xuICAgICAgcmV0dXJuIHN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGg7XG4gICAgfVxuICB9KSksXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLmZpbHRlclBhbmVscyA9IHt9O1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgLy8gbmV4dFRpY2sg5piv5pyJ5b+F6KaB55qEIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvcHVsbC8xMTMxMVxuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfZGVmYXVsdFNvcnQgPSBfdGhpczIuZGVmYXVsdFNvcnQsXG4gICAgICAgICAgcHJvcCA9IF9kZWZhdWx0U29ydC5wcm9wLFxuICAgICAgICAgIG9yZGVyID0gX2RlZmF1bHRTb3J0Lm9yZGVyO1xuXG4gICAgICB2YXIgaW5pdCA9IHRydWU7XG4gICAgICBfdGhpczIuc3RvcmUuY29tbWl0KCdzb3J0JywgeyBwcm9wOiBwcm9wLCBvcmRlcjogb3JkZXIsIGluaXQ6IGluaXQgfSk7XG4gICAgfSk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdmFyIHBhbmVscyA9IHRoaXMuZmlsdGVyUGFuZWxzO1xuICAgIGZvciAodmFyIHByb3AgaW4gcGFuZWxzKSB7XG4gICAgICBpZiAocGFuZWxzLmhhc093blByb3BlcnR5KHByb3ApICYmIHBhbmVsc1twcm9wXSkge1xuICAgICAgICBwYW5lbHNbcHJvcF0uJGRlc3Ryb3kodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ2VsbEhpZGRlbjogZnVuY3Rpb24gaXNDZWxsSGlkZGVuKGluZGV4LCBjb2x1bW5zKSB7XG4gICAgICB2YXIgc3RhcnQgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleDsgaSsrKSB7XG4gICAgICAgIHN0YXJ0ICs9IGNvbHVtbnNbaV0uY29sU3BhbjtcbiAgICAgIH1cbiAgICAgIHZhciBhZnRlciA9IHN0YXJ0ICsgY29sdW1uc1tpbmRleF0uY29sU3BhbiAtIDE7XG4gICAgICBpZiAodGhpcy5maXhlZCA9PT0gdHJ1ZSB8fCB0aGlzLmZpeGVkID09PSAnbGVmdCcpIHtcbiAgICAgICAgcmV0dXJuIGFmdGVyID49IHRoaXMubGVmdEZpeGVkTGVhZkNvdW50O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmZpeGVkID09PSAncmlnaHQnKSB7XG4gICAgICAgIHJldHVybiBzdGFydCA8IHRoaXMuY29sdW1uc0NvdW50IC0gdGhpcy5yaWdodEZpeGVkTGVhZkNvdW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFmdGVyIDwgdGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnQgfHwgc3RhcnQgPj0gdGhpcy5jb2x1bW5zQ291bnQgLSB0aGlzLnJpZ2h0Rml4ZWRMZWFmQ291bnQ7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRIZWFkZXJSb3dTdHlsZTogZnVuY3Rpb24gZ2V0SGVhZGVyUm93U3R5bGUocm93SW5kZXgpIHtcbiAgICAgIHZhciBoZWFkZXJSb3dTdHlsZSA9IHRoaXMudGFibGUuaGVhZGVyUm93U3R5bGU7XG4gICAgICBpZiAodHlwZW9mIGhlYWRlclJvd1N0eWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBoZWFkZXJSb3dTdHlsZS5jYWxsKG51bGwsIHsgcm93SW5kZXg6IHJvd0luZGV4IH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlclJvd1N0eWxlO1xuICAgIH0sXG4gICAgZ2V0SGVhZGVyUm93Q2xhc3M6IGZ1bmN0aW9uIGdldEhlYWRlclJvd0NsYXNzKHJvd0luZGV4KSB7XG4gICAgICB2YXIgY2xhc3NlcyA9IFtdO1xuXG4gICAgICB2YXIgaGVhZGVyUm93Q2xhc3NOYW1lID0gdGhpcy50YWJsZS5oZWFkZXJSb3dDbGFzc05hbWU7XG4gICAgICBpZiAodHlwZW9mIGhlYWRlclJvd0NsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGhlYWRlclJvd0NsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXJSb3dDbGFzc05hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGhlYWRlclJvd0NsYXNzTmFtZS5jYWxsKG51bGwsIHsgcm93SW5kZXg6IHJvd0luZGV4IH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICAgIH0sXG4gICAgZ2V0SGVhZGVyQ2VsbFN0eWxlOiBmdW5jdGlvbiBnZXRIZWFkZXJDZWxsU3R5bGUocm93SW5kZXgsIGNvbHVtbkluZGV4LCByb3csIGNvbHVtbikge1xuICAgICAgdmFyIGhlYWRlckNlbGxTdHlsZSA9IHRoaXMudGFibGUuaGVhZGVyQ2VsbFN0eWxlO1xuICAgICAgaWYgKHR5cGVvZiBoZWFkZXJDZWxsU3R5bGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlckNlbGxTdHlsZS5jYWxsKG51bGwsIHtcbiAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvdzogcm93LFxuICAgICAgICAgIGNvbHVtbjogY29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhlYWRlckNlbGxTdHlsZTtcbiAgICB9LFxuICAgIGdldEhlYWRlckNlbGxDbGFzczogZnVuY3Rpb24gZ2V0SGVhZGVyQ2VsbENsYXNzKHJvd0luZGV4LCBjb2x1bW5JbmRleCwgcm93LCBjb2x1bW4pIHtcbiAgICAgIHZhciBjbGFzc2VzID0gW2NvbHVtbi5pZCwgY29sdW1uLm9yZGVyLCBjb2x1bW4uaGVhZGVyQWxpZ24sIGNvbHVtbi5jbGFzc05hbWUsIGNvbHVtbi5sYWJlbENsYXNzTmFtZV07XG5cbiAgICAgIGlmIChyb3dJbmRleCA9PT0gMCAmJiB0aGlzLmlzQ2VsbEhpZGRlbihjb2x1bW5JbmRleCwgcm93KSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLWhpZGRlbicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbHVtbi5jaGlsZHJlbikge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLWxlYWYnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2lzLXNvcnRhYmxlJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBoZWFkZXJDZWxsQ2xhc3NOYW1lID0gdGhpcy50YWJsZS5oZWFkZXJDZWxsQ2xhc3NOYW1lO1xuICAgICAgaWYgKHR5cGVvZiBoZWFkZXJDZWxsQ2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbGFzc2VzLnB1c2goaGVhZGVyQ2VsbENsYXNzTmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXJDZWxsQ2xhc3NOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChoZWFkZXJDZWxsQ2xhc3NOYW1lLmNhbGwobnVsbCwge1xuICAgICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93OiByb3csXG4gICAgICAgICAgY29sdW1uOiBjb2x1bW5cbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBjbGFzc2VzLnB1c2goJ2VsLXRhYmxlX19jZWxsJyk7XG5cbiAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgICB9LFxuICAgIHRvZ2dsZUFsbFNlbGVjdGlvbjogZnVuY3Rpb24gdG9nZ2xlQWxsU2VsZWN0aW9uKCkge1xuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3RvZ2dsZUFsbFNlbGVjdGlvbicpO1xuICAgIH0sXG4gICAgaGFuZGxlRmlsdGVyQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUZpbHRlckNsaWNrKGV2ZW50LCBjb2x1bW4pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIHZhciBjZWxsID0gdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcgPyB0YXJnZXQgOiB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgIGlmIChPYmplY3QoZG9tX1tcImhhc0NsYXNzXCJdKShjZWxsLCAnbm9jbGljaycpKSByZXR1cm47XG4gICAgICBjZWxsID0gY2VsbC5xdWVyeVNlbGVjdG9yKCcuZWwtdGFibGVfX2NvbHVtbi1maWx0ZXItdHJpZ2dlcicpIHx8IGNlbGw7XG4gICAgICB2YXIgdGFibGUgPSB0aGlzLiRwYXJlbnQ7XG5cbiAgICAgIHZhciBmaWx0ZXJQYW5lbCA9IHRoaXMuZmlsdGVyUGFuZWxzW2NvbHVtbi5pZF07XG5cbiAgICAgIGlmIChmaWx0ZXJQYW5lbCAmJiBjb2x1bW4uZmlsdGVyT3BlbmVkKSB7XG4gICAgICAgIGZpbHRlclBhbmVsLnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZpbHRlclBhbmVsKSB7XG4gICAgICAgIGZpbHRlclBhbmVsID0gbmV3IGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEoZmlsdGVyX3BhbmVsKTtcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lbHNbY29sdW1uLmlkXSA9IGZpbHRlclBhbmVsO1xuICAgICAgICBpZiAoY29sdW1uLmZpbHRlclBsYWNlbWVudCkge1xuICAgICAgICAgIGZpbHRlclBhbmVsLnBsYWNlbWVudCA9IGNvbHVtbi5maWx0ZXJQbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZmlsdGVyUGFuZWwudGFibGUgPSB0YWJsZTtcbiAgICAgICAgZmlsdGVyUGFuZWwuY2VsbCA9IGNlbGw7XG4gICAgICAgIGZpbHRlclBhbmVsLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgIXRoaXMuJGlzU2VydmVyICYmIGZpbHRlclBhbmVsLiRtb3VudChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICB9XG5cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBmaWx0ZXJQYW5lbC5zaG93UG9wcGVyID0gdHJ1ZTtcbiAgICAgIH0sIDE2KTtcbiAgICB9LFxuICAgIGhhbmRsZUhlYWRlckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVIZWFkZXJDbGljayhldmVudCwgY29sdW1uKSB7XG4gICAgICBpZiAoIWNvbHVtbi5maWx0ZXJzICYmIGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICB0aGlzLmhhbmRsZVNvcnRDbGljayhldmVudCwgY29sdW1uKTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZpbHRlcmFibGUgJiYgIWNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckNsaWNrKGV2ZW50LCBjb2x1bW4pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiRwYXJlbnQuJGVtaXQoJ2hlYWRlci1jbGljaycsIGNvbHVtbiwgZXZlbnQpO1xuICAgIH0sXG4gICAgaGFuZGxlSGVhZGVyQ29udGV4dE1lbnU6IGZ1bmN0aW9uIGhhbmRsZUhlYWRlckNvbnRleHRNZW51KGV2ZW50LCBjb2x1bW4pIHtcbiAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnaGVhZGVyLWNvbnRleHRtZW51JywgY29sdW1uLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZURvd246IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93bihldmVudCwgY29sdW1uKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuJGlzU2VydmVyKSByZXR1cm47XG4gICAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIGNvbHVtbi5jaGlsZHJlbi5sZW5ndGggPiAwKSByZXR1cm47XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nQ29sdW1uICYmIHRoaXMuYm9yZGVyKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuJHBhcmVudC5yZXNpemVQcm94eVZpc2libGUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0YWJsZSA9IHRoaXMuJHBhcmVudDtcbiAgICAgICAgdmFyIHRhYmxlRWwgPSB0YWJsZS4kZWw7XG4gICAgICAgIHZhciB0YWJsZUxlZnQgPSB0YWJsZUVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIHZhciBjb2x1bW5FbCA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RoLicgKyBjb2x1bW4uaWQpO1xuICAgICAgICB2YXIgY29sdW1uUmVjdCA9IGNvbHVtbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB2YXIgbWluTGVmdCA9IGNvbHVtblJlY3QubGVmdCAtIHRhYmxlTGVmdCArIDMwO1xuXG4gICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKGNvbHVtbkVsLCAnbm9jbGljaycpO1xuXG4gICAgICAgIHRoaXMuZHJhZ1N0YXRlID0ge1xuICAgICAgICAgIHN0YXJ0TW91c2VMZWZ0OiBldmVudC5jbGllbnRYLFxuICAgICAgICAgIHN0YXJ0TGVmdDogY29sdW1uUmVjdC5yaWdodCAtIHRhYmxlTGVmdCxcbiAgICAgICAgICBzdGFydENvbHVtbkxlZnQ6IGNvbHVtblJlY3QubGVmdCAtIHRhYmxlTGVmdCxcbiAgICAgICAgICB0YWJsZUxlZnQ6IHRhYmxlTGVmdFxuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByZXNpemVQcm94eSA9IHRhYmxlLiRyZWZzLnJlc2l6ZVByb3h5O1xuICAgICAgICByZXNpemVQcm94eS5zdHlsZS5sZWZ0ID0gdGhpcy5kcmFnU3RhdGUuc3RhcnRMZWZ0ICsgJ3B4JztcblxuICAgICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQub25kcmFnc3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBoYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZXZlbnQpIHtcbiAgICAgICAgICB2YXIgZGVsdGFMZWZ0ID0gZXZlbnQuY2xpZW50WCAtIF90aGlzMy5kcmFnU3RhdGUuc3RhcnRNb3VzZUxlZnQ7XG4gICAgICAgICAgdmFyIHByb3h5TGVmdCA9IF90aGlzMy5kcmFnU3RhdGUuc3RhcnRMZWZ0ICsgZGVsdGFMZWZ0O1xuXG4gICAgICAgICAgcmVzaXplUHJveHkuc3R5bGUubGVmdCA9IE1hdGgubWF4KG1pbkxlZnQsIHByb3h5TGVmdCkgKyAncHgnO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBoYW5kbGVNb3VzZVVwID0gZnVuY3Rpb24gaGFuZGxlTW91c2VVcCgpIHtcbiAgICAgICAgICBpZiAoX3RoaXMzLmRyYWdnaW5nKSB7XG4gICAgICAgICAgICB2YXIgX2RyYWdTdGF0ZSA9IF90aGlzMy5kcmFnU3RhdGUsXG4gICAgICAgICAgICAgICAgc3RhcnRDb2x1bW5MZWZ0ID0gX2RyYWdTdGF0ZS5zdGFydENvbHVtbkxlZnQsXG4gICAgICAgICAgICAgICAgc3RhcnRMZWZ0ID0gX2RyYWdTdGF0ZS5zdGFydExlZnQ7XG5cbiAgICAgICAgICAgIHZhciBmaW5hbExlZnQgPSBwYXJzZUludChyZXNpemVQcm94eS5zdHlsZS5sZWZ0LCAxMCk7XG4gICAgICAgICAgICB2YXIgY29sdW1uV2lkdGggPSBmaW5hbExlZnQgLSBzdGFydENvbHVtbkxlZnQ7XG4gICAgICAgICAgICBjb2x1bW4ud2lkdGggPSBjb2x1bW4ucmVhbFdpZHRoID0gY29sdW1uV2lkdGg7XG4gICAgICAgICAgICB0YWJsZS4kZW1pdCgnaGVhZGVyLWRyYWdlbmQnLCBjb2x1bW4ud2lkdGgsIHN0YXJ0TGVmdCAtIHN0YXJ0Q29sdW1uTGVmdCwgY29sdW1uLCBldmVudCk7XG5cbiAgICAgICAgICAgIF90aGlzMy5zdG9yZS5zY2hlZHVsZUxheW91dCgpO1xuXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICcnO1xuICAgICAgICAgICAgX3RoaXMzLmRyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBfdGhpczMuZHJhZ2dpbmdDb2x1bW4gPSBudWxsO1xuICAgICAgICAgICAgX3RoaXMzLmRyYWdTdGF0ZSA9IHt9O1xuXG4gICAgICAgICAgICB0YWJsZS5yZXNpemVQcm94eVZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcbiAgICAgICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICBkb2N1bWVudC5vbmRyYWdzdGFydCA9IG51bGw7XG5cbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKGNvbHVtbkVsLCAnbm9jbGljaycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9O1xuXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBoYW5kbGVNb3VzZVVwKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlTW92ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VNb3ZlKGV2ZW50LCBjb2x1bW4pIHtcbiAgICAgIGlmIChjb2x1bW4uY2hpbGRyZW4gJiYgY29sdW1uLmNoaWxkcmVuLmxlbmd0aCA+IDApIHJldHVybjtcbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lICE9PSAnVEgnKSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbHVtbiB8fCAhY29sdW1uLnJlc2l6YWJsZSkgcmV0dXJuO1xuXG4gICAgICBpZiAoIXRoaXMuZHJhZ2dpbmcgJiYgdGhpcy5ib3JkZXIpIHtcbiAgICAgICAgdmFyIHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgdmFyIGJvZHlTdHlsZSA9IGRvY3VtZW50LmJvZHkuc3R5bGU7XG4gICAgICAgIGlmIChyZWN0LndpZHRoID4gMTIgJiYgcmVjdC5yaWdodCAtIGV2ZW50LnBhZ2VYIDwgOCkge1xuICAgICAgICAgIGJvZHlTdHlsZS5jdXJzb3IgPSAnY29sLXJlc2l6ZSc7XG4gICAgICAgICAgaWYgKE9iamVjdChkb21fW1wiaGFzQ2xhc3NcIl0pKHRhcmdldCwgJ2lzLXNvcnRhYmxlJykpIHtcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jdXJzb3IgPSAnY29sLXJlc2l6ZSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZHJhZ2dpbmdDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICBib2R5U3R5bGUuY3Vyc29yID0gJyc7XG4gICAgICAgICAgaWYgKE9iamVjdChkb21fW1wiaGFzQ2xhc3NcIl0pKHRhcmdldCwgJ2lzLXNvcnRhYmxlJykpIHtcbiAgICAgICAgICAgIHRhcmdldC5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZHJhZ2dpbmdDb2x1bW4gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZU91dDogZnVuY3Rpb24gaGFuZGxlTW91c2VPdXQoKSB7XG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJyc7XG4gICAgfSxcbiAgICB0b2dnbGVPcmRlcjogZnVuY3Rpb24gdG9nZ2xlT3JkZXIoX3JlZikge1xuICAgICAgdmFyIG9yZGVyID0gX3JlZi5vcmRlcixcbiAgICAgICAgICBzb3J0T3JkZXJzID0gX3JlZi5zb3J0T3JkZXJzO1xuXG4gICAgICBpZiAob3JkZXIgPT09ICcnKSByZXR1cm4gc29ydE9yZGVyc1swXTtcbiAgICAgIHZhciBpbmRleCA9IHNvcnRPcmRlcnMuaW5kZXhPZihvcmRlciB8fCBudWxsKTtcbiAgICAgIHJldHVybiBzb3J0T3JkZXJzW2luZGV4ID4gc29ydE9yZGVycy5sZW5ndGggLSAyID8gMCA6IGluZGV4ICsgMV07XG4gICAgfSxcbiAgICBoYW5kbGVTb3J0Q2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVNvcnRDbGljayhldmVudCwgY29sdW1uLCBnaXZlbk9yZGVyKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHZhciBvcmRlciA9IGNvbHVtbi5vcmRlciA9PT0gZ2l2ZW5PcmRlciA/IG51bGwgOiBnaXZlbk9yZGVyIHx8IHRoaXMudG9nZ2xlT3JkZXIoY29sdW1uKTtcblxuICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWUgIT09ICdUSCcpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWUgPT09ICdUSCcpIHtcbiAgICAgICAgaWYgKE9iamVjdChkb21fW1wiaGFzQ2xhc3NcIl0pKHRhcmdldCwgJ25vY2xpY2snKSkge1xuICAgICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRhcmdldCwgJ25vY2xpY2snKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjb2x1bW4uc29ydGFibGUpIHJldHVybjtcblxuICAgICAgdmFyIHN0YXRlcyA9IHRoaXMuc3RvcmUuc3RhdGVzO1xuICAgICAgdmFyIHNvcnRQcm9wID0gc3RhdGVzLnNvcnRQcm9wO1xuICAgICAgdmFyIHNvcnRPcmRlciA9IHZvaWQgMDtcbiAgICAgIHZhciBzb3J0aW5nQ29sdW1uID0gc3RhdGVzLnNvcnRpbmdDb2x1bW47XG5cbiAgICAgIGlmIChzb3J0aW5nQ29sdW1uICE9PSBjb2x1bW4gfHwgc29ydGluZ0NvbHVtbiA9PT0gY29sdW1uICYmIHNvcnRpbmdDb2x1bW4ub3JkZXIgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNvcnRpbmdDb2x1bW4pIHtcbiAgICAgICAgICBzb3J0aW5nQ29sdW1uLm9yZGVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZXMuc29ydGluZ0NvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgc29ydFByb3AgPSBjb2x1bW4ucHJvcGVydHk7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3JkZXIpIHtcbiAgICAgICAgc29ydE9yZGVyID0gY29sdW1uLm9yZGVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvcnRPcmRlciA9IGNvbHVtbi5vcmRlciA9IG9yZGVyO1xuICAgICAgfVxuXG4gICAgICBzdGF0ZXMuc29ydFByb3AgPSBzb3J0UHJvcDtcbiAgICAgIHN0YXRlcy5zb3J0T3JkZXIgPSBzb3J0T3JkZXI7XG5cbiAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdjaGFuZ2VTb3J0Q29uZGl0aW9uJyk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nQ29sdW1uOiBudWxsLFxuICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgZHJhZ1N0YXRlOiB7fVxuICAgIH07XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9zcmMvdGFibGUtZm9vdGVyLmpzXG52YXIgdGFibGVfZm9vdGVyX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWJsZV9mb290ZXIgPSAoe1xuICBuYW1lOiAnRWxUYWJsZUZvb3RlcicsXG5cbiAgbWl4aW5zOiBbbGF5b3V0X29ic2VydmVyXSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBzdW1zID0gW107XG4gICAgaWYgKHRoaXMuc3VtbWFyeU1ldGhvZCkge1xuICAgICAgc3VtcyA9IHRoaXMuc3VtbWFyeU1ldGhvZCh7IGNvbHVtbnM6IHRoaXMuY29sdW1ucywgZGF0YTogdGhpcy5zdG9yZS5zdGF0ZXMuZGF0YSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICAgICAgc3Vtc1tpbmRleF0gPSBfdGhpcy5zdW1UZXh0O1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWVzID0gX3RoaXMuc3RvcmUuc3RhdGVzLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIE51bWJlcihpdGVtW2NvbHVtbi5wcm9wZXJ0eV0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHByZWNpc2lvbnMgPSBbXTtcbiAgICAgICAgdmFyIG5vdE51bWJlciA9IHRydWU7XG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBub3ROdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBkZWNpbWFsID0gKCcnICsgdmFsdWUpLnNwbGl0KCcuJylbMV07XG4gICAgICAgICAgICBwcmVjaXNpb25zLnB1c2goZGVjaW1hbCA/IGRlY2ltYWwubGVuZ3RoIDogMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHByZWNpc2lvbiA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHByZWNpc2lvbnMpO1xuICAgICAgICBpZiAoIW5vdE51bWJlcikge1xuICAgICAgICAgIHN1bXNbaW5kZXhdID0gdmFsdWVzLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY3Vycikge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gTnVtYmVyKGN1cnIpO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoKHByZXYgKyBjdXJyKS50b0ZpeGVkKE1hdGgubWluKHByZWNpc2lvbiwgMjApKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdW1zW2luZGV4XSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaChcbiAgICAgICd0YWJsZScsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6ICdlbC10YWJsZV9fZm9vdGVyJyxcbiAgICAgICAgYXR0cnM6IHsgY2VsbHNwYWNpbmc6ICcwJyxcbiAgICAgICAgICBjZWxscGFkZGluZzogJzAnLFxuICAgICAgICAgIGJvcmRlcjogJzAnIH1cbiAgICAgIH0sXG4gICAgICBbaCgnY29sZ3JvdXAnLCBbdGhpcy5jb2x1bW5zLm1hcChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBoKCdjb2wnLCB7XG4gICAgICAgICAgYXR0cnM6IHsgbmFtZTogY29sdW1uLmlkIH0sXG4gICAgICAgICAga2V5OiBjb2x1bW4uaWQgfSk7XG4gICAgICB9KSwgdGhpcy5oYXNHdXR0ZXIgPyBoKCdjb2wnLCB7XG4gICAgICAgIGF0dHJzOiB7IG5hbWU6ICdndXR0ZXInIH1cbiAgICAgIH0pIDogJyddKSwgaChcbiAgICAgICAgJ3Rib2R5JyxcbiAgICAgICAgeyAnY2xhc3MnOiBbeyAnaGFzLWd1dHRlcic6IHRoaXMuaGFzR3V0dGVyIH1dIH0sXG4gICAgICAgIFtoKCd0cicsIFt0aGlzLmNvbHVtbnMubWFwKGZ1bmN0aW9uIChjb2x1bW4sIGNlbGxJbmRleCkge1xuICAgICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICAgJ3RkJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAga2V5OiBjZWxsSW5kZXgsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IGNvbHNwYW46IGNvbHVtbi5jb2xTcGFuLFxuICAgICAgICAgICAgICAgIHJvd3NwYW46IGNvbHVtbi5yb3dTcGFuXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICdjbGFzcyc6IFtdLmNvbmNhdChfdGhpcy5nZXRSb3dDbGFzc2VzKGNvbHVtbiwgY2VsbEluZGV4KSwgWydlbC10YWJsZV9fY2VsbCddKSB9LFxuICAgICAgICAgICAgW2goXG4gICAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgICB7ICdjbGFzcyc6IFsnY2VsbCcsIGNvbHVtbi5sYWJlbENsYXNzTmFtZV0gfSxcbiAgICAgICAgICAgICAgW3N1bXNbY2VsbEluZGV4XV1cbiAgICAgICAgICAgICldXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksIHRoaXMuaGFzR3V0dGVyID8gaCgndGgnLCB7ICdjbGFzcyc6ICdlbC10YWJsZV9fY2VsbCBndXR0ZXInIH0pIDogJyddKV1cbiAgICAgICldXG4gICAgKTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgZml4ZWQ6IFN0cmluZyxcbiAgICBzdG9yZToge1xuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHN1bW1hcnlNZXRob2Q6IEZ1bmN0aW9uLFxuICAgIHN1bVRleHQ6IFN0cmluZyxcbiAgICBib3JkZXI6IEJvb2xlYW4sXG4gICAgZGVmYXVsdFNvcnQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb3A6ICcnLFxuICAgICAgICAgIG9yZGVyOiAnJ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDogdGFibGVfZm9vdGVyX2V4dGVuZHMoe1xuICAgIHRhYmxlOiBmdW5jdGlvbiB0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQ7XG4gICAgfSxcbiAgICBoYXNHdXR0ZXI6IGZ1bmN0aW9uIGhhc0d1dHRlcigpIHtcbiAgICAgIHJldHVybiAhdGhpcy5maXhlZCAmJiB0aGlzLnRhYmxlTGF5b3V0Lmd1dHRlcldpZHRoO1xuICAgIH1cbiAgfSwgbWFwU3RhdGVzKHtcbiAgICBjb2x1bW5zOiAnY29sdW1ucycsXG4gICAgaXNBbGxTZWxlY3RlZDogJ2lzQWxsU2VsZWN0ZWQnLFxuICAgIGxlZnRGaXhlZExlYWZDb3VudDogJ2ZpeGVkTGVhZkNvbHVtbnNMZW5ndGgnLFxuICAgIHJpZ2h0Rml4ZWRMZWFmQ291bnQ6ICdyaWdodEZpeGVkTGVhZkNvbHVtbnNMZW5ndGgnLFxuICAgIGNvbHVtbnNDb3VudDogZnVuY3Rpb24gY29sdW1uc0NvdW50KHN0YXRlcykge1xuICAgICAgcmV0dXJuIHN0YXRlcy5jb2x1bW5zLmxlbmd0aDtcbiAgICB9LFxuICAgIGxlZnRGaXhlZENvdW50OiBmdW5jdGlvbiBsZWZ0Rml4ZWRDb3VudChzdGF0ZXMpIHtcbiAgICAgIHJldHVybiBzdGF0ZXMuZml4ZWRDb2x1bW5zLmxlbmd0aDtcbiAgICB9LFxuICAgIHJpZ2h0Rml4ZWRDb3VudDogZnVuY3Rpb24gcmlnaHRGaXhlZENvdW50KHN0YXRlcykge1xuICAgICAgcmV0dXJuIHN0YXRlcy5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGg7XG4gICAgfVxuICB9KSksXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ2VsbEhpZGRlbjogZnVuY3Rpb24gaXNDZWxsSGlkZGVuKGluZGV4LCBjb2x1bW5zLCBjb2x1bW4pIHtcbiAgICAgIGlmICh0aGlzLmZpeGVkID09PSB0cnVlIHx8IHRoaXMuZml4ZWQgPT09ICdsZWZ0Jykge1xuICAgICAgICByZXR1cm4gaW5kZXggPj0gdGhpcy5sZWZ0Rml4ZWRMZWFmQ291bnQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZml4ZWQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgdmFyIGJlZm9yZSA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5kZXg7IGkrKykge1xuICAgICAgICAgIGJlZm9yZSArPSBjb2x1bW5zW2ldLmNvbFNwYW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJlZm9yZSA8IHRoaXMuY29sdW1uc0NvdW50IC0gdGhpcy5yaWdodEZpeGVkTGVhZkNvdW50O1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5maXhlZCAmJiBjb2x1bW4uZml4ZWQpIHtcbiAgICAgICAgLy8gaGlkZSBjZWxsIHdoZW4gZm9vdGVyIGluc3RhbmNlIGlzIG5vdCBmaXhlZCBhbmQgY29sdW1uIGlzIGZpeGVkXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGluZGV4IDwgdGhpcy5sZWZ0Rml4ZWRDb3VudCB8fCBpbmRleCA+PSB0aGlzLmNvbHVtbnNDb3VudCAtIHRoaXMucmlnaHRGaXhlZENvdW50O1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0Um93Q2xhc3NlczogZnVuY3Rpb24gZ2V0Um93Q2xhc3Nlcyhjb2x1bW4sIGNlbGxJbmRleCkge1xuICAgICAgdmFyIGNsYXNzZXMgPSBbY29sdW1uLmlkLCBjb2x1bW4uYWxpZ24sIGNvbHVtbi5sYWJlbENsYXNzTmFtZV07XG4gICAgICBpZiAoY29sdW1uLmNsYXNzTmFtZSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goY29sdW1uLmNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0NlbGxIaWRkZW4oY2VsbEluZGV4LCB0aGlzLmNvbHVtbnMsIGNvbHVtbikpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy1oaWRkZW4nKTtcbiAgICAgIH1cbiAgICAgIGlmICghY29sdW1uLmNoaWxkcmVuKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnaXMtbGVhZicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXM7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG52YXIgdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgdGFibGVJZFNlZWQgPSAxO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFRhYmxlJyxcblxuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hLCBtaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBkaXJlY3RpdmVzOiB7XG4gICAgTW91c2V3aGVlbDogZGlyZWN0aXZlc19tb3VzZXdoZWVsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBkYXRhOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNpemU6IFN0cmluZyxcblxuICAgIHdpZHRoOiBbU3RyaW5nLCBOdW1iZXJdLFxuXG4gICAgaGVpZ2h0OiBbU3RyaW5nLCBOdW1iZXJdLFxuXG4gICAgbWF4SGVpZ2h0OiBbU3RyaW5nLCBOdW1iZXJdLFxuXG4gICAgZml0OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBzdHJpcGU6IEJvb2xlYW4sXG5cbiAgICBib3JkZXI6IEJvb2xlYW4sXG5cbiAgICByb3dLZXk6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcblxuICAgIGNvbnRleHQ6IHt9LFxuXG4gICAgc2hvd0hlYWRlcjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuXG4gICAgc2hvd1N1bW1hcnk6IEJvb2xlYW4sXG5cbiAgICBzdW1UZXh0OiBTdHJpbmcsXG5cbiAgICBzdW1tYXJ5TWV0aG9kOiBGdW5jdGlvbixcblxuICAgIHJvd0NsYXNzTmFtZTogW1N0cmluZywgRnVuY3Rpb25dLFxuXG4gICAgcm93U3R5bGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcblxuICAgIGNlbGxDbGFzc05hbWU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcblxuICAgIGNlbGxTdHlsZTogW09iamVjdCwgRnVuY3Rpb25dLFxuXG4gICAgaGVhZGVyUm93Q2xhc3NOYW1lOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG5cbiAgICBoZWFkZXJSb3dTdHlsZTogW09iamVjdCwgRnVuY3Rpb25dLFxuXG4gICAgaGVhZGVyQ2VsbENsYXNzTmFtZTogW1N0cmluZywgRnVuY3Rpb25dLFxuXG4gICAgaGVhZGVyQ2VsbFN0eWxlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG5cbiAgICBoaWdobGlnaHRDdXJyZW50Um93OiBCb29sZWFuLFxuXG4gICAgY3VycmVudFJvd0tleTogW1N0cmluZywgTnVtYmVyXSxcblxuICAgIGVtcHR5VGV4dDogU3RyaW5nLFxuXG4gICAgZXhwYW5kUm93S2V5czogQXJyYXksXG5cbiAgICBkZWZhdWx0RXhwYW5kQWxsOiBCb29sZWFuLFxuXG4gICAgZGVmYXVsdFNvcnQ6IE9iamVjdCxcblxuICAgIHRvb2x0aXBFZmZlY3Q6IFN0cmluZyxcblxuICAgIHNwYW5NZXRob2Q6IEZ1bmN0aW9uLFxuXG4gICAgc2VsZWN0T25JbmRldGVybWluYXRlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBpbmRlbnQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDE2XG4gICAgfSxcblxuICAgIHRyZWVQcm9wczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGFzQ2hpbGRyZW46ICdoYXNDaGlsZHJlbicsXG4gICAgICAgICAgY2hpbGRyZW46ICdjaGlsZHJlbidcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbGF6eTogQm9vbGVhbixcblxuICAgIGxvYWQ6IEZ1bmN0aW9uXG4gIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIFRhYmxlSGVhZGVyOiB0YWJsZV9oZWFkZXIsXG4gICAgVGFibGVGb290ZXI6IHRhYmxlX2Zvb3RlcixcbiAgICBUYWJsZUJvZHk6IHRhYmxlX2JvZHksXG4gICAgRWxDaGVja2JveDogY2hlY2tib3hfZGVmYXVsdC5hXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgZXhwYW5kOiAnZXhwYW5kIGlzIHJlbmFtZWQgdG8gZXhwYW5kLWNoYW5nZSdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LFxuICAgIHNldEN1cnJlbnRSb3c6IGZ1bmN0aW9uIHNldEN1cnJlbnRSb3cocm93KSB7XG4gICAgICB0aGlzLnN0b3JlLmNvbW1pdCgnc2V0Q3VycmVudFJvdycsIHJvdyk7XG4gICAgfSxcbiAgICB0b2dnbGVSb3dTZWxlY3Rpb246IGZ1bmN0aW9uIHRvZ2dsZVJvd1NlbGVjdGlvbihyb3csIHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnN0b3JlLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3csIHNlbGVjdGVkLCBmYWxzZSk7XG4gICAgICB0aGlzLnN0b3JlLnVwZGF0ZUFsbFNlbGVjdGVkKCk7XG4gICAgfSxcbiAgICB0b2dnbGVSb3dFeHBhbnNpb246IGZ1bmN0aW9uIHRvZ2dsZVJvd0V4cGFuc2lvbihyb3csIGV4cGFuZGVkKSB7XG4gICAgICB0aGlzLnN0b3JlLnRvZ2dsZVJvd0V4cGFuc2lvbkFkYXB0ZXIocm93LCBleHBhbmRlZCk7XG4gICAgfSxcbiAgICBjbGVhclNlbGVjdGlvbjogZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICB0aGlzLnN0b3JlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfSxcbiAgICBjbGVhckZpbHRlcjogZnVuY3Rpb24gY2xlYXJGaWx0ZXIoY29sdW1uS2V5cykge1xuICAgICAgdGhpcy5zdG9yZS5jbGVhckZpbHRlcihjb2x1bW5LZXlzKTtcbiAgICB9LFxuICAgIGNsZWFyU29ydDogZnVuY3Rpb24gY2xlYXJTb3J0KCkge1xuICAgICAgdGhpcy5zdG9yZS5jbGVhclNvcnQoKTtcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTGVhdmUoKSB7XG4gICAgICB0aGlzLnN0b3JlLmNvbW1pdCgnc2V0SG92ZXJSb3cnLCBudWxsKTtcbiAgICAgIGlmICh0aGlzLmhvdmVyU3RhdGUpIHRoaXMuaG92ZXJTdGF0ZSA9IG51bGw7XG4gICAgfSxcbiAgICB1cGRhdGVTY3JvbGxZOiBmdW5jdGlvbiB1cGRhdGVTY3JvbGxZKCkge1xuICAgICAgdmFyIGNoYW5nZWQgPSB0aGlzLmxheW91dC51cGRhdGVTY3JvbGxZKCk7XG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLmxheW91dC5ub3RpZnlPYnNlcnZlcnMoJ3Njcm9sbGFibGUnKTtcbiAgICAgICAgdGhpcy5sYXlvdXQudXBkYXRlQ29sdW1uc1dpZHRoKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVGaXhlZE1vdXNld2hlZWw6IGZ1bmN0aW9uIGhhbmRsZUZpeGVkTW91c2V3aGVlbChldmVudCwgZGF0YSkge1xuICAgICAgdmFyIGJvZHlXcmFwcGVyID0gdGhpcy5ib2R5V3JhcHBlcjtcbiAgICAgIGlmIChNYXRoLmFicyhkYXRhLnNwaW5ZKSA+IDApIHtcbiAgICAgICAgdmFyIGN1cnJlbnRTY3JvbGxUb3AgPSBib2R5V3JhcHBlci5zY3JvbGxUb3A7XG4gICAgICAgIGlmIChkYXRhLnBpeGVsWSA8IDAgJiYgY3VycmVudFNjcm9sbFRvcCAhPT0gMCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEucGl4ZWxZID4gMCAmJiBib2R5V3JhcHBlci5zY3JvbGxIZWlnaHQgLSBib2R5V3JhcHBlci5jbGllbnRIZWlnaHQgPiBjdXJyZW50U2Nyb2xsVG9wKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBib2R5V3JhcHBlci5zY3JvbGxUb3AgKz0gTWF0aC5jZWlsKGRhdGEucGl4ZWxZIC8gNSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBib2R5V3JhcHBlci5zY3JvbGxMZWZ0ICs9IE1hdGguY2VpbChkYXRhLnBpeGVsWCAvIDUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlSGVhZGVyRm9vdGVyTW91c2V3aGVlbDogZnVuY3Rpb24gaGFuZGxlSGVhZGVyRm9vdGVyTW91c2V3aGVlbChldmVudCwgZGF0YSkge1xuICAgICAgdmFyIHBpeGVsWCA9IGRhdGEucGl4ZWxYLFxuICAgICAgICAgIHBpeGVsWSA9IGRhdGEucGl4ZWxZO1xuXG4gICAgICBpZiAoTWF0aC5hYnMocGl4ZWxYKSA+PSBNYXRoLmFicyhwaXhlbFkpKSB7XG4gICAgICAgIHRoaXMuYm9keVdyYXBwZXIuc2Nyb2xsTGVmdCArPSBkYXRhLnBpeGVsWCAvIDU7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLy8gVE9ETyDkvb/nlKggQ1NTIHRyYW5zZm9ybVxuICAgIHN5bmNQb3N0aW9uOiBPYmplY3QoZXh0ZXJuYWxfdGhyb3R0bGVfZGVib3VuY2VfW1widGhyb3R0bGVcIl0pKDIwLCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX2JvZHlXcmFwcGVyID0gdGhpcy5ib2R5V3JhcHBlcixcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX2JvZHlXcmFwcGVyLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX2JvZHlXcmFwcGVyLnNjcm9sbFRvcCxcbiAgICAgICAgICBvZmZzZXRXaWR0aCA9IF9ib2R5V3JhcHBlci5vZmZzZXRXaWR0aCxcbiAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ib2R5V3JhcHBlci5zY3JvbGxXaWR0aDtcbiAgICAgIHZhciBfJHJlZnMgPSB0aGlzLiRyZWZzLFxuICAgICAgICAgIGhlYWRlcldyYXBwZXIgPSBfJHJlZnMuaGVhZGVyV3JhcHBlcixcbiAgICAgICAgICBmb290ZXJXcmFwcGVyID0gXyRyZWZzLmZvb3RlcldyYXBwZXIsXG4gICAgICAgICAgZml4ZWRCb2R5V3JhcHBlciA9IF8kcmVmcy5maXhlZEJvZHlXcmFwcGVyLFxuICAgICAgICAgIHJpZ2h0Rml4ZWRCb2R5V3JhcHBlciA9IF8kcmVmcy5yaWdodEZpeGVkQm9keVdyYXBwZXI7XG5cbiAgICAgIGlmIChoZWFkZXJXcmFwcGVyKSBoZWFkZXJXcmFwcGVyLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgaWYgKGZvb3RlcldyYXBwZXIpIGZvb3RlcldyYXBwZXIuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICBpZiAoZml4ZWRCb2R5V3JhcHBlcikgZml4ZWRCb2R5V3JhcHBlci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICBpZiAocmlnaHRGaXhlZEJvZHlXcmFwcGVyKSByaWdodEZpeGVkQm9keVdyYXBwZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgdmFyIG1heFNjcm9sbExlZnRQb3NpdGlvbiA9IHNjcm9sbFdpZHRoIC0gb2Zmc2V0V2lkdGggLSAxO1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWF4U2Nyb2xsTGVmdFBvc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb24gPSAncmlnaHQnO1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb24gPSAnbGVmdCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjcm9sbFBvc2l0aW9uID0gJ21pZGRsZSc7XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBiaW5kRXZlbnRzOiBmdW5jdGlvbiBiaW5kRXZlbnRzKCkge1xuICAgICAgdGhpcy5ib2R5V3JhcHBlci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLnN5bmNQb3N0aW9uLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gICAgICBpZiAodGhpcy5maXQpIHtcbiAgICAgICAgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJhZGRSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMucmVzaXplTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdW5iaW5kRXZlbnRzOiBmdW5jdGlvbiB1bmJpbmRFdmVudHMoKSB7XG4gICAgICB0aGlzLmJvZHlXcmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc3luY1Bvc3Rpb24sIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGlmICh0aGlzLmZpdCkge1xuICAgICAgICBPYmplY3QocmVzaXplX2V2ZW50X1tcInJlbW92ZVJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy5yZXNpemVMaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNpemVMaXN0ZW5lcjogZnVuY3Rpb24gcmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlYWR5KSByZXR1cm47XG4gICAgICB2YXIgc2hvdWxkVXBkYXRlTGF5b3V0ID0gZmFsc2U7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICAgIHZhciBfcmVzaXplU3RhdGUgPSB0aGlzLnJlc2l6ZVN0YXRlLFxuICAgICAgICAgIG9sZFdpZHRoID0gX3Jlc2l6ZVN0YXRlLndpZHRoLFxuICAgICAgICAgIG9sZEhlaWdodCA9IF9yZXNpemVTdGF0ZS5oZWlnaHQ7XG5cblxuICAgICAgdmFyIHdpZHRoID0gZWwub2Zmc2V0V2lkdGg7XG4gICAgICBpZiAob2xkV2lkdGggIT09IHdpZHRoKSB7XG4gICAgICAgIHNob3VsZFVwZGF0ZUxheW91dCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBoZWlnaHQgPSBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICBpZiAoKHRoaXMuaGVpZ2h0IHx8IHRoaXMuc2hvdWxkVXBkYXRlSGVpZ2h0KSAmJiBvbGRIZWlnaHQgIT09IGhlaWdodCkge1xuICAgICAgICBzaG91bGRVcGRhdGVMYXlvdXQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVXBkYXRlTGF5b3V0KSB7XG4gICAgICAgIHRoaXMucmVzaXplU3RhdGUud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5yZXNpemVTdGF0ZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIHRoaXMuZG9MYXlvdXQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRvTGF5b3V0OiBmdW5jdGlvbiBkb0xheW91dCgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFVwZGF0ZUhlaWdodCkge1xuICAgICAgICB0aGlzLmxheW91dC51cGRhdGVFbHNIZWlnaHQoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGF5b3V0LnVwZGF0ZUNvbHVtbnNXaWR0aCgpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChwcm9wLCBvcmRlcikge1xuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3NvcnQnLCB7IHByb3A6IHByb3AsIG9yZGVyOiBvcmRlciB9KTtcbiAgICB9LFxuICAgIHRvZ2dsZUFsbFNlbGVjdGlvbjogZnVuY3Rpb24gdG9nZ2xlQWxsU2VsZWN0aW9uKCkge1xuICAgICAgdGhpcy5zdG9yZS5jb21taXQoJ3RvZ2dsZUFsbFNlbGVjdGlvbicpO1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDogdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19leHRlbmRzKHtcbiAgICB0YWJsZVNpemU6IGZ1bmN0aW9uIHRhYmxlU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBib2R5V3JhcHBlcjogZnVuY3Rpb24gYm9keVdyYXBwZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ib2R5V3JhcHBlcjtcbiAgICB9LFxuICAgIHNob3VsZFVwZGF0ZUhlaWdodDogZnVuY3Rpb24gc2hvdWxkVXBkYXRlSGVpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0IHx8IHRoaXMubWF4SGVpZ2h0IHx8IHRoaXMuZml4ZWRDb2x1bW5zLmxlbmd0aCA+IDAgfHwgdGhpcy5yaWdodEZpeGVkQ29sdW1ucy5sZW5ndGggPiAwO1xuICAgIH0sXG4gICAgYm9keVdpZHRoOiBmdW5jdGlvbiBib2R5V2lkdGgoKSB7XG4gICAgICB2YXIgX2xheW91dCA9IHRoaXMubGF5b3V0LFxuICAgICAgICAgIGJvZHlXaWR0aCA9IF9sYXlvdXQuYm9keVdpZHRoLFxuICAgICAgICAgIHNjcm9sbFkgPSBfbGF5b3V0LnNjcm9sbFksXG4gICAgICAgICAgZ3V0dGVyV2lkdGggPSBfbGF5b3V0Lmd1dHRlcldpZHRoO1xuXG4gICAgICByZXR1cm4gYm9keVdpZHRoID8gYm9keVdpZHRoIC0gKHNjcm9sbFkgPyBndXR0ZXJXaWR0aCA6IDApICsgJ3B4JyA6ICcnO1xuICAgIH0sXG4gICAgYm9keUhlaWdodDogZnVuY3Rpb24gYm9keUhlaWdodCgpIHtcbiAgICAgIHZhciBfbGF5b3V0MiA9IHRoaXMubGF5b3V0LFxuICAgICAgICAgIF9sYXlvdXQyJGhlYWRlckhlaWdodCA9IF9sYXlvdXQyLmhlYWRlckhlaWdodCxcbiAgICAgICAgICBoZWFkZXJIZWlnaHQgPSBfbGF5b3V0MiRoZWFkZXJIZWlnaHQgPT09IHVuZGVmaW5lZCA/IDAgOiBfbGF5b3V0MiRoZWFkZXJIZWlnaHQsXG4gICAgICAgICAgYm9keUhlaWdodCA9IF9sYXlvdXQyLmJvZHlIZWlnaHQsXG4gICAgICAgICAgX2xheW91dDIkZm9vdGVySGVpZ2h0ID0gX2xheW91dDIuZm9vdGVySGVpZ2h0LFxuICAgICAgICAgIGZvb3RlckhlaWdodCA9IF9sYXlvdXQyJGZvb3RlckhlaWdodCA9PT0gdW5kZWZpbmVkID8gMCA6IF9sYXlvdXQyJGZvb3RlckhlaWdodDtcblxuICAgICAgaWYgKHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGVpZ2h0OiBib2R5SGVpZ2h0ID8gYm9keUhlaWdodCArICdweCcgOiAnJ1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1heEhlaWdodCkge1xuICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gcGFyc2VIZWlnaHQodGhpcy5tYXhIZWlnaHQpO1xuICAgICAgICBpZiAodHlwZW9mIG1heEhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBtYXhIZWlnaHQgLSBmb290ZXJIZWlnaHQgLSAodGhpcy5zaG93SGVhZGVyID8gaGVhZGVySGVpZ2h0IDogMCkgKyAncHgnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgZml4ZWRCb2R5SGVpZ2h0OiBmdW5jdGlvbiBmaXhlZEJvZHlIZWlnaHQoKSB7XG4gICAgICBpZiAodGhpcy5oZWlnaHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMubGF5b3V0LmZpeGVkQm9keUhlaWdodCA/IHRoaXMubGF5b3V0LmZpeGVkQm9keUhlaWdodCArICdweCcgOiAnJ1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1heEhlaWdodCkge1xuICAgICAgICB2YXIgbWF4SGVpZ2h0ID0gcGFyc2VIZWlnaHQodGhpcy5tYXhIZWlnaHQpO1xuICAgICAgICBpZiAodHlwZW9mIG1heEhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBtYXhIZWlnaHQgPSB0aGlzLmxheW91dC5zY3JvbGxYID8gbWF4SGVpZ2h0IC0gdGhpcy5sYXlvdXQuZ3V0dGVyV2lkdGggOiBtYXhIZWlnaHQ7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0hlYWRlcikge1xuICAgICAgICAgICAgbWF4SGVpZ2h0IC09IHRoaXMubGF5b3V0LmhlYWRlckhlaWdodDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbWF4SGVpZ2h0IC09IHRoaXMubGF5b3V0LmZvb3RlckhlaWdodDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ21heC1oZWlnaHQnOiBtYXhIZWlnaHQgKyAncHgnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgZml4ZWRIZWlnaHQ6IGZ1bmN0aW9uIGZpeGVkSGVpZ2h0KCkge1xuICAgICAgaWYgKHRoaXMubWF4SGVpZ2h0KSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dTdW1tYXJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJvdHRvbTogMFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBib3R0b206IHRoaXMubGF5b3V0LnNjcm9sbFggJiYgdGhpcy5kYXRhLmxlbmd0aCA/IHRoaXMubGF5b3V0Lmd1dHRlcldpZHRoICsgJ3B4JyA6ICcnXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5zaG93U3VtbWFyeSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMubGF5b3V0LnRhYmxlSGVpZ2h0ID8gdGhpcy5sYXlvdXQudGFibGVIZWlnaHQgKyAncHgnIDogJydcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmxheW91dC52aWV3cG9ydEhlaWdodCA/IHRoaXMubGF5b3V0LnZpZXdwb3J0SGVpZ2h0ICsgJ3B4JyA6ICcnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBlbXB0eUJsb2NrU3R5bGU6IGZ1bmN0aW9uIGVtcHR5QmxvY2tTdHlsZSgpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEgJiYgdGhpcy5kYXRhLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgaGVpZ2h0ID0gJzEwMCUnO1xuICAgICAgaWYgKHRoaXMubGF5b3V0LmFwcGVuZEhlaWdodCkge1xuICAgICAgICBoZWlnaHQgPSAnY2FsYygxMDAlIC0gJyArIHRoaXMubGF5b3V0LmFwcGVuZEhlaWdodCArICdweCknO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHRoaXMuYm9keVdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodFxuICAgICAgfTtcbiAgICB9XG4gIH0sIG1hcFN0YXRlcyh7XG4gICAgc2VsZWN0aW9uOiAnc2VsZWN0aW9uJyxcbiAgICBjb2x1bW5zOiAnY29sdW1ucycsXG4gICAgdGFibGVEYXRhOiAnZGF0YScsXG4gICAgZml4ZWRDb2x1bW5zOiAnZml4ZWRDb2x1bW5zJyxcbiAgICByaWdodEZpeGVkQ29sdW1uczogJ3JpZ2h0Rml4ZWRDb2x1bW5zJ1xuICB9KSksXG5cbiAgd2F0Y2g6IHtcbiAgICBoZWlnaHQ6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5sYXlvdXQuc2V0SGVpZ2h0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWF4SGVpZ2h0OiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMubGF5b3V0LnNldE1heEhlaWdodCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRSb3dLZXk6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd0tleSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnN0b3JlLnNldEN1cnJlbnRSb3dLZXkodmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRhOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc3RvcmUuY29tbWl0KCdzZXREYXRhJywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBleHBhbmRSb3dLZXlzOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKG5ld1ZhbCkge1xuICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgdGhpcy5zdG9yZS5zZXRFeHBhbmRSb3dLZXlzQWRhcHRlcihuZXdWYWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMudGFibGVJZCA9ICdlbC10YWJsZV8nICsgdGFibGVJZFNlZWQrKztcbiAgICB0aGlzLmRlYm91bmNlZFVwZGF0ZUxheW91dCA9IE9iamVjdChleHRlcm5hbF90aHJvdHRsZV9kZWJvdW5jZV9bXCJkZWJvdW5jZVwiXSkoNTAsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5kb0xheW91dCgpO1xuICAgIH0pO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gICAgdGhpcy5zdG9yZS51cGRhdGVDb2x1bW5zKCk7XG4gICAgdGhpcy5kb0xheW91dCgpO1xuXG4gICAgdGhpcy5yZXNpemVTdGF0ZSA9IHtcbiAgICAgIHdpZHRoOiB0aGlzLiRlbC5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy4kZWwub2Zmc2V0SGVpZ2h0XG4gICAgfTtcblxuICAgIC8vIGluaXQgZmlsdGVyc1xuICAgIHRoaXMuc3RvcmUuc3RhdGVzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICBpZiAoY29sdW1uLmZpbHRlcmVkVmFsdWUgJiYgY29sdW1uLmZpbHRlcmVkVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIF90aGlzMi5zdG9yZS5jb21taXQoJ2ZpbHRlckNoYW5nZScsIHtcbiAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICB2YWx1ZXM6IGNvbHVtbi5maWx0ZXJlZFZhbHVlLFxuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuJHJlYWR5ID0gdHJ1ZTtcbiAgfSxcbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy51bmJpbmRFdmVudHMoKTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICB2YXIgX3RyZWVQcm9wcyA9IHRoaXMudHJlZVByb3BzLFxuICAgICAgICBfdHJlZVByb3BzJGhhc0NoaWxkcmUgPSBfdHJlZVByb3BzLmhhc0NoaWxkcmVuLFxuICAgICAgICBoYXNDaGlsZHJlbiA9IF90cmVlUHJvcHMkaGFzQ2hpbGRyZSA9PT0gdW5kZWZpbmVkID8gJ2hhc0NoaWxkcmVuJyA6IF90cmVlUHJvcHMkaGFzQ2hpbGRyZSxcbiAgICAgICAgX3RyZWVQcm9wcyRjaGlsZHJlbiA9IF90cmVlUHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGNoaWxkcmVuID0gX3RyZWVQcm9wcyRjaGlsZHJlbiA9PT0gdW5kZWZpbmVkID8gJ2NoaWxkcmVuJyA6IF90cmVlUHJvcHMkY2hpbGRyZW47XG5cbiAgICB0aGlzLnN0b3JlID0gY3JlYXRlU3RvcmUodGhpcywge1xuICAgICAgcm93S2V5OiB0aGlzLnJvd0tleSxcbiAgICAgIGRlZmF1bHRFeHBhbmRBbGw6IHRoaXMuZGVmYXVsdEV4cGFuZEFsbCxcbiAgICAgIHNlbGVjdE9uSW5kZXRlcm1pbmF0ZTogdGhpcy5zZWxlY3RPbkluZGV0ZXJtaW5hdGUsXG4gICAgICAvLyBUcmVlVGFibGUg55qE55u45YWz6YWN572uXG4gICAgICBpbmRlbnQ6IHRoaXMuaW5kZW50LFxuICAgICAgbGF6eTogdGhpcy5sYXp5LFxuICAgICAgbGF6eUNvbHVtbklkZW50aWZpZXI6IGhhc0NoaWxkcmVuLFxuICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lOiBjaGlsZHJlblxuICAgIH0pO1xuICAgIHZhciBsYXlvdXQgPSBuZXcgdGFibGVfbGF5b3V0KHtcbiAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgdGFibGU6IHRoaXMsXG4gICAgICBmaXQ6IHRoaXMuZml0LFxuICAgICAgc2hvd0hlYWRlcjogdGhpcy5zaG93SGVhZGVyXG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxheW91dDogbGF5b3V0LFxuICAgICAgaXNIaWRkZW46IGZhbHNlLFxuICAgICAgcmVuZGVyRXhwYW5kZWQ6IG51bGwsXG4gICAgICByZXNpemVQcm94eVZpc2libGU6IGZhbHNlLFxuICAgICAgcmVzaXplU3RhdGU6IHtcbiAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgIGhlaWdodDogbnVsbFxuICAgICAgfSxcbiAgICAgIC8vIOaYr+WQpuaLpeacieWkmue6p+ihqOWktFxuICAgICAgaXNHcm91cDogZmFsc2UsXG4gICAgICBzY3JvbGxQb3NpdGlvbjogJ2xlZnQnXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy90YWJsZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0YWJsZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY190YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF80OTNmZTM0ZV9yZW5kZXIsXG4gIHRhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDkzZmUzNGVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0YWJsZV9hcGk7IH1cbnRhYmxlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdGFibGUgPSAodGFibGVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfdGFibGUuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfdGFibGUubmFtZSwgc3JjX3RhYmxlKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RhYmxlID0gKHNyY190YWJsZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYmxlL3NyYy9jb25maWcuanNcblxuXG52YXIgY2VsbFN0YXJ0cyA9IHtcbiAgZGVmYXVsdDoge1xuICAgIG9yZGVyOiAnJ1xuICB9LFxuICBzZWxlY3Rpb246IHtcbiAgICB3aWR0aDogNDgsXG4gICAgbWluV2lkdGg6IDQ4LFxuICAgIHJlYWxXaWR0aDogNDgsXG4gICAgb3JkZXI6ICcnLFxuICAgIGNsYXNzTmFtZTogJ2VsLXRhYmxlLWNvbHVtbi0tc2VsZWN0aW9uJ1xuICB9LFxuICBleHBhbmQ6IHtcbiAgICB3aWR0aDogNDgsXG4gICAgbWluV2lkdGg6IDQ4LFxuICAgIHJlYWxXaWR0aDogNDgsXG4gICAgb3JkZXI6ICcnXG4gIH0sXG4gIGluZGV4OiB7XG4gICAgd2lkdGg6IDQ4LFxuICAgIG1pbldpZHRoOiA0OCxcbiAgICByZWFsV2lkdGg6IDQ4LFxuICAgIG9yZGVyOiAnJ1xuICB9XG59O1xuXG4vLyDov5nkupvpgInpobnkuI3lupTor6Xooqvopobnm5ZcbnZhciBjZWxsRm9yY2VkID0ge1xuICBzZWxlY3Rpb246IHtcbiAgICByZW5kZXJIZWFkZXI6IGZ1bmN0aW9uIHJlbmRlckhlYWRlcihoLCBfcmVmKSB7XG4gICAgICB2YXIgc3RvcmUgPSBfcmVmLnN0b3JlO1xuXG4gICAgICByZXR1cm4gaCgnZWwtY2hlY2tib3gnLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZGlzYWJsZWQ6IHN0b3JlLnN0YXRlcy5kYXRhICYmIHN0b3JlLnN0YXRlcy5kYXRhLmxlbmd0aCA9PT0gMCxcbiAgICAgICAgICBpbmRldGVybWluYXRlOiBzdG9yZS5zdGF0ZXMuc2VsZWN0aW9uLmxlbmd0aCA+IDAgJiYgIXRoaXMuaXNBbGxTZWxlY3RlZCxcblxuICAgICAgICAgIHZhbHVlOiB0aGlzLmlzQWxsU2VsZWN0ZWQgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnaW5wdXQnOiB0aGlzLnRvZ2dsZUFsbFNlbGVjdGlvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHJlbmRlckNlbGw6IGZ1bmN0aW9uIHJlbmRlckNlbGwoaCwgX3JlZjIpIHtcbiAgICAgIHZhciByb3cgPSBfcmVmMi5yb3csXG4gICAgICAgICAgY29sdW1uID0gX3JlZjIuY29sdW1uLFxuICAgICAgICAgIGlzU2VsZWN0ZWQgPSBfcmVmMi5pc1NlbGVjdGVkLFxuICAgICAgICAgIHN0b3JlID0gX3JlZjIuc3RvcmUsXG4gICAgICAgICAgJGluZGV4ID0gX3JlZjIuJGluZGV4O1xuXG4gICAgICByZXR1cm4gaCgnZWwtY2hlY2tib3gnLCB7XG4gICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgJ2NsaWNrJzogZnVuY3Rpb24gY2xpY2soZXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgdmFsdWU6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgZGlzYWJsZWQ6IGNvbHVtbi5zZWxlY3RhYmxlID8gIWNvbHVtbi5zZWxlY3RhYmxlLmNhbGwobnVsbCwgcm93LCAkaW5kZXgpIDogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnaW5wdXQnOiBmdW5jdGlvbiBpbnB1dCgpIHtcbiAgICAgICAgICAgIHN0b3JlLmNvbW1pdCgncm93U2VsZWN0ZWRDaGFuZ2VkJywgcm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc29ydGFibGU6IGZhbHNlLFxuICAgIHJlc2l6YWJsZTogZmFsc2VcbiAgfSxcbiAgaW5kZXg6IHtcbiAgICByZW5kZXJIZWFkZXI6IGZ1bmN0aW9uIHJlbmRlckhlYWRlcihoLCBfcmVmMykge1xuICAgICAgdmFyIGNvbHVtbiA9IF9yZWYzLmNvbHVtbjtcblxuICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbCB8fCAnIyc7XG4gICAgfSxcbiAgICByZW5kZXJDZWxsOiBmdW5jdGlvbiByZW5kZXJDZWxsKGgsIF9yZWY0KSB7XG4gICAgICB2YXIgJGluZGV4ID0gX3JlZjQuJGluZGV4LFxuICAgICAgICAgIGNvbHVtbiA9IF9yZWY0LmNvbHVtbjtcblxuICAgICAgdmFyIGkgPSAkaW5kZXggKyAxO1xuICAgICAgdmFyIGluZGV4ID0gY29sdW1uLmluZGV4O1xuXG4gICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpID0gJGluZGV4ICsgaW5kZXg7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpID0gaW5kZXgoJGluZGV4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGgoJ2RpdicsIFtpXSk7XG4gICAgfSxcbiAgICBzb3J0YWJsZTogZmFsc2VcbiAgfSxcbiAgZXhwYW5kOiB7XG4gICAgcmVuZGVySGVhZGVyOiBmdW5jdGlvbiByZW5kZXJIZWFkZXIoaCwgX3JlZjUpIHtcbiAgICAgIHZhciBjb2x1bW4gPSBfcmVmNS5jb2x1bW47XG5cbiAgICAgIHJldHVybiBjb2x1bW4ubGFiZWwgfHwgJyc7XG4gICAgfSxcbiAgICByZW5kZXJDZWxsOiBmdW5jdGlvbiByZW5kZXJDZWxsKGgsIF9yZWY2KSB7XG4gICAgICB2YXIgcm93ID0gX3JlZjYucm93LFxuICAgICAgICAgIHN0b3JlID0gX3JlZjYuc3RvcmUsXG4gICAgICAgICAgaXNFeHBhbmRlZCA9IF9yZWY2LmlzRXhwYW5kZWQ7XG5cbiAgICAgIHZhciBjbGFzc2VzID0gWydlbC10YWJsZV9fZXhwYW5kLWljb24nXTtcbiAgICAgIGlmIChpc0V4cGFuZGVkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZWwtdGFibGVfX2V4cGFuZC1pY29uLS1leHBhbmRlZCcpO1xuICAgICAgfVxuICAgICAgdmFyIGNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soZSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBzdG9yZS50b2dnbGVSb3dFeHBhbnNpb24ocm93KTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgJ2NsYXNzJzogY2xhc3NlcyxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2NsaWNrJzogY2FsbGJhY2tcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbiBlbC1pY29uLWFycm93LXJpZ2h0JyB9KV1cbiAgICAgICk7XG4gICAgfSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICBjbGFzc05hbWU6ICdlbC10YWJsZV9fZXhwYW5kLWNvbHVtbidcbiAgfVxufTtcblxuZnVuY3Rpb24gZGVmYXVsdFJlbmRlckNlbGwoaCwgX3JlZjcpIHtcbiAgdmFyIHJvdyA9IF9yZWY3LnJvdyxcbiAgICAgIGNvbHVtbiA9IF9yZWY3LmNvbHVtbixcbiAgICAgICRpbmRleCA9IF9yZWY3LiRpbmRleDtcblxuICB2YXIgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHk7XG4gIHZhciB2YWx1ZSA9IHByb3BlcnR5ICYmIE9iamVjdCh1dGlsX1tcImdldFByb3BCeVBhdGhcIl0pKHJvdywgcHJvcGVydHkpLnY7XG4gIGlmIChjb2x1bW4gJiYgY29sdW1uLmZvcm1hdHRlcikge1xuICAgIHJldHVybiBjb2x1bW4uZm9ybWF0dGVyKHJvdywgY29sdW1uLCB2YWx1ZSwgJGluZGV4KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRyZWVDZWxsUHJlZml4KGgsIF9yZWY4KSB7XG4gIHZhciByb3cgPSBfcmVmOC5yb3csXG4gICAgICB0cmVlTm9kZSA9IF9yZWY4LnRyZWVOb2RlLFxuICAgICAgc3RvcmUgPSBfcmVmOC5zdG9yZTtcblxuICBpZiAoIXRyZWVOb2RlKSByZXR1cm4gbnVsbDtcbiAgdmFyIGVsZSA9IFtdO1xuICB2YXIgY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjayhlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBzdG9yZS5sb2FkT3JUb2dnbGUocm93KTtcbiAgfTtcbiAgaWYgKHRyZWVOb2RlLmluZGVudCkge1xuICAgIGVsZS5wdXNoKGgoJ3NwYW4nLCB7ICdjbGFzcyc6ICdlbC10YWJsZV9faW5kZW50Jywgc3R5bGU6IHsgJ3BhZGRpbmctbGVmdCc6IHRyZWVOb2RlLmluZGVudCArICdweCcgfSB9KSk7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmVlTm9kZS5leHBhbmRlZCA9PT0gJ2Jvb2xlYW4nICYmICF0cmVlTm9kZS5ub0xhenlDaGlsZHJlbikge1xuICAgIHZhciBleHBhbmRDbGFzc2VzID0gWydlbC10YWJsZV9fZXhwYW5kLWljb24nLCB0cmVlTm9kZS5leHBhbmRlZCA/ICdlbC10YWJsZV9fZXhwYW5kLWljb24tLWV4cGFuZGVkJyA6ICcnXTtcbiAgICB2YXIgaWNvbkNsYXNzZXMgPSBbJ2VsLWljb24tYXJyb3ctcmlnaHQnXTtcbiAgICBpZiAodHJlZU5vZGUubG9hZGluZykge1xuICAgICAgaWNvbkNsYXNzZXMgPSBbJ2VsLWljb24tbG9hZGluZyddO1xuICAgIH1cbiAgICBlbGUucHVzaChoKFxuICAgICAgJ2RpdicsXG4gICAgICB7ICdjbGFzcyc6IGV4cGFuZENsYXNzZXMsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgJ2NsaWNrJzogY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiBpY29uQ2xhc3NlcyB9KV1cbiAgICApKTtcbiAgfSBlbHNlIHtcbiAgICBlbGUucHVzaChoKCdzcGFuJywgeyAnY2xhc3MnOiAnZWwtdGFibGVfX3BsYWNlaG9sZGVyJyB9KSk7XG4gIH1cbiAgcmV0dXJuIGVsZTtcbn1cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFibGUvc3JjL3RhYmxlLWNvbHVtbi5qc1xudmFyIHRhYmxlX2NvbHVtbl9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuXG5cblxuXG52YXIgY29sdW1uSWRTZWVkID0gMTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFibGVfY29sdW1uID0gKHtcbiAgbmFtZTogJ0VsVGFibGVDb2x1bW4nLFxuXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfSxcbiAgICBsYWJlbDogU3RyaW5nLFxuICAgIGNsYXNzTmFtZTogU3RyaW5nLFxuICAgIGxhYmVsQ2xhc3NOYW1lOiBTdHJpbmcsXG4gICAgcHJvcGVydHk6IFN0cmluZyxcbiAgICBwcm9wOiBTdHJpbmcsXG4gICAgd2lkdGg6IHt9LFxuICAgIG1pbldpZHRoOiB7fSxcbiAgICByZW5kZXJIZWFkZXI6IEZ1bmN0aW9uLFxuICAgIHNvcnRhYmxlOiB7XG4gICAgICB0eXBlOiBbQm9vbGVhbiwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBzb3J0TWV0aG9kOiBGdW5jdGlvbixcbiAgICBzb3J0Qnk6IFtTdHJpbmcsIEZ1bmN0aW9uLCBBcnJheV0sXG4gICAgcmVzaXphYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sdW1uS2V5OiBTdHJpbmcsXG4gICAgYWxpZ246IFN0cmluZyxcbiAgICBoZWFkZXJBbGlnbjogU3RyaW5nLFxuICAgIHNob3dUb29sdGlwV2hlbk92ZXJmbG93OiBCb29sZWFuLFxuICAgIHNob3dPdmVyZmxvd1Rvb2x0aXA6IEJvb2xlYW4sXG4gICAgZml4ZWQ6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgIGZvcm1hdHRlcjogRnVuY3Rpb24sXG4gICAgc2VsZWN0YWJsZTogRnVuY3Rpb24sXG4gICAgcmVzZXJ2ZVNlbGVjdGlvbjogQm9vbGVhbixcbiAgICBmaWx0ZXJNZXRob2Q6IEZ1bmN0aW9uLFxuICAgIGZpbHRlcmVkVmFsdWU6IEFycmF5LFxuICAgIGZpbHRlcnM6IEFycmF5LFxuICAgIGZpbHRlclBsYWNlbWVudDogU3RyaW5nLFxuICAgIGZpbHRlck11bHRpcGxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaW5kZXg6IFtOdW1iZXIsIEZ1bmN0aW9uXSxcbiAgICBzb3J0T3JkZXJzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gWydhc2NlbmRpbmcnLCAnZGVzY2VuZGluZycsIG51bGxdO1xuICAgICAgfSxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gdmFsLmV2ZXJ5KGZ1bmN0aW9uIChvcmRlcikge1xuICAgICAgICAgIHJldHVybiBbJ2FzY2VuZGluZycsICdkZXNjZW5kaW5nJywgbnVsbF0uaW5kZXhPZihvcmRlcikgPiAtMTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzU3ViQ29sdW1uOiBmYWxzZSxcbiAgICAgIGNvbHVtbnM6IFtdXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3duZXI6IGZ1bmN0aW9uIG93bmVyKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgIXBhcmVudC50YWJsZUlkKSB7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9LFxuICAgIGNvbHVtbk9yVGFibGVQYXJlbnQ6IGZ1bmN0aW9uIGNvbHVtbk9yVGFibGVQYXJlbnQoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgd2hpbGUgKHBhcmVudCAmJiAhcGFyZW50LnRhYmxlSWQgJiYgIXBhcmVudC5jb2x1bW5JZCkge1xuICAgICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfSxcbiAgICByZWFsV2lkdGg6IGZ1bmN0aW9uIHJlYWxXaWR0aCgpIHtcbiAgICAgIHJldHVybiBwYXJzZVdpZHRoKHRoaXMud2lkdGgpO1xuICAgIH0sXG4gICAgcmVhbE1pbldpZHRoOiBmdW5jdGlvbiByZWFsTWluV2lkdGgoKSB7XG4gICAgICByZXR1cm4gcGFyc2VNaW5XaWR0aCh0aGlzLm1pbldpZHRoKTtcbiAgICB9LFxuICAgIHJlYWxBbGlnbjogZnVuY3Rpb24gcmVhbEFsaWduKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYWxpZ24gPyAnaXMtJyArIHRoaXMuYWxpZ24gOiBudWxsO1xuICAgIH0sXG4gICAgcmVhbEhlYWRlckFsaWduOiBmdW5jdGlvbiByZWFsSGVhZGVyQWxpZ24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5oZWFkZXJBbGlnbiA/ICdpcy0nICsgdGhpcy5oZWFkZXJBbGlnbiA6IHRoaXMucmVhbEFsaWduO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcHNEYXRhOiBmdW5jdGlvbiBnZXRQcm9wc0RhdGEoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcHJvcHMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgcHJvcHNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9wcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXIpKSB7XG4gICAgICAgICAgY3VyLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgcHJldltrZXldID0gX3RoaXNba2V5XTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgIH0sIHt9KTtcbiAgICB9LFxuICAgIGdldENvbHVtbkVsSW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtbkVsSW5kZXgoY2hpbGRyZW4sIGNoaWxkKSB7XG4gICAgICByZXR1cm4gW10uaW5kZXhPZi5jYWxsKGNoaWxkcmVuLCBjaGlsZCk7XG4gICAgfSxcbiAgICBzZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gc2V0Q29sdW1uV2lkdGgoY29sdW1uKSB7XG4gICAgICBpZiAodGhpcy5yZWFsV2lkdGgpIHtcbiAgICAgICAgY29sdW1uLndpZHRoID0gdGhpcy5yZWFsV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZWFsTWluV2lkdGgpIHtcbiAgICAgICAgY29sdW1uLm1pbldpZHRoID0gdGhpcy5yZWFsTWluV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoIWNvbHVtbi5taW5XaWR0aCkge1xuICAgICAgICBjb2x1bW4ubWluV2lkdGggPSA4MDtcbiAgICAgIH1cbiAgICAgIGNvbHVtbi5yZWFsV2lkdGggPSBjb2x1bW4ud2lkdGggPT09IHVuZGVmaW5lZCA/IGNvbHVtbi5taW5XaWR0aCA6IGNvbHVtbi53aWR0aDtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSxcbiAgICBzZXRDb2x1bW5Gb3JjZWRQcm9wczogZnVuY3Rpb24gc2V0Q29sdW1uRm9yY2VkUHJvcHMoY29sdW1uKSB7XG4gICAgICAvLyDlr7nkuo7nibnlrprnsbvlnovnmoQgY29sdW1u77yM5p+Q5Lqb5bGe5oCn5LiN5YWB6K646K6+572uXG4gICAgICB2YXIgdHlwZSA9IGNvbHVtbi50eXBlO1xuICAgICAgdmFyIHNvdXJjZSA9IGNlbGxGb3JjZWRbdHlwZV0gfHwge307XG4gICAgICBPYmplY3Qua2V5cyhzb3VyY2UpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc291cmNlW3Byb3BdO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbHVtbltwcm9wXSA9IHByb3AgPT09ICdjbGFzc05hbWUnID8gY29sdW1uW3Byb3BdICsgJyAnICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH0sXG4gICAgc2V0Q29sdW1uUmVuZGVyczogZnVuY3Rpb24gc2V0Q29sdW1uUmVuZGVycyhjb2x1bW4pIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgaCA9IHRoaXMuJGNyZWF0ZUVsZW1lbnQ7XG5cbiAgICAgIC8vIHJlbmRlckhlYWRlciDlsZ7mgKfkuI3mjqjojZDkvb/nlKjjgIJcbiAgICAgIGlmICh0aGlzLnJlbmRlckhlYWRlcikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW1RhYmxlQ29sdW1uXUNvbXBhcmluZyB0byByZW5kZXItaGVhZGVyLCBzY29wZWQtc2xvdCBoZWFkZXIgaXMgZWFzaWVyIHRvIHVzZS4gV2UgcmVjb21tZW5kIHVzZXJzIHRvIHVzZSBzY29wZWQtc2xvdCBoZWFkZXIuJyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlICE9PSAnc2VsZWN0aW9uJykge1xuICAgICAgICBjb2x1bW4ucmVuZGVySGVhZGVyID0gZnVuY3Rpb24gKGgsIHNjb3BlKSB7XG4gICAgICAgICAgdmFyIHJlbmRlckhlYWRlciA9IF90aGlzMi4kc2NvcGVkU2xvdHMuaGVhZGVyO1xuICAgICAgICAgIHJldHVybiByZW5kZXJIZWFkZXIgPyByZW5kZXJIZWFkZXIoc2NvcGUpIDogY29sdW1uLmxhYmVsO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgb3JpZ2luUmVuZGVyQ2VsbCA9IGNvbHVtbi5yZW5kZXJDZWxsO1xuICAgICAgLy8gVE9ETzog6L+Z6YeM55qE5a6e546w6LCD5pW0XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdleHBhbmQnKSB7XG4gICAgICAgIC8vIOWvueS6juWxleW8gOihjO+8jHJlbmRlckNlbGwg5LiN5YWB6K646YWN572u55qE44CC5Zyo5LiK5LiA5q2l5Lit5bey57uP6K6+572u6L+H77yM6L+Z6YeM6ZyA6KaB566A5Y2V5bCB6KOF5LiA5LiL44CCXG4gICAgICAgIGNvbHVtbi5yZW5kZXJDZWxsID0gZnVuY3Rpb24gKGgsIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gaChcbiAgICAgICAgICAgICdkaXYnLFxuICAgICAgICAgICAgeyAnY2xhc3MnOiAnY2VsbCcgfSxcbiAgICAgICAgICAgIFtvcmlnaW5SZW5kZXJDZWxsKGgsIGRhdGEpXVxuICAgICAgICAgICk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub3duZXIucmVuZGVyRXhwYW5kZWQgPSBmdW5jdGlvbiAoaCwgZGF0YSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuJHNjb3BlZFNsb3RzLmRlZmF1bHQgPyBfdGhpczIuJHNjb3BlZFNsb3RzLmRlZmF1bHQoZGF0YSkgOiBfdGhpczIuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcmlnaW5SZW5kZXJDZWxsID0gb3JpZ2luUmVuZGVyQ2VsbCB8fCBkZWZhdWx0UmVuZGVyQ2VsbDtcbiAgICAgICAgLy8g5a+5IHJlbmRlckNlbGwg6L+b6KGM5YyF6KOFXG4gICAgICAgIGNvbHVtbi5yZW5kZXJDZWxsID0gZnVuY3Rpb24gKGgsIGRhdGEpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBudWxsO1xuICAgICAgICAgIGlmIChfdGhpczIuJHNjb3BlZFNsb3RzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMyLiRzY29wZWRTbG90cy5kZWZhdWx0KGRhdGEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZHJlbiA9IG9yaWdpblJlbmRlckNlbGwoaCwgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBwcmVmaXggPSB0cmVlQ2VsbFByZWZpeChoLCBkYXRhKTtcbiAgICAgICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICAgICBjbGFzczogJ2NlbGwnLFxuICAgICAgICAgICAgc3R5bGU6IHt9XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoY29sdW1uLnNob3dPdmVyZmxvd1Rvb2x0aXApIHtcbiAgICAgICAgICAgIHByb3BzLmNsYXNzICs9ICcgZWwtdG9vbHRpcCc7XG4gICAgICAgICAgICBwcm9wcy5zdHlsZSA9IHsgd2lkdGg6IChkYXRhLmNvbHVtbi5yZWFsV2lkdGggfHwgZGF0YS5jb2x1bW4ud2lkdGgpIC0gMSArICdweCcgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgIHByb3BzLFxuICAgICAgICAgICAgW3ByZWZpeCwgY2hpbGRyZW5dXG4gICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSxcbiAgICByZWdpc3Rlck5vcm1hbFdhdGNoZXJzOiBmdW5jdGlvbiByZWdpc3Rlck5vcm1hbFdhdGNoZXJzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBwcm9wcyA9IFsnbGFiZWwnLCAncHJvcGVydHknLCAnZmlsdGVycycsICdmaWx0ZXJNdWx0aXBsZScsICdzb3J0YWJsZScsICdpbmRleCcsICdmb3JtYXR0ZXInLCAnY2xhc3NOYW1lJywgJ2xhYmVsQ2xhc3NOYW1lJywgJ3Nob3dPdmVyZmxvd1Rvb2x0aXAnXTtcbiAgICAgIC8vIOS4gOS6m+WxnuaAp+WFt+acieWIq+WQjVxuICAgICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIHByb3A6ICdwcm9wZXJ0eScsXG4gICAgICAgIHJlYWxBbGlnbjogJ2FsaWduJyxcbiAgICAgICAgcmVhbEhlYWRlckFsaWduOiAnaGVhZGVyQWxpZ24nLFxuICAgICAgICByZWFsV2lkdGg6ICd3aWR0aCdcbiAgICAgIH07XG4gICAgICB2YXIgYWxsQWxpYXNlcyA9IHByb3BzLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY3VyKSB7XG4gICAgICAgIHByZXZbY3VyXSA9IGN1cjtcbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9LCBhbGlhc2VzKTtcblxuICAgICAgT2JqZWN0LmtleXMoYWxsQWxpYXNlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBjb2x1bW5LZXkgPSBhbGlhc2VzW2tleV07XG5cbiAgICAgICAgX3RoaXMzLiR3YXRjaChrZXksIGZ1bmN0aW9uIChuZXdWYWwpIHtcbiAgICAgICAgICBfdGhpczMuY29sdW1uQ29uZmlnW2NvbHVtbktleV0gPSBuZXdWYWw7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICByZWdpc3RlckNvbXBsZXhXYXRjaGVyczogZnVuY3Rpb24gcmVnaXN0ZXJDb21wbGV4V2F0Y2hlcnMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIHByb3BzID0gWydmaXhlZCddO1xuICAgICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIHJlYWxXaWR0aDogJ3dpZHRoJyxcbiAgICAgICAgcmVhbE1pbldpZHRoOiAnbWluV2lkdGgnXG4gICAgICB9O1xuICAgICAgdmFyIGFsbEFsaWFzZXMgPSBwcm9wcy5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIGN1cikge1xuICAgICAgICBwcmV2W2N1cl0gPSBjdXI7XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwgYWxpYXNlcyk7XG5cbiAgICAgIE9iamVjdC5rZXlzKGFsbEFsaWFzZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgY29sdW1uS2V5ID0gYWxpYXNlc1trZXldO1xuXG4gICAgICAgIF90aGlzNC4kd2F0Y2goa2V5LCBmdW5jdGlvbiAobmV3VmFsKSB7XG4gICAgICAgICAgX3RoaXM0LmNvbHVtbkNvbmZpZ1tjb2x1bW5LZXldID0gbmV3VmFsO1xuICAgICAgICAgIHZhciB1cGRhdGVDb2x1bW5zID0gY29sdW1uS2V5ID09PSAnZml4ZWQnO1xuICAgICAgICAgIF90aGlzNC5vd25lci5zdG9yZS5zY2hlZHVsZUxheW91dCh1cGRhdGVDb2x1bW5zKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYVxuICB9LFxuXG4gIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMucm93ID0ge307XG4gICAgdGhpcy5jb2x1bW4gPSB7fTtcbiAgICB0aGlzLiRpbmRleCA9IDA7XG4gICAgdGhpcy5jb2x1bW5JZCA9ICcnO1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLmNvbHVtbk9yVGFibGVQYXJlbnQ7XG4gICAgdGhpcy5pc1N1YkNvbHVtbiA9IHRoaXMub3duZXIgIT09IHBhcmVudDtcbiAgICB0aGlzLmNvbHVtbklkID0gKHBhcmVudC50YWJsZUlkIHx8IHBhcmVudC5jb2x1bW5JZCkgKyAnX2NvbHVtbl8nICsgY29sdW1uSWRTZWVkKys7XG5cbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSB8fCAnZGVmYXVsdCc7XG4gICAgdmFyIHNvcnRhYmxlID0gdGhpcy5zb3J0YWJsZSA9PT0gJycgPyB0cnVlIDogdGhpcy5zb3J0YWJsZTtcbiAgICB2YXIgZGVmYXVsdHMgPSB0YWJsZV9jb2x1bW5fZXh0ZW5kcyh7fSwgY2VsbFN0YXJ0c1t0eXBlXSwge1xuICAgICAgaWQ6IHRoaXMuY29sdW1uSWQsXG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgcHJvcGVydHk6IHRoaXMucHJvcCB8fCB0aGlzLnByb3BlcnR5LFxuICAgICAgYWxpZ246IHRoaXMucmVhbEFsaWduLFxuICAgICAgaGVhZGVyQWxpZ246IHRoaXMucmVhbEhlYWRlckFsaWduLFxuICAgICAgc2hvd092ZXJmbG93VG9vbHRpcDogdGhpcy5zaG93T3ZlcmZsb3dUb29sdGlwIHx8IHRoaXMuc2hvd1Rvb2x0aXBXaGVuT3ZlcmZsb3csXG4gICAgICAvLyBmaWx0ZXIg55u45YWz5bGe5oCnXG4gICAgICBmaWx0ZXJhYmxlOiB0aGlzLmZpbHRlcnMgfHwgdGhpcy5maWx0ZXJNZXRob2QsXG4gICAgICBmaWx0ZXJlZFZhbHVlOiBbXSxcbiAgICAgIGZpbHRlclBsYWNlbWVudDogJycsXG4gICAgICBpc0NvbHVtbkdyb3VwOiBmYWxzZSxcbiAgICAgIGZpbHRlck9wZW5lZDogZmFsc2UsXG4gICAgICAvLyBzb3J0IOebuOWFs+WxnuaAp1xuICAgICAgc29ydGFibGU6IHNvcnRhYmxlLFxuICAgICAgLy8gaW5kZXgg5YiXXG4gICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgIH0pO1xuXG4gICAgdmFyIGJhc2ljUHJvcHMgPSBbJ2NvbHVtbktleScsICdsYWJlbCcsICdjbGFzc05hbWUnLCAnbGFiZWxDbGFzc05hbWUnLCAndHlwZScsICdyZW5kZXJIZWFkZXInLCAnZm9ybWF0dGVyJywgJ2ZpeGVkJywgJ3Jlc2l6YWJsZSddO1xuICAgIHZhciBzb3J0UHJvcHMgPSBbJ3NvcnRNZXRob2QnLCAnc29ydEJ5JywgJ3NvcnRPcmRlcnMnXTtcbiAgICB2YXIgc2VsZWN0UHJvcHMgPSBbJ3NlbGVjdGFibGUnLCAncmVzZXJ2ZVNlbGVjdGlvbiddO1xuICAgIHZhciBmaWx0ZXJQcm9wcyA9IFsnZmlsdGVyTWV0aG9kJywgJ2ZpbHRlcnMnLCAnZmlsdGVyTXVsdGlwbGUnLCAnZmlsdGVyT3BlbmVkJywgJ2ZpbHRlcmVkVmFsdWUnLCAnZmlsdGVyUGxhY2VtZW50J107XG5cbiAgICB2YXIgY29sdW1uID0gdGhpcy5nZXRQcm9wc0RhdGEoYmFzaWNQcm9wcywgc29ydFByb3BzLCBzZWxlY3RQcm9wcywgZmlsdGVyUHJvcHMpO1xuICAgIGNvbHVtbiA9IG1lcmdlT3B0aW9ucyhkZWZhdWx0cywgY29sdW1uKTtcblxuICAgIC8vIOazqOaEjyBjb21wb3NlIOS4reWHveaVsOaJp+ihjOeahOmhuuW6j+aYr+S7juWPs+WIsOW3plxuICAgIHZhciBjaGFpbnMgPSBjb21wb3NlKHRoaXMuc2V0Q29sdW1uUmVuZGVycywgdGhpcy5zZXRDb2x1bW5XaWR0aCwgdGhpcy5zZXRDb2x1bW5Gb3JjZWRQcm9wcyk7XG4gICAgY29sdW1uID0gY2hhaW5zKGNvbHVtbik7XG5cbiAgICB0aGlzLmNvbHVtbkNvbmZpZyA9IGNvbHVtbjtcblxuICAgIC8vIOazqOWGjCB3YXRjaGVyXG4gICAgdGhpcy5yZWdpc3Rlck5vcm1hbFdhdGNoZXJzKCk7XG4gICAgdGhpcy5yZWdpc3RlckNvbXBsZXhXYXRjaGVycygpO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBvd25lciA9IHRoaXMub3duZXI7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuY29sdW1uT3JUYWJsZVBhcmVudDtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmlzU3ViQ29sdW1uID8gcGFyZW50LiRlbC5jaGlsZHJlbiA6IHBhcmVudC4kcmVmcy5oaWRkZW5Db2x1bW5zLmNoaWxkcmVuO1xuICAgIHZhciBjb2x1bW5JbmRleCA9IHRoaXMuZ2V0Q29sdW1uRWxJbmRleChjaGlsZHJlbiwgdGhpcy4kZWwpO1xuXG4gICAgb3duZXIuc3RvcmUuY29tbWl0KCdpbnNlcnRDb2x1bW4nLCB0aGlzLmNvbHVtbkNvbmZpZywgY29sdW1uSW5kZXgsIHRoaXMuaXNTdWJDb2x1bW4gPyBwYXJlbnQuY29sdW1uQ29uZmlnIDogbnVsbCk7XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIGlmICghdGhpcy4kcGFyZW50KSByZXR1cm47XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICB0aGlzLm93bmVyLnN0b3JlLmNvbW1pdCgncmVtb3ZlQ29sdW1uJywgdGhpcy5jb2x1bW5Db25maWcsIHRoaXMuaXNTdWJDb2x1bW4gPyBwYXJlbnQuY29sdW1uQ29uZmlnIDogbnVsbCk7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICAvLyBzbG90cyDkuZ/opoHmuLLmn5PvvIzpnIDopoHorqHnrpflkIjlubbooajlpLRcbiAgICByZXR1cm4gaCgnZGl2JywgdGhpcy4kc2xvdHMuZGVmYXVsdCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJsZS1jb2x1bW4vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudGFibGVfY29sdW1uLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodGFibGVfY29sdW1uLm5hbWUsIHRhYmxlX2NvbHVtbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190YWJsZV9jb2x1bW4gPSAodGFibGVfY29sdW1uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BpY2tlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NzlhZTA2OWYmXG52YXIgcGlja2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzlhZTA2OWZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuICFfdm0ucmFuZ2VkXG4gICAgPyBfYyhcbiAgICAgICAgXCJlbC1pbnB1dFwiLFxuICAgICAgICBfdm0uX2IoXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVDbG9zZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUNsb3NlXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlZjogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtZWRpdG9yXCIsXG4gICAgICAgICAgICBjbGFzczogXCJlbC1kYXRlLWVkaXRvci0tXCIgKyBfdm0udHlwZSxcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHJlYWRvbmx5OlxuICAgICAgICAgICAgICAgICFfdm0uZWRpdGFibGUgfHxcbiAgICAgICAgICAgICAgICBfdm0ucmVhZG9ubHkgfHxcbiAgICAgICAgICAgICAgICBfdm0udHlwZSA9PT0gXCJkYXRlc1wiIHx8XG4gICAgICAgICAgICAgICAgX3ZtLnR5cGUgPT09IFwid2Vla1wiLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnBpY2tlckRpc2FibGVkLFxuICAgICAgICAgICAgICBzaXplOiBfdm0ucGlja2VyU2l6ZSxcbiAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0ucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICB2YWxpZGF0ZUV2ZW50OiBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoX3ZtLnVzZXJJbnB1dCA9IHZhbHVlKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2VcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZUtleWRvd24oJGV2ZW50KVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZU1vdXNlRW50ZXIoJGV2ZW50KVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uc2hvd0Nsb3NlID0gZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJlbC1pbnB1dFwiLFxuICAgICAgICAgIF92bS5maXJzdElucHV0SWQsXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9faWNvblwiLFxuICAgICAgICAgICAgY2xhc3M6IF92bS50cmlnZ2VyQ2xhc3MsXG4gICAgICAgICAgICBhdHRyczogeyBzbG90OiBcInByZWZpeFwiIH0sXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUZvY3VzIH0sXG4gICAgICAgICAgICBzbG90OiBcInByZWZpeFwiXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLmhhdmVUcmlnZ2VyXG4gICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb25cIixcbiAgICAgICAgICAgICAgICBjbGFzczogW192bS5zaG93Q2xvc2UgPyBcIlwiICsgX3ZtLmNsZWFySWNvbiA6IFwiXCJdLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNsb3Q6IFwic3VmZml4XCIgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrSWNvbiB9LFxuICAgICAgICAgICAgICAgIHNsb3Q6IFwic3VmZml4XCJcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgXVxuICAgICAgKVxuICAgIDogX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVDbG9zZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVDbG9zZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICByZWY6IFwicmVmZXJlbmNlXCIsXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1lZGl0b3IgZWwtcmFuZ2UtZWRpdG9yIGVsLWlucHV0X19pbm5lclwiLFxuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICBcImVsLWRhdGUtZWRpdG9yLS1cIiArIF92bS50eXBlLFxuICAgICAgICAgICAgX3ZtLnBpY2tlclNpemUgPyBcImVsLXJhbmdlLWVkaXRvci0tXCIgKyBfdm0ucGlja2VyU2l6ZSA6IFwiXCIsXG4gICAgICAgICAgICBfdm0ucGlja2VyRGlzYWJsZWQgPyBcImlzLWRpc2FibGVkXCIgOiBcIlwiLFxuICAgICAgICAgICAgX3ZtLnBpY2tlclZpc2libGUgPyBcImlzLWFjdGl2ZVwiIDogXCJcIlxuICAgICAgICAgIF0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIGNsaWNrOiBfdm0uaGFuZGxlUmFuZ2VDbGljayxcbiAgICAgICAgICAgIG1vdXNlZW50ZXI6IF92bS5oYW5kbGVNb3VzZUVudGVyLFxuICAgICAgICAgICAgbW91c2VsZWF2ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5zaG93Q2xvc2UgPSBmYWxzZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleWRvd246IF92bS5oYW5kbGVLZXlkb3duXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBbXCJlbC1pbnB1dF9faWNvblwiLCBcImVsLXJhbmdlX19pY29uXCIsIF92bS50cmlnZ2VyQ2xhc3NdXG4gICAgICAgICAgfSksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImlucHV0XCIsXG4gICAgICAgICAgICBfdm0uX2IoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYW5nZS1pbnB1dFwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU6IFwib2ZmXCIsXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnN0YXJ0UGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnBpY2tlckRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFfdm0uZWRpdGFibGUgfHwgX3ZtLnJlYWRvbmx5LFxuICAgICAgICAgICAgICAgICAgbmFtZTogX3ZtLm5hbWUgJiYgX3ZtLm5hbWVbMF1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBfdm0uZGlzcGxheVZhbHVlICYmIF92bS5kaXNwbGF5VmFsdWVbMF0gfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgaW5wdXQ6IF92bS5oYW5kbGVTdGFydElucHV0LFxuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlU3RhcnRDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImlucHV0XCIsXG4gICAgICAgICAgICAgIF92bS5maXJzdElucHV0SWQsXG4gICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3QoXCJyYW5nZS1zZXBhcmF0b3JcIiwgW1xuICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtcmFuZ2Utc2VwYXJhdG9yXCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5yYW5nZVNlcGFyYXRvcikpXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFuZ2UtaW5wdXRcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBcIm9mZlwiLFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5lbmRQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucGlja2VyRGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICByZWFkb25seTogIV92bS5lZGl0YWJsZSB8fCBfdm0ucmVhZG9ubHksXG4gICAgICAgICAgICAgICAgICBuYW1lOiBfdm0ubmFtZSAmJiBfdm0ubmFtZVsxXVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5kaXNwbGF5VmFsdWUgJiYgX3ZtLmRpc3BsYXlWYWx1ZVsxXSB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUVuZElucHV0LFxuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlRW5kQ2hhbmdlLFxuICAgICAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1c1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICAgICAgICBfdm0uc2Vjb25kSW5wdXRJZCxcbiAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIF92bS5oYXZlVHJpZ2dlclxuICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uIGVsLXJhbmdlX19jbG9zZS1pY29uXCIsXG4gICAgICAgICAgICAgICAgY2xhc3M6IFtfdm0uc2hvd0Nsb3NlID8gXCJcIiArIF92bS5jbGVhckljb24gOiBcIlwiXSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrSWNvbiB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbn1cbnZhciBwaWNrZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83OWFlMDY5Zl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxucGlja2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzlhZTA2OWZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03OWFlMDY5ZiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2RhdGUtdXRpbFwiXG52YXIgZGF0ZV91dGlsXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG5cbnZhciBOZXdQb3BwZXIgPSB7XG4gIHByb3BzOiB7XG4gICAgYXBwZW5kVG9Cb2R5OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5hcHBlbmRUb0JvZHksXG4gICAgb2Zmc2V0OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5vZmZzZXQsXG4gICAgYm91bmRhcmllc1BhZGRpbmc6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLmJvdW5kYXJpZXNQYWRkaW5nLFxuICAgIGFycm93T2Zmc2V0OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5hcnJvd09mZnNldFxuICB9LFxuICBtZXRob2RzOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5tZXRob2RzLFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiBtZXJnZV9kZWZhdWx0KCkoeyB2aXNpYmxlQXJyb3c6IHRydWUgfSwgdnVlX3BvcHBlcl9kZWZhdWx0LmEuZGF0YSk7XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveTogdnVlX3BvcHBlcl9kZWZhdWx0LmEuYmVmb3JlRGVzdHJveVxufTtcblxudmFyIERFRkFVTFRfRk9STUFUUyA9IHtcbiAgZGF0ZTogJ3l5eXktTU0tZGQnLFxuICBtb250aDogJ3l5eXktTU0nLFxuICBkYXRldGltZTogJ3l5eXktTU0tZGQgSEg6bW06c3MnLFxuICB0aW1lOiAnSEg6bW06c3MnLFxuICB3ZWVrOiAneXl5eXdXVycsXG4gIHRpbWVyYW5nZTogJ0hIOm1tOnNzJyxcbiAgZGF0ZXJhbmdlOiAneXl5eS1NTS1kZCcsXG4gIG1vbnRocmFuZ2U6ICd5eXl5LU1NJyxcbiAgZGF0ZXRpbWVyYW5nZTogJ3l5eXktTU0tZGQgSEg6bW06c3MnLFxuICB5ZWFyOiAneXl5eSdcbn07XG52YXIgSEFWRV9UUklHR0VSX1RZUEVTID0gWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnLCAndGltZS1zZWxlY3QnLCAnd2VlaycsICdtb250aCcsICd5ZWFyJywgJ2RhdGVyYW5nZScsICdtb250aHJhbmdlJywgJ3RpbWVyYW5nZScsICdkYXRldGltZXJhbmdlJywgJ2RhdGVzJ107XG52YXIgcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIgPSBmdW5jdGlvbiBEQVRFX0ZPUk1BVFRFUih2YWx1ZSwgZm9ybWF0KSB7XG4gIGlmIChmb3JtYXQgPT09ICd0aW1lc3RhbXAnKSByZXR1cm4gdmFsdWUuZ2V0VGltZSgpO1xuICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJmb3JtYXREYXRlXCJdKSh2YWx1ZSwgZm9ybWF0KTtcbn07XG52YXIgcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9QQVJTRVIgPSBmdW5jdGlvbiBEQVRFX1BBUlNFUih0ZXh0LCBmb3JtYXQpIHtcbiAgaWYgKGZvcm1hdCA9PT0gJ3RpbWVzdGFtcCcpIHJldHVybiBuZXcgRGF0ZShOdW1iZXIodGV4dCkpO1xuICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKHRleHQsIGZvcm1hdCk7XG59O1xudmFyIFJBTkdFX0ZPUk1BVFRFUiA9IGZ1bmN0aW9uIFJBTkdFX0ZPUk1BVFRFUih2YWx1ZSwgZm9ybWF0KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDIpIHtcbiAgICB2YXIgc3RhcnQgPSB2YWx1ZVswXTtcbiAgICB2YXIgZW5kID0gdmFsdWVbMV07XG5cbiAgICBpZiAoc3RhcnQgJiYgZW5kKSB7XG4gICAgICByZXR1cm4gW3BpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfRk9STUFUVEVSKHN0YXJ0LCBmb3JtYXQpLCBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX0ZPUk1BVFRFUihlbmQsIGZvcm1hdCldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59O1xudmFyIFJBTkdFX1BBUlNFUiA9IGZ1bmN0aW9uIFJBTkdFX1BBUlNFUihhcnJheSwgZm9ybWF0LCBzZXBhcmF0b3IpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgIGFycmF5ID0gYXJyYXkuc3BsaXQoc2VwYXJhdG9yKTtcbiAgfVxuICBpZiAoYXJyYXkubGVuZ3RoID09PSAyKSB7XG4gICAgdmFyIHJhbmdlMSA9IGFycmF5WzBdO1xuICAgIHZhciByYW5nZTIgPSBhcnJheVsxXTtcblxuICAgIHJldHVybiBbcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9QQVJTRVIocmFuZ2UxLCBmb3JtYXQpLCBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUihyYW5nZTIsIGZvcm1hdCldO1xuICB9XG4gIHJldHVybiBbXTtcbn07XG52YXIgVFlQRV9WQUxVRV9SRVNPTFZFUl9NQVAgPSB7XG4gIGRlZmF1bHQ6IHtcbiAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uIGZvcm1hdHRlcih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuICcnICsgdmFsdWU7XG4gICAgfSxcbiAgICBwYXJzZXI6IGZ1bmN0aW9uIHBhcnNlcih0ZXh0KSB7XG4gICAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkIHx8IHRleHQgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgfSxcbiAgd2Vlazoge1xuICAgIGZvcm1hdHRlcjogZnVuY3Rpb24gZm9ybWF0dGVyKHZhbHVlLCBmb3JtYXQpIHtcbiAgICAgIHZhciB3ZWVrID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJnZXRXZWVrTnVtYmVyXCJdKSh2YWx1ZSk7XG4gICAgICB2YXIgbW9udGggPSB2YWx1ZS5nZXRNb250aCgpO1xuICAgICAgdmFyIHRydWVEYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgaWYgKHdlZWsgPT09IDEgJiYgbW9udGggPT09IDExKSB7XG4gICAgICAgIHRydWVEYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICB0cnVlRGF0ZS5zZXREYXRlKHRydWVEYXRlLmdldERhdGUoKSArIDMgLSAodHJ1ZURhdGUuZ2V0RGF5KCkgKyA2KSAlIDcpO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcImZvcm1hdERhdGVcIl0pKHRydWVEYXRlLCBmb3JtYXQpO1xuXG4gICAgICBkYXRlID0gL1dXLy50ZXN0KGRhdGUpID8gZGF0ZS5yZXBsYWNlKC9XVy8sIHdlZWsgPCAxMCA/ICcwJyArIHdlZWsgOiB3ZWVrKSA6IGRhdGUucmVwbGFjZSgvVy8sIHdlZWspO1xuICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfSxcbiAgICBwYXJzZXI6IGZ1bmN0aW9uIHBhcnNlcih0ZXh0LCBmb3JtYXQpIHtcbiAgICAgIC8vIHBhcnNlIGFzIGlmIGEgbm9ybWFsIGRhdGVcbiAgICAgIHJldHVybiBUWVBFX1ZBTFVFX1JFU09MVkVSX01BUC5kYXRlLnBhcnNlcih0ZXh0LCBmb3JtYXQpO1xuICAgIH1cbiAgfSxcbiAgZGF0ZToge1xuICAgIGZvcm1hdHRlcjogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIsXG4gICAgcGFyc2VyOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUlxuICB9LFxuICBkYXRldGltZToge1xuICAgIGZvcm1hdHRlcjogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIsXG4gICAgcGFyc2VyOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUlxuICB9LFxuICBkYXRlcmFuZ2U6IHtcbiAgICBmb3JtYXR0ZXI6IFJBTkdFX0ZPUk1BVFRFUixcbiAgICBwYXJzZXI6IFJBTkdFX1BBUlNFUlxuICB9LFxuICBtb250aHJhbmdlOiB7XG4gICAgZm9ybWF0dGVyOiBSQU5HRV9GT1JNQVRURVIsXG4gICAgcGFyc2VyOiBSQU5HRV9QQVJTRVJcbiAgfSxcbiAgZGF0ZXRpbWVyYW5nZToge1xuICAgIGZvcm1hdHRlcjogUkFOR0VfRk9STUFUVEVSLFxuICAgIHBhcnNlcjogUkFOR0VfUEFSU0VSXG4gIH0sXG4gIHRpbWVyYW5nZToge1xuICAgIGZvcm1hdHRlcjogUkFOR0VfRk9STUFUVEVSLFxuICAgIHBhcnNlcjogUkFOR0VfUEFSU0VSXG4gIH0sXG4gIHRpbWU6IHtcbiAgICBmb3JtYXR0ZXI6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfRk9STUFUVEVSLFxuICAgIHBhcnNlcjogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9QQVJTRVJcbiAgfSxcbiAgbW9udGg6IHtcbiAgICBmb3JtYXR0ZXI6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0RBVEVfRk9STUFUVEVSLFxuICAgIHBhcnNlcjogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9QQVJTRVJcbiAgfSxcbiAgeWVhcjoge1xuICAgIGZvcm1hdHRlcjogcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIsXG4gICAgcGFyc2VyOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUlxuICB9LFxuICBudW1iZXI6IHtcbiAgICBmb3JtYXR0ZXI6IGZ1bmN0aW9uIGZvcm1hdHRlcih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuICcnICsgdmFsdWU7XG4gICAgfSxcbiAgICBwYXJzZXI6IGZ1bmN0aW9uIHBhcnNlcih0ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gTnVtYmVyKHRleHQpO1xuXG4gICAgICBpZiAoIWlzTmFOKHRleHQpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRhdGVzOiB7XG4gICAgZm9ybWF0dGVyOiBmdW5jdGlvbiBmb3JtYXR0ZXIodmFsdWUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gcGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfREFURV9GT1JNQVRURVIoZGF0ZSwgZm9ybWF0KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgcGFyc2VyOiBmdW5jdGlvbiBwYXJzZXIodmFsdWUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUuc3BsaXQoJywgJykgOiB2YWx1ZSkubWFwKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBkYXRlIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGUgOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19EQVRFX1BBUlNFUihkYXRlLCBmb3JtYXQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xudmFyIFBMQUNFTUVOVF9NQVAgPSB7XG4gIGxlZnQ6ICdib3R0b20tc3RhcnQnLFxuICBjZW50ZXI6ICdib3R0b20nLFxuICByaWdodDogJ2JvdHRvbS1lbmQnXG59O1xuXG52YXIgcGFyc2VBc0Zvcm1hdEFuZFR5cGUgPSBmdW5jdGlvbiBwYXJzZUFzRm9ybWF0QW5kVHlwZSh2YWx1ZSwgY3VzdG9tRm9ybWF0LCB0eXBlKSB7XG4gIHZhciByYW5nZVNlcGFyYXRvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogJy0nO1xuXG4gIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICB2YXIgcGFyc2VyID0gKFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQW3R5cGVdIHx8IFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQWydkZWZhdWx0J10pLnBhcnNlcjtcbiAgdmFyIGZvcm1hdCA9IGN1c3RvbUZvcm1hdCB8fCBERUZBVUxUX0ZPUk1BVFNbdHlwZV07XG4gIHJldHVybiBwYXJzZXIodmFsdWUsIGZvcm1hdCwgcmFuZ2VTZXBhcmF0b3IpO1xufTtcblxudmFyIGZvcm1hdEFzRm9ybWF0QW5kVHlwZSA9IGZ1bmN0aW9uIGZvcm1hdEFzRm9ybWF0QW5kVHlwZSh2YWx1ZSwgY3VzdG9tRm9ybWF0LCB0eXBlKSB7XG4gIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICB2YXIgZm9ybWF0dGVyID0gKFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQW3R5cGVdIHx8IFRZUEVfVkFMVUVfUkVTT0xWRVJfTUFQWydkZWZhdWx0J10pLmZvcm1hdHRlcjtcbiAgdmFyIGZvcm1hdCA9IGN1c3RvbUZvcm1hdCB8fCBERUZBVUxUX0ZPUk1BVFNbdHlwZV07XG4gIHJldHVybiBmb3JtYXR0ZXIodmFsdWUsIGZvcm1hdCk7XG59O1xuXG4vKlxuICogQ29uc2lkZXJzOlxuICogICAxLiBEYXRlIG9iamVjdFxuICogICAyLiBkYXRlIHN0cmluZ1xuICogICAzLiBhcnJheSBvZiAxIG9yIDJcbiAqL1xudmFyIHZhbHVlRXF1YWxzID0gZnVuY3Rpb24gdmFsdWVFcXVhbHMoYSwgYikge1xuICAvLyBjb25zaWRlcnMgRGF0ZSBvYmplY3QgYW5kIHN0cmluZ1xuICB2YXIgZGF0ZUVxdWFscyA9IGZ1bmN0aW9uIGRhdGVFcXVhbHMoYSwgYikge1xuICAgIHZhciBhSXNEYXRlID0gYSBpbnN0YW5jZW9mIERhdGU7XG4gICAgdmFyIGJJc0RhdGUgPSBiIGluc3RhbmNlb2YgRGF0ZTtcbiAgICBpZiAoYUlzRGF0ZSAmJiBiSXNEYXRlKSB7XG4gICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xuICAgIH1cbiAgICBpZiAoIWFJc0RhdGUgJiYgIWJJc0RhdGUpIHtcbiAgICAgIHJldHVybiBhID09PSBiO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgdmFyIGFJc0FycmF5ID0gYSBpbnN0YW5jZW9mIEFycmF5O1xuICB2YXIgYklzQXJyYXkgPSBiIGluc3RhbmNlb2YgQXJyYXk7XG4gIGlmIChhSXNBcnJheSAmJiBiSXNBcnJheSkge1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGEuZXZlcnkoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gZGF0ZUVxdWFscyhpdGVtLCBiW2luZGV4XSk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKCFhSXNBcnJheSAmJiAhYklzQXJyYXkpIHtcbiAgICByZXR1cm4gZGF0ZUVxdWFscyhhLCBiKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG52YXIgaXNTdHJpbmcgPSBmdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHZhbCBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbnZhciBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc192YWxpZGF0b3IgPSBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gIC8vIGVpdGhlcjogU3RyaW5nLCBBcnJheSBvZiBTdHJpbmcsIG51bGwgLyB1bmRlZmluZWRcbiAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCB8fCBpc1N0cmluZyh2YWwpIHx8IEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAyICYmIHZhbC5ldmVyeShpc1N0cmluZyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYSwgTmV3UG9wcGVyXSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNpemU6IFN0cmluZyxcbiAgICBmb3JtYXQ6IFN0cmluZyxcbiAgICB2YWx1ZUZvcm1hdDogU3RyaW5nLFxuICAgIHJlYWRvbmx5OiBCb29sZWFuLFxuICAgIHBsYWNlaG9sZGVyOiBTdHJpbmcsXG4gICAgc3RhcnRQbGFjZWhvbGRlcjogU3RyaW5nLFxuICAgIGVuZFBsYWNlaG9sZGVyOiBTdHJpbmcsXG4gICAgcHJlZml4SWNvbjogU3RyaW5nLFxuICAgIGNsZWFySWNvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2VsLWljb24tY2lyY2xlLWNsb3NlJ1xuICAgIH0sXG4gICAgbmFtZToge1xuICAgICAgZGVmYXVsdDogJycsXG4gICAgICB2YWxpZGF0b3I6IHBpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3ZhbGlkYXRvclxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgY2xlYXJhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaWQ6IHtcbiAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgdmFsaWRhdG9yOiBwaWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc192YWxpZGF0b3JcbiAgICB9LFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgZWRpdGFibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBhbGlnbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2xlZnQnXG4gICAgfSxcbiAgICB2YWx1ZToge30sXG4gICAgZGVmYXVsdFZhbHVlOiB7fSxcbiAgICBkZWZhdWx0VGltZToge30sXG4gICAgcmFuZ2VTZXBhcmF0b3I6IHtcbiAgICAgIGRlZmF1bHQ6ICctJ1xuICAgIH0sXG4gICAgcGlja2VyT3B0aW9uczoge30sXG4gICAgdW5saW5rUGFuZWxzOiBCb29sZWFuLFxuICAgIHZhbGlkYXRlRXZlbnQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHsgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hIH0sXG5cbiAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IGNsaWNrb3V0c2lkZV9kZWZhdWx0LmEgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwaWNrZXJWaXNpYmxlOiBmYWxzZSxcbiAgICAgIHNob3dDbG9zZTogZmFsc2UsXG4gICAgICB1c2VySW5wdXQ6IG51bGwsXG4gICAgICB2YWx1ZU9uT3BlbjogbnVsbCwgLy8gdmFsdWUgd2hlbiBwaWNrZXIgb3BlbnMsIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gZW1pdCBjaGFuZ2VcbiAgICAgIHVud2F0Y2hQaWNrZXJPcHRpb25zOiBudWxsXG4gICAgfTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgcGlja2VyVmlzaWJsZTogZnVuY3Rpb24gcGlja2VyVmlzaWJsZSh2YWwpIHtcbiAgICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMucGlja2VyRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgdGhpcy5zaG93UGlja2VyKCk7XG4gICAgICAgIHRoaXMudmFsdWVPbk9wZW4gPSBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gW10uY29uY2F0KHRoaXMudmFsdWUpIDogdGhpcy52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZVBpY2tlcigpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5ibHVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnYmx1cicsIHRoaXMpO1xuICAgICAgICB0aGlzLmJsdXIoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VkVmFsdWU6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuICAgICAgICAgIHRoaXMucGlja2VyLnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZSh2YWwpIHtcbiAgICAgIC8vIE5PVEU6IHNob3VsZCBldmVudHVhbGx5IG1vdmUgdG8ganN4IHN0eWxlIHBpY2tlciArIHBhbmVsID9cbiAgICAgIGlmICh0aGlzLnBpY2tlcikge1xuICAgICAgICB0aGlzLnBpY2tlci5kZWZhdWx0VmFsdWUgPSB2YWw7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICghdmFsdWVFcXVhbHModmFsLCBvbGRWYWwpICYmICF0aGlzLnBpY2tlclZpc2libGUgJiYgdGhpcy52YWxpZGF0ZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJhbmdlZDogZnVuY3Rpb24gcmFuZ2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZS5pbmRleE9mKCdyYW5nZScpID4gLTE7XG4gICAgfSxcbiAgICByZWZlcmVuY2U6IGZ1bmN0aW9uIHJlZmVyZW5jZSgpIHtcbiAgICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLiRyZWZzLnJlZmVyZW5jZTtcbiAgICAgIHJldHVybiByZWZlcmVuY2UuJGVsIHx8IHJlZmVyZW5jZTtcbiAgICB9LFxuICAgIHJlZklucHV0OiBmdW5jdGlvbiByZWZJbnB1dCgpIHtcbiAgICAgIGlmICh0aGlzLnJlZmVyZW5jZSkge1xuICAgICAgICByZXR1cm4gW10uc2xpY2UuY2FsbCh0aGlzLnJlZmVyZW5jZS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCcpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIHZhbHVlSXNFbXB0eTogZnVuY3Rpb24gdmFsdWVJc0VtcHR5KCkge1xuICAgICAgdmFyIHZhbCA9IHRoaXMudmFsdWU7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB2YWwubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAodmFsW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHRyaWdnZXJDbGFzczogZnVuY3Rpb24gdHJpZ2dlckNsYXNzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJlZml4SWNvbiB8fCAodGhpcy50eXBlLmluZGV4T2YoJ3RpbWUnKSAhPT0gLTEgPyAnZWwtaWNvbi10aW1lJyA6ICdlbC1pY29uLWRhdGUnKTtcbiAgICB9LFxuICAgIHNlbGVjdGlvbk1vZGU6IGZ1bmN0aW9uIHNlbGVjdGlvbk1vZGUoKSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnd2VlaycpIHtcbiAgICAgICAgcmV0dXJuICd3ZWVrJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnbW9udGgnKSB7XG4gICAgICAgIHJldHVybiAnbW9udGgnO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICd5ZWFyJykge1xuICAgICAgICByZXR1cm4gJ3llYXInO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdkYXRlcycpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlcyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnZGF5JztcbiAgICB9LFxuICAgIGhhdmVUcmlnZ2VyOiBmdW5jdGlvbiBoYXZlVHJpZ2dlcigpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5zaG93VHJpZ2dlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1RyaWdnZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gSEFWRV9UUklHR0VSX1RZUEVTLmluZGV4T2YodGhpcy50eXBlKSAhPT0gLTE7XG4gICAgfSxcbiAgICBkaXNwbGF5VmFsdWU6IGZ1bmN0aW9uIGRpc3BsYXlWYWx1ZSgpIHtcbiAgICAgIHZhciBmb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdEFzRm9ybWF0QW5kVHlwZSh0aGlzLnBhcnNlZFZhbHVlLCB0aGlzLmZvcm1hdCwgdGhpcy50eXBlLCB0aGlzLnJhbmdlU2VwYXJhdG9yKTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudXNlcklucHV0KSkge1xuICAgICAgICByZXR1cm4gW3RoaXMudXNlcklucHV0WzBdIHx8IGZvcm1hdHRlZFZhbHVlICYmIGZvcm1hdHRlZFZhbHVlWzBdIHx8ICcnLCB0aGlzLnVzZXJJbnB1dFsxXSB8fCBmb3JtYXR0ZWRWYWx1ZSAmJiBmb3JtYXR0ZWRWYWx1ZVsxXSB8fCAnJ107XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudXNlcklucHV0ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJJbnB1dDtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybWF0dGVkVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2RhdGVzJyA/IGZvcm1hdHRlZFZhbHVlLmpvaW4oJywgJykgOiBmb3JtYXR0ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhcnNlZFZhbHVlOiBmdW5jdGlvbiBwYXJzZWRWYWx1ZSgpIHtcbiAgICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIHRoaXMudmFsdWU7IC8vIGNvbXBvbmVudCB2YWx1ZSBpcyBub3Qgc2V0XG4gICAgICBpZiAodGhpcy50eXBlID09PSAndGltZS1zZWxlY3QnKSByZXR1cm4gdGhpcy52YWx1ZTsgLy8gdGltZS1zZWxlY3QgZG9lcyBub3QgcmVxdWlyZSBwYXJzaW5nLCB0aGlzIG1pZ2h0IGNoYW5nZSBpbiBuZXh0IG1ham9yIHZlcnNpb25cblxuICAgICAgdmFyIHZhbHVlSXNEYXRlT2JqZWN0ID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVPYmplY3RcIl0pKHRoaXMudmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5ldmVyeShkYXRlX3V0aWxfW1wiaXNEYXRlT2JqZWN0XCJdKTtcbiAgICAgIGlmICh2YWx1ZUlzRGF0ZU9iamVjdCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudmFsdWVGb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlQXNGb3JtYXRBbmRUeXBlKHRoaXMudmFsdWUsIHRoaXMudmFsdWVGb3JtYXQsIHRoaXMudHlwZSwgdGhpcy5yYW5nZVNlcGFyYXRvcikgfHwgdGhpcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gTk9URTogZGVhbCB3aXRoIGNvbW1vbiBidXQgaW5jb3JyZWN0IHVzYWdlLCBzaG91bGQgcmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvblxuICAgICAgLy8gdXNlciBtaWdodCBwcm92aWRlIHN0cmluZyAvIHRpbWVzdGFtcCB3aXRob3V0IHZhbHVlLWZvcm1hdCwgY29lcmNlIHRoZW0gaW50byBkYXRlIChvciBhcnJheSBvZiBkYXRlKVxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlLm1hcChmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpO1xuICAgICAgfSkgOiBuZXcgRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICB9LFxuICAgIF9lbEZvcm1JdGVtU2l6ZTogZnVuY3Rpb24gX2VsRm9ybUl0ZW1TaXplKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgIH0sXG4gICAgcGlja2VyU2l6ZTogZnVuY3Rpb24gcGlja2VyU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBwaWNrZXJEaXNhYmxlZDogZnVuY3Rpb24gcGlja2VyRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgZmlyc3RJbnB1dElkOiBmdW5jdGlvbiBmaXJzdElucHV0SWQoKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICB2YXIgaWQgPSB2b2lkIDA7XG4gICAgICBpZiAodGhpcy5yYW5nZWQpIHtcbiAgICAgICAgaWQgPSB0aGlzLmlkICYmIHRoaXMuaWRbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IHRoaXMuaWQ7XG4gICAgICB9XG4gICAgICBpZiAoaWQpIG9iai5pZCA9IGlkO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIHNlY29uZElucHV0SWQ6IGZ1bmN0aW9uIHNlY29uZElucHV0SWQoKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICB2YXIgaWQgPSB2b2lkIDA7XG4gICAgICBpZiAodGhpcy5yYW5nZWQpIHtcbiAgICAgICAgaWQgPSB0aGlzLmlkICYmIHRoaXMuaWRbMV07XG4gICAgICB9XG4gICAgICBpZiAoaWQpIG9iai5pZCA9IGlkO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICAvLyB2dWUtcG9wcGVyXG4gICAgdGhpcy5wb3BwZXJPcHRpb25zID0ge1xuICAgICAgYm91bmRhcmllc1BhZGRpbmc6IDAsXG4gICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG4gICAgfTtcbiAgICB0aGlzLnBsYWNlbWVudCA9IFBMQUNFTUVOVF9NQVBbdGhpcy5hbGlnbl0gfHwgUExBQ0VNRU5UX01BUC5sZWZ0O1xuXG4gICAgdGhpcy4kb24oJ2ZpZWxkUmVzZXQnLCB0aGlzLmhhbmRsZUZpZWxkUmVzZXQpO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgIGlmICghdGhpcy5yYW5nZWQpIHtcbiAgICAgICAgdGhpcy4kcmVmcy5yZWZlcmVuY2UuZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGJsdXI6IGZ1bmN0aW9uIGJsdXIoKSB7XG4gICAgICB0aGlzLnJlZklucHV0LmZvckVhY2goZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5ibHVyKCk7XG4gICAgICB9KTtcbiAgICB9LFxuXG5cbiAgICAvLyB7cGFyc2UsIGZvcm1hdFRvfSBWYWx1ZSBkZWFscyBtYXBzIGNvbXBvbmVudCB2YWx1ZSB3aXRoIGludGVybmFsIERhdGVcbiAgICBwYXJzZVZhbHVlOiBmdW5jdGlvbiBwYXJzZVZhbHVlKHZhbHVlKSB7XG4gICAgICB2YXIgaXNQYXJzZWQgPSBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZU9iamVjdFwiXSkodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KGRhdGVfdXRpbF9bXCJpc0RhdGVPYmplY3RcIl0pO1xuICAgICAgaWYgKHRoaXMudmFsdWVGb3JtYXQgJiYgIWlzUGFyc2VkKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUFzRm9ybWF0QW5kVHlwZSh2YWx1ZSwgdGhpcy52YWx1ZUZvcm1hdCwgdGhpcy50eXBlLCB0aGlzLnJhbmdlU2VwYXJhdG9yKSB8fCB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZvcm1hdFRvVmFsdWU6IGZ1bmN0aW9uIGZvcm1hdFRvVmFsdWUoZGF0ZSkge1xuICAgICAgdmFyIGlzRm9ybWF0dGFibGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZU9iamVjdFwiXSkoZGF0ZSkgfHwgQXJyYXkuaXNBcnJheShkYXRlKSAmJiBkYXRlLmV2ZXJ5KGRhdGVfdXRpbF9bXCJpc0RhdGVPYmplY3RcIl0pO1xuICAgICAgaWYgKHRoaXMudmFsdWVGb3JtYXQgJiYgaXNGb3JtYXR0YWJsZSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0QXNGb3JtYXRBbmRUeXBlKGRhdGUsIHRoaXMudmFsdWVGb3JtYXQsIHRoaXMudHlwZSwgdGhpcy5yYW5nZVNlcGFyYXRvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvLyB7cGFyc2UsIGZvcm1hdFRvfSBTdHJpbmcgZGVhbHMgd2l0aCB1c2VyIGlucHV0XG4gICAgcGFyc2VTdHJpbmc6IGZ1bmN0aW9uIHBhcnNlU3RyaW5nKHZhbHVlKSB7XG4gICAgICB2YXIgdHlwZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdGhpcy50eXBlIDogdGhpcy50eXBlLnJlcGxhY2UoJ3JhbmdlJywgJycpO1xuICAgICAgcmV0dXJuIHBhcnNlQXNGb3JtYXRBbmRUeXBlKHZhbHVlLCB0aGlzLmZvcm1hdCwgdHlwZSk7XG4gICAgfSxcbiAgICBmb3JtYXRUb1N0cmluZzogZnVuY3Rpb24gZm9ybWF0VG9TdHJpbmcodmFsdWUpIHtcbiAgICAgIHZhciB0eXBlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB0aGlzLnR5cGUgOiB0aGlzLnR5cGUucmVwbGFjZSgncmFuZ2UnLCAnJyk7XG4gICAgICByZXR1cm4gZm9ybWF0QXNGb3JtYXRBbmRUeXBlKHZhbHVlLCB0aGlzLmZvcm1hdCwgdHlwZSk7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5waWNrZXJEaXNhYmxlZCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLnZhbHVlSXNFbXB0eSAmJiB0aGlzLmNsZWFyYWJsZSkge1xuICAgICAgICB0aGlzLnNob3dDbG9zZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZSgpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJJbnB1dCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLnBhcnNlU3RyaW5nKHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5waWNrZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkVmFsdWUodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXRJbnB1dCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnVzZXJJbnB1dCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy51c2VySW5wdXQgPT09ICcnKSB7XG4gICAgICAgIHRoaXMuZW1pdElucHV0KG51bGwpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVN0YXJ0SW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZVN0YXJ0SW5wdXQoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJJbnB1dCkge1xuICAgICAgICB0aGlzLnVzZXJJbnB1dCA9IFtldmVudC50YXJnZXQudmFsdWUsIHRoaXMudXNlcklucHV0WzFdXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gW2V2ZW50LnRhcmdldC52YWx1ZSwgbnVsbF07XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVFbmRJbnB1dDogZnVuY3Rpb24gaGFuZGxlRW5kSW5wdXQoZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJJbnB1dCkge1xuICAgICAgICB0aGlzLnVzZXJJbnB1dCA9IFt0aGlzLnVzZXJJbnB1dFswXSwgZXZlbnQudGFyZ2V0LnZhbHVlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gW251bGwsIGV2ZW50LnRhcmdldC52YWx1ZV07XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVTdGFydENoYW5nZTogZnVuY3Rpb24gaGFuZGxlU3RhcnRDaGFuZ2UoZXZlbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMucGFyc2VTdHJpbmcodGhpcy51c2VySW5wdXQgJiYgdGhpcy51c2VySW5wdXRbMF0pO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gW3RoaXMuZm9ybWF0VG9TdHJpbmcodmFsdWUpLCB0aGlzLmRpc3BsYXlWYWx1ZVsxXV07XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IFt2YWx1ZSwgdGhpcy5waWNrZXIudmFsdWUgJiYgdGhpcy5waWNrZXIudmFsdWVbMV1dO1xuICAgICAgICB0aGlzLnBpY2tlci52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkVmFsdWUobmV3VmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0SW5wdXQobmV3VmFsdWUpO1xuICAgICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRW5kQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVFbmRDaGFuZ2UoZXZlbnQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMucGFyc2VTdHJpbmcodGhpcy51c2VySW5wdXQgJiYgdGhpcy51c2VySW5wdXRbMV0pO1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudXNlcklucHV0ID0gW3RoaXMuZGlzcGxheVZhbHVlWzBdLCB0aGlzLmZvcm1hdFRvU3RyaW5nKHZhbHVlKV07XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IFt0aGlzLnBpY2tlci52YWx1ZSAmJiB0aGlzLnBpY2tlci52YWx1ZVswXSwgdmFsdWVdO1xuICAgICAgICB0aGlzLnBpY2tlci52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkVmFsdWUobmV3VmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0SW5wdXQobmV3VmFsdWUpO1xuICAgICAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2tJY29uOiBmdW5jdGlvbiBoYW5kbGVDbGlja0ljb24oZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLnJlYWRvbmx5IHx8IHRoaXMucGlja2VyRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLnNob3dDbG9zZSkge1xuICAgICAgICB0aGlzLnZhbHVlT25PcGVuID0gdGhpcy52YWx1ZTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZW1pdElucHV0KG51bGwpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UobnVsbCk7XG4gICAgICAgIHRoaXMuc2hvd0Nsb3NlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnBpY2tlciAmJiB0eXBlb2YgdGhpcy5waWNrZXIuaGFuZGxlQ2xlYXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLnBpY2tlci5oYW5kbGVDbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSAhdGhpcy5waWNrZXJWaXNpYmxlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkge1xuICAgICAgaWYgKCF0aGlzLnBpY2tlclZpc2libGUpIHJldHVybjtcbiAgICAgIHRoaXMucGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuXG4gICAgICBpZiAodGhpcy50eXBlID09PSAnZGF0ZXMnKSB7XG4gICAgICAgIC8vIHJlc3RvcmUgdG8gZm9ybWVyIHZhbHVlXG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHBhcnNlQXNGb3JtYXRBbmRUeXBlKHRoaXMudmFsdWVPbk9wZW4sIHRoaXMudmFsdWVGb3JtYXQsIHRoaXMudHlwZSwgdGhpcy5yYW5nZVNlcGFyYXRvcikgfHwgdGhpcy52YWx1ZU9uT3BlbjtcbiAgICAgICAgdGhpcy5lbWl0SW5wdXQob2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRmllbGRSZXNldDogZnVuY3Rpb24gaGFuZGxlRmllbGRSZXNldChpbml0aWFsVmFsdWUpIHtcbiAgICAgIHRoaXMudXNlcklucHV0ID0gaW5pdGlhbFZhbHVlID09PSAnJyA/IG51bGwgOiBpbml0aWFsVmFsdWU7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuICAgICAgaWYgKEhBVkVfVFJJR0dFUl9UWVBFUy5pbmRleE9mKHR5cGUpICE9PSAtMSAmJiAhdGhpcy5waWNrZXJWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMucGlja2VyVmlzaWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCdmb2N1cycsIHRoaXMpO1xuICAgIH0sXG4gICAgaGFuZGxlS2V5ZG93bjogZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgICAvLyBFU0NcbiAgICAgIGlmIChrZXlDb2RlID09PSAyNykge1xuICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGFiXG4gICAgICBpZiAoa2V5Q29kZSA9PT0gOSkge1xuICAgICAgICBpZiAoIXRoaXMucmFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoKTtcbiAgICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSB0aGlzLnBpY2tlci52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5ibHVyKCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdXNlciBtYXkgY2hhbmdlIGZvY3VzIGJldHdlZW4gdHdvIGlucHV0XG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMucmVmSW5wdXQuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgX3RoaXMucGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBfdGhpcy5ibHVyKCk7XG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gRW50ZXJcbiAgICAgIGlmIChrZXlDb2RlID09PSAxMykge1xuICAgICAgICBpZiAodGhpcy51c2VySW5wdXQgPT09ICcnIHx8IHRoaXMuaXNWYWxpZFZhbHVlKHRoaXMucGFyc2VTdHJpbmcodGhpcy5kaXNwbGF5VmFsdWUpKSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKCk7XG4gICAgICAgICAgdGhpcy5waWNrZXJWaXNpYmxlID0gdGhpcy5waWNrZXIudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYmx1cigpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHVzZXIgaXMgdHlwaW5nLCBkbyBub3QgbGV0IHBpY2tlciBoYW5kbGUga2V5IGlucHV0XG4gICAgICBpZiAodGhpcy51c2VySW5wdXQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gZGVsZWdhdGUgb3RoZXIga2V5cyB0byBwYW5lbFxuICAgICAgaWYgKHRoaXMucGlja2VyICYmIHRoaXMucGlja2VyLmhhbmRsZUtleWRvd24pIHtcbiAgICAgICAgdGhpcy5waWNrZXIuaGFuZGxlS2V5ZG93bihldmVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVSYW5nZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVSYW5nZUNsaWNrKCkge1xuICAgICAgdmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cbiAgICAgIGlmIChIQVZFX1RSSUdHRVJfVFlQRVMuaW5kZXhPZih0eXBlKSAhPT0gLTEgJiYgIXRoaXMucGlja2VyVmlzaWJsZSkge1xuICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCB0aGlzKTtcbiAgICB9LFxuICAgIGhpZGVQaWNrZXI6IGZ1bmN0aW9uIGhpZGVQaWNrZXIoKSB7XG4gICAgICBpZiAodGhpcy5waWNrZXIpIHtcbiAgICAgICAgdGhpcy5waWNrZXIucmVzZXRWaWV3ICYmIHRoaXMucGlja2VyLnJlc2V0VmlldygpO1xuICAgICAgICB0aGlzLnBpY2tlclZpc2libGUgPSB0aGlzLnBpY2tlci52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVzdHJveVBvcHBlcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc2hvd1BpY2tlcjogZnVuY3Rpb24gc2hvd1BpY2tlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5waWNrZXIpIHtcbiAgICAgICAgdGhpcy5tb3VudFBpY2tlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5waWNrZXJWaXNpYmxlID0gdGhpcy5waWNrZXIudmlzaWJsZSA9IHRydWU7XG5cbiAgICAgIHRoaXMudXBkYXRlUG9wcGVyKCk7XG5cbiAgICAgIHRoaXMucGlja2VyLnZhbHVlID0gdGhpcy5wYXJzZWRWYWx1ZTtcbiAgICAgIHRoaXMucGlja2VyLnJlc2V0VmlldyAmJiB0aGlzLnBpY2tlci5yZXNldFZpZXcoKTtcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucGlja2VyLmFkanVzdFNwaW5uZXJzICYmIF90aGlzMi5waWNrZXIuYWRqdXN0U3Bpbm5lcnMoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbW91bnRQaWNrZXI6IGZ1bmN0aW9uIG1vdW50UGlja2VyKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHRoaXMucGlja2VyID0gbmV3IGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEodGhpcy5wYW5lbCkuJG1vdW50KCk7XG4gICAgICB0aGlzLnBpY2tlci5kZWZhdWx0VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICAgIHRoaXMucGlja2VyLmRlZmF1bHRUaW1lID0gdGhpcy5kZWZhdWx0VGltZTtcbiAgICAgIHRoaXMucGlja2VyLnBvcHBlckNsYXNzID0gdGhpcy5wb3BwZXJDbGFzcztcbiAgICAgIHRoaXMucG9wcGVyRWxtID0gdGhpcy5waWNrZXIuJGVsO1xuICAgICAgdGhpcy5waWNrZXIud2lkdGggPSB0aGlzLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIHRoaXMucGlja2VyLnNob3dUaW1lID0gdGhpcy50eXBlID09PSAnZGF0ZXRpbWUnIHx8IHRoaXMudHlwZSA9PT0gJ2RhdGV0aW1lcmFuZ2UnO1xuICAgICAgdGhpcy5waWNrZXIuc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgIHRoaXMucGlja2VyLnVubGlua1BhbmVscyA9IHRoaXMudW5saW5rUGFuZWxzO1xuICAgICAgdGhpcy5waWNrZXIuYXJyb3dDb250cm9sID0gdGhpcy5hcnJvd0NvbnRyb2wgfHwgdGhpcy50aW1lQXJyb3dDb250cm9sIHx8IGZhbHNlO1xuICAgICAgdGhpcy4kd2F0Y2goJ2Zvcm1hdCcsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgX3RoaXMzLnBpY2tlci5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHVwZGF0ZU9wdGlvbnMgPSBmdW5jdGlvbiB1cGRhdGVPcHRpb25zKCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IF90aGlzMy5waWNrZXJPcHRpb25zO1xuXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2VsZWN0YWJsZVJhbmdlKSB7XG4gICAgICAgICAgdmFyIHJhbmdlcyA9IG9wdGlvbnMuc2VsZWN0YWJsZVJhbmdlO1xuICAgICAgICAgIHZhciBwYXJzZXIgPSBUWVBFX1ZBTFVFX1JFU09MVkVSX01BUC5kYXRldGltZXJhbmdlLnBhcnNlcjtcbiAgICAgICAgICB2YXIgZm9ybWF0ID0gREVGQVVMVF9GT1JNQVRTLnRpbWVyYW5nZTtcblxuICAgICAgICAgIHJhbmdlcyA9IEFycmF5LmlzQXJyYXkocmFuZ2VzKSA/IHJhbmdlcyA6IFtyYW5nZXNdO1xuICAgICAgICAgIF90aGlzMy5waWNrZXIuc2VsZWN0YWJsZVJhbmdlID0gcmFuZ2VzLm1hcChmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIocmFuZ2UsIGZvcm1hdCwgX3RoaXMzLnJhbmdlU2VwYXJhdG9yKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSAmJlxuICAgICAgICAgIC8vIOW/veeVpSB0aW1lLXBpY2tlciDnmoTor6XphY3nva7poblcbiAgICAgICAgICBvcHRpb24gIT09ICdzZWxlY3RhYmxlUmFuZ2UnKSB7XG4gICAgICAgICAgICBfdGhpczMucGlja2VyW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWFpbiBmb3JtYXQgbXVzdCBwcmV2YWlsIG92ZXIgdW5kb2N1bWVudGVkIHBpY2tlck9wdGlvbnMuZm9ybWF0XG4gICAgICAgIGlmIChfdGhpczMuZm9ybWF0KSB7XG4gICAgICAgICAgX3RoaXMzLnBpY2tlci5mb3JtYXQgPSBfdGhpczMuZm9ybWF0O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgdXBkYXRlT3B0aW9ucygpO1xuICAgICAgdGhpcy51bndhdGNoUGlja2VyT3B0aW9ucyA9IHRoaXMuJHdhdGNoKCdwaWNrZXJPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdXBkYXRlT3B0aW9ucygpO1xuICAgICAgfSwgeyBkZWVwOiB0cnVlIH0pO1xuICAgICAgdGhpcy4kZWwuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXIuJGVsKTtcbiAgICAgIHRoaXMucGlja2VyLnJlc2V0VmlldyAmJiB0aGlzLnBpY2tlci5yZXNldFZpZXcoKTtcblxuICAgICAgdGhpcy5waWNrZXIuJG9uKCdkb2Rlc3Ryb3knLCB0aGlzLmRvRGVzdHJveSk7XG4gICAgICB0aGlzLnBpY2tlci4kb24oJ3BpY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgICAgICAgdmFyIHZpc2libGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gICAgICAgIF90aGlzMy51c2VySW5wdXQgPSBudWxsO1xuICAgICAgICBfdGhpczMucGlja2VyVmlzaWJsZSA9IF90aGlzMy5waWNrZXIudmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgIF90aGlzMy5lbWl0SW5wdXQoZGF0ZSk7XG4gICAgICAgIF90aGlzMy5waWNrZXIucmVzZXRWaWV3ICYmIF90aGlzMy5waWNrZXIucmVzZXRWaWV3KCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5waWNrZXIuJG9uKCdzZWxlY3QtcmFuZ2UnLCBmdW5jdGlvbiAoc3RhcnQsIGVuZCwgcG9zKSB7XG4gICAgICAgIGlmIChfdGhpczMucmVmSW5wdXQubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICAgIGlmICghcG9zIHx8IHBvcyA9PT0gJ21pbicpIHtcbiAgICAgICAgICBfdGhpczMucmVmSW5wdXRbMF0uc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgICAgX3RoaXMzLnJlZklucHV0WzBdLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocG9zID09PSAnbWF4Jykge1xuICAgICAgICAgIF90aGlzMy5yZWZJbnB1dFsxXS5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKTtcbiAgICAgICAgICBfdGhpczMucmVmSW5wdXRbMV0uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICB1bm1vdW50UGlja2VyOiBmdW5jdGlvbiB1bm1vdW50UGlja2VyKCkge1xuICAgICAgaWYgKHRoaXMucGlja2VyKSB7XG4gICAgICAgIHRoaXMucGlja2VyLiRkZXN0cm95KCk7XG4gICAgICAgIHRoaXMucGlja2VyLiRvZmYoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnVud2F0Y2hQaWNrZXJPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy51bndhdGNoUGlja2VyT3B0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGlja2VyLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGlja2VyLiRlbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbWl0Q2hhbmdlOiBmdW5jdGlvbiBlbWl0Q2hhbmdlKHZhbCkge1xuICAgICAgLy8gZGV0ZXJtaW5lIHVzZXIgcmVhbCBjaGFuZ2Ugb25seVxuICAgICAgaWYgKCF2YWx1ZUVxdWFscyh2YWwsIHRoaXMudmFsdWVPbk9wZW4pKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCk7XG4gICAgICAgIHRoaXMudmFsdWVPbk9wZW4gPSB2YWw7XG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlRXZlbnQpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZW1pdElucHV0OiBmdW5jdGlvbiBlbWl0SW5wdXQodmFsKSB7XG4gICAgICB2YXIgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRUb1ZhbHVlKHZhbCk7XG4gICAgICBpZiAoIXZhbHVlRXF1YWxzKHRoaXMudmFsdWUsIGZvcm1hdHRlZCkpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBmb3JtYXR0ZWQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNWYWxpZFZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkVmFsdWUodmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5waWNrZXIpIHtcbiAgICAgICAgdGhpcy5tb3VudFBpY2tlcigpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucGlja2VyLmlzVmFsaWRWYWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgJiYgdGhpcy5waWNrZXIuaXNWYWxpZFZhbHVlKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19waWNrZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocGlja2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcGlja2VyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3BpY2tlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcGlja2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNzlhZTA2OWZfcmVuZGVyLFxuICBwaWNrZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83OWFlMDY5Zl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHBpY2tlcl9hcGk7IH1cbnBpY2tlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9waWNrZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBpY2tlciA9IChwaWNrZXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjQ0MGQ0ZWEmXG52YXIgZGF0ZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI0NDBkNGVhX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSxcbiAgICAgIG9uOiB7IFwiYWZ0ZXItZW50ZXJcIjogX3ZtLmhhbmRsZUVudGVyLCBcImFmdGVyLWxlYXZlXCI6IF92bS5oYW5kbGVMZWF2ZSB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbCBlbC1kYXRlLXBpY2tlciBlbC1wb3BwZXJcIixcbiAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcImhhcy1zaWRlYmFyXCI6IF92bS4kc2xvdHMuc2lkZWJhciB8fCBfdm0uc2hvcnRjdXRzLFxuICAgICAgICAgICAgICBcImhhcy10aW1lXCI6IF92bS5zaG93VGltZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF92bS5wb3BwZXJDbGFzc1xuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19ib2R5LXdyYXBwZXJcIiB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uX3QoXCJzaWRlYmFyXCIpLFxuICAgICAgICAgICAgICBfdm0uc2hvcnRjdXRzXG4gICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX3NpZGViYXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnNob3J0Y3V0cywgZnVuY3Rpb24oc2hvcnRjdXQsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX3Nob3J0Y3V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhzaG9ydGN1dC50ZXh0KSldXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19ib2R5XCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5zaG93VGltZVxuICAgICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcGlja2VyX190aW1lLWhlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXBpY2tlcl9fZWRpdG9yLXdyYXBcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS50KFwiZWwuZGF0ZXBpY2tlci5zZWxlY3REYXRlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChfdm0udXNlcklucHV0RGF0ZSA9IHZhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVWaXNpYmxlRGF0ZUNoYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaGFuZGxlVGltZVBpY2tDbG9zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFuZGxlVGltZVBpY2tDbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXBpY2tlcl9fZWRpdG9yLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJlbC1pbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBfdm0udChcImVsLmRhdGVwaWNrZXIuc2VsZWN0VGltZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZVRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS50aW1lUGlja2VyVmlzaWJsZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoX3ZtLnVzZXJJbnB1dFRpbWUgPSB2YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlVmlzaWJsZVRpbWVDaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRpbWUtcGlja2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6IFwidGltZXBpY2tlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRpbWUtYXJyb3ctY29udHJvbFwiOiBfdm0uYXJyb3dDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogX3ZtLnRpbWVQaWNrZXJWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljazogX3ZtLmhhbmRsZVRpbWVQaWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91bnRlZDogX3ZtLnByb3h5VGltZVBpY2tlckRhdGFQcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uY3VycmVudFZpZXcgIT09IFwidGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjdXJyZW50VmlldyAhPT0gJ3RpbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcGlja2VyX19oZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLWRhdGUtcGlja2VyX19oZWFkZXItLWJvcmRlcmVkXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uY3VycmVudFZpZXcgPT09IFwieWVhclwiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uY3VycmVudFZpZXcgPT09IFwibW9udGhcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtZGF0ZS1waWNrZXJfX3ByZXYtYnRuIGVsLWljb24tZC1hcnJvdy1sZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnQoXCJlbC5kYXRlcGlja2VyLnByZXZZZWFyXCIpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnByZXZZZWFyIH1cbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmN1cnJlbnRWaWV3ID09PSBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjdXJyZW50VmlldyA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWRhdGUtcGlja2VyX19wcmV2LWJ0biBlbC1pY29uLWFycm93LWxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0udChcImVsLmRhdGVwaWNrZXIucHJldk1vbnRoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnByZXZNb250aCB9XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXBpY2tlcl9faGVhZGVyLWxhYmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnNob3dZZWFyUGlja2VyIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS55ZWFyTGFiZWwpKV1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmN1cnJlbnRWaWV3ID09PSBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1waWNrZXJfX2hlYWRlci1sYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBfdm0uY3VycmVudFZpZXcgPT09IFwibW9udGhcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5zaG93TW9udGhQaWNrZXIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnQoXCJlbC5kYXRlcGlja2VyLm1vbnRoXCIgKyAoX3ZtLm1vbnRoICsgMSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWRhdGUtcGlja2VyX19uZXh0LWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0udChcImVsLmRhdGVwaWNrZXIubmV4dFllYXJcIilcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubmV4dFllYXIgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uY3VycmVudFZpZXcgPT09IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtZGF0ZS1waWNrZXJfX25leHQtYnRuIGVsLWljb24tYXJyb3ctcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0udChcImVsLmRhdGVwaWNrZXIubmV4dE1vbnRoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLm5leHRNb250aCB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fY29udGVudFwiIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGF0ZS10YWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5jdXJyZW50VmlldyA9PT0gXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiY3VycmVudFZpZXcgPT09ICdkYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3Rpb24tbW9kZVwiOiBfdm0uc2VsZWN0aW9uTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3QtZGF5LW9mLXdlZWtcIjogX3ZtLmZpcnN0RGF5T2ZXZWVrLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC12YWx1ZVwiOiBfdm0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUoX3ZtLmRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLmRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNlbGwtY2xhc3MtbmFtZVwiOiBfdm0uY2VsbENsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZWQtZGF0ZVwiOiBfdm0uZGlzYWJsZWREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBwaWNrOiBfdm0uaGFuZGxlRGF0ZVBpY2sgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJ5ZWFyLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmN1cnJlbnRWaWV3ID09PSBcInllYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjdXJyZW50VmlldyA9PT0gJ3llYXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LXZhbHVlXCI6IF92bS5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShfdm0uZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0uZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZWQtZGF0ZVwiOiBfdm0uZGlzYWJsZWREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBwaWNrOiBfdm0uaGFuZGxlWWVhclBpY2sgfVxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJtb250aC10YWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5jdXJyZW50VmlldyA9PT0gXCJtb250aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImN1cnJlbnRWaWV3ID09PSAnbW9udGgnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkZWZhdWx0LXZhbHVlXCI6IF92bS5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgRGF0ZShfdm0uZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0uZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZWQtZGF0ZVwiOiBfdm0uZGlzYWJsZWREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBwaWNrOiBfdm0uaGFuZGxlTW9udGhQaWNrIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZm9vdGVyVmlzaWJsZSAmJiBfdm0uY3VycmVudFZpZXcgPT09IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJmb290ZXJWaXNpYmxlICYmIGN1cnJlbnRWaWV3ID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19mb290ZXJcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2VsZWN0aW9uTW9kZSAhPT0gXCJkYXRlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VsZWN0aW9uTW9kZSAhPT0gJ2RhdGVzJ1wiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2xpbmstYnRuXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBzaXplOiBcIm1pbmlcIiwgdHlwZTogXCJ0ZXh0XCIgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2hhbmdlVG9Ob3cgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIubm93XCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2xpbmstYnRuXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBwbGFpbjogXCJcIiwgc2l6ZTogXCJtaW5pXCIgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY29uZmlybSB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5jb25maXJtXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBkYXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ0MGQ0ZWFfc3RhdGljUmVuZGVyRm5zID0gW11cbmRhdGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNDQwZDRlYV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yNDQwZDRlYSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2Q5MzkwODkmXG52YXIgdGltZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkOTM5MDg5X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiYWZ0ZXItbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLiRlbWl0KFwiZG9kZXN0cm95XCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1wYW5lbCBlbC1wb3BwZXJcIixcbiAgICAgICAgICBjbGFzczogX3ZtLnBvcHBlckNsYXNzXG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2NvbnRlbnRcIixcbiAgICAgICAgICAgICAgY2xhc3M6IHsgXCJoYXMtc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJ0aW1lLXNwaW5uZXJcIiwge1xuICAgICAgICAgICAgICAgIHJlZjogXCJzcGlubmVyXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIFwiYXJyb3ctY29udHJvbFwiOiBfdm0udXNlQXJyb3csXG4gICAgICAgICAgICAgICAgICBcInNob3ctc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMsXG4gICAgICAgICAgICAgICAgICBcImFtLXBtLW1vZGVcIjogX3ZtLmFtUG1Nb2RlLFxuICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLmRhdGVcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICBcInNlbGVjdC1yYW5nZVwiOiBfdm0uc2V0U2VsZWN0aW9uUmFuZ2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19mb290ZXJcIiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2J0biBjYW5jZWxcIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDYW5jZWwgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIuY2FuY2VsXCIpKSldXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19idG5cIixcbiAgICAgICAgICAgICAgICBjbGFzczogeyBjb25maXJtOiAhX3ZtLmRpc2FibGVkIH0sXG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDb25maXJtKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5jb25maXJtXCIpKSldXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudGltZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNkOTM5MDg5X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTNkOTM5MDg5JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy90aW1lLXNwaW5uZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFmYWNhZGViJlxudmFyIHRpbWVfc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFmYWNhZGViX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lclwiLFxuICAgICAgY2xhc3M6IHsgXCJoYXMtc2Vjb25kc1wiOiBfdm0uc2hvd1NlY29uZHMgfVxuICAgIH0sXG4gICAgW1xuICAgICAgIV92bS5hcnJvd0NvbnRyb2xcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJlbC1zY3JvbGxiYXJcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlZjogXCJob3Vyc1wiLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlclwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICBcIndyYXAtc3R5bGVcIjogXCJtYXgtaGVpZ2h0OiBpbmhlcml0O1wiLFxuICAgICAgICAgICAgICAgICAgXCJ2aWV3LWNsYXNzXCI6IFwiZWwtdGltZS1zcGlubmVyX19saXN0XCIsXG4gICAgICAgICAgICAgICAgICBub3Jlc2l6ZTogXCJcIixcbiAgICAgICAgICAgICAgICAgIHRhZzogXCJ1bFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5lbWl0U2VsZWN0UmFuZ2UoXCJob3Vyc1wiKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1vdXNlbW92ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5hZGp1c3RDdXJyZW50U3Bpbm5lcihcImhvdXJzXCIpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBfdm0uX2woX3ZtLmhvdXJzTGlzdCwgZnVuY3Rpb24oZGlzYWJsZWQsIGhvdXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogaG91cixcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogaG91ciA9PT0gX3ZtLmhvdXJzLCBkaXNhYmxlZDogZGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2xpY2soXCJob3Vyc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBob3VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgKFwiMFwiICsgKF92bS5hbVBtTW9kZSA/IGhvdXIgJSAxMiB8fCAxMiA6IGhvdXIpKS5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLTJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICApICsgX3ZtLl9zKF92bS5hbVBtKGhvdXIpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImVsLXNjcm9sbGJhclwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVmOiBcIm1pbnV0ZXNcIixcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX3dyYXBwZXJcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgXCJ3cmFwLXN0eWxlXCI6IFwibWF4LWhlaWdodDogaW5oZXJpdDtcIixcbiAgICAgICAgICAgICAgICAgIFwidmlldy1jbGFzc1wiOiBcImVsLXRpbWUtc3Bpbm5lcl9fbGlzdFwiLFxuICAgICAgICAgICAgICAgICAgbm9yZXNpemU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICB0YWc6IFwidWxcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZW1pdFNlbGVjdFJhbmdlKFwibWludXRlc1wiKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1vdXNlbW92ZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5hZGp1c3RDdXJyZW50U3Bpbm5lcihcIm1pbnV0ZXNcIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF92bS5fbChfdm0ubWludXRlc0xpc3QsIGZ1bmN0aW9uKGVuYWJsZWQsIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9faXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBhY3RpdmU6IGtleSA9PT0gX3ZtLm1pbnV0ZXMsIGRpc2FibGVkOiAhZW5hYmxlZCB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDbGljayhcIm1pbnV0ZXNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoKFwiMFwiICsga2V5KS5zbGljZSgtMikpKV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZWwtc2Nyb2xsYmFyXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dTZWNvbmRzLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dTZWNvbmRzXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlZjogXCJzZWNvbmRzXCIsXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX193cmFwcGVyXCIsXG4gICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgIFwid3JhcC1zdHlsZVwiOiBcIm1heC1oZWlnaHQ6IGluaGVyaXQ7XCIsXG4gICAgICAgICAgICAgICAgICBcInZpZXctY2xhc3NcIjogXCJlbC10aW1lLXNwaW5uZXJfX2xpc3RcIixcbiAgICAgICAgICAgICAgICAgIG5vcmVzaXplOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgdGFnOiBcInVsXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmVtaXRTZWxlY3RSYW5nZShcInNlY29uZHNcIilcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBtb3VzZW1vdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uYWRqdXN0Q3VycmVudFNwaW5uZXIoXCJzZWNvbmRzXCIpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBfdm0uX2woNjAsIGZ1bmN0aW9uKHNlY29uZCwga2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZToga2V5ID09PSBfdm0uc2Vjb25kcyB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVDbGljayhcInNlY29uZHNcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoKFwiMFwiICsga2V5KS5zbGljZSgtMikpKV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAwXG4gICAgICAgICAgICApXG4gICAgICAgICAgXVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLmFycm93Q29udHJvbFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX193cmFwcGVyIGlzLWFycm93XCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uZW1pdFNlbGVjdFJhbmdlKFwiaG91cnNcIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJyZXBlYXQtY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWNyZWFzZSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRlY3JlYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cgZWwtaWNvbi1hcnJvdy11cFwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5jcmVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX2Fycm93IGVsLWljb24tYXJyb3ctZG93blwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgICAgICB7IHJlZjogXCJob3Vyc1wiLCBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX2xpc3RcIiB9LFxuICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5hcnJvd0hvdXJMaXN0LCBmdW5jdGlvbihob3VyLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9faXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBob3VyID09PSBfdm0uaG91cnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaG91cnNMaXN0W2hvdXJdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIwXCIgKyAoX3ZtLmFtUG1Nb2RlID8gaG91ciAlIDEyIHx8IDEyIDogaG91cilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zbGljZSgtMikgKyBfdm0uYW1QbShob3VyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciBpcy1hcnJvd1wiLFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBtb3VzZWVudGVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmVtaXRTZWxlY3RSYW5nZShcIm1pbnV0ZXNcIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJyZXBlYXQtY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5kZWNyZWFzZSxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRlY3JlYXNlXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fYXJyb3cgZWwtaWNvbi1hcnJvdy11cFwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwicmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5jcmVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJpbmNyZWFzZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXNwaW5uZXJfX2Fycm93IGVsLWljb24tYXJyb3ctZG93blwiXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcInVsXCIsXG4gICAgICAgICAgICAgICAgICB7IHJlZjogXCJtaW51dGVzXCIsIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fbGlzdFwiIH0sXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLmFycm93TWludXRlTGlzdCwgZnVuY3Rpb24obWludXRlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9faXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBtaW51dGUgPT09IF92bS5taW51dGVzIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChcIjBcIiArIG1pbnV0ZSkuc2xpY2UoLTIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uc2hvd1NlY29uZHNcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtc3Bpbm5lcl9fd3JhcHBlciBpcy1hcnJvd1wiLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmVtaXRTZWxlY3RSYW5nZShcInNlY29uZHNcIilcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGVjcmVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGVjcmVhc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19hcnJvdyBlbC1pY29uLWFycm93LXVwXCJcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInJlcGVhdC1jbGlja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtcmVwZWF0LWNsaWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5jcmVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaW5jcmVhc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19hcnJvdyBlbC1pY29uLWFycm93LWRvd25cIlxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHsgcmVmOiBcInNlY29uZHNcIiwgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19saXN0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLmFycm93U2Vjb25kTGlzdCwgZnVuY3Rpb24oc2Vjb25kLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1zcGlubmVyX19pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgYWN0aXZlOiBzZWNvbmQgPT09IF92bS5zZWNvbmRzIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKFwiMFwiICsgc2Vjb25kKS5zbGljZSgtMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF1cbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgdGltZV9zcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWZhY2FkZWJfc3RhdGljUmVuZGVyRm5zID0gW11cbnRpbWVfc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFmYWNhZGViX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3RpbWUtc3Bpbm5lci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWZhY2FkZWImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy90aW1lLXNwaW5uZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVfc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIGNvbXBvbmVudHM6IHsgRWxTY3JvbGxiYXI6IHNjcm9sbGJhcl9kZWZhdWx0LmEgfSxcblxuICBkaXJlY3RpdmVzOiB7XG4gICAgcmVwZWF0Q2xpY2s6IHJlcGVhdF9jbGlja1xuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgZGF0ZToge30sXG4gICAgZGVmYXVsdFZhbHVlOiB7fSwgLy8gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAgICBzaG93U2Vjb25kczoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGFycm93Q29udHJvbDogQm9vbGVhbixcbiAgICBhbVBtTW9kZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJycgLy8gJ2EnOiBhbS9wbTsgJ0EnOiBBTS9QTVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhvdXJzOiBmdW5jdGlvbiBob3VycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGUuZ2V0SG91cnMoKTtcbiAgICB9LFxuICAgIG1pbnV0ZXM6IGZ1bmN0aW9uIG1pbnV0ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldE1pbnV0ZXMoKTtcbiAgICB9LFxuICAgIHNlY29uZHM6IGZ1bmN0aW9uIHNlY29uZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldFNlY29uZHMoKTtcbiAgICB9LFxuICAgIGhvdXJzTGlzdDogZnVuY3Rpb24gaG91cnNMaXN0KCkge1xuICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0UmFuZ2VIb3Vyc1wiXSkodGhpcy5zZWxlY3RhYmxlUmFuZ2UpO1xuICAgIH0sXG4gICAgbWludXRlc0xpc3Q6IGZ1bmN0aW9uIG1pbnV0ZXNMaXN0KCkge1xuICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0UmFuZ2VNaW51dGVzXCJdKSh0aGlzLnNlbGVjdGFibGVSYW5nZSwgdGhpcy5ob3Vycyk7XG4gICAgfSxcbiAgICBhcnJvd0hvdXJMaXN0OiBmdW5jdGlvbiBhcnJvd0hvdXJMaXN0KCkge1xuICAgICAgdmFyIGhvdXJzID0gdGhpcy5ob3VycztcbiAgICAgIHJldHVybiBbaG91cnMgPiAwID8gaG91cnMgLSAxIDogdW5kZWZpbmVkLCBob3VycywgaG91cnMgPCAyMyA/IGhvdXJzICsgMSA6IHVuZGVmaW5lZF07XG4gICAgfSxcbiAgICBhcnJvd01pbnV0ZUxpc3Q6IGZ1bmN0aW9uIGFycm93TWludXRlTGlzdCgpIHtcbiAgICAgIHZhciBtaW51dGVzID0gdGhpcy5taW51dGVzO1xuICAgICAgcmV0dXJuIFttaW51dGVzID4gMCA/IG1pbnV0ZXMgLSAxIDogdW5kZWZpbmVkLCBtaW51dGVzLCBtaW51dGVzIDwgNTkgPyBtaW51dGVzICsgMSA6IHVuZGVmaW5lZF07XG4gICAgfSxcbiAgICBhcnJvd1NlY29uZExpc3Q6IGZ1bmN0aW9uIGFycm93U2Vjb25kTGlzdCgpIHtcbiAgICAgIHZhciBzZWNvbmRzID0gdGhpcy5zZWNvbmRzO1xuICAgICAgcmV0dXJuIFtzZWNvbmRzID4gMCA/IHNlY29uZHMgLSAxIDogdW5kZWZpbmVkLCBzZWNvbmRzLCBzZWNvbmRzIDwgNTkgPyBzZWNvbmRzICsgMSA6IHVuZGVmaW5lZF07XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGFibGVSYW5nZTogW10sXG4gICAgICBjdXJyZW50U2Nyb2xsYmFyOiBudWxsXG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgIV90aGlzLmFycm93Q29udHJvbCAmJiBfdGhpcy5iaW5kU2Nyb2xsRXZlbnQoKTtcbiAgICB9KTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBpbmNyZWFzZTogZnVuY3Rpb24gaW5jcmVhc2UoKSB7XG4gICAgICB0aGlzLnNjcm9sbERvd24oMSk7XG4gICAgfSxcbiAgICBkZWNyZWFzZTogZnVuY3Rpb24gZGVjcmVhc2UoKSB7XG4gICAgICB0aGlzLnNjcm9sbERvd24oLTEpO1xuICAgIH0sXG4gICAgbW9kaWZ5RGF0ZUZpZWxkOiBmdW5jdGlvbiBtb2RpZnlEYXRlRmllbGQodHlwZSwgdmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdob3Vycyc6XG4gICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlUaW1lXCJdKSh0aGlzLmRhdGUsIHZhbHVlLCB0aGlzLm1pbnV0ZXMsIHRoaXMuc2Vjb25kcykpO2JyZWFrO1xuICAgICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKHRoaXMuZGF0ZSwgdGhpcy5ob3VycywgdmFsdWUsIHRoaXMuc2Vjb25kcykpO2JyZWFrO1xuICAgICAgICBjYXNlICdzZWNvbmRzJzpcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKHRoaXMuZGF0ZSwgdGhpcy5ob3VycywgdGhpcy5taW51dGVzLCB2YWx1ZSkpO2JyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKHR5cGUsIF9yZWYpIHtcbiAgICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQgPSBfcmVmLmRpc2FibGVkO1xuXG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMubW9kaWZ5RGF0ZUZpZWxkKHR5cGUsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5lbWl0U2VsZWN0UmFuZ2UodHlwZSk7XG4gICAgICAgIHRoaXMuYWRqdXN0U3Bpbm5lcih0eXBlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbWl0U2VsZWN0UmFuZ2U6IGZ1bmN0aW9uIGVtaXRTZWxlY3RSYW5nZSh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ2hvdXJzJykge1xuICAgICAgICB0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLCAwLCAyKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21pbnV0ZXMnKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsIDMsIDUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc2Vjb25kcycpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0LXJhbmdlJywgNiwgOCk7XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRTY3JvbGxiYXIgPSB0eXBlO1xuICAgIH0sXG4gICAgYmluZFNjcm9sbEV2ZW50OiBmdW5jdGlvbiBiaW5kU2Nyb2xsRXZlbnQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGJpbmRGdW5jdGlvbiA9IGZ1bmN0aW9uIGJpbmRGdW5jdGlvbih0eXBlKSB7XG4gICAgICAgIF90aGlzMi4kcmVmc1t0eXBlXS53cmFwLm9uc2Nyb2xsID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAvLyBUT0RPOiBzY3JvbGwgaXMgZW1pdHRlZCB3aGVuIHNldCBzY3JvbGxUb3AgcHJvZ3JhbWF0aWNhbGx5XG4gICAgICAgICAgLy8gc2hvdWxkIGZpbmQgYmV0dGVyIHNvbHV0aW9ucyBpbiB0aGUgZnV0dXJlIVxuICAgICAgICAgIF90aGlzMi5oYW5kbGVTY3JvbGwodHlwZSwgZSk7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgICAgYmluZEZ1bmN0aW9uKCdob3VycycpO1xuICAgICAgYmluZEZ1bmN0aW9uKCdtaW51dGVzJyk7XG4gICAgICBiaW5kRnVuY3Rpb24oJ3NlY29uZHMnKTtcbiAgICB9LFxuICAgIGhhbmRsZVNjcm9sbDogZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKHR5cGUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWluKE1hdGgucm91bmQoKHRoaXMuJHJlZnNbdHlwZV0ud3JhcC5zY3JvbGxUb3AgLSAodGhpcy5zY3JvbGxCYXJIZWlnaHQodHlwZSkgKiAwLjUgLSAxMCkgLyB0aGlzLnR5cGVJdGVtSGVpZ2h0KHR5cGUpICsgMykgLyB0aGlzLnR5cGVJdGVtSGVpZ2h0KHR5cGUpKSwgdHlwZSA9PT0gJ2hvdXJzJyA/IDIzIDogNTkpO1xuICAgICAgdGhpcy5tb2RpZnlEYXRlRmllbGQodHlwZSwgdmFsdWUpO1xuICAgIH0sXG5cblxuICAgIC8vIE5PVEU6IHVzZWQgYnkgZGF0ZXRpbWUgLyBkYXRlLXJhbmdlIHBhbmVsXG4gICAgLy8gICAgICAgcmVuYW1lZCBmcm9tIGFkanVzdFNjcm9sbFRvcFxuICAgIC8vICAgICAgIHNob3VsZCB0cnkgdG8gcmVmYWN0b3J5IGl0XG4gICAgYWRqdXN0U3Bpbm5lcnM6IGZ1bmN0aW9uIGFkanVzdFNwaW5uZXJzKCkge1xuICAgICAgdGhpcy5hZGp1c3RTcGlubmVyKCdob3VycycsIHRoaXMuaG91cnMpO1xuICAgICAgdGhpcy5hZGp1c3RTcGlubmVyKCdtaW51dGVzJywgdGhpcy5taW51dGVzKTtcbiAgICAgIHRoaXMuYWRqdXN0U3Bpbm5lcignc2Vjb25kcycsIHRoaXMuc2Vjb25kcyk7XG4gICAgfSxcbiAgICBhZGp1c3RDdXJyZW50U3Bpbm5lcjogZnVuY3Rpb24gYWRqdXN0Q3VycmVudFNwaW5uZXIodHlwZSkge1xuICAgICAgdGhpcy5hZGp1c3RTcGlubmVyKHR5cGUsIHRoaXNbdHlwZV0pO1xuICAgIH0sXG4gICAgYWRqdXN0U3Bpbm5lcjogZnVuY3Rpb24gYWRqdXN0U3Bpbm5lcih0eXBlLCB2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuYXJyb3dDb250cm9sKSByZXR1cm47XG4gICAgICB2YXIgZWwgPSB0aGlzLiRyZWZzW3R5cGVdLndyYXA7XG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgdmFsdWUgKiB0aGlzLnR5cGVJdGVtSGVpZ2h0KHR5cGUpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjcm9sbERvd246IGZ1bmN0aW9uIHNjcm9sbERvd24oc3RlcCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5jdXJyZW50U2Nyb2xsYmFyKSB7XG4gICAgICAgIHRoaXMuZW1pdFNlbGVjdFJhbmdlKCdob3VycycpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbGFiZWwgPSB0aGlzLmN1cnJlbnRTY3JvbGxiYXI7XG4gICAgICB2YXIgaG91cnNMaXN0ID0gdGhpcy5ob3Vyc0xpc3Q7XG4gICAgICB2YXIgbm93ID0gdGhpc1tsYWJlbF07XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTY3JvbGxiYXIgPT09ICdob3VycycpIHtcbiAgICAgICAgdmFyIHRvdGFsID0gTWF0aC5hYnMoc3RlcCk7XG4gICAgICAgIHN0ZXAgPSBzdGVwID4gMCA/IDEgOiAtMTtcbiAgICAgICAgdmFyIGxlbmd0aCA9IGhvdXJzTGlzdC5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChsZW5ndGgtLSAmJiB0b3RhbCkge1xuICAgICAgICAgIG5vdyA9IChub3cgKyBzdGVwICsgaG91cnNMaXN0Lmxlbmd0aCkgJSBob3Vyc0xpc3QubGVuZ3RoO1xuICAgICAgICAgIGlmIChob3Vyc0xpc3Rbbm93XSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRvdGFsLS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXJzTGlzdFtub3ddKSByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3cgPSAobm93ICsgc3RlcCArIDYwKSAlIDYwO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm1vZGlmeURhdGVGaWVsZChsYWJlbCwgbm93KTtcbiAgICAgIHRoaXMuYWRqdXN0U3Bpbm5lcihsYWJlbCwgbm93KTtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMy5lbWl0U2VsZWN0UmFuZ2UoX3RoaXMzLmN1cnJlbnRTY3JvbGxiYXIpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBhbVBtOiBmdW5jdGlvbiBhbVBtKGhvdXIpIHtcbiAgICAgIHZhciBzaG91bGRTaG93QW1QbSA9IHRoaXMuYW1QbU1vZGUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnO1xuICAgICAgaWYgKCFzaG91bGRTaG93QW1QbSkgcmV0dXJuICcnO1xuICAgICAgdmFyIGlzQ2FwaXRhbCA9IHRoaXMuYW1QbU1vZGUgPT09ICdBJztcbiAgICAgIHZhciBjb250ZW50ID0gaG91ciA8IDEyID8gJyBhbScgOiAnIHBtJztcbiAgICAgIGlmIChpc0NhcGl0YWwpIGNvbnRlbnQgPSBjb250ZW50LnRvVXBwZXJDYXNlKCk7XG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9LFxuICAgIHR5cGVJdGVtSGVpZ2h0OiBmdW5jdGlvbiB0eXBlSXRlbUhlaWdodCh0eXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmc1t0eXBlXS4kZWwucXVlcnlTZWxlY3RvcignbGknKS5vZmZzZXRIZWlnaHQ7XG4gICAgfSxcbiAgICBzY3JvbGxCYXJIZWlnaHQ6IGZ1bmN0aW9uIHNjcm9sbEJhckhlaWdodCh0eXBlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmc1t0eXBlXS4kZWwub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy90aW1lLXNwaW5uZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhc2ljX3RpbWVfc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0aW1lX3NwaW5uZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3RpbWUtc3Bpbm5lci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0aW1lX3NwaW5uZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBiYXNpY190aW1lX3NwaW5uZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHRpbWVfc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFmYWNhZGViX3JlbmRlcixcbiAgdGltZV9zcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWZhY2FkZWJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0aW1lX3NwaW5uZXJfYXBpOyB9XG50aW1lX3NwaW5uZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvdGltZS1zcGlubmVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0aW1lX3NwaW5uZXIgPSAodGltZV9zcGlubmVyX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgVGltZVNwaW5uZXI6IHRpbWVfc3Bpbm5lclxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmlzaWJsZTogQm9vbGVhbixcbiAgICB0aW1lQXJyb3dDb250cm9sOiBCb29sZWFuXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy4kcmVmcy5zcGlubmVyLmVtaXRTZWxlY3RSYW5nZSgnaG91cnMnKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5lZWRJbml0QWRqdXN0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZShuZXdWYWwpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgZGF0ZSA9IHZvaWQgMDtcbiAgICAgIGlmIChuZXdWYWwgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIGRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcImxpbWl0VGltZVJhbmdlXCJdKShuZXdWYWwsIHRoaXMuc2VsZWN0YWJsZVJhbmdlLCB0aGlzLmZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKCFuZXdWYWwpIHtcbiAgICAgICAgZGF0ZSA9IHRoaXMuZGVmYXVsdFZhbHVlID8gbmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUpIDogbmV3IERhdGUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kYXRlID0gZGF0ZTtcbiAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5uZWVkSW5pdEFkanVzdCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYWRqdXN0U3Bpbm5lcnMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmVlZEluaXRBZGp1c3QgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdGFibGVSYW5nZTogZnVuY3Rpb24gc2VsZWN0YWJsZVJhbmdlKHZhbCkge1xuICAgICAgdGhpcy4kcmVmcy5zcGlubmVyLnNlbGVjdGFibGVSYW5nZSA9IHZhbDtcbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogZnVuY3Rpb24gZGVmYXVsdFZhbHVlKHZhbCkge1xuICAgICAgaWYgKCFPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gdmFsID8gbmV3IERhdGUodmFsKSA6IG5ldyBEYXRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvcHBlckNsYXNzOiAnJyxcbiAgICAgIGZvcm1hdDogJ0hIOm1tOnNzJyxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICBvbGRWYWx1ZTogbmV3IERhdGUoKSxcbiAgICAgIHNlbGVjdGFibGVSYW5nZTogW10sXG4gICAgICBzZWxlY3Rpb25SYW5nZTogWzAsIDJdLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgYXJyb3dDb250cm9sOiBmYWxzZSxcbiAgICAgIG5lZWRJbml0QWRqdXN0OiB0cnVlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2hvd1NlY29uZHM6IGZ1bmN0aW9uIHNob3dTZWNvbmRzKCkge1xuICAgICAgcmV0dXJuICh0aGlzLmZvcm1hdCB8fCAnJykuaW5kZXhPZignc3MnKSAhPT0gLTE7XG4gICAgfSxcbiAgICB1c2VBcnJvdzogZnVuY3Rpb24gdXNlQXJyb3coKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcnJvd0NvbnRyb2wgfHwgdGhpcy50aW1lQXJyb3dDb250cm9sIHx8IGZhbHNlO1xuICAgIH0sXG4gICAgYW1QbU1vZGU6IGZ1bmN0aW9uIGFtUG1Nb2RlKCkge1xuICAgICAgaWYgKCh0aGlzLmZvcm1hdCB8fCAnJykuaW5kZXhPZignQScpICE9PSAtMSkgcmV0dXJuICdBJztcbiAgICAgIGlmICgodGhpcy5mb3JtYXQgfHwgJycpLmluZGV4T2YoJ2EnKSAhPT0gLTEpIHJldHVybiAnYSc7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDYW5jZWw6IGZ1bmN0aW9uIGhhbmRsZUNhbmNlbCgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB0aGlzLm9sZFZhbHVlLCBmYWxzZSk7XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShkYXRlKSB7XG4gICAgICAvLyB0aGlzLnZpc2libGUgYXZvaWRzIGVkZ2UgY2FzZXMsIHdoZW4gdXNlIHNjcm9sbHMgZHVyaW5nIHBhbmVsIGNsb3NpbmcgYW5pbWF0aW9uXG4gICAgICBpZiAodGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiY2xlYXJNaWxsaXNlY29uZHNcIl0pKGRhdGUpO1xuICAgICAgICAvLyBpZiBkYXRlIGlzIG91dCBvZiByYW5nZSwgZG8gbm90IGVtaXRcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZFZhbHVlKHRoaXMuZGF0ZSkpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgdGhpcy5kYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgc2V0U2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uIHNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsIHN0YXJ0LCBlbmQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZSA9IFtzdGFydCwgZW5kXTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbmZpcm06IGZ1bmN0aW9uIGhhbmRsZUNvbmZpcm0oKSB7XG4gICAgICB2YXIgdmlzaWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgICB2YXIgZmlyc3QgPSBhcmd1bWVudHNbMV07XG5cbiAgICAgIGlmIChmaXJzdCkgcmV0dXJuO1xuICAgICAgdmFyIGRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyTWlsbGlzZWNvbmRzXCJdKShPYmplY3QoZGF0ZV91dGlsX1tcImxpbWl0VGltZVJhbmdlXCJdKSh0aGlzLmRhdGUsIHRoaXMuc2VsZWN0YWJsZVJhbmdlLCB0aGlzLmZvcm1hdCkpO1xuICAgICAgdGhpcy4kZW1pdCgncGljaycsIGRhdGUsIHZpc2libGUsIGZpcnN0KTtcbiAgICB9LFxuICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgIHZhciBtYXBwaW5nID0geyAzODogLTEsIDQwOiAxLCAzNzogLTEsIDM5OiAxIH07XG5cbiAgICAgIC8vIExlZnQgb3IgUmlnaHRcbiAgICAgIGlmIChrZXlDb2RlID09PSAzNyB8fCBrZXlDb2RlID09PSAzOSkge1xuICAgICAgICB2YXIgc3RlcCA9IG1hcHBpbmdba2V5Q29kZV07XG4gICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmFuZ2Uoc3RlcCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVXAgb3IgRG93blxuICAgICAgaWYgKGtleUNvZGUgPT09IDM4IHx8IGtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgIHZhciBfc3RlcCA9IG1hcHBpbmdba2V5Q29kZV07XG4gICAgICAgIHRoaXMuJHJlZnMuc3Bpbm5lci5zY3JvbGxEb3duKF9zdGVwKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNWYWxpZFZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkVmFsdWUoZGF0ZSkge1xuICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1widGltZVdpdGhpblJhbmdlXCJdKShkYXRlLCB0aGlzLnNlbGVjdGFibGVSYW5nZSwgdGhpcy5mb3JtYXQpO1xuICAgIH0sXG4gICAgYWRqdXN0U3Bpbm5lcnM6IGZ1bmN0aW9uIGFkanVzdFNwaW5uZXJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMuc3Bpbm5lci5hZGp1c3RTcGlubmVycygpO1xuICAgIH0sXG4gICAgY2hhbmdlU2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uIGNoYW5nZVNlbGVjdGlvblJhbmdlKHN0ZXApIHtcbiAgICAgIHZhciBsaXN0ID0gWzAsIDNdLmNvbmNhdCh0aGlzLnNob3dTZWNvbmRzID8gWzZdIDogW10pO1xuICAgICAgdmFyIG1hcHBpbmcgPSBbJ2hvdXJzJywgJ21pbnV0ZXMnXS5jb25jYXQodGhpcy5zaG93U2Vjb25kcyA/IFsnc2Vjb25kcyddIDogW10pO1xuICAgICAgdmFyIGluZGV4ID0gbGlzdC5pbmRleE9mKHRoaXMuc2VsZWN0aW9uUmFuZ2VbMF0pO1xuICAgICAgdmFyIG5leHQgPSAoaW5kZXggKyBzdGVwICsgbGlzdC5sZW5ndGgpICUgbGlzdC5sZW5ndGg7XG4gICAgICB0aGlzLiRyZWZzLnNwaW5uZXIuZW1pdFNlbGVjdFJhbmdlKG1hcHBpbmdbbmV4dF0pO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzMy5oYW5kbGVDb25maXJtKHRydWUsIHRydWUpO1xuICAgIH0pO1xuICAgIHRoaXMuJGVtaXQoJ21vdW50ZWQnKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYW5lbF90aW1ldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRpbWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdGltZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhbmVsX3RpbWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9yZW5kZXIsXG4gIHRpbWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zZDkzOTA4OV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHRpbWVfYXBpOyB9XG50aW1lX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhbmVsX3RpbWUgPSAodGltZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy95ZWFyLXRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1jODZhYjVlMCZcbnZhciB5ZWFyX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfYzg2YWI1ZTBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidGFibGVcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXllYXItdGFibGVcIiwgb246IHsgY2xpY2s6IF92bS5oYW5kbGVZZWFyVGFibGVDbGljayB9IH0sXG4gICAgW1xuICAgICAgX2MoXCJ0Ym9keVwiLCBbXG4gICAgICAgIF9jKFwidHJcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDApXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW19jKFwiYVwiLCB7IHN0YXRpY0NsYXNzOiBcImNlbGxcIiB9LCBbX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyKSldKV1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDEpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImFcIiwgeyBzdGF0aWNDbGFzczogXCJjZWxsXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDEpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENlbGxTdHlsZShfdm0uc3RhcnRZZWFyICsgMilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiYVwiLCB7IHN0YXRpY0NsYXNzOiBcImNlbGxcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyICsgMikpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyAzKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIgKyAzKSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIF0pLFxuICAgICAgICBfYyhcInRyXCIsIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyA0KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIgKyA0KSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImFcIiwgeyBzdGF0aWNDbGFzczogXCJjZWxsXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDUpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImF2YWlsYWJsZVwiLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLmdldENlbGxTdHlsZShfdm0uc3RhcnRZZWFyICsgNilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiYVwiLCB7IHN0YXRpY0NsYXNzOiBcImNlbGxcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uc3RhcnRZZWFyICsgNikpXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyA3KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIgKyA3KSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIF0pLFxuICAgICAgICBfYyhcInRyXCIsIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYXZhaWxhYmxlXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBfdm0uZ2V0Q2VsbFN0eWxlKF92bS5zdGFydFllYXIgKyA4KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJhXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5zdGFydFllYXIgKyA4KSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0ZFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhdmFpbGFibGVcIixcbiAgICAgICAgICAgICAgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoX3ZtLnN0YXJ0WWVhciArIDkpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImFcIiwgeyBzdGF0aWNDbGFzczogXCJjZWxsXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnN0YXJ0WWVhciArIDkpKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJ0ZFwiKSxcbiAgICAgICAgICBfYyhcInRkXCIpXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF1cbiAgKVxufVxudmFyIHllYXJfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jODZhYjVlMF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxueWVhcl90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2M4NmFiNWUwX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3llYXItdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWM4NmFiNWUwJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMveWVhci10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxudmFyIHllYXJfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19kYXRlc0luWWVhciA9IGZ1bmN0aW9uIGRhdGVzSW5ZZWFyKHllYXIpIHtcbiAgdmFyIG51bU9mRGF5cyA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0RGF5Q291bnRPZlllYXJcIl0pKHllYXIpO1xuICB2YXIgZmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCAwLCAxKTtcbiAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wicmFuZ2VcIl0pKG51bU9mRGF5cykubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wibmV4dERhdGVcIl0pKGZpcnN0RGF5LCBuKTtcbiAgfSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB5ZWFyX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgcHJvcHM6IHtcbiAgICBkaXNhYmxlZERhdGU6IHt9LFxuICAgIHZhbHVlOiB7fSxcbiAgICBkZWZhdWx0VmFsdWU6IHtcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICAvLyBudWxsIG9yIHZhbGlkIERhdGUgT2JqZWN0XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsIGluc3RhbmNlb2YgRGF0ZSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRhdGU6IHt9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzdGFydFllYXI6IGZ1bmN0aW9uIHN0YXJ0WWVhcigpIHtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpIC8gMTApICogMTA7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDZWxsU3R5bGU6IGZ1bmN0aW9uIGdldENlbGxTdHlsZSh5ZWFyKSB7XG4gICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7XG5cbiAgICAgIHN0eWxlLmRpc2FibGVkID0gdHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nID8geWVhcl90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2RhdGVzSW5ZZWFyKHllYXIpLmV2ZXJ5KHRoaXMuZGlzYWJsZWREYXRlKSA6IGZhbHNlO1xuICAgICAgc3R5bGUuY3VycmVudCA9IE9iamVjdCh1dGlsX1tcImFycmF5RmluZEluZGV4XCJdKShPYmplY3QodXRpbF9bXCJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXlcIl0pKHRoaXMudmFsdWUpLCBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyO1xuICAgICAgfSkgPj0gMDtcbiAgICAgIHN0eWxlLnRvZGF5ID0gdG9kYXkuZ2V0RnVsbFllYXIoKSA9PT0geWVhcjtcbiAgICAgIHN0eWxlLmRlZmF1bHQgPSB0aGlzLmRlZmF1bHRWYWx1ZSAmJiB0aGlzLmRlZmF1bHRWYWx1ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyO1xuXG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcbiAgICBoYW5kbGVZZWFyVGFibGVDbGljazogZnVuY3Rpb24gaGFuZGxlWWVhclRhYmxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgICBpZiAoT2JqZWN0KGRvbV9bXCJoYXNDbGFzc1wiXSkodGFyZ2V0LnBhcmVudE5vZGUsICdkaXNhYmxlZCcpKSByZXR1cm47XG4gICAgICAgIHZhciB5ZWFyID0gdGFyZ2V0LnRleHRDb250ZW50IHx8IHRhcmdldC5pbm5lclRleHQ7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBOdW1iZXIoeWVhcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy95ZWFyLXRhYmxlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBiYXNpY195ZWFyX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHllYXJfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3llYXItdGFibGUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgeWVhcl90YWJsZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIGJhc2ljX3llYXJfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHllYXJfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jODZhYjVlMF9yZW5kZXIsXG4gIHllYXJfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF9jODZhYjVlMF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHllYXJfdGFibGVfYXBpOyB9XG55ZWFyX3RhYmxlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL3llYXItdGFibGUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHllYXJfdGFibGUgPSAoeWVhcl90YWJsZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjU0ZDRmNDImXG52YXIgbW9udGhfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF82NTRkNGY0Ml9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0YWJsZVwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW1vbnRoLXRhYmxlXCIsXG4gICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZU1vbnRoVGFibGVDbGljaywgbW91c2Vtb3ZlOiBfdm0uaGFuZGxlTW91c2VNb3ZlIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInRib2R5XCIsXG4gICAgICAgIF92bS5fbChfdm0ucm93cywgZnVuY3Rpb24ocm93LCBrZXkpIHtcbiAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICBcInRyXCIsXG4gICAgICAgICAgICB7IGtleToga2V5IH0sXG4gICAgICAgICAgICBfdm0uX2wocm93LCBmdW5jdGlvbihjZWxsLCBrZXkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFwidGRcIiwgeyBrZXk6IGtleSwgY2xhc3M6IF92bS5nZXRDZWxsU3R5bGUoY2VsbCkgfSwgW1xuICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiYVwiLCB7IHN0YXRpY0NsYXNzOiBcImNlbGxcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0udChcImVsLmRhdGVwaWNrZXIubW9udGhzLlwiICsgX3ZtLm1vbnRoc1tjZWxsLnRleHRdKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICB9KSxcbiAgICAgICAgMFxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIG1vbnRoX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjU0ZDRmNDJfc3RhdGljUmVuZGVyRm5zID0gW11cbm1vbnRoX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjU0ZDRmNDJfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvbW9udGgtdGFibGUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY1NGQ0ZjQyJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvbW9udGgtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG52YXIgbW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19kYXRlc0luTW9udGggPSBmdW5jdGlvbiBkYXRlc0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgdmFyIG51bU9mRGF5cyA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0RGF5Q291bnRPZk1vbnRoXCJdKSh5ZWFyLCBtb250aCk7XG4gIHZhciBmaXJzdERheSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcbiAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wicmFuZ2VcIl0pKG51bU9mRGF5cykubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wibmV4dERhdGVcIl0pKGZpcnN0RGF5LCBuKTtcbiAgfSk7XG59O1xuXG52YXIgY2xlYXJEYXRlID0gZnVuY3Rpb24gY2xlYXJEYXRlKGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpKTtcbn07XG5cbnZhciBnZXRNb250aFRpbWVzdGFtcCA9IGZ1bmN0aW9uIGdldE1vbnRoVGltZXN0YW1wKHRpbWUpIHtcbiAgaWYgKHR5cGVvZiB0aW1lID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdGltZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY2xlYXJEYXRlKG5ldyBEYXRlKHRpbWUpKS5nZXRUaW1lKCk7XG4gIH0gZWxzZSBpZiAodGltZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gY2xlYXJEYXRlKHRpbWUpLmdldFRpbWUoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gTmFOO1xuICB9XG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBwcm9wczoge1xuICAgIGRpc2FibGVkRGF0ZToge30sXG4gICAgdmFsdWU6IHt9LFxuICAgIHNlbGVjdGlvbk1vZGU6IHtcbiAgICAgIGRlZmF1bHQ6ICdtb250aCdcbiAgICB9LFxuICAgIG1pbkRhdGU6IHt9LFxuXG4gICAgbWF4RGF0ZToge30sXG4gICAgZGVmYXVsdFZhbHVlOiB7XG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgLy8gbnVsbCBvciB2YWxpZCBEYXRlIE9iamVjdFxuICAgICAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKSh2YWwpIHx8IEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwuZXZlcnkoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkYXRlOiB7fSxcbiAgICByYW5nZVN0YXRlOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICAgIHNlbGVjdGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgd2F0Y2g6IHtcbiAgICAncmFuZ2VTdGF0ZS5lbmREYXRlJzogZnVuY3Rpb24gcmFuZ2VTdGF0ZUVuZERhdGUobmV3VmFsKSB7XG4gICAgICB0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsIG5ld1ZhbCk7XG4gICAgfSxcbiAgICBtaW5EYXRlOiBmdW5jdGlvbiBtaW5EYXRlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoZ2V0TW9udGhUaW1lc3RhbXAobmV3VmFsKSAhPT0gZ2V0TW9udGhUaW1lc3RhbXAob2xkVmFsKSkge1xuICAgICAgICB0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtYXhEYXRlOiBmdW5jdGlvbiBtYXhEYXRlKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAoZ2V0TW9udGhUaW1lc3RhbXAobmV3VmFsKSAhPT0gZ2V0TW9udGhUaW1lc3RhbXAob2xkVmFsKSkge1xuICAgICAgICB0aGlzLm1hcmtSYW5nZSh0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vbnRoczogWydqYW4nLCAnZmViJywgJ21hcicsICdhcHInLCAnbWF5JywgJ2p1bicsICdqdWwnLCAnYXVnJywgJ3NlcCcsICdvY3QnLCAnbm92JywgJ2RlYyddLFxuICAgICAgdGFibGVSb3dzOiBbW10sIFtdLCBbXV0sXG4gICAgICBsYXN0Um93OiBudWxsLFxuICAgICAgbGFzdENvbHVtbjogbnVsbFxuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgY2VsbE1hdGNoZXNEYXRlOiBmdW5jdGlvbiBjZWxsTWF0Y2hlc0RhdGUoY2VsbCwgZGF0ZSkge1xuICAgICAgdmFyIHZhbHVlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgPT09IHZhbHVlLmdldEZ1bGxZZWFyKCkgJiYgTnVtYmVyKGNlbGwudGV4dCkgPT09IHZhbHVlLmdldE1vbnRoKCk7XG4gICAgfSxcbiAgICBnZXRDZWxsU3R5bGU6IGZ1bmN0aW9uIGdldENlbGxTdHlsZShjZWxsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgIHZhciB5ZWFyID0gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgdmFyIG1vbnRoID0gY2VsbC50ZXh0O1xuICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZGVmYXVsdFZhbHVlID8gQXJyYXkuaXNBcnJheSh0aGlzLmRlZmF1bHRWYWx1ZSkgPyB0aGlzLmRlZmF1bHRWYWx1ZSA6IFt0aGlzLmRlZmF1bHRWYWx1ZV0gOiBbXTtcbiAgICAgIHN0eWxlLmRpc2FibGVkID0gdHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nID8gbW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19kYXRlc0luTW9udGgoeWVhciwgbW9udGgpLmV2ZXJ5KHRoaXMuZGlzYWJsZWREYXRlKSA6IGZhbHNlO1xuICAgICAgc3R5bGUuY3VycmVudCA9IE9iamVjdCh1dGlsX1tcImFycmF5RmluZEluZGV4XCJdKShPYmplY3QodXRpbF9bXCJjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXlcIl0pKHRoaXMudmFsdWUpLCBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGg7XG4gICAgICB9KSA+PSAwO1xuICAgICAgc3R5bGUudG9kYXkgPSB0b2RheS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIHRvZGF5LmdldE1vbnRoKCkgPT09IG1vbnRoO1xuICAgICAgc3R5bGUuZGVmYXVsdCA9IGRlZmF1bHRWYWx1ZS5zb21lKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5jZWxsTWF0Y2hlc0RhdGUoY2VsbCwgZGF0ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGNlbGwuaW5SYW5nZSkge1xuICAgICAgICBzdHlsZVsnaW4tcmFuZ2UnXSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGNlbGwuc3RhcnQpIHtcbiAgICAgICAgICBzdHlsZVsnc3RhcnQtZGF0ZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjZWxsLmVuZCkge1xuICAgICAgICAgIHN0eWxlWydlbmQtZGF0ZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH0sXG4gICAgZ2V0TW9udGhPZkNlbGw6IGZ1bmN0aW9uIGdldE1vbnRoT2ZDZWxsKG1vbnRoKSB7XG4gICAgICB2YXIgeWVhciA9IHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcbiAgICB9LFxuICAgIG1hcmtSYW5nZTogZnVuY3Rpb24gbWFya1JhbmdlKG1pbkRhdGUsIG1heERhdGUpIHtcbiAgICAgIG1pbkRhdGUgPSBnZXRNb250aFRpbWVzdGFtcChtaW5EYXRlKTtcbiAgICAgIG1heERhdGUgPSBnZXRNb250aFRpbWVzdGFtcChtYXhEYXRlKSB8fCBtaW5EYXRlO1xuICAgICAgdmFyIF9yZWYgPSBbTWF0aC5taW4obWluRGF0ZSwgbWF4RGF0ZSksIE1hdGgubWF4KG1pbkRhdGUsIG1heERhdGUpXTtcbiAgICAgIG1pbkRhdGUgPSBfcmVmWzBdO1xuICAgICAgbWF4RGF0ZSA9IF9yZWZbMV07XG5cbiAgICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGsgPSByb3dzLmxlbmd0aDsgaSA8IGs7IGkrKykge1xuICAgICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwgPSByb3cubGVuZ3RoOyBqIDwgbDsgaisrKSB7XG5cbiAgICAgICAgICB2YXIgY2VsbCA9IHJvd1tqXTtcbiAgICAgICAgICB2YXIgaW5kZXggPSBpICogNCArIGo7XG4gICAgICAgICAgdmFyIHRpbWUgPSBuZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSwgaW5kZXgpLmdldFRpbWUoKTtcblxuICAgICAgICAgIGNlbGwuaW5SYW5nZSA9IG1pbkRhdGUgJiYgdGltZSA+PSBtaW5EYXRlICYmIHRpbWUgPD0gbWF4RGF0ZTtcbiAgICAgICAgICBjZWxsLnN0YXJ0ID0gbWluRGF0ZSAmJiB0aW1lID09PSBtaW5EYXRlO1xuICAgICAgICAgIGNlbGwuZW5kID0gbWF4RGF0ZSAmJiB0aW1lID09PSBtYXhEYXRlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZU1vdmU6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlTW92ZShldmVudCkge1xuICAgICAgaWYgKCF0aGlzLnJhbmdlU3RhdGUuc2VsZWN0aW5nKSByZXR1cm47XG5cbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnRElWJykge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSAhPT0gJ1REJykgcmV0dXJuO1xuXG4gICAgICB2YXIgcm93ID0gdGFyZ2V0LnBhcmVudE5vZGUucm93SW5kZXg7XG4gICAgICB2YXIgY29sdW1uID0gdGFyZ2V0LmNlbGxJbmRleDtcbiAgICAgIC8vIGNhbiBub3Qgc2VsZWN0IGRpc2FibGVkIGRhdGVcbiAgICAgIGlmICh0aGlzLnJvd3Nbcm93XVtjb2x1bW5dLmRpc2FibGVkKSByZXR1cm47XG5cbiAgICAgIC8vIG9ubHkgdXBkYXRlIHJhbmdlU3RhdGUgd2hlbiBtb3VzZSBtb3ZlcyB0byBhIG5ldyBjZWxsXG4gICAgICAvLyB0aGlzIGF2b2lkcyBmcmVxdWVudCBEYXRlIG9iamVjdCBjcmVhdGlvbiBhbmQgaW1wcm92ZXMgcGVyZm9ybWFuY2VcbiAgICAgIGlmIChyb3cgIT09IHRoaXMubGFzdFJvdyB8fCBjb2x1bW4gIT09IHRoaXMubGFzdENvbHVtbikge1xuICAgICAgICB0aGlzLmxhc3RSb3cgPSByb3c7XG4gICAgICAgIHRoaXMubGFzdENvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlcmFuZ2UnLCB7XG4gICAgICAgICAgbWluRGF0ZTogdGhpcy5taW5EYXRlLFxuICAgICAgICAgIG1heERhdGU6IHRoaXMubWF4RGF0ZSxcbiAgICAgICAgICByYW5nZVN0YXRlOiB7XG4gICAgICAgICAgICBzZWxlY3Rpbmc6IHRydWUsXG4gICAgICAgICAgICBlbmREYXRlOiB0aGlzLmdldE1vbnRoT2ZDZWxsKHJvdyAqIDQgKyBjb2x1bW4pXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZU1vbnRoVGFibGVDbGljazogZnVuY3Rpb24gaGFuZGxlTW9udGhUYWJsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnQScpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0RJVicpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgIT09ICdURCcpIHJldHVybjtcbiAgICAgIGlmIChPYmplY3QoZG9tX1tcImhhc0NsYXNzXCJdKSh0YXJnZXQsICdkaXNhYmxlZCcpKSByZXR1cm47XG4gICAgICB2YXIgY29sdW1uID0gdGFyZ2V0LmNlbGxJbmRleDtcbiAgICAgIHZhciByb3cgPSB0YXJnZXQucGFyZW50Tm9kZS5yb3dJbmRleDtcbiAgICAgIHZhciBtb250aCA9IHJvdyAqIDQgKyBjb2x1bW47XG4gICAgICB2YXIgbmV3RGF0ZSA9IHRoaXMuZ2V0TW9udGhPZkNlbGwobW9udGgpO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3JhbmdlJykge1xuICAgICAgICBpZiAoIXRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgeyBtaW5EYXRlOiBuZXdEYXRlLCBtYXhEYXRlOiBudWxsIH0pO1xuICAgICAgICAgIHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChuZXdEYXRlID49IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIHsgbWluRGF0ZTogdGhpcy5taW5EYXRlLCBtYXhEYXRlOiBuZXdEYXRlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgeyBtaW5EYXRlOiBuZXdEYXRlLCBtYXhEYXRlOiB0aGlzLm1pbkRhdGUgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucmFuZ2VTdGF0ZS5zZWxlY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIG1vbnRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByb3dzOiBmdW5jdGlvbiByb3dzKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIFRPRE86IHJlZmFjdG9yeSByb3dzIC8gZ2V0Q2VsbENsYXNzZXNcbiAgICAgIHZhciByb3dzID0gdGhpcy50YWJsZVJvd3M7XG4gICAgICB2YXIgZGlzYWJsZWREYXRlID0gdGhpcy5kaXNhYmxlZERhdGU7XG4gICAgICB2YXIgc2VsZWN0ZWREYXRlID0gW107XG4gICAgICB2YXIgbm93ID0gZ2V0TW9udGhUaW1lc3RhbXAobmV3IERhdGUoKSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICAgIHZhciByb3cgPSByb3dzW2ldO1xuXG4gICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGopIHtcbiAgICAgICAgICB2YXIgY2VsbCA9IHJvd1tqXTtcbiAgICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIGNlbGwgPSB7IHJvdzogaSwgY29sdW1uOiBqLCB0eXBlOiAnbm9ybWFsJywgaW5SYW5nZTogZmFsc2UsIHN0YXJ0OiBmYWxzZSwgZW5kOiBmYWxzZSB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNlbGwudHlwZSA9ICdub3JtYWwnO1xuXG4gICAgICAgICAgdmFyIGluZGV4ID0gaSAqIDQgKyBqO1xuICAgICAgICAgIHZhciB0aW1lID0gbmV3IERhdGUoX3RoaXMyLmRhdGUuZ2V0RnVsbFllYXIoKSwgaW5kZXgpLmdldFRpbWUoKTtcbiAgICAgICAgICBjZWxsLmluUmFuZ2UgPSB0aW1lID49IGdldE1vbnRoVGltZXN0YW1wKF90aGlzMi5taW5EYXRlKSAmJiB0aW1lIDw9IGdldE1vbnRoVGltZXN0YW1wKF90aGlzMi5tYXhEYXRlKTtcbiAgICAgICAgICBjZWxsLnN0YXJ0ID0gX3RoaXMyLm1pbkRhdGUgJiYgdGltZSA9PT0gZ2V0TW9udGhUaW1lc3RhbXAoX3RoaXMyLm1pbkRhdGUpO1xuICAgICAgICAgIGNlbGwuZW5kID0gX3RoaXMyLm1heERhdGUgJiYgdGltZSA9PT0gZ2V0TW9udGhUaW1lc3RhbXAoX3RoaXMyLm1heERhdGUpO1xuICAgICAgICAgIHZhciBpc1RvZGF5ID0gdGltZSA9PT0gbm93O1xuXG4gICAgICAgICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgICAgICAgIGNlbGwudHlwZSA9ICd0b2RheSc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNlbGwudGV4dCA9IGluZGV4O1xuICAgICAgICAgIHZhciBjZWxsRGF0ZSA9IG5ldyBEYXRlKHRpbWUpO1xuICAgICAgICAgIGNlbGwuZGlzYWJsZWQgPSB0eXBlb2YgZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nICYmIGRpc2FibGVkRGF0ZShjZWxsRGF0ZSk7XG4gICAgICAgICAgY2VsbC5zZWxlY3RlZCA9IE9iamVjdCh1dGlsX1tcImFycmF5RmluZFwiXSkoc2VsZWN0ZWREYXRlLCBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUuZ2V0VGltZSgpID09PSBjZWxsRGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBfdGhpczIuJHNldChyb3csIGosIGNlbGwpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKSB7XG4gICAgICAgICAgX2xvb3Aoaik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYmFzaWNfbW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL21vbnRoLXRhYmxlLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIG1vbnRoX3RhYmxlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgYmFzaWNfbW9udGhfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1vbnRoX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNjU0ZDRmNDJfcmVuZGVyLFxuICBtb250aF90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY1NGQ0ZjQyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbW9udGhfdGFibGVfYXBpOyB9XG5tb250aF90YWJsZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9tb250aC10YWJsZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbW9udGhfdGFibGUgPSAobW9udGhfdGFibGVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWQxZjMzNDEmXG52YXIgZGF0ZV90YWJsZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVkMWYzMzQxX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRhYmxlXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS10YWJsZVwiLFxuICAgICAgY2xhc3M6IHsgXCJpcy13ZWVrLW1vZGVcIjogX3ZtLnNlbGVjdGlvbk1vZGUgPT09IFwid2Vla1wiIH0sXG4gICAgICBhdHRyczogeyBjZWxsc3BhY2luZzogXCIwXCIsIGNlbGxwYWRkaW5nOiBcIjBcIiB9LFxuICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDbGljaywgbW91c2Vtb3ZlOiBfdm0uaGFuZGxlTW91c2VNb3ZlIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInRib2R5XCIsXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnNob3dXZWVrTnVtYmVyXG4gICAgICAgICAgICAgICAgPyBfYyhcInRoXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci53ZWVrXCIpKSldKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fbChfdm0uV0VFS1MsIGZ1bmN0aW9uKHdlZWssIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInRoXCIsIHsga2V5OiBrZXkgfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIud2Vla3MuXCIgKyB3ZWVrKSkpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX2woX3ZtLnJvd3MsIGZ1bmN0aW9uKHJvdywga2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtdGFibGVfX3Jvd1wiLFxuICAgICAgICAgICAgICAgIGNsYXNzOiB7IGN1cnJlbnQ6IF92bS5pc1dlZWtBY3RpdmUocm93WzFdKSB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF92bS5fbChyb3csIGZ1bmN0aW9uKGNlbGwsIGtleSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcInRkXCIsIHsga2V5OiBrZXksIGNsYXNzOiBfdm0uZ2V0Q2VsbENsYXNzZXMoY2VsbCkgfSwgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgICBcIiArIF92bS5fcyhjZWxsLnRleHQpICsgXCJcXG4gICAgICAgIFwiKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBkYXRlX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQxZjMzNDFfc3RhdGljUmVuZGVyRm5zID0gW11cbmRhdGVfdGFibGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDFmMzM0MV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9kYXRlLXRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDFmMzM0MSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL2Jhc2ljL2RhdGUtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbnZhciBfV0VFS1MgPSBbJ3N1bicsICdtb24nLCAndHVlJywgJ3dlZCcsICd0aHUnLCAnZnJpJywgJ3NhdCddO1xudmFyIGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wID0gZnVuY3Rpb24gZ2V0RGF0ZVRpbWVzdGFtcCh0aW1lKSB7XG4gIGlmICh0eXBlb2YgdGltZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHRpbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiY2xlYXJUaW1lXCJdKShuZXcgRGF0ZSh0aW1lKSkuZ2V0VGltZSgpO1xuICB9IGVsc2UgaWYgKHRpbWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiY2xlYXJUaW1lXCJdKSh0aW1lKS5nZXRUaW1lKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxufTtcblxuLy8gcmVtb3ZlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgc2F0aXNmaWVzIGBwcmVkYCBmcm9tIGFyclxuLy8gcmV0dXJuIGEgbmV3IGFycmF5IGlmIG1vZGlmaWNhdGlvbiBvY2N1cnNcbi8vIHJldHVybiB0aGUgb3JpZ2luYWwgYXJyYXkgb3RoZXJ3aXNlXG52YXIgZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3JlbW92ZUZyb21BcnJheSA9IGZ1bmN0aW9uIHJlbW92ZUZyb21BcnJheShhcnIsIHByZWQpIHtcbiAgdmFyIGlkeCA9IHR5cGVvZiBwcmVkID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KHV0aWxfW1wiYXJyYXlGaW5kSW5kZXhcIl0pKGFyciwgcHJlZCkgOiBhcnIuaW5kZXhPZihwcmVkKTtcbiAgcmV0dXJuIGlkeCA+PSAwID8gW10uY29uY2F0KGFyci5zbGljZSgwLCBpZHgpLCBhcnIuc2xpY2UoaWR4ICsgMSkpIDogYXJyO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2xvY2FsZV9kZWZhdWx0LmFdLFxuXG4gIHByb3BzOiB7XG4gICAgZmlyc3REYXlPZldlZWs6IHtcbiAgICAgIGRlZmF1bHQ6IDcsXG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIHZhbCA+PSAxICYmIHZhbCA8PSA3O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB2YWx1ZToge30sXG5cbiAgICBkZWZhdWx0VmFsdWU6IHtcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICAvLyBlaXRoZXI6IG51bGwsIHZhbGlkIERhdGUgb2JqZWN0LCBBcnJheSBvZiB2YWxpZCBEYXRlIG9iamVjdHNcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCB8fCBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsKSB8fCBBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmV2ZXJ5KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlOiB7fSxcblxuICAgIHNlbGVjdGlvbk1vZGU6IHtcbiAgICAgIGRlZmF1bHQ6ICdkYXknXG4gICAgfSxcblxuICAgIHNob3dXZWVrTnVtYmVyOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuXG4gICAgZGlzYWJsZWREYXRlOiB7fSxcblxuICAgIGNlbGxDbGFzc05hbWU6IHt9LFxuXG4gICAgbWluRGF0ZToge30sXG5cbiAgICBtYXhEYXRlOiB7fSxcblxuICAgIHJhbmdlU3RhdGU6IHtcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVuZERhdGU6IG51bGwsXG4gICAgICAgICAgc2VsZWN0aW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9mZnNldERheTogZnVuY3Rpb24gb2Zmc2V0RGF5KCkge1xuICAgICAgdmFyIHdlZWsgPSB0aGlzLmZpcnN0RGF5T2ZXZWVrO1xuICAgICAgLy8g5ZGo5pel5Li655WM6ZmQ77yM5bem5Y+z5YGP56e755qE5aSp5pWw77yMMzIxNzY1NCDkvovlpoLlkajkuIDlsLHmmK8gLTHvvIznm67nmoTmmK/osIPmlbTliY3kuKTooYzml6XmnJ/nmoTkvY3nva5cbiAgICAgIHJldHVybiB3ZWVrID4gMyA/IDcgLSB3ZWVrIDogLXdlZWs7XG4gICAgfSxcbiAgICBXRUVLUzogZnVuY3Rpb24gV0VFS1MoKSB7XG4gICAgICB2YXIgd2VlayA9IHRoaXMuZmlyc3REYXlPZldlZWs7XG4gICAgICByZXR1cm4gX1dFRUtTLmNvbmNhdChfV0VFS1MpLnNsaWNlKHdlZWssIHdlZWsgKyA3KTtcbiAgICB9LFxuICAgIHllYXI6IGZ1bmN0aW9uIHllYXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfSxcbiAgICBtb250aDogZnVuY3Rpb24gbW9udGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG4gICAgfSxcbiAgICBzdGFydERhdGU6IGZ1bmN0aW9uIHN0YXJ0RGF0ZSgpIHtcbiAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImdldFN0YXJ0RGF0ZU9mTW9udGhcIl0pKHRoaXMueWVhciwgdGhpcy5tb250aCk7XG4gICAgfSxcbiAgICByb3dzOiBmdW5jdGlvbiByb3dzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgLy8gVE9ETzogcmVmYWN0b3J5IHJvd3MgLyBnZXRDZWxsQ2xhc3Nlc1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0aGlzLnllYXIsIHRoaXMubW9udGgsIDEpO1xuICAgICAgdmFyIGRheSA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0Rmlyc3REYXlPZk1vbnRoXCJdKShkYXRlKTsgLy8gZGF5IG9mIGZpcnN0IGRheVxuICAgICAgdmFyIGRhdGVDb3VudE9mTW9udGggPSBPYmplY3QoZGF0ZV91dGlsX1tcImdldERheUNvdW50T2ZNb250aFwiXSkoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCkpO1xuICAgICAgdmFyIGRhdGVDb3VudE9mTGFzdE1vbnRoID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJnZXREYXlDb3VudE9mTW9udGhcIl0pKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpID09PSAwID8gMTEgOiBkYXRlLmdldE1vbnRoKCkgLSAxKTtcblxuICAgICAgZGF5ID0gZGF5ID09PSAwID8gNyA6IGRheTtcblxuICAgICAgdmFyIG9mZnNldCA9IHRoaXMub2Zmc2V0RGF5O1xuICAgICAgdmFyIHJvd3MgPSB0aGlzLnRhYmxlUm93cztcbiAgICAgIHZhciBjb3VudCA9IDE7XG5cbiAgICAgIHZhciBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZTtcbiAgICAgIHZhciBkaXNhYmxlZERhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZTtcbiAgICAgIHZhciBjZWxsQ2xhc3NOYW1lID0gdGhpcy5jZWxsQ2xhc3NOYW1lO1xuICAgICAgdmFyIHNlbGVjdGVkRGF0ZSA9IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RhdGVzJyA/IE9iamVjdCh1dGlsX1tcImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheVwiXSkodGhpcy52YWx1ZSkgOiBbXTtcbiAgICAgIHZhciBub3cgPSBkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZ2V0RGF0ZVRpbWVzdGFtcChuZXcgRGF0ZSgpKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyBpKyspIHtcbiAgICAgICAgdmFyIHJvdyA9IHJvd3NbaV07XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgICBpZiAoIXJvd1swXSkge1xuICAgICAgICAgICAgcm93WzBdID0geyB0eXBlOiAnd2VlaycsIHRleHQ6IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0V2Vla051bWJlclwiXSkoT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0RGF0ZVwiXSkoc3RhcnREYXRlLCBpICogNyArIDEpKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKGopIHtcbiAgICAgICAgICB2YXIgY2VsbCA9IHJvd1tfdGhpcy5zaG93V2Vla051bWJlciA/IGogKyAxIDogal07XG4gICAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICBjZWxsID0geyByb3c6IGksIGNvbHVtbjogaiwgdHlwZTogJ25vcm1hbCcsIGluUmFuZ2U6IGZhbHNlLCBzdGFydDogZmFsc2UsIGVuZDogZmFsc2UgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjZWxsLnR5cGUgPSAnbm9ybWFsJztcblxuICAgICAgICAgIHZhciBpbmRleCA9IGkgKiA3ICsgajtcbiAgICAgICAgICB2YXIgdGltZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dERhdGVcIl0pKHN0YXJ0RGF0ZSwgaW5kZXggLSBvZmZzZXQpLmdldFRpbWUoKTtcbiAgICAgICAgICBjZWxsLmluUmFuZ2UgPSB0aW1lID49IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKF90aGlzLm1pbkRhdGUpICYmIHRpbWUgPD0gZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAoX3RoaXMubWF4RGF0ZSk7XG4gICAgICAgICAgY2VsbC5zdGFydCA9IF90aGlzLm1pbkRhdGUgJiYgdGltZSA9PT0gZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAoX3RoaXMubWluRGF0ZSk7XG4gICAgICAgICAgY2VsbC5lbmQgPSBfdGhpcy5tYXhEYXRlICYmIHRpbWUgPT09IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKF90aGlzLm1heERhdGUpO1xuICAgICAgICAgIHZhciBpc1RvZGF5ID0gdGltZSA9PT0gbm93O1xuXG4gICAgICAgICAgaWYgKGlzVG9kYXkpIHtcbiAgICAgICAgICAgIGNlbGwudHlwZSA9ICd0b2RheSc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGkgPj0gMCAmJiBpIDw9IDEpIHtcbiAgICAgICAgICAgIHZhciBudW1iZXJPZkRheXNGcm9tUHJldmlvdXNNb250aCA9IGRheSArIG9mZnNldCA8IDAgPyA3ICsgZGF5ICsgb2Zmc2V0IDogZGF5ICsgb2Zmc2V0O1xuXG4gICAgICAgICAgICBpZiAoaiArIGkgKiA3ID49IG51bWJlck9mRGF5c0Zyb21QcmV2aW91c01vbnRoKSB7XG4gICAgICAgICAgICAgIGNlbGwudGV4dCA9IGNvdW50Kys7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjZWxsLnRleHQgPSBkYXRlQ291bnRPZkxhc3RNb250aCAtIChudW1iZXJPZkRheXNGcm9tUHJldmlvdXNNb250aCAtIGogJSA3KSArIDEgKyBpICogNztcbiAgICAgICAgICAgICAgY2VsbC50eXBlID0gJ3ByZXYtbW9udGgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoY291bnQgPD0gZGF0ZUNvdW50T2ZNb250aCkge1xuICAgICAgICAgICAgICBjZWxsLnRleHQgPSBjb3VudCsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2VsbC50ZXh0ID0gY291bnQrKyAtIGRhdGVDb3VudE9mTW9udGg7XG4gICAgICAgICAgICAgIGNlbGwudHlwZSA9ICduZXh0LW1vbnRoJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY2VsbERhdGUgPSBuZXcgRGF0ZSh0aW1lKTtcbiAgICAgICAgICBjZWxsLmRpc2FibGVkID0gdHlwZW9mIGRpc2FibGVkRGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkaXNhYmxlZERhdGUoY2VsbERhdGUpO1xuICAgICAgICAgIGNlbGwuc2VsZWN0ZWQgPSBPYmplY3QodXRpbF9bXCJhcnJheUZpbmRcIl0pKHNlbGVjdGVkRGF0ZSwgZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlLmdldFRpbWUoKSA9PT0gY2VsbERhdGUuZ2V0VGltZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNlbGwuY3VzdG9tQ2xhc3MgPSB0eXBlb2YgY2VsbENsYXNzTmFtZSA9PT0gJ2Z1bmN0aW9uJyAmJiBjZWxsQ2xhc3NOYW1lKGNlbGxEYXRlKTtcbiAgICAgICAgICBfdGhpcy4kc2V0KHJvdywgX3RoaXMuc2hvd1dlZWtOdW1iZXIgPyBqICsgMSA6IGosIGNlbGwpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNzsgaisrKSB7XG4gICAgICAgICAgX2xvb3Aoaik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnd2VlaycpIHtcbiAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnNob3dXZWVrTnVtYmVyID8gMSA6IDA7XG4gICAgICAgICAgdmFyIGVuZCA9IHRoaXMuc2hvd1dlZWtOdW1iZXIgPyA3IDogNjtcbiAgICAgICAgICB2YXIgaXNXZWVrQWN0aXZlID0gdGhpcy5pc1dlZWtBY3RpdmUocm93W3N0YXJ0ICsgMV0pO1xuXG4gICAgICAgICAgcm93W3N0YXJ0XS5pblJhbmdlID0gaXNXZWVrQWN0aXZlO1xuICAgICAgICAgIHJvd1tzdGFydF0uc3RhcnQgPSBpc1dlZWtBY3RpdmU7XG4gICAgICAgICAgcm93W2VuZF0uaW5SYW5nZSA9IGlzV2Vla0FjdGl2ZTtcbiAgICAgICAgICByb3dbZW5kXS5lbmQgPSBpc1dlZWtBY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvd3M7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ3JhbmdlU3RhdGUuZW5kRGF0ZSc6IGZ1bmN0aW9uIHJhbmdlU3RhdGVFbmREYXRlKG5ld1ZhbCkge1xuICAgICAgdGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlLCBuZXdWYWwpO1xuICAgIH0sXG4gICAgbWluRGF0ZTogZnVuY3Rpb24gbWluRGF0ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKG5ld1ZhbCkgIT09IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKG9sZFZhbCkpIHtcbiAgICAgICAgdGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWF4RGF0ZTogZnVuY3Rpb24gbWF4RGF0ZShuZXdWYWwsIG9sZFZhbCkge1xuICAgICAgaWYgKGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKG5ld1ZhbCkgIT09IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19nZXREYXRlVGltZXN0YW1wKG9sZFZhbCkpIHtcbiAgICAgICAgdGhpcy5tYXJrUmFuZ2UodGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YWJsZVJvd3M6IFtbXSwgW10sIFtdLCBbXSwgW10sIFtdXSxcbiAgICAgIGxhc3RSb3c6IG51bGwsXG4gICAgICBsYXN0Q29sdW1uOiBudWxsXG4gICAgfTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBjZWxsTWF0Y2hlc0RhdGU6IGZ1bmN0aW9uIGNlbGxNYXRjaGVzRGF0ZShjZWxsLCBkYXRlKSB7XG4gICAgICB2YXIgdmFsdWUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgIHJldHVybiB0aGlzLnllYXIgPT09IHZhbHVlLmdldEZ1bGxZZWFyKCkgJiYgdGhpcy5tb250aCA9PT0gdmFsdWUuZ2V0TW9udGgoKSAmJiBOdW1iZXIoY2VsbC50ZXh0KSA9PT0gdmFsdWUuZ2V0RGF0ZSgpO1xuICAgIH0sXG4gICAgZ2V0Q2VsbENsYXNzZXM6IGZ1bmN0aW9uIGdldENlbGxDbGFzc2VzKGNlbGwpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgIHZhciBkZWZhdWx0VmFsdWUgPSB0aGlzLmRlZmF1bHRWYWx1ZSA/IEFycmF5LmlzQXJyYXkodGhpcy5kZWZhdWx0VmFsdWUpID8gdGhpcy5kZWZhdWx0VmFsdWUgOiBbdGhpcy5kZWZhdWx0VmFsdWVdIDogW107XG5cbiAgICAgIHZhciBjbGFzc2VzID0gW107XG4gICAgICBpZiAoKGNlbGwudHlwZSA9PT0gJ25vcm1hbCcgfHwgY2VsbC50eXBlID09PSAndG9kYXknKSAmJiAhY2VsbC5kaXNhYmxlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2F2YWlsYWJsZScpO1xuICAgICAgICBpZiAoY2VsbC50eXBlID09PSAndG9kYXknKSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCd0b2RheScpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGFzc2VzLnB1c2goY2VsbC50eXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGwudHlwZSA9PT0gJ25vcm1hbCcgJiYgZGVmYXVsdFZhbHVlLnNvbWUoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi5jZWxsTWF0Y2hlc0RhdGUoY2VsbCwgZGF0ZSk7XG4gICAgICB9KSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2RlZmF1bHQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGlvbk1vZGUgPT09ICdkYXknICYmIChjZWxsLnR5cGUgPT09ICdub3JtYWwnIHx8IGNlbGwudHlwZSA9PT0gJ3RvZGF5JykgJiYgdGhpcy5jZWxsTWF0Y2hlc0RhdGUoY2VsbCwgdGhpcy52YWx1ZSkpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdjdXJyZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsLmluUmFuZ2UgJiYgKGNlbGwudHlwZSA9PT0gJ25vcm1hbCcgfHwgY2VsbC50eXBlID09PSAndG9kYXknIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3dlZWsnKSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2luLXJhbmdlJyk7XG5cbiAgICAgICAgaWYgKGNlbGwuc3RhcnQpIHtcbiAgICAgICAgICBjbGFzc2VzLnB1c2goJ3N0YXJ0LWRhdGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjZWxsLmVuZCkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnZW5kLWRhdGUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY2VsbC5kaXNhYmxlZCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goJ2Rpc2FibGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZWxsLnNlbGVjdGVkKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnc2VsZWN0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGwuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKGNlbGwuY3VzdG9tQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgfSxcbiAgICBnZXREYXRlT2ZDZWxsOiBmdW5jdGlvbiBnZXREYXRlT2ZDZWxsKHJvdywgY29sdW1uKSB7XG4gICAgICB2YXIgb2Zmc2V0RnJvbVN0YXJ0ID0gcm93ICogNyArIChjb2x1bW4gLSAodGhpcy5zaG93V2Vla051bWJlciA/IDEgOiAwKSkgLSB0aGlzLm9mZnNldERheTtcbiAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHREYXRlXCJdKSh0aGlzLnN0YXJ0RGF0ZSwgb2Zmc2V0RnJvbVN0YXJ0KTtcbiAgICB9LFxuICAgIGlzV2Vla0FjdGl2ZTogZnVuY3Rpb24gaXNXZWVrQWN0aXZlKGNlbGwpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICd3ZWVrJykgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLnllYXIsIHRoaXMubW9udGgsIDEpO1xuICAgICAgdmFyIHllYXIgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICB2YXIgbW9udGggPSBuZXdEYXRlLmdldE1vbnRoKCk7XG5cbiAgICAgIGlmIChjZWxsLnR5cGUgPT09ICdwcmV2LW1vbnRoJykge1xuICAgICAgICBuZXdEYXRlLnNldE1vbnRoKG1vbnRoID09PSAwID8gMTEgOiBtb250aCAtIDEpO1xuICAgICAgICBuZXdEYXRlLnNldEZ1bGxZZWFyKG1vbnRoID09PSAwID8geWVhciAtIDEgOiB5ZWFyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNlbGwudHlwZSA9PT0gJ25leHQtbW9udGgnKSB7XG4gICAgICAgIG5ld0RhdGUuc2V0TW9udGgobW9udGggPT09IDExID8gMCA6IG1vbnRoICsgMSk7XG4gICAgICAgIG5ld0RhdGUuc2V0RnVsbFllYXIobW9udGggPT09IDExID8geWVhciArIDEgOiB5ZWFyKTtcbiAgICAgIH1cblxuICAgICAgbmV3RGF0ZS5zZXREYXRlKHBhcnNlSW50KGNlbGwudGV4dCwgMTApKTtcblxuICAgICAgaWYgKE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKSh0aGlzLnZhbHVlKSkge1xuICAgICAgICB2YXIgZGF5T2Zmc2V0ID0gKHRoaXMudmFsdWUuZ2V0RGF5KCkgLSB0aGlzLmZpcnN0RGF5T2ZXZWVrICsgNykgJSA3IC0gMTtcbiAgICAgICAgdmFyIHdlZWtEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwcmV2RGF0ZVwiXSkodGhpcy52YWx1ZSwgZGF5T2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuIHdlZWtEYXRlLmdldFRpbWUoKSA9PT0gbmV3RGF0ZS5nZXRUaW1lKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBtYXJrUmFuZ2U6IGZ1bmN0aW9uIG1hcmtSYW5nZShtaW5EYXRlLCBtYXhEYXRlKSB7XG4gICAgICBtaW5EYXRlID0gZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAobWluRGF0ZSk7XG4gICAgICBtYXhEYXRlID0gZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2dldERhdGVUaW1lc3RhbXAobWF4RGF0ZSkgfHwgbWluRGF0ZTtcbiAgICAgIHZhciBfcmVmID0gW01hdGgubWluKG1pbkRhdGUsIG1heERhdGUpLCBNYXRoLm1heChtaW5EYXRlLCBtYXhEYXRlKV07XG4gICAgICBtaW5EYXRlID0gX3JlZlswXTtcbiAgICAgIG1heERhdGUgPSBfcmVmWzFdO1xuXG5cbiAgICAgIHZhciBzdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZTtcbiAgICAgIHZhciByb3dzID0gdGhpcy5yb3dzO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGsgPSByb3dzLmxlbmd0aDsgaSA8IGs7IGkrKykge1xuICAgICAgICB2YXIgcm93ID0gcm93c1tpXTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwgPSByb3cubGVuZ3RoOyBqIDwgbDsgaisrKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd1dlZWtOdW1iZXIgJiYgaiA9PT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICB2YXIgX2NlbGwgPSByb3dbal07XG4gICAgICAgICAgdmFyIGluZGV4ID0gaSAqIDcgKyBqICsgKHRoaXMuc2hvd1dlZWtOdW1iZXIgPyAtMSA6IDApO1xuICAgICAgICAgIHZhciB0aW1lID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0RGF0ZVwiXSkoc3RhcnREYXRlLCBpbmRleCAtIHRoaXMub2Zmc2V0RGF5KS5nZXRUaW1lKCk7XG5cbiAgICAgICAgICBfY2VsbC5pblJhbmdlID0gbWluRGF0ZSAmJiB0aW1lID49IG1pbkRhdGUgJiYgdGltZSA8PSBtYXhEYXRlO1xuICAgICAgICAgIF9jZWxsLnN0YXJ0ID0gbWluRGF0ZSAmJiB0aW1lID09PSBtaW5EYXRlO1xuICAgICAgICAgIF9jZWxsLmVuZCA9IG1heERhdGUgJiYgdGltZSA9PT0gbWF4RGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlTW91c2VNb3ZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZXZlbnQpIHtcbiAgICAgIGlmICghdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZykgcmV0dXJuO1xuXG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnU1BBTicpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0RJVicpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgIT09ICdURCcpIHJldHVybjtcblxuICAgICAgdmFyIHJvdyA9IHRhcmdldC5wYXJlbnROb2RlLnJvd0luZGV4IC0gMTtcbiAgICAgIHZhciBjb2x1bW4gPSB0YXJnZXQuY2VsbEluZGV4O1xuXG4gICAgICAvLyBjYW4gbm90IHNlbGVjdCBkaXNhYmxlZCBkYXRlXG4gICAgICBpZiAodGhpcy5yb3dzW3Jvd11bY29sdW1uXS5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgICAvLyBvbmx5IHVwZGF0ZSByYW5nZVN0YXRlIHdoZW4gbW91c2UgbW92ZXMgdG8gYSBuZXcgY2VsbFxuICAgICAgLy8gdGhpcyBhdm9pZHMgZnJlcXVlbnQgRGF0ZSBvYmplY3QgY3JlYXRpb24gYW5kIGltcHJvdmVzIHBlcmZvcm1hbmNlXG4gICAgICBpZiAocm93ICE9PSB0aGlzLmxhc3RSb3cgfHwgY29sdW1uICE9PSB0aGlzLmxhc3RDb2x1bW4pIHtcbiAgICAgICAgdGhpcy5sYXN0Um93ID0gcm93O1xuICAgICAgICB0aGlzLmxhc3RDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZXJhbmdlJywge1xuICAgICAgICAgIG1pbkRhdGU6IHRoaXMubWluRGF0ZSxcbiAgICAgICAgICBtYXhEYXRlOiB0aGlzLm1heERhdGUsXG4gICAgICAgICAgcmFuZ2VTdGF0ZToge1xuICAgICAgICAgICAgc2VsZWN0aW5nOiB0cnVlLFxuICAgICAgICAgICAgZW5kRGF0ZTogdGhpcy5nZXREYXRlT2ZDZWxsKHJvdywgY29sdW1uKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAodGFyZ2V0LnRhZ05hbWUgPT09ICdTUEFOJykge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgICAgfVxuICAgICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnRElWJykge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldC50YWdOYW1lICE9PSAnVEQnKSByZXR1cm47XG5cbiAgICAgIHZhciByb3cgPSB0YXJnZXQucGFyZW50Tm9kZS5yb3dJbmRleCAtIDE7XG4gICAgICB2YXIgY29sdW1uID0gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnd2VlaycgPyAxIDogdGFyZ2V0LmNlbGxJbmRleDtcbiAgICAgIHZhciBjZWxsID0gdGhpcy5yb3dzW3Jvd11bY29sdW1uXTtcblxuICAgICAgaWYgKGNlbGwuZGlzYWJsZWQgfHwgY2VsbC50eXBlID09PSAnd2VlaycpIHJldHVybjtcblxuICAgICAgdmFyIG5ld0RhdGUgPSB0aGlzLmdldERhdGVPZkNlbGwocm93LCBjb2x1bW4pO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAncmFuZ2UnKSB7XG4gICAgICAgIGlmICghdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZykge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB7IG1pbkRhdGU6IG5ld0RhdGUsIG1heERhdGU6IG51bGwgfSk7XG4gICAgICAgICAgdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG5ld0RhdGUgPj0gdGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgeyBtaW5EYXRlOiB0aGlzLm1pbkRhdGUsIG1heERhdGU6IG5ld0RhdGUgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB7IG1pbkRhdGU6IG5ld0RhdGUsIG1heERhdGU6IHRoaXMubWluRGF0ZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RheScpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIG5ld0RhdGUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICd3ZWVrJykge1xuICAgICAgICB2YXIgd2Vla051bWJlciA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0V2Vla051bWJlclwiXSkobmV3RGF0ZSk7XG4gICAgICAgIHZhciB2YWx1ZSA9IG5ld0RhdGUuZ2V0RnVsbFllYXIoKSArICd3JyArIHdlZWtOdW1iZXI7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB7XG4gICAgICAgICAgeWVhcjogbmV3RGF0ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgIHdlZWs6IHdlZWtOdW1iZXIsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIGRhdGU6IG5ld0RhdGVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RhdGVzJykge1xuICAgICAgICB2YXIgX3ZhbHVlID0gdGhpcy52YWx1ZSB8fCBbXTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gY2VsbC5zZWxlY3RlZCA/IGRhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19yZW1vdmVGcm9tQXJyYXkoX3ZhbHVlLCBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICAgIHJldHVybiBkYXRlLmdldFRpbWUoKSA9PT0gbmV3RGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIH0pIDogW10uY29uY2F0KF92YWx1ZSwgW25ld0RhdGVdKTtcbiAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvYmFzaWMvZGF0ZS10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYmFzaWNfZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChkYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9kYXRlLXRhYmxlLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGRhdGVfdGFibGVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBiYXNpY19kYXRlX3RhYmxldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBkYXRlX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQxZjMzNDFfcmVuZGVyLFxuICBkYXRlX3RhYmxldnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQxZjMzNDFfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBkYXRlX3RhYmxlX2FwaTsgfVxuZGF0ZV90YWJsZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9iYXNpYy9kYXRlLXRhYmxlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkYXRlX3RhYmxlID0gKGRhdGVfdGFibGVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRhdGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogY2xpY2tvdXRzaWRlX2RlZmF1bHQuYSB9LFxuXG4gIHdhdGNoOiB7XG4gICAgc2hvd1RpbWU6IGZ1bmN0aW9uIHNob3dUaW1lKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoIXZhbCkgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgdmFyIGlucHV0RWxtID0gX3RoaXMuJHJlZnMuaW5wdXQuJGVsO1xuICAgICAgICBpZiAoaW5wdXRFbG0pIHtcbiAgICAgICAgICBfdGhpcy5waWNrZXJXaWR0aCA9IGlucHV0RWxtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICsgMTA7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RhdGVzJyAmJiB0aGlzLnZhbHVlKSByZXR1cm47XG4gICAgICBpZiAoT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKHZhbCkpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUodmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6IGZ1bmN0aW9uIGRlZmF1bHRWYWx1ZSh2YWwpIHtcbiAgICAgIGlmICghT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IHZhbCA/IG5ldyBEYXRlKHZhbCkgOiBuZXcgRGF0ZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgdGltZVBpY2tlclZpc2libGU6IGZ1bmN0aW9uIHRpbWVQaWNrZXJWaXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh2YWwpIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzMi4kcmVmcy50aW1lcGlja2VyLmFkanVzdFNwaW5uZXJzKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNlbGVjdGlvbk1vZGU6IGZ1bmN0aW9uIHNlbGVjdGlvbk1vZGUobmV3VmFsKSB7XG4gICAgICBpZiAobmV3VmFsID09PSAnbW9udGgnKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ICE9PSAneWVhcicgfHwgdGhpcy5jdXJyZW50VmlldyAhPT0gJ21vbnRoJykge1xuICAgICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnbW9udGgnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5ld1ZhbCA9PT0gJ2RhdGVzJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ2RhdGUnO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcHJveHlUaW1lUGlja2VyRGF0YVByb3BlcnRpZXM6IGZ1bmN0aW9uIHByb3h5VGltZVBpY2tlckRhdGFQcm9wZXJ0aWVzKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHZhciBmb3JtYXQgPSBmdW5jdGlvbiBmb3JtYXQodGltZUZvcm1hdCkge1xuICAgICAgICBfdGhpczMuJHJlZnMudGltZXBpY2tlci5mb3JtYXQgPSB0aW1lRm9ybWF0O1xuICAgICAgfTtcbiAgICAgIHZhciB2YWx1ZSA9IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgICBfdGhpczMuJHJlZnMudGltZXBpY2tlci52YWx1ZSA9IF92YWx1ZTtcbiAgICAgIH07XG4gICAgICB2YXIgZGF0ZSA9IGZ1bmN0aW9uIGRhdGUoX2RhdGUpIHtcbiAgICAgICAgX3RoaXMzLiRyZWZzLnRpbWVwaWNrZXIuZGF0ZSA9IF9kYXRlO1xuICAgICAgfTtcbiAgICAgIHZhciBzZWxlY3RhYmxlUmFuZ2UgPSBmdW5jdGlvbiBzZWxlY3RhYmxlUmFuZ2UoX3NlbGVjdGFibGVSYW5nZSkge1xuICAgICAgICBfdGhpczMuJHJlZnMudGltZXBpY2tlci5zZWxlY3RhYmxlUmFuZ2UgPSBfc2VsZWN0YWJsZVJhbmdlO1xuICAgICAgfTtcblxuICAgICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUpO1xuICAgICAgdGhpcy4kd2F0Y2goJ2RhdGUnLCBkYXRlKTtcbiAgICAgIHRoaXMuJHdhdGNoKCdzZWxlY3RhYmxlUmFuZ2UnLCBzZWxlY3RhYmxlUmFuZ2UpO1xuXG4gICAgICBmb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIHZhbHVlKHRoaXMudmFsdWUpO1xuICAgICAgZGF0ZSh0aGlzLmRhdGUpO1xuICAgICAgc2VsZWN0YWJsZVJhbmdlKHRoaXMuc2VsZWN0YWJsZVJhbmdlKTtcbiAgICB9LFxuICAgIGhhbmRsZUNsZWFyOiBmdW5jdGlvbiBoYW5kbGVDbGVhcigpIHtcbiAgICAgIHRoaXMuZGF0ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKCk7XG4gICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbnVsbCk7XG4gICAgfSxcbiAgICBlbWl0OiBmdW5jdGlvbiBlbWl0KHZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQuYXBwbHkodGhpcywgWydwaWNrJywgdmFsdWVdLmNvbmNhdChhcmdzKSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhciBkYXRlcyA9IHZhbHVlLm1hcChmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczQuc2hvd1RpbWUgPyBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyTWlsbGlzZWNvbmRzXCJdKShkYXRlKSA6IE9iamVjdChkYXRlX3V0aWxfW1wiY2xlYXJUaW1lXCJdKShkYXRlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGVtaXQuYXBwbHkodGhpcywgWydwaWNrJywgZGF0ZXNdLmNvbmNhdChhcmdzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRlbWl0LmFwcGx5KHRoaXMsIFsncGljaycsIHRoaXMuc2hvd1RpbWUgPyBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyTWlsbGlzZWNvbmRzXCJdKSh2YWx1ZSkgOiBPYmplY3QoZGF0ZV91dGlsX1tcImNsZWFyVGltZVwiXSkodmFsdWUpXS5jb25jYXQoYXJncykpO1xuICAgICAgfVxuICAgICAgdGhpcy51c2VySW5wdXREYXRlID0gbnVsbDtcbiAgICAgIHRoaXMudXNlcklucHV0VGltZSA9IG51bGw7XG4gICAgfSxcblxuXG4gICAgLy8gcmVzZXREYXRlKCkge1xuICAgIC8vICAgdGhpcy5kYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcbiAgICAvLyB9LFxuXG4gICAgc2hvd01vbnRoUGlja2VyOiBmdW5jdGlvbiBzaG93TW9udGhQaWNrZXIoKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ21vbnRoJztcbiAgICB9LFxuICAgIHNob3dZZWFyUGlja2VyOiBmdW5jdGlvbiBzaG93WWVhclBpY2tlcigpIHtcbiAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAneWVhcic7XG4gICAgfSxcblxuXG4gICAgLy8gWFhYOiDmsqHnlKjliLBcbiAgICAvLyBoYW5kbGVMYWJlbENsaWNrKCkge1xuICAgIC8vICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdkYXRlJykge1xuICAgIC8vICAgICB0aGlzLnNob3dNb250aFBpY2tlcigpO1xuICAgIC8vICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgLy8gICAgIHRoaXMuc2hvd1llYXJQaWNrZXIoKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LFxuXG4gICAgcHJldk1vbnRoOiBmdW5jdGlvbiBwcmV2TW9udGgoKSB7XG4gICAgICB0aGlzLmRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZNb250aFwiXSkodGhpcy5kYXRlKTtcbiAgICB9LFxuICAgIG5leHRNb250aDogZnVuY3Rpb24gbmV4dE1vbnRoKCkge1xuICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMuZGF0ZSk7XG4gICAgfSxcbiAgICBwcmV2WWVhcjogZnVuY3Rpb24gcHJldlllYXIoKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50VmlldyA9PT0gJ3llYXInKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldlllYXJcIl0pKHRoaXMuZGF0ZSwgMTApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwcmV2WWVhclwiXSkodGhpcy5kYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG5leHRZZWFyOiBmdW5jdGlvbiBuZXh0WWVhcigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAneWVhcicpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5kYXRlLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmRhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlU2hvcnRjdXRDbGljazogZnVuY3Rpb24gaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dCkge1xuICAgICAgaWYgKHNob3J0Y3V0Lm9uQ2xpY2spIHtcbiAgICAgICAgc2hvcnRjdXQub25DbGljayh0aGlzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVRpbWVQaWNrOiBmdW5jdGlvbiBoYW5kbGVUaW1lUGljayh2YWx1ZSwgdmlzaWJsZSwgZmlyc3QpIHtcbiAgICAgIGlmIChPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsdWUpKSB7XG4gICAgICAgIHZhciBuZXdEYXRlID0gdGhpcy52YWx1ZSA/IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5VGltZVwiXSkodGhpcy52YWx1ZSwgdmFsdWUuZ2V0SG91cnMoKSwgdmFsdWUuZ2V0TWludXRlcygpLCB2YWx1ZS5nZXRTZWNvbmRzKCkpIDogT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlXaXRoVGltZVN0cmluZ1wiXSkodGhpcy5nZXREZWZhdWx0VmFsdWUoKSwgdGhpcy5kZWZhdWx0VGltZSk7XG4gICAgICAgIHRoaXMuZGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmRhdGUsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbWl0KHZhbHVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy50aW1lUGlja2VyVmlzaWJsZSA9IHZpc2libGU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUaW1lUGlja0Nsb3NlOiBmdW5jdGlvbiBoYW5kbGVUaW1lUGlja0Nsb3NlKCkge1xuICAgICAgdGhpcy50aW1lUGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlTW9udGhQaWNrOiBmdW5jdGlvbiBoYW5kbGVNb250aFBpY2sobW9udGgpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKSh0aGlzLmRhdGUsIHRoaXMueWVhciwgbW9udGgsIDEpO1xuICAgICAgICB0aGlzLmVtaXQodGhpcy5kYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiY2hhbmdlWWVhck1vbnRoQW5kQ2xhbXBEYXRlXCJdKSh0aGlzLmRhdGUsIHRoaXMueWVhciwgbW9udGgpO1xuICAgICAgICAvLyBUT0RPOiBzaG91bGQgZW1pdCBpbnRlcm1lZGlhdGUgdmFsdWUgPz9cbiAgICAgICAgLy8gdGhpcy5lbWl0KHRoaXMuZGF0ZSk7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnZGF0ZSc7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVEYXRlUGljazogZnVuY3Rpb24gaGFuZGxlRGF0ZVBpY2sodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdkYXknKSB7XG4gICAgICAgIHZhciBuZXdEYXRlID0gdGhpcy52YWx1ZSA/IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5RGF0ZVwiXSkodGhpcy52YWx1ZSwgdmFsdWUuZ2V0RnVsbFllYXIoKSwgdmFsdWUuZ2V0TW9udGgoKSwgdmFsdWUuZ2V0RGF0ZSgpKSA6IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5V2l0aFRpbWVTdHJpbmdcIl0pKHZhbHVlLCB0aGlzLmRlZmF1bHRUaW1lKTtcbiAgICAgICAgLy8gY2hhbmdlIGRlZmF1bHQgdGltZSB3aGlsZSBvdXQgb2Ygc2VsZWN0YWJsZVJhbmdlXG4gICAgICAgIGlmICghdGhpcy5jaGVja0RhdGVXaXRoaW5SYW5nZShuZXdEYXRlKSkge1xuICAgICAgICAgIG5ld0RhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeURhdGVcIl0pKHRoaXMuc2VsZWN0YWJsZVJhbmdlWzBdWzBdLCB2YWx1ZS5nZXRGdWxsWWVhcigpLCB2YWx1ZS5nZXRNb250aCgpLCB2YWx1ZS5nZXREYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgIHRoaXMuZW1pdCh0aGlzLmRhdGUsIHRoaXMuc2hvd1RpbWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICd3ZWVrJykge1xuICAgICAgICB0aGlzLmVtaXQodmFsdWUuZGF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RhdGVzJykge1xuICAgICAgICB0aGlzLmVtaXQodmFsdWUsIHRydWUpOyAvLyBzZXQgZmFsc2UgdG8ga2VlcCBwYW5lbCBvcGVuXG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVZZWFyUGljazogZnVuY3Rpb24gaGFuZGxlWWVhclBpY2soeWVhcikge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3llYXInKSB7XG4gICAgICAgIHRoaXMuZGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5RGF0ZVwiXSkodGhpcy5kYXRlLCB5ZWFyLCAwLCAxKTtcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcImNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZVwiXSkodGhpcy5kYXRlLCB5ZWFyLCB0aGlzLm1vbnRoKTtcbiAgICAgICAgLy8gVE9ETzogc2hvdWxkIGVtaXQgaW50ZXJtZWRpYXRlIHZhbHVlID8/XG4gICAgICAgIC8vIHRoaXMuZW1pdCh0aGlzLmRhdGUsIHRydWUpO1xuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ21vbnRoJztcbiAgICAgIH1cbiAgICB9LFxuICAgIGNoYW5nZVRvTm93OiBmdW5jdGlvbiBjaGFuZ2VUb05vdygpIHtcbiAgICAgIC8vIE5PVEU6IG5vdCBhIHBlcm1hbmVudCBzb2x1dGlvblxuICAgICAgLy8gICAgICAgY29uc2lkZXIgZGlzYWJsZSBcIm5vd1wiIGJ1dHRvbiBpbiB0aGUgZnV0dXJlXG4gICAgICBpZiAoKCF0aGlzLmRpc2FibGVkRGF0ZSB8fCAhdGhpcy5kaXNhYmxlZERhdGUobmV3IERhdGUoKSkpICYmIHRoaXMuY2hlY2tEYXRlV2l0aGluUmFuZ2UobmV3IERhdGUoKSkpIHtcbiAgICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuZGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb25maXJtOiBmdW5jdGlvbiBjb25maXJtKCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RhdGVzJykge1xuICAgICAgICB0aGlzLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB2YWx1ZSB3ZXJlIGVtaXR0ZWQgaW4gaGFuZGxle0RhdGUsVGltZX1QaWNrLCBub3RoaW5nIHRvIHVwZGF0ZSBoZXJlXG4gICAgICAgIC8vIGRlYWwgd2l0aCB0aGUgc2NlbmFyaW8gd2hlcmU6IHVzZXIgb3BlbnMgdGhlIHBpY2tlciwgdGhlbiBjb25maXJtIHdpdGhvdXQgZG9pbmcgYW55dGhpbmdcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUgOiBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVdpdGhUaW1lU3RyaW5nXCJdKSh0aGlzLmdldERlZmF1bHRWYWx1ZSgpLCB0aGlzLmRlZmF1bHRUaW1lKTtcbiAgICAgICAgdGhpcy5kYXRlID0gbmV3IERhdGUodmFsdWUpOyAvLyByZWZyZXNoIGRhdGVcbiAgICAgICAgdGhpcy5lbWl0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2V0VmlldzogZnVuY3Rpb24gcmVzZXRWaWV3KCkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ21vbnRoJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gJ21vbnRoJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAneWVhcicpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmlldyA9ICd5ZWFyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZpZXcgPSAnZGF0ZSc7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVFbnRlcjogZnVuY3Rpb24gaGFuZGxlRW50ZXIoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd24pO1xuICAgIH0sXG4gICAgaGFuZGxlTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZUxlYXZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnZG9kZXN0cm95Jyk7XG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd24pO1xuICAgIH0sXG4gICAgaGFuZGxlS2V5ZG93bjogZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgICAgdmFyIGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgICAgdmFyIGxpc3QgPSBbMzgsIDQwLCAzNywgMzldO1xuICAgICAgaWYgKHRoaXMudmlzaWJsZSAmJiAhdGhpcy50aW1lUGlja2VyVmlzaWJsZSkge1xuICAgICAgICBpZiAobGlzdC5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlS2V5Q29udHJvbChrZXlDb2RlKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXlDb2RlID09PSAxMyAmJiB0aGlzLnVzZXJJbnB1dERhdGUgPT09IG51bGwgJiYgdGhpcy51c2VySW5wdXRUaW1lID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gRW50ZXJcbiAgICAgICAgICB0aGlzLmVtaXQodGhpcy5kYXRlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUtleUNvbnRyb2w6IGZ1bmN0aW9uIGhhbmRsZUtleUNvbnRyb2woa2V5Q29kZSkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB7XG4gICAgICAgICd5ZWFyJzoge1xuICAgICAgICAgIDM4OiAtNCwgNDA6IDQsIDM3OiAtMSwgMzk6IDEsIG9mZnNldDogZnVuY3Rpb24gb2Zmc2V0KGRhdGUsIHN0ZXApIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ21vbnRoJzoge1xuICAgICAgICAgIDM4OiAtNCwgNDA6IDQsIDM3OiAtMSwgMzk6IDEsIG9mZnNldDogZnVuY3Rpb24gb2Zmc2V0KGRhdGUsIHN0ZXApIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgJ3dlZWsnOiB7XG4gICAgICAgICAgMzg6IC0xLCA0MDogMSwgMzc6IC0xLCAzOTogMSwgb2Zmc2V0OiBmdW5jdGlvbiBvZmZzZXQoZGF0ZSwgc3RlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXAgKiA3KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdkYXknOiB7XG4gICAgICAgICAgMzg6IC03LCA0MDogNywgMzc6IC0xLCAzOTogMSwgb2Zmc2V0OiBmdW5jdGlvbiBvZmZzZXQoZGF0ZSwgc3RlcCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciBtb2RlID0gdGhpcy5zZWxlY3Rpb25Nb2RlO1xuICAgICAgdmFyIHllYXIgPSAzLjE1MzZlMTA7XG4gICAgICB2YXIgbm93ID0gdGhpcy5kYXRlLmdldFRpbWUoKTtcbiAgICAgIHZhciBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5kYXRlLmdldFRpbWUoKSk7XG4gICAgICB3aGlsZSAoTWF0aC5hYnMobm93IC0gbmV3RGF0ZS5nZXRUaW1lKCkpIDw9IHllYXIpIHtcbiAgICAgICAgdmFyIG1hcCA9IG1hcHBpbmdbbW9kZV07XG4gICAgICAgIG1hcC5vZmZzZXQobmV3RGF0ZSwgbWFwW2tleUNvZGVdKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLmRpc2FibGVkRGF0ZShuZXdEYXRlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBuZXdEYXRlLCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVWaXNpYmxlVGltZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlVmlzaWJsZVRpbWVDaGFuZ2UodmFsdWUpIHtcbiAgICAgIHZhciB0aW1lID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKHZhbHVlLCB0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgaWYgKHRpbWUgJiYgdGhpcy5jaGVja0RhdGVXaXRoaW5SYW5nZSh0aW1lKSkge1xuICAgICAgICB0aGlzLmRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeURhdGVcIl0pKHRpbWUsIHRoaXMueWVhciwgdGhpcy5tb250aCwgdGhpcy5tb250aERhdGUpO1xuICAgICAgICB0aGlzLnVzZXJJbnB1dFRpbWUgPSBudWxsO1xuICAgICAgICB0aGlzLiRyZWZzLnRpbWVwaWNrZXIudmFsdWUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHRoaXMudGltZVBpY2tlclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuZGF0ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVWaXNpYmxlRGF0ZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlVmlzaWJsZURhdGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgIHZhciBkYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKHZhbHVlLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKGRhdGUsIHRoaXMuZGF0ZS5nZXRIb3VycygpLCB0aGlzLmRhdGUuZ2V0TWludXRlcygpLCB0aGlzLmRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgdGhpcy51c2VySW5wdXREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXNldFZpZXcoKTtcbiAgICAgICAgdGhpcy5lbWl0KHRoaXMuZGF0ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpc1ZhbGlkVmFsdWU6IGZ1bmN0aW9uIGlzVmFsaWRWYWx1ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlICYmICFpc05hTih2YWx1ZSkgJiYgKHR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/ICF0aGlzLmRpc2FibGVkRGF0ZSh2YWx1ZSkgOiB0cnVlKSAmJiB0aGlzLmNoZWNrRGF0ZVdpdGhpblJhbmdlKHZhbHVlKTtcbiAgICB9LFxuICAgIGdldERlZmF1bHRWYWx1ZTogZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKCkge1xuICAgICAgLy8gaWYgZGVmYXVsdC12YWx1ZSBpcyBzZXQsIHJldHVybiBpdFxuICAgICAgLy8gb3RoZXJ3aXNlLCByZXR1cm4gbm93ICh0aGUgbW9tZW50IHRoaXMgbWV0aG9kIGdldHMgY2FsbGVkKVxuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlID8gbmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUpIDogbmV3IERhdGUoKTtcbiAgICB9LFxuICAgIGNoZWNrRGF0ZVdpdGhpblJhbmdlOiBmdW5jdGlvbiBjaGVja0RhdGVXaXRoaW5SYW5nZShkYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RhYmxlUmFuZ2UubGVuZ3RoID4gMCA/IE9iamVjdChkYXRlX3V0aWxfW1widGltZVdpdGhpblJhbmdlXCJdKShkYXRlLCB0aGlzLnNlbGVjdGFibGVSYW5nZSwgdGhpcy5mb3JtYXQgfHwgJ0hIOm1tOnNzJykgOiB0cnVlO1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgVGltZVBpY2tlcjogcGFuZWxfdGltZSwgWWVhclRhYmxlOiB5ZWFyX3RhYmxlLCBNb250aFRhYmxlOiBtb250aF90YWJsZSwgRGF0ZVRhYmxlOiBkYXRlX3RhYmxlLCBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEsIEVsQnV0dG9uOiBidXR0b25fZGVmYXVsdC5hXG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9wcGVyQ2xhc3M6ICcnLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCwgLy8gdXNlIGdldERlZmF1bHRWYWx1ZSgpIGZvciB0aW1lIGNvbXB1dGF0aW9uXG4gICAgICBkZWZhdWx0VGltZTogbnVsbCxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIHNlbGVjdGlvbk1vZGU6ICdkYXknLFxuICAgICAgc2hvcnRjdXRzOiAnJyxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgY3VycmVudFZpZXc6ICdkYXRlJyxcbiAgICAgIGRpc2FibGVkRGF0ZTogJycsXG4gICAgICBjZWxsQ2xhc3NOYW1lOiAnJyxcbiAgICAgIHNlbGVjdGFibGVSYW5nZTogW10sXG4gICAgICBmaXJzdERheU9mV2VlazogNyxcbiAgICAgIHNob3dXZWVrTnVtYmVyOiBmYWxzZSxcbiAgICAgIHRpbWVQaWNrZXJWaXNpYmxlOiBmYWxzZSxcbiAgICAgIGZvcm1hdDogJycsXG4gICAgICBhcnJvd0NvbnRyb2w6IGZhbHNlLFxuICAgICAgdXNlcklucHV0RGF0ZTogbnVsbCxcbiAgICAgIHVzZXJJbnB1dFRpbWU6IG51bGxcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB5ZWFyOiBmdW5jdGlvbiB5ZWFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH0sXG4gICAgbW9udGg6IGZ1bmN0aW9uIG1vbnRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuICAgIH0sXG4gICAgd2VlazogZnVuY3Rpb24gd2VlaygpIHtcbiAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImdldFdlZWtOdW1iZXJcIl0pKHRoaXMuZGF0ZSk7XG4gICAgfSxcbiAgICBtb250aERhdGU6IGZ1bmN0aW9uIG1vbnRoRGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGUuZ2V0RGF0ZSgpO1xuICAgIH0sXG4gICAgZm9vdGVyVmlzaWJsZTogZnVuY3Rpb24gZm9vdGVyVmlzaWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dUaW1lIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ2RhdGVzJztcbiAgICB9LFxuICAgIHZpc2libGVUaW1lOiBmdW5jdGlvbiB2aXNpYmxlVGltZSgpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJJbnB1dFRpbWUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklucHV0VGltZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImZvcm1hdERhdGVcIl0pKHRoaXMudmFsdWUgfHwgdGhpcy5kZWZhdWx0VmFsdWUsIHRoaXMudGltZUZvcm1hdCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB2aXNpYmxlRGF0ZTogZnVuY3Rpb24gdmlzaWJsZURhdGUoKSB7XG4gICAgICBpZiAodGhpcy51c2VySW5wdXREYXRlICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJJbnB1dERhdGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJmb3JtYXREYXRlXCJdKSh0aGlzLnZhbHVlIHx8IHRoaXMuZGVmYXVsdFZhbHVlLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeWVhckxhYmVsOiBmdW5jdGlvbiB5ZWFyTGFiZWwoKSB7XG4gICAgICB2YXIgeWVhclRyYW5zbGF0aW9uID0gdGhpcy50KCdlbC5kYXRlcGlja2VyLnllYXInKTtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAneWVhcicpIHtcbiAgICAgICAgdmFyIHN0YXJ0WWVhciA9IE1hdGguZmxvb3IodGhpcy55ZWFyIC8gMTApICogMTA7XG4gICAgICAgIGlmICh5ZWFyVHJhbnNsYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gc3RhcnRZZWFyICsgJyAnICsgeWVhclRyYW5zbGF0aW9uICsgJyAtICcgKyAoc3RhcnRZZWFyICsgOSkgKyAnICcgKyB5ZWFyVHJhbnNsYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXJ0WWVhciArICcgLSAnICsgKHN0YXJ0WWVhciArIDkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMueWVhciArICcgJyArIHllYXJUcmFuc2xhdGlvbjtcbiAgICB9LFxuICAgIHRpbWVGb3JtYXQ6IGZ1bmN0aW9uIHRpbWVGb3JtYXQoKSB7XG4gICAgICBpZiAodGhpcy5mb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZXh0cmFjdFRpbWVGb3JtYXRcIl0pKHRoaXMuZm9ybWF0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnSEg6bW06c3MnO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGF0ZUZvcm1hdDogZnVuY3Rpb24gZGF0ZUZvcm1hdCgpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1hdCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJleHRyYWN0RGF0ZUZvcm1hdFwiXSkodGhpcy5mb3JtYXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd5eXl5LU1NLWRkJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFuZWxfZGF0ZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChkYXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGRhdGVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYW5lbF9kYXRldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBkYXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ0MGQ0ZWFfcmVuZGVyLFxuICBkYXRldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjQ0MGQ0ZWFfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBkYXRlX2FwaTsgfVxuZGF0ZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYW5lbF9kYXRlID0gKGRhdGVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS1yYW5nZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjY1Mjg0OWEmXG52YXIgZGF0ZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI2NTI4NDlhX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImVsLXpvb20taW4tdG9wXCIgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIFwiYWZ0ZXItbGVhdmVcIjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLiRlbWl0KFwiZG9kZXN0cm95XCIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsIGVsLWRhdGUtcmFuZ2UtcGlja2VyIGVsLXBvcHBlclwiLFxuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiaGFzLXNpZGViYXJcIjogX3ZtLiRzbG90cy5zaWRlYmFyIHx8IF92bS5zaG9ydGN1dHMsXG4gICAgICAgICAgICAgIFwiaGFzLXRpbWVcIjogX3ZtLnNob3dUaW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3ZtLnBvcHBlckNsYXNzXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2JvZHktd3JhcHBlclwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fdChcInNpZGViYXJcIiksXG4gICAgICAgICAgICAgIF92bS5zaG9ydGN1dHNcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fc2lkZWJhclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0uc2hvcnRjdXRzLCBmdW5jdGlvbihzaG9ydGN1dCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVTaG9ydGN1dENsaWNrKHNob3J0Y3V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHNob3J0Y3V0LnRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2JvZHlcIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLnNob3dUaW1lXG4gICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1oZWFkZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9ycy13cmFwXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJlbC1pbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiBcIm1pbklucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnJhbmdlU3RhdGUuc2VsZWN0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLmRhdGVwaWNrZXIuc3RhcnREYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1pblZpc2libGVEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZURhdGVJbnB1dCh2YWwsIFwibWluXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVEYXRlQ2hhbmdlKHZhbCwgXCJtaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmhhbmRsZU1pblRpbWVDbG9zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaGFuZGxlTWluVGltZUNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJlbC1pbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnJhbmdlU3RhdGUuc2VsZWN0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLmRhdGVwaWNrZXIuc3RhcnRUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1pblZpc2libGVUaW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ubWluVGltZVBpY2tlclZpc2libGUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZVRpbWVJbnB1dCh2YWwsIFwibWluXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVUaW1lQ2hhbmdlKHZhbCwgXCJtaW5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInRpbWUtcGlja2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6IFwibWluVGltZVBpY2tlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRpbWUtYXJyb3ctY29udHJvbFwiOiBfdm0uYXJyb3dDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogX3ZtLm1pblRpbWVQaWNrZXJWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljazogX3ZtLmhhbmRsZU1pblRpbWVQaWNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91bnRlZDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kcmVmcy5taW5UaW1lUGlja2VyLmZvcm1hdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRpbWVGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tYXJyb3ctcmlnaHRcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9ycy13cmFwIGlzLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX3RpbWUtcGlja2VyLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJlbC1pbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2VkaXRvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnJhbmdlU3RhdGUuc2VsZWN0aW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS50KFwiZWwuZGF0ZXBpY2tlci5lbmREYXRlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tYXhWaXNpYmxlRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5OiAhX3ZtLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlRGF0ZUlucHV0KHZhbCwgXCJtYXhcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZURhdGVDaGFuZ2UodmFsLCBcIm1heFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaGFuZGxlTWF4VGltZUNsb3NlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJoYW5kbGVNYXhUaW1lQ2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fdGltZS1waWNrZXItd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kYXRlLXJhbmdlLXBpY2tlcl9fZWRpdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwic21hbGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ucmFuZ2VTdGF0ZS5zZWxlY3RpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnQoXCJlbC5kYXRlcGlja2VyLmVuZFRpbWVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1heFZpc2libGVUaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6ICFfdm0ubWluRGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLm1heFRpbWVQaWNrZXJWaXNpYmxlID0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlVGltZUlucHV0KHZhbCwgXCJtYXhcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZVRpbWVDaGFuZ2UodmFsLCBcIm1heFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwidGltZS1waWNrZXJcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogXCJtYXhUaW1lUGlja2VyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidGltZS1hcnJvdy1jb250cm9sXCI6IF92bS5hcnJvd0NvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBfdm0ubWF4VGltZVBpY2tlclZpc2libGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrOiBfdm0uaGFuZGxlTWF4VGltZVBpY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VudGVkOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRyZWZzLm1heFRpbWVQaWNrZXIuZm9ybWF0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udGltZUZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2NvbnRlbnQgZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2NvbnRlbnQgaXMtbGVmdFwiXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctbGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5sZWZ0UHJldlllYXIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1hcnJvdy1sZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmxlZnRQcmV2TW9udGggfVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS51bmxpbmtQYW5lbHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1yaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogIV92bS5lbmFibGVZZWFyQXJyb3cgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLmVuYWJsZVllYXJBcnJvd1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5sZWZ0TmV4dFllYXIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0udW5saW5rUGFuZWxzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1kaXNhYmxlZFwiOiAhX3ZtLmVuYWJsZU1vbnRoQXJyb3cgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLmVuYWJsZU1vbnRoQXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ubGVmdE5leHRNb250aCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5sZWZ0TGFiZWwpKV0pXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfYyhcImRhdGUtdGFibGVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlbGVjdGlvbi1tb2RlXCI6IFwicmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IF92bS5sZWZ0RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC12YWx1ZVwiOiBfdm0uZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW4tZGF0ZVwiOiBfdm0ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LWRhdGVcIjogX3ZtLm1heERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJhbmdlLXN0YXRlXCI6IF92bS5yYW5nZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlZC1kYXRlXCI6IF92bS5kaXNhYmxlZERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNlbGwtY2xhc3MtbmFtZVwiOiBfdm0uY2VsbENsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3QtZGF5LW9mLXdlZWtcIjogX3ZtLmZpcnN0RGF5T2ZXZWVrXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcmFuZ2U6IF92bS5oYW5kbGVDaGFuZ2VSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY2s6IF92bS5oYW5kbGVSYW5nZVBpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1yaWdodFwiXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnVubGlua1BhbmVsc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6ICFfdm0uZW5hYmxlWWVhckFycm93IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIV92bS5lbmFibGVZZWFyQXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmlnaHRQcmV2WWVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS51bmxpbmtQYW5lbHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tYXJyb3ctbGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogIV92bS5lbmFibGVNb250aEFycm93IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIV92bS5lbmFibGVNb250aEFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnJpZ2h0UHJldk1vbnRoIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWQtYXJyb3ctcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmlnaHROZXh0WWVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtcGlja2VyLXBhbmVsX19pY29uLWJ0biBlbC1pY29uLWFycm93LXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnJpZ2h0TmV4dE1vbnRoIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0ucmlnaHRMYWJlbCkpXSlcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGF0ZS10YWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2VsZWN0aW9uLW1vZGVcIjogXCJyYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLnJpZ2h0RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC12YWx1ZVwiOiBfdm0uZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW4tZGF0ZVwiOiBfdm0ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LWRhdGVcIjogX3ZtLm1heERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJhbmdlLXN0YXRlXCI6IF92bS5yYW5nZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlZC1kYXRlXCI6IF92bS5kaXNhYmxlZERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNlbGwtY2xhc3MtbmFtZVwiOiBfdm0uY2VsbENsYXNzTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3QtZGF5LW9mLXdlZWtcIjogX3ZtLmZpcnN0RGF5T2ZXZWVrXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcmFuZ2U6IF92bS5oYW5kbGVDaGFuZ2VSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY2s6IF92bS5oYW5kbGVSYW5nZVBpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uc2hvd1RpbWVcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fZm9vdGVyXCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fbGluay1idG5cIixcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzaXplOiBcIm1pbmlcIiwgdHlwZTogXCJ0ZXh0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsZWFyIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIuY2xlYXJcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcGlja2VyLXBhbmVsX19saW5rLWJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFpbjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IFwibWluaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5idG5EaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUNvbmZpcm0oZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5jb25maXJtXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgZGF0ZV9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI2NTI4NDlhX3N0YXRpY1JlbmRlckZucyA9IFtdXG5kYXRlX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfMjY1Mjg0OWFfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvZGF0ZS1yYW5nZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjY1Mjg0OWEmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLXJhbmdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG5cbnZhciBkYXRlX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIGNhbGNEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICByZXR1cm4gW25ldyBEYXRlKGRlZmF1bHRWYWx1ZVswXSksIG5ldyBEYXRlKGRlZmF1bHRWYWx1ZVsxXSldO1xuICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBbbmV3IERhdGUoZGVmYXVsdFZhbHVlKSwgT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0RGF0ZVwiXSkobmV3IERhdGUoZGVmYXVsdFZhbHVlKSwgMSldO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbbmV3IERhdGUoKSwgT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0RGF0ZVwiXSkobmV3IERhdGUoKSwgMSldO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkYXRlX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgZGlyZWN0aXZlczogeyBDbGlja291dHNpZGU6IGNsaWNrb3V0c2lkZV9kZWZhdWx0LmEgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ0bkRpc2FibGVkOiBmdW5jdGlvbiBidG5EaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubWluRGF0ZSAmJiB0aGlzLm1heERhdGUgJiYgIXRoaXMuc2VsZWN0aW5nICYmIHRoaXMuaXNWYWxpZFZhbHVlKFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0pKTtcbiAgICB9LFxuICAgIGxlZnRMYWJlbDogZnVuY3Rpb24gbGVmdExhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGVmdERhdGUuZ2V0RnVsbFllYXIoKSArICcgJyArIHRoaXMudCgnZWwuZGF0ZXBpY2tlci55ZWFyJykgKyAnICcgKyB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIubW9udGgnICsgKHRoaXMubGVmdERhdGUuZ2V0TW9udGgoKSArIDEpKTtcbiAgICB9LFxuICAgIHJpZ2h0TGFiZWw6IGZ1bmN0aW9uIHJpZ2h0TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0RnVsbFllYXIoKSArICcgJyArIHRoaXMudCgnZWwuZGF0ZXBpY2tlci55ZWFyJykgKyAnICcgKyB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIubW9udGgnICsgKHRoaXMucmlnaHREYXRlLmdldE1vbnRoKCkgKyAxKSk7XG4gICAgfSxcbiAgICBsZWZ0WWVhcjogZnVuY3Rpb24gbGVmdFllYXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZWZ0RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH0sXG4gICAgbGVmdE1vbnRoOiBmdW5jdGlvbiBsZWZ0TW9udGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sZWZ0RGF0ZS5nZXRNb250aCgpO1xuICAgIH0sXG4gICAgbGVmdE1vbnRoRGF0ZTogZnVuY3Rpb24gbGVmdE1vbnRoRGF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZnREYXRlLmdldERhdGUoKTtcbiAgICB9LFxuICAgIHJpZ2h0WWVhcjogZnVuY3Rpb24gcmlnaHRZZWFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmlnaHREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfSxcbiAgICByaWdodE1vbnRoOiBmdW5jdGlvbiByaWdodE1vbnRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmlnaHREYXRlLmdldE1vbnRoKCk7XG4gICAgfSxcbiAgICByaWdodE1vbnRoRGF0ZTogZnVuY3Rpb24gcmlnaHRNb250aERhdGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yaWdodERhdGUuZ2V0RGF0ZSgpO1xuICAgIH0sXG4gICAgbWluVmlzaWJsZURhdGU6IGZ1bmN0aW9uIG1pblZpc2libGVEYXRlKCkge1xuICAgICAgaWYgKHRoaXMuZGF0ZVVzZXJJbnB1dC5taW4gIT09IG51bGwpIHJldHVybiB0aGlzLmRhdGVVc2VySW5wdXQubWluO1xuICAgICAgaWYgKHRoaXMubWluRGF0ZSkgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZm9ybWF0RGF0ZVwiXSkodGhpcy5taW5EYXRlLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0sXG4gICAgbWF4VmlzaWJsZURhdGU6IGZ1bmN0aW9uIG1heFZpc2libGVEYXRlKCkge1xuICAgICAgaWYgKHRoaXMuZGF0ZVVzZXJJbnB1dC5tYXggIT09IG51bGwpIHJldHVybiB0aGlzLmRhdGVVc2VySW5wdXQubWF4O1xuICAgICAgaWYgKHRoaXMubWF4RGF0ZSB8fCB0aGlzLm1pbkRhdGUpIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImZvcm1hdERhdGVcIl0pKHRoaXMubWF4RGF0ZSB8fCB0aGlzLm1pbkRhdGUsIHRoaXMuZGF0ZUZvcm1hdCk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSxcbiAgICBtaW5WaXNpYmxlVGltZTogZnVuY3Rpb24gbWluVmlzaWJsZVRpbWUoKSB7XG4gICAgICBpZiAodGhpcy50aW1lVXNlcklucHV0Lm1pbiAhPT0gbnVsbCkgcmV0dXJuIHRoaXMudGltZVVzZXJJbnB1dC5taW47XG4gICAgICBpZiAodGhpcy5taW5EYXRlKSByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJmb3JtYXREYXRlXCJdKSh0aGlzLm1pbkRhdGUsIHRoaXMudGltZUZvcm1hdCk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSxcbiAgICBtYXhWaXNpYmxlVGltZTogZnVuY3Rpb24gbWF4VmlzaWJsZVRpbWUoKSB7XG4gICAgICBpZiAodGhpcy50aW1lVXNlcklucHV0Lm1heCAhPT0gbnVsbCkgcmV0dXJuIHRoaXMudGltZVVzZXJJbnB1dC5tYXg7XG4gICAgICBpZiAodGhpcy5tYXhEYXRlIHx8IHRoaXMubWluRGF0ZSkgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZm9ybWF0RGF0ZVwiXSkodGhpcy5tYXhEYXRlIHx8IHRoaXMubWluRGF0ZSwgdGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIHRpbWVGb3JtYXQ6IGZ1bmN0aW9uIHRpbWVGb3JtYXQoKSB7XG4gICAgICBpZiAodGhpcy5mb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wiZXh0cmFjdFRpbWVGb3JtYXRcIl0pKHRoaXMuZm9ybWF0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnSEg6bW06c3MnO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGF0ZUZvcm1hdDogZnVuY3Rpb24gZGF0ZUZvcm1hdCgpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1hdCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJleHRyYWN0RGF0ZUZvcm1hdFwiXSkodGhpcy5mb3JtYXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICd5eXl5LU1NLWRkJztcbiAgICAgIH1cbiAgICB9LFxuICAgIGVuYWJsZU1vbnRoQXJyb3c6IGZ1bmN0aW9uIGVuYWJsZU1vbnRoQXJyb3coKSB7XG4gICAgICB2YXIgbmV4dE1vbnRoID0gKHRoaXMubGVmdE1vbnRoICsgMSkgJSAxMjtcbiAgICAgIHZhciB5ZWFyT2Zmc2V0ID0gdGhpcy5sZWZ0TW9udGggKyAxID49IDEyID8gMSA6IDA7XG4gICAgICByZXR1cm4gdGhpcy51bmxpbmtQYW5lbHMgJiYgbmV3IERhdGUodGhpcy5sZWZ0WWVhciArIHllYXJPZmZzZXQsIG5leHRNb250aCkgPCBuZXcgRGF0ZSh0aGlzLnJpZ2h0WWVhciwgdGhpcy5yaWdodE1vbnRoKTtcbiAgICB9LFxuICAgIGVuYWJsZVllYXJBcnJvdzogZnVuY3Rpb24gZW5hYmxlWWVhckFycm93KCkge1xuICAgICAgcmV0dXJuIHRoaXMudW5saW5rUGFuZWxzICYmIHRoaXMucmlnaHRZZWFyICogMTIgKyB0aGlzLnJpZ2h0TW9udGggLSAodGhpcy5sZWZ0WWVhciAqIDEyICsgdGhpcy5sZWZ0TW9udGggKyAxKSA+PSAxMjtcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9wcGVyQ2xhc3M6ICcnLFxuICAgICAgdmFsdWU6IFtdLFxuICAgICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgICAgZGVmYXVsdFRpbWU6IG51bGwsXG4gICAgICBtaW5EYXRlOiAnJyxcbiAgICAgIG1heERhdGU6ICcnLFxuICAgICAgbGVmdERhdGU6IG5ldyBEYXRlKCksXG4gICAgICByaWdodERhdGU6IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dE1vbnRoXCJdKShuZXcgRGF0ZSgpKSxcbiAgICAgIHJhbmdlU3RhdGU6IHtcbiAgICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgICAgc2VsZWN0aW5nOiBmYWxzZSxcbiAgICAgICAgcm93OiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGxcbiAgICAgIH0sXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBzaG9ydGN1dHM6ICcnLFxuICAgICAgdmlzaWJsZTogJycsXG4gICAgICBkaXNhYmxlZERhdGU6ICcnLFxuICAgICAgY2VsbENsYXNzTmFtZTogJycsXG4gICAgICBmaXJzdERheU9mV2VlazogNyxcbiAgICAgIG1pblRpbWVQaWNrZXJWaXNpYmxlOiBmYWxzZSxcbiAgICAgIG1heFRpbWVQaWNrZXJWaXNpYmxlOiBmYWxzZSxcbiAgICAgIGZvcm1hdDogJycsXG4gICAgICBhcnJvd0NvbnRyb2w6IGZhbHNlLFxuICAgICAgdW5saW5rUGFuZWxzOiBmYWxzZSxcbiAgICAgIGRhdGVVc2VySW5wdXQ6IHtcbiAgICAgICAgbWluOiBudWxsLFxuICAgICAgICBtYXg6IG51bGxcbiAgICAgIH0sXG4gICAgICB0aW1lVXNlcklucHV0OiB7XG4gICAgICAgIG1pbjogbnVsbCxcbiAgICAgICAgbWF4OiBudWxsXG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgbWluRGF0ZTogZnVuY3Rpb24gbWluRGF0ZSh2YWwpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuZGF0ZVVzZXJJbnB1dC5taW4gPSBudWxsO1xuICAgICAgdGhpcy50aW1lVXNlcklucHV0Lm1pbiA9IG51bGw7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy4kcmVmcy5tYXhUaW1lUGlja2VyICYmIF90aGlzLm1heERhdGUgJiYgX3RoaXMubWF4RGF0ZSA8IF90aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICB2YXIgZm9ybWF0ID0gJ0hIOm1tOnNzJztcbiAgICAgICAgICBfdGhpcy4kcmVmcy5tYXhUaW1lUGlja2VyLnNlbGVjdGFibGVSYW5nZSA9IFtbT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKE9iamVjdChkYXRlX3V0aWxfW1wiZm9ybWF0RGF0ZVwiXSkoX3RoaXMubWluRGF0ZSwgZm9ybWF0KSwgZm9ybWF0KSwgT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKCcyMzo1OTo1OScsIGZvcm1hdCldXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodmFsICYmIHRoaXMuJHJlZnMubWluVGltZVBpY2tlcikge1xuICAgICAgICB0aGlzLiRyZWZzLm1pblRpbWVQaWNrZXIuZGF0ZSA9IHZhbDtcbiAgICAgICAgdGhpcy4kcmVmcy5taW5UaW1lUGlja2VyLnZhbHVlID0gdmFsO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWF4RGF0ZTogZnVuY3Rpb24gbWF4RGF0ZSh2YWwpIHtcbiAgICAgIHRoaXMuZGF0ZVVzZXJJbnB1dC5tYXggPSBudWxsO1xuICAgICAgdGhpcy50aW1lVXNlcklucHV0Lm1heCA9IG51bGw7XG4gICAgICBpZiAodmFsICYmIHRoaXMuJHJlZnMubWF4VGltZVBpY2tlcikge1xuICAgICAgICB0aGlzLiRyZWZzLm1heFRpbWVQaWNrZXIuZGF0ZSA9IHZhbDtcbiAgICAgICAgdGhpcy4kcmVmcy5tYXhUaW1lUGlja2VyLnZhbHVlID0gdmFsO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWluVGltZVBpY2tlclZpc2libGU6IGZ1bmN0aW9uIG1pblRpbWVQaWNrZXJWaXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi4kcmVmcy5taW5UaW1lUGlja2VyLmRhdGUgPSBfdGhpczIubWluRGF0ZTtcbiAgICAgICAgICBfdGhpczIuJHJlZnMubWluVGltZVBpY2tlci52YWx1ZSA9IF90aGlzMi5taW5EYXRlO1xuICAgICAgICAgIF90aGlzMi4kcmVmcy5taW5UaW1lUGlja2VyLmFkanVzdFNwaW5uZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWF4VGltZVBpY2tlclZpc2libGU6IGZ1bmN0aW9uIG1heFRpbWVQaWNrZXJWaXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy4kcmVmcy5tYXhUaW1lUGlja2VyLmRhdGUgPSBfdGhpczMubWF4RGF0ZTtcbiAgICAgICAgICBfdGhpczMuJHJlZnMubWF4VGltZVBpY2tlci52YWx1ZSA9IF90aGlzMy5tYXhEYXRlO1xuICAgICAgICAgIF90aGlzMy4kcmVmcy5tYXhUaW1lUGlja2VyLmFkanVzdFNwaW5uZXJzKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG5ld1ZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKShuZXdWYWxbMF0pID8gbmV3IERhdGUobmV3VmFsWzBdKSA6IG51bGw7XG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKShuZXdWYWxbMV0pID8gbmV3IERhdGUobmV3VmFsWzFdKSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICB0aGlzLmxlZnREYXRlID0gdGhpcy5taW5EYXRlO1xuICAgICAgICAgIGlmICh0aGlzLnVubGlua1BhbmVscyAmJiB0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgIHZhciBtaW5EYXRlWWVhciA9IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgdmFyIG1pbkRhdGVNb250aCA9IHRoaXMubWluRGF0ZS5nZXRNb250aCgpO1xuICAgICAgICAgICAgdmFyIG1heERhdGVZZWFyID0gdGhpcy5tYXhEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB2YXIgbWF4RGF0ZU1vbnRoID0gdGhpcy5tYXhEYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0RGF0ZSA9IG1pbkRhdGVZZWFyID09PSBtYXhEYXRlWWVhciAmJiBtaW5EYXRlTW9udGggPT09IG1heERhdGVNb250aCA/IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dE1vbnRoXCJdKSh0aGlzLm1heERhdGUpIDogdGhpcy5tYXhEYXRlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dE1vbnRoXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sZWZ0RGF0ZSA9IGRhdGVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jYWxjRGVmYXVsdFZhbHVlKHRoaXMuZGVmYXVsdFZhbHVlKVswXTtcbiAgICAgICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dE1vbnRoXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgZGVmYXVsdFZhbHVlOiBmdW5jdGlvbiBkZWZhdWx0VmFsdWUodmFsKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdmFyIF9jYWxjRGVmYXVsdFZhbHVlID0gZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWUodmFsKSxcbiAgICAgICAgICAgIGxlZnQgPSBfY2FsY0RlZmF1bHRWYWx1ZVswXSxcbiAgICAgICAgICAgIHJpZ2h0ID0gX2NhbGNEZWZhdWx0VmFsdWVbMV07XG5cbiAgICAgICAgdGhpcy5sZWZ0RGF0ZSA9IGxlZnQ7XG4gICAgICAgIHRoaXMucmlnaHREYXRlID0gdmFsICYmIHZhbFsxXSAmJiB0aGlzLnVubGlua1BhbmVscyA/IHJpZ2h0IDogT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xlYXI6IGZ1bmN0aW9uIGhhbmRsZUNsZWFyKCkge1xuICAgICAgdGhpcy5taW5EYXRlID0gbnVsbDtcbiAgICAgIHRoaXMubWF4RGF0ZSA9IG51bGw7XG4gICAgICB0aGlzLmxlZnREYXRlID0gZGF0ZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpWzBdO1xuICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRNb250aFwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbnVsbCk7XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2VSYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlUmFuZ2UodmFsKSB7XG4gICAgICB0aGlzLm1pbkRhdGUgPSB2YWwubWluRGF0ZTtcbiAgICAgIHRoaXMubWF4RGF0ZSA9IHZhbC5tYXhEYXRlO1xuICAgICAgdGhpcy5yYW5nZVN0YXRlID0gdmFsLnJhbmdlU3RhdGU7XG4gICAgfSxcbiAgICBoYW5kbGVEYXRlSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZURhdGVJbnB1dCh2YWx1ZSwgdHlwZSkge1xuICAgICAgdGhpcy5kYXRlVXNlcklucHV0W3R5cGVdID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSB0aGlzLmRhdGVGb3JtYXQubGVuZ3RoKSByZXR1cm47XG4gICAgICB2YXIgcGFyc2VkVmFsdWUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInBhcnNlRGF0ZVwiXSkodmFsdWUsIHRoaXMuZGF0ZUZvcm1hdCk7XG5cbiAgICAgIGlmIChwYXJzZWRWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGlzYWJsZWREYXRlID09PSAnZnVuY3Rpb24nICYmIHRoaXMuZGlzYWJsZWREYXRlKG5ldyBEYXRlKHBhcnNlZFZhbHVlKSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdtaW4nKSB7XG4gICAgICAgICAgdGhpcy5taW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKSh0aGlzLm1pbkRhdGUgfHwgbmV3IERhdGUoKSwgcGFyc2VkVmFsdWUuZ2V0RnVsbFllYXIoKSwgcGFyc2VkVmFsdWUuZ2V0TW9udGgoKSwgcGFyc2VkVmFsdWUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICB0aGlzLmxlZnREYXRlID0gbmV3IERhdGUocGFyc2VkVmFsdWUpO1xuICAgICAgICAgIGlmICghdGhpcy51bmxpbmtQYW5lbHMpIHtcbiAgICAgICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1heERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeURhdGVcIl0pKHRoaXMubWF4RGF0ZSB8fCBuZXcgRGF0ZSgpLCBwYXJzZWRWYWx1ZS5nZXRGdWxsWWVhcigpLCBwYXJzZWRWYWx1ZS5nZXRNb250aCgpLCBwYXJzZWRWYWx1ZS5nZXREYXRlKCkpO1xuICAgICAgICAgIHRoaXMucmlnaHREYXRlID0gbmV3IERhdGUocGFyc2VkVmFsdWUpO1xuICAgICAgICAgIGlmICghdGhpcy51bmxpbmtQYW5lbHMpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZNb250aFwiXSkocGFyc2VkVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRGF0ZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlRGF0ZUNoYW5nZSh2YWx1ZSwgdHlwZSkge1xuICAgICAgdmFyIHBhcnNlZFZhbHVlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwYXJzZURhdGVcIl0pKHZhbHVlLCB0aGlzLmRhdGVGb3JtYXQpO1xuICAgICAgaWYgKHBhcnNlZFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnbWluJykge1xuICAgICAgICAgIHRoaXMubWluRGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5RGF0ZVwiXSkodGhpcy5taW5EYXRlLCBwYXJzZWRWYWx1ZS5nZXRGdWxsWWVhcigpLCBwYXJzZWRWYWx1ZS5nZXRNb250aCgpLCBwYXJzZWRWYWx1ZS5nZXREYXRlKCkpO1xuICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUgPiB0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXhEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKSh0aGlzLm1heERhdGUsIHBhcnNlZFZhbHVlLmdldEZ1bGxZZWFyKCksIHBhcnNlZFZhbHVlLmdldE1vbnRoKCksIHBhcnNlZFZhbHVlLmdldERhdGUoKSk7XG4gICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSA8IHRoaXMubWluRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gdGhpcy5tYXhEYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlVGltZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVUaW1lSW5wdXQodmFsdWUsIHR5cGUpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICB0aGlzLnRpbWVVc2VySW5wdXRbdHlwZV0gPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IHRoaXMudGltZUZvcm1hdC5sZW5ndGgpIHJldHVybjtcbiAgICAgIHZhciBwYXJzZWRWYWx1ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicGFyc2VEYXRlXCJdKSh2YWx1ZSwgdGhpcy50aW1lRm9ybWF0KTtcblxuICAgICAgaWYgKHBhcnNlZFZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlID09PSAnbWluJykge1xuICAgICAgICAgIHRoaXMubWluRGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5VGltZVwiXSkodGhpcy5taW5EYXRlLCBwYXJzZWRWYWx1ZS5nZXRIb3VycygpLCBwYXJzZWRWYWx1ZS5nZXRNaW51dGVzKCksIHBhcnNlZFZhbHVlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuJHJlZnMubWluVGltZVBpY2tlci5hZGp1c3RTcGlubmVycygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5VGltZVwiXSkodGhpcy5tYXhEYXRlLCBwYXJzZWRWYWx1ZS5nZXRIb3VycygpLCBwYXJzZWRWYWx1ZS5nZXRNaW51dGVzKCksIHBhcnNlZFZhbHVlLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpczQuJHJlZnMubWF4VGltZVBpY2tlci5hZGp1c3RTcGlubmVycygpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVUaW1lQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVUaW1lQ2hhbmdlKHZhbHVlLCB0eXBlKSB7XG4gICAgICB2YXIgcGFyc2VkVmFsdWUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInBhcnNlRGF0ZVwiXSkodmFsdWUsIHRoaXMudGltZUZvcm1hdCk7XG4gICAgICBpZiAocGFyc2VkVmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdtaW4nKSB7XG4gICAgICAgICAgdGhpcy5taW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlUaW1lXCJdKSh0aGlzLm1pbkRhdGUsIHBhcnNlZFZhbHVlLmdldEhvdXJzKCksIHBhcnNlZFZhbHVlLmdldE1pbnV0ZXMoKSwgcGFyc2VkVmFsdWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICBpZiAodGhpcy5taW5EYXRlID4gdGhpcy5tYXhEYXRlKSB7XG4gICAgICAgICAgICB0aGlzLm1heERhdGUgPSB0aGlzLm1pbkRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuJHJlZnMubWluVGltZVBpY2tlci52YWx1ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgICB0aGlzLm1pblRpbWVQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tYXhEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlUaW1lXCJdKSh0aGlzLm1heERhdGUsIHBhcnNlZFZhbHVlLmdldEhvdXJzKCksIHBhcnNlZFZhbHVlLmdldE1pbnV0ZXMoKSwgcGFyc2VkVmFsdWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlIDwgdGhpcy5taW5EYXRlKSB7XG4gICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLm1heERhdGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuJHJlZnMubWF4VGltZVBpY2tlci52YWx1ZSA9IHRoaXMubWluRGF0ZTtcbiAgICAgICAgICB0aGlzLm1heFRpbWVQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVJhbmdlUGljazogZnVuY3Rpb24gaGFuZGxlUmFuZ2VQaWNrKHZhbCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBjbG9zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuICAgICAgdmFyIGRlZmF1bHRUaW1lID0gdGhpcy5kZWZhdWx0VGltZSB8fCBbXTtcbiAgICAgIHZhciBtaW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlXaXRoVGltZVN0cmluZ1wiXSkodmFsLm1pbkRhdGUsIGRlZmF1bHRUaW1lWzBdKTtcbiAgICAgIHZhciBtYXhEYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlXaXRoVGltZVN0cmluZ1wiXSkodmFsLm1heERhdGUsIGRlZmF1bHRUaW1lWzFdKTtcblxuICAgICAgaWYgKHRoaXMubWF4RGF0ZSA9PT0gbWF4RGF0ZSAmJiB0aGlzLm1pbkRhdGUgPT09IG1pbkRhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5vblBpY2sgJiYgdGhpcy5vblBpY2sodmFsKTtcbiAgICAgIHRoaXMubWF4RGF0ZSA9IG1heERhdGU7XG4gICAgICB0aGlzLm1pbkRhdGUgPSBtaW5EYXRlO1xuXG4gICAgICAvLyB3b3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy83NTM5LCBzaG91bGQgcmVtb3ZlIHRoaXMgYmxvY2sgd2hlbiB3ZSBkb24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgQ2hyb21pdW0gNTUgLSA1N1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzNS5tYXhEYXRlID0gbWF4RGF0ZTtcbiAgICAgICAgX3RoaXM1Lm1pbkRhdGUgPSBtaW5EYXRlO1xuICAgICAgfSwgMTApO1xuICAgICAgaWYgKCFjbG9zZSB8fCB0aGlzLnNob3dUaW1lKSByZXR1cm47XG4gICAgICB0aGlzLmhhbmRsZUNvbmZpcm0oKTtcbiAgICB9LFxuICAgIGhhbmRsZVNob3J0Y3V0Q2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVNob3J0Y3V0Q2xpY2soc2hvcnRjdXQpIHtcbiAgICAgIGlmIChzaG9ydGN1dC5vbkNsaWNrKSB7XG4gICAgICAgIHNob3J0Y3V0Lm9uQ2xpY2sodGhpcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNaW5UaW1lUGljazogZnVuY3Rpb24gaGFuZGxlTWluVGltZVBpY2sodmFsdWUsIHZpc2libGUsIGZpcnN0KSB7XG4gICAgICB0aGlzLm1pbkRhdGUgPSB0aGlzLm1pbkRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLm1pbkRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKHRoaXMubWluRGF0ZSwgdmFsdWUuZ2V0SG91cnMoKSwgdmFsdWUuZ2V0TWludXRlcygpLCB2YWx1ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubWluVGltZVBpY2tlclZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMubWF4RGF0ZSB8fCB0aGlzLm1heERhdGUgJiYgdGhpcy5tYXhEYXRlLmdldFRpbWUoKSA8IHRoaXMubWluRGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUodGhpcy5taW5EYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZU1pblRpbWVDbG9zZTogZnVuY3Rpb24gaGFuZGxlTWluVGltZUNsb3NlKCkge1xuICAgICAgdGhpcy5taW5UaW1lUGlja2VyVmlzaWJsZSA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlTWF4VGltZVBpY2s6IGZ1bmN0aW9uIGhhbmRsZU1heFRpbWVQaWNrKHZhbHVlLCB2aXNpYmxlLCBmaXJzdCkge1xuICAgICAgaWYgKHRoaXMubWF4RGF0ZSAmJiB2YWx1ZSkge1xuICAgICAgICB0aGlzLm1heERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVRpbWVcIl0pKHRoaXMubWF4RGF0ZSwgdmFsdWUuZ2V0SG91cnMoKSwgdmFsdWUuZ2V0TWludXRlcygpLCB2YWx1ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubWF4VGltZVBpY2tlclZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMubWluRGF0ZSAmJiB0aGlzLm1pbkRhdGUuZ2V0VGltZSgpID4gdGhpcy5tYXhEYXRlLmdldFRpbWUoKSkge1xuICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZSh0aGlzLm1heERhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlTWF4VGltZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVNYXhUaW1lQ2xvc2UoKSB7XG4gICAgICB0aGlzLm1heFRpbWVQaWNrZXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfSxcblxuXG4gICAgLy8gbGVmdFByZXYqLCByaWdodE5leHQqIG5lZWQgdG8gdGFrZSBjYXJlIG9mIGB1bmxpbmtQYW5lbHNgXG4gICAgbGVmdFByZXZZZWFyOiBmdW5jdGlvbiBsZWZ0UHJldlllYXIoKSB7XG4gICAgICB0aGlzLmxlZnREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwcmV2WWVhclwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICBpZiAoIXRoaXMudW5saW5rUGFuZWxzKSB7XG4gICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbGVmdFByZXZNb250aDogZnVuY3Rpb24gbGVmdFByZXZNb250aCgpIHtcbiAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZNb250aFwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICBpZiAoIXRoaXMudW5saW5rUGFuZWxzKSB7XG4gICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmlnaHROZXh0WWVhcjogZnVuY3Rpb24gcmlnaHROZXh0WWVhcigpIHtcbiAgICAgIGlmICghdGhpcy51bmxpbmtQYW5lbHMpIHtcbiAgICAgICAgdGhpcy5sZWZ0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dFllYXJcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dE1vbnRoXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5yaWdodERhdGUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmlnaHROZXh0TW9udGg6IGZ1bmN0aW9uIHJpZ2h0TmV4dE1vbnRoKCkge1xuICAgICAgaWYgKCF0aGlzLnVubGlua1BhbmVscykge1xuICAgICAgICB0aGlzLmxlZnREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dE1vbnRoXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMucmlnaHREYXRlKTtcbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvLyBsZWZ0TmV4dCosIHJpZ2h0UHJldiogYXJlIGNhbGxlZCB3aGVuIGB1bmxpbmtQYW5lbHNgIGlzIHRydWVcbiAgICBsZWZ0TmV4dFllYXI6IGZ1bmN0aW9uIGxlZnROZXh0WWVhcigpIHtcbiAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICB9LFxuICAgIGxlZnROZXh0TW9udGg6IGZ1bmN0aW9uIGxlZnROZXh0TW9udGgoKSB7XG4gICAgICB0aGlzLmxlZnREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKHRoaXMubGVmdERhdGUpO1xuICAgIH0sXG4gICAgcmlnaHRQcmV2WWVhcjogZnVuY3Rpb24gcmlnaHRQcmV2WWVhcigpIHtcbiAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJwcmV2WWVhclwiXSkodGhpcy5yaWdodERhdGUpO1xuICAgIH0sXG4gICAgcmlnaHRQcmV2TW9udGg6IGZ1bmN0aW9uIHJpZ2h0UHJldk1vbnRoKCkge1xuICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZNb250aFwiXSkodGhpcy5yaWdodERhdGUpO1xuICAgIH0sXG4gICAgaGFuZGxlQ29uZmlybTogZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpIHtcbiAgICAgIHZhciB2aXNpYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuaXNWYWxpZFZhbHVlKFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0pKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBbdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGVdLCB2aXNpYmxlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGlzVmFsaWRWYWx1ZTogZnVuY3Rpb24gaXNWYWxpZFZhbHVlKHZhbHVlKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgJiYgdmFsdWVbMF0gJiYgdmFsdWVbMV0gJiYgT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKHZhbHVlWzBdKSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodmFsdWVbMV0pICYmIHZhbHVlWzBdLmdldFRpbWUoKSA8PSB2YWx1ZVsxXS5nZXRUaW1lKCkgJiYgKHR5cGVvZiB0aGlzLmRpc2FibGVkRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/ICF0aGlzLmRpc2FibGVkRGF0ZSh2YWx1ZVswXSkgJiYgIXRoaXMuZGlzYWJsZWREYXRlKHZhbHVlWzFdKSA6IHRydWUpO1xuICAgIH0sXG4gICAgcmVzZXRWaWV3OiBmdW5jdGlvbiByZXNldFZpZXcoKSB7XG4gICAgICAvLyBOT1RFOiB0aGlzIGlzIGEgaGFjayB0byByZXNldCB7bWluLCBtYXh9RGF0ZSBvbiBwaWNrZXIgb3Blbi5cbiAgICAgIC8vIFRPRE86IGNvcnJlY3Qgd2F5IG9mIGRvaW5nIHNvIGlzIHRvIHJlZmFjdG9yIHttaW4sIG1heH1EYXRlIHRvIGJlIGRlcGVuZGVudCBvbiB2YWx1ZSBhbmQgaW50ZXJuYWwgc2VsZWN0aW9uIHN0YXRlXG4gICAgICAvLyAgICAgICBhbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSByZXNldFZpZXcgd2hlbmV2ZXIgcGlja2VyIGJlY29tZXMgdmlzaWJsZSwgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgZGF0ZS1wYW5lbCdzIHJlc2V0Vmlld1xuICAgICAgaWYgKHRoaXMubWluRGF0ZSAmJiB0aGlzLm1heERhdGUgPT0gbnVsbCkgdGhpcy5yYW5nZVN0YXRlLnNlbGVjdGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5taW5EYXRlID0gdGhpcy52YWx1ZSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodGhpcy52YWx1ZVswXSkgPyBuZXcgRGF0ZSh0aGlzLnZhbHVlWzBdKSA6IG51bGw7XG4gICAgICB0aGlzLm1heERhdGUgPSB0aGlzLnZhbHVlICYmIE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKSh0aGlzLnZhbHVlWzBdKSA/IG5ldyBEYXRlKHRoaXMudmFsdWVbMV0pIDogbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50czogeyBUaW1lUGlja2VyOiBwYW5lbF90aW1lLCBEYXRlVGFibGU6IGRhdGVfdGFibGUsIEVsSW5wdXQ6IGlucHV0X2RlZmF1bHQuYSwgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmEgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9kYXRlLXJhbmdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYW5lbF9kYXRlX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGRhdGVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUtcmFuZ2UudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgZGF0ZV9yYW5nZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhbmVsX2RhdGVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGRhdGVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNjUyODQ5YV9yZW5kZXIsXG4gIGRhdGVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNjUyODQ5YV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGRhdGVfcmFuZ2VfYXBpOyB9XG5kYXRlX3JhbmdlX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL2RhdGUtcmFuZ2UudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRhdGVfcmFuZ2UgPSAoZGF0ZV9yYW5nZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9tb250aC1yYW5nZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjI2NDVmYjgmXG52YXIgbW9udGhfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mMjY0NWZiOF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAge1xuICAgICAgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0sXG4gICAgICBvbjoge1xuICAgICAgICBcImFmdGVyLWxlYXZlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIF92bS4kZW1pdChcImRvZGVzdHJveVwiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbCBlbC1kYXRlLXJhbmdlLXBpY2tlciBlbC1wb3BwZXJcIixcbiAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcImhhcy1zaWRlYmFyXCI6IF92bS4kc2xvdHMuc2lkZWJhciB8fCBfdm0uc2hvcnRjdXRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgX3ZtLnBvcHBlckNsYXNzXG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2JvZHktd3JhcHBlclwiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fdChcInNpZGViYXJcIiksXG4gICAgICAgICAgICAgIF92bS5zaG9ydGN1dHNcbiAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fc2lkZWJhclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0uc2hvcnRjdXRzLCBmdW5jdGlvbihzaG9ydGN1dCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBpY2tlci1wYW5lbF9fc2hvcnRjdXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVTaG9ydGN1dENsaWNrKHNob3J0Y3V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKHNob3J0Y3V0LnRleHQpKV1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWxfX2JvZHlcIiB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtZGF0ZS1yYW5nZS1waWNrZXJfX2hlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1waWNrZXItcGFuZWxfX2ljb24tYnRuIGVsLWljb24tZC1hcnJvdy1sZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmxlZnRQcmV2WWVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnVubGlua1BhbmVsc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1kaXNhYmxlZFwiOiAhX3ZtLmVuYWJsZVllYXJBcnJvdyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6ICFfdm0uZW5hYmxlWWVhckFycm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmxlZnROZXh0WWVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5sZWZ0TGFiZWwpKV0pXG4gICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICBfYyhcIm1vbnRoLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3Rpb24tbW9kZVwiOiBcInJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBfdm0ubGVmdERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRlZmF1bHQtdmFsdWVcIjogX3ZtLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWluLWRhdGVcIjogX3ZtLm1pbkRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1heC1kYXRlXCI6IF92bS5tYXhEYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyYW5nZS1zdGF0ZVwiOiBfdm0ucmFuZ2VTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZWQtZGF0ZVwiOiBfdm0uZGlzYWJsZWREYXRlXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcmFuZ2U6IF92bS5oYW5kbGVDaGFuZ2VSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY2s6IF92bS5oYW5kbGVSYW5nZVBpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9fY29udGVudCBlbC1kYXRlLXJhbmdlLXBpY2tlcl9fY29udGVudCBpcy1yaWdodFwiXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWRhdGUtcmFuZ2UtcGlja2VyX19oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnVubGlua1BhbmVsc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LWxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6ICFfdm0uZW5hYmxlWWVhckFycm93IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIV92bS5lbmFibGVZZWFyQXJyb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmlnaHRQcmV2WWVhciB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiYnV0dG9uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXBpY2tlci1wYW5lbF9faWNvbi1idG4gZWwtaWNvbi1kLWFycm93LXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnJpZ2h0TmV4dFllYXIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5yaWdodExhYmVsKSldKVxuICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJtb250aC10YWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2VsZWN0aW9uLW1vZGVcIjogXCJyYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLnJpZ2h0RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVmYXVsdC12YWx1ZVwiOiBfdm0uZGVmYXVsdFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtaW4tZGF0ZVwiOiBfdm0ubWluRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibWF4LWRhdGVcIjogX3ZtLm1heERhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInJhbmdlLXN0YXRlXCI6IF92bS5yYW5nZVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlZC1kYXRlXCI6IF92bS5kaXNhYmxlZERhdGVcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VyYW5nZTogX3ZtLmhhbmRsZUNoYW5nZVJhbmdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljazogX3ZtLmhhbmRsZVJhbmdlUGlja1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBtb250aF9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2YyNjQ1ZmI4X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tb250aF9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2YyNjQ1ZmI4X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL21vbnRoLXJhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mMjY0NWZiOCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL21vbnRoLXJhbmdlLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cblxudmFyIG1vbnRoX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSA9IGZ1bmN0aW9uIGNhbGNEZWZhdWx0VmFsdWUoZGVmYXVsdFZhbHVlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICByZXR1cm4gW25ldyBEYXRlKGRlZmF1bHRWYWx1ZVswXSksIG5ldyBEYXRlKGRlZmF1bHRWYWx1ZVsxXSldO1xuICB9IGVsc2UgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBbbmV3IERhdGUoZGVmYXVsdFZhbHVlKSwgT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0TW9udGhcIl0pKG5ldyBEYXRlKGRlZmF1bHRWYWx1ZSkpXTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gW25ldyBEYXRlKCksIE9iamVjdChkYXRlX3V0aWxfW1wibmV4dE1vbnRoXCJdKShuZXcgRGF0ZSgpKV07XG4gIH1cbn07XG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2xvY2FsZV9kZWZhdWx0LmFdLFxuXG4gIGRpcmVjdGl2ZXM6IHsgQ2xpY2tvdXRzaWRlOiBjbGlja291dHNpZGVfZGVmYXVsdC5hIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidG5EaXNhYmxlZDogZnVuY3Rpb24gYnRuRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLm1pbkRhdGUgJiYgdGhpcy5tYXhEYXRlICYmICF0aGlzLnNlbGVjdGluZyAmJiB0aGlzLmlzVmFsaWRWYWx1ZShbdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGVdKSk7XG4gICAgfSxcbiAgICBsZWZ0TGFiZWw6IGZ1bmN0aW9uIGxlZnRMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZnREYXRlLmdldEZ1bGxZZWFyKCkgKyAnICcgKyB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIueWVhcicpO1xuICAgIH0sXG4gICAgcmlnaHRMYWJlbDogZnVuY3Rpb24gcmlnaHRMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpICsgJyAnICsgdGhpcy50KCdlbC5kYXRlcGlja2VyLnllYXInKTtcbiAgICB9LFxuICAgIGxlZnRZZWFyOiBmdW5jdGlvbiBsZWZ0WWVhcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmxlZnREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfSxcbiAgICByaWdodFllYXI6IGZ1bmN0aW9uIHJpZ2h0WWVhcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnJpZ2h0RGF0ZS5nZXRGdWxsWWVhcigpID09PSB0aGlzLmxlZnREYXRlLmdldEZ1bGxZZWFyKCkgPyB0aGlzLmxlZnREYXRlLmdldEZ1bGxZZWFyKCkgKyAxIDogdGhpcy5yaWdodERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICB9LFxuICAgIGVuYWJsZVllYXJBcnJvdzogZnVuY3Rpb24gZW5hYmxlWWVhckFycm93KCkge1xuICAgICAgcmV0dXJuIHRoaXMudW5saW5rUGFuZWxzICYmIHRoaXMucmlnaHRZZWFyID4gdGhpcy5sZWZ0WWVhciArIDE7XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvcHBlckNsYXNzOiAnJyxcbiAgICAgIHZhbHVlOiBbXSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICAgIGRlZmF1bHRUaW1lOiBudWxsLFxuICAgICAgbWluRGF0ZTogJycsXG4gICAgICBtYXhEYXRlOiAnJyxcbiAgICAgIGxlZnREYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgcmlnaHREYXRlOiBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKShuZXcgRGF0ZSgpKSxcbiAgICAgIHJhbmdlU3RhdGU6IHtcbiAgICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgICAgc2VsZWN0aW5nOiBmYWxzZSxcbiAgICAgICAgcm93OiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGxcbiAgICAgIH0sXG4gICAgICBzaG9ydGN1dHM6ICcnLFxuICAgICAgdmlzaWJsZTogJycsXG4gICAgICBkaXNhYmxlZERhdGU6ICcnLFxuICAgICAgZm9ybWF0OiAnJyxcbiAgICAgIGFycm93Q29udHJvbDogZmFsc2UsXG4gICAgICB1bmxpbmtQYW5lbHM6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKG5ld1ZhbCkge1xuICAgICAgaWYgKCFuZXdWYWwpIHtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWwpKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKShuZXdWYWxbMF0pID8gbmV3IERhdGUobmV3VmFsWzBdKSA6IG51bGw7XG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKShuZXdWYWxbMV0pID8gbmV3IERhdGUobmV3VmFsWzFdKSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcbiAgICAgICAgICB0aGlzLmxlZnREYXRlID0gdGhpcy5taW5EYXRlO1xuICAgICAgICAgIGlmICh0aGlzLnVubGlua1BhbmVscyAmJiB0aGlzLm1heERhdGUpIHtcbiAgICAgICAgICAgIHZhciBtaW5EYXRlWWVhciA9IHRoaXMubWluRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgICAgdmFyIG1heERhdGVZZWFyID0gdGhpcy5tYXhEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0RGF0ZSA9IG1pbkRhdGVZZWFyID09PSBtYXhEYXRlWWVhciA/IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dFllYXJcIl0pKHRoaXMubWF4RGF0ZSkgOiB0aGlzLm1heERhdGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubGVmdERhdGUgPSBtb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpWzBdO1xuICAgICAgICAgIHRoaXMucmlnaHREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGRlZmF1bHRWYWx1ZTogZnVuY3Rpb24gZGVmYXVsdFZhbHVlKHZhbCkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHZhciBfY2FsY0RlZmF1bHRWYWx1ZSA9IG1vbnRoX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY2FsY0RlZmF1bHRWYWx1ZSh2YWwpLFxuICAgICAgICAgICAgbGVmdCA9IF9jYWxjRGVmYXVsdFZhbHVlWzBdLFxuICAgICAgICAgICAgcmlnaHQgPSBfY2FsY0RlZmF1bHRWYWx1ZVsxXTtcblxuICAgICAgICB0aGlzLmxlZnREYXRlID0gbGVmdDtcbiAgICAgICAgdGhpcy5yaWdodERhdGUgPSB2YWwgJiYgdmFsWzFdICYmIGxlZnQuZ2V0RnVsbFllYXIoKSAhPT0gcmlnaHQuZ2V0RnVsbFllYXIoKSAmJiB0aGlzLnVubGlua1BhbmVscyA/IHJpZ2h0IDogT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbGVhcjogZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7XG4gICAgICB0aGlzLm1pbkRhdGUgPSBudWxsO1xuICAgICAgdGhpcy5tYXhEYXRlID0gbnVsbDtcbiAgICAgIHRoaXMubGVmdERhdGUgPSBtb250aF9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NhbGNEZWZhdWx0VmFsdWUodGhpcy5kZWZhdWx0VmFsdWUpWzBdO1xuICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBudWxsKTtcbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZVJhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2VSYW5nZSh2YWwpIHtcbiAgICAgIHRoaXMubWluRGF0ZSA9IHZhbC5taW5EYXRlO1xuICAgICAgdGhpcy5tYXhEYXRlID0gdmFsLm1heERhdGU7XG4gICAgICB0aGlzLnJhbmdlU3RhdGUgPSB2YWwucmFuZ2VTdGF0ZTtcbiAgICB9LFxuICAgIGhhbmRsZVJhbmdlUGljazogZnVuY3Rpb24gaGFuZGxlUmFuZ2VQaWNrKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGNsb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB0cnVlO1xuXG4gICAgICB2YXIgZGVmYXVsdFRpbWUgPSB0aGlzLmRlZmF1bHRUaW1lIHx8IFtdO1xuICAgICAgdmFyIG1pbkRhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVdpdGhUaW1lU3RyaW5nXCJdKSh2YWwubWluRGF0ZSwgZGVmYXVsdFRpbWVbMF0pO1xuICAgICAgdmFyIG1heERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm1vZGlmeVdpdGhUaW1lU3RyaW5nXCJdKSh2YWwubWF4RGF0ZSwgZGVmYXVsdFRpbWVbMV0pO1xuICAgICAgaWYgKHRoaXMubWF4RGF0ZSA9PT0gbWF4RGF0ZSAmJiB0aGlzLm1pbkRhdGUgPT09IG1pbkRhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5vblBpY2sgJiYgdGhpcy5vblBpY2sodmFsKTtcbiAgICAgIHRoaXMubWF4RGF0ZSA9IG1heERhdGU7XG4gICAgICB0aGlzLm1pbkRhdGUgPSBtaW5EYXRlO1xuXG4gICAgICAvLyB3b3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy83NTM5LCBzaG91bGQgcmVtb3ZlIHRoaXMgYmxvY2sgd2hlbiB3ZSBkb24ndCBoYXZlIHRvIGNhcmUgYWJvdXQgQ2hyb21pdW0gNTUgLSA1N1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLm1heERhdGUgPSBtYXhEYXRlO1xuICAgICAgICBfdGhpcy5taW5EYXRlID0gbWluRGF0ZTtcbiAgICAgIH0sIDEwKTtcbiAgICAgIGlmICghY2xvc2UpIHJldHVybjtcbiAgICAgIHRoaXMuaGFuZGxlQ29uZmlybSgpO1xuICAgIH0sXG4gICAgaGFuZGxlU2hvcnRjdXRDbGljazogZnVuY3Rpb24gaGFuZGxlU2hvcnRjdXRDbGljayhzaG9ydGN1dCkge1xuICAgICAgaWYgKHNob3J0Y3V0Lm9uQ2xpY2spIHtcbiAgICAgICAgc2hvcnRjdXQub25DbGljayh0aGlzKTtcbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICAvLyBsZWZ0UHJldiosIHJpZ2h0TmV4dCogbmVlZCB0byB0YWtlIGNhcmUgb2YgYHVubGlua1BhbmVsc2BcbiAgICBsZWZ0UHJldlllYXI6IGZ1bmN0aW9uIGxlZnRQcmV2WWVhcigpIHtcbiAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICAgIGlmICghdGhpcy51bmxpbmtQYW5lbHMpIHtcbiAgICAgICAgdGhpcy5yaWdodERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcInByZXZZZWFyXCJdKSh0aGlzLnJpZ2h0RGF0ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICByaWdodE5leHRZZWFyOiBmdW5jdGlvbiByaWdodE5leHRZZWFyKCkge1xuICAgICAgaWYgKCF0aGlzLnVubGlua1BhbmVscykge1xuICAgICAgICB0aGlzLmxlZnREYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJuZXh0WWVhclwiXSkodGhpcy5sZWZ0RGF0ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibmV4dFllYXJcIl0pKHRoaXMucmlnaHREYXRlKTtcbiAgICB9LFxuXG5cbiAgICAvLyBsZWZ0TmV4dCosIHJpZ2h0UHJldiogYXJlIGNhbGxlZCB3aGVuIGB1bmxpbmtQYW5lbHNgIGlzIHRydWVcbiAgICBsZWZ0TmV4dFllYXI6IGZ1bmN0aW9uIGxlZnROZXh0WWVhcigpIHtcbiAgICAgIHRoaXMubGVmdERhdGUgPSBPYmplY3QoZGF0ZV91dGlsX1tcIm5leHRZZWFyXCJdKSh0aGlzLmxlZnREYXRlKTtcbiAgICB9LFxuICAgIHJpZ2h0UHJldlllYXI6IGZ1bmN0aW9uIHJpZ2h0UHJldlllYXIoKSB7XG4gICAgICB0aGlzLnJpZ2h0RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wicHJldlllYXJcIl0pKHRoaXMucmlnaHREYXRlKTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbmZpcm06IGZ1bmN0aW9uIGhhbmRsZUNvbmZpcm0oKSB7XG4gICAgICB2YXIgdmlzaWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLmlzVmFsaWRWYWx1ZShbdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGVdKSkge1xuICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgW3RoaXMubWluRGF0ZSwgdGhpcy5tYXhEYXRlXSwgdmlzaWJsZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpc1ZhbGlkVmFsdWU6IGZ1bmN0aW9uIGlzVmFsaWRWYWx1ZSh2YWx1ZSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlICYmIHZhbHVlWzBdICYmIHZhbHVlWzFdICYmIE9iamVjdChkYXRlX3V0aWxfW1wiaXNEYXRlXCJdKSh2YWx1ZVswXSkgJiYgT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKHZhbHVlWzFdKSAmJiB2YWx1ZVswXS5nZXRUaW1lKCkgPD0gdmFsdWVbMV0uZ2V0VGltZSgpICYmICh0eXBlb2YgdGhpcy5kaXNhYmxlZERhdGUgPT09ICdmdW5jdGlvbicgPyAhdGhpcy5kaXNhYmxlZERhdGUodmFsdWVbMF0pICYmICF0aGlzLmRpc2FibGVkRGF0ZSh2YWx1ZVsxXSkgOiB0cnVlKTtcbiAgICB9LFxuICAgIHJlc2V0VmlldzogZnVuY3Rpb24gcmVzZXRWaWV3KCkge1xuICAgICAgLy8gTk9URTogdGhpcyBpcyBhIGhhY2sgdG8gcmVzZXQge21pbiwgbWF4fURhdGUgb24gcGlja2VyIG9wZW4uXG4gICAgICAvLyBUT0RPOiBjb3JyZWN0IHdheSBvZiBkb2luZyBzbyBpcyB0byByZWZhY3RvciB7bWluLCBtYXh9RGF0ZSB0byBiZSBkZXBlbmRlbnQgb24gdmFsdWUgYW5kIGludGVybmFsIHNlbGVjdGlvbiBzdGF0ZVxuICAgICAgLy8gICAgICAgYW4gYWx0ZXJuYXRpdmUgd291bGQgYmUgcmVzZXRWaWV3IHdoZW5ldmVyIHBpY2tlciBiZWNvbWVzIHZpc2libGUsIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIGRhdGUtcGFuZWwncyByZXNldFZpZXdcbiAgICAgIHRoaXMubWluRGF0ZSA9IHRoaXMudmFsdWUgJiYgT2JqZWN0KGRhdGVfdXRpbF9bXCJpc0RhdGVcIl0pKHRoaXMudmFsdWVbMF0pID8gbmV3IERhdGUodGhpcy52YWx1ZVswXSkgOiBudWxsO1xuICAgICAgdGhpcy5tYXhEYXRlID0gdGhpcy52YWx1ZSAmJiBPYmplY3QoZGF0ZV91dGlsX1tcImlzRGF0ZVwiXSkodGhpcy52YWx1ZVswXSkgPyBuZXcgRGF0ZSh0aGlzLnZhbHVlWzFdKSA6IG51bGw7XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHsgTW9udGhUYWJsZTogbW9udGhfdGFibGUsIEVsSW5wdXQ6IGlucHV0X2RlZmF1bHQuYSwgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmEgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9tb250aC1yYW5nZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFuZWxfbW9udGhfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobW9udGhfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL21vbnRoLXJhbmdlLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIG1vbnRoX3JhbmdlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFuZWxfbW9udGhfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1vbnRoX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZjI2NDVmYjhfcmVuZGVyLFxuICBtb250aF9yYW5nZXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2YyNjQ1ZmI4X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbW9udGhfcmFuZ2VfYXBpOyB9XG5tb250aF9yYW5nZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC9tb250aC1yYW5nZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbW9udGhfcmFuZ2UgPSAobW9udGhfcmFuZ2VfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyL2RhdGUtcGlja2VyLmpzXG5cblxuXG5cblxudmFyIGRhdGVfcGlja2VyX2dldFBhbmVsID0gZnVuY3Rpb24gZ2V0UGFuZWwodHlwZSkge1xuICBpZiAodHlwZSA9PT0gJ2RhdGVyYW5nZScgfHwgdHlwZSA9PT0gJ2RhdGV0aW1lcmFuZ2UnKSB7XG4gICAgcmV0dXJuIGRhdGVfcmFuZ2U7XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ21vbnRocmFuZ2UnKSB7XG4gICAgcmV0dXJuIG1vbnRoX3JhbmdlO1xuICB9XG4gIHJldHVybiBwYW5lbF9kYXRlO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGF0ZV9waWNrZXIgPSAoe1xuICBtaXhpbnM6IFtwaWNrZXJdLFxuXG4gIG5hbWU6ICdFbERhdGVQaWNrZXInLFxuXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RhdGUnXG4gICAgfSxcbiAgICB0aW1lQXJyb3dDb250cm9sOiBCb29sZWFuXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0eXBlOiBmdW5jdGlvbiB0eXBlKF90eXBlKSB7XG4gICAgICBpZiAodGhpcy5waWNrZXIpIHtcbiAgICAgICAgdGhpcy51bm1vdW50UGlja2VyKCk7XG4gICAgICAgIHRoaXMucGFuZWwgPSBkYXRlX3BpY2tlcl9nZXRQYW5lbChfdHlwZSk7XG4gICAgICAgIHRoaXMubW91bnRQaWNrZXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFuZWwgPSBkYXRlX3BpY2tlcl9nZXRQYW5lbChfdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5wYW5lbCA9IGRhdGVfcGlja2VyX2dldFBhbmVsKHRoaXMudHlwZSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5kYXRlX3BpY2tlci5pbnN0YWxsID0gZnVuY3Rpb24gaW5zdGFsbChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChkYXRlX3BpY2tlci5uYW1lLCBkYXRlX3BpY2tlcik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19kYXRlX3BpY2tlciA9IChkYXRlX3BpY2tlcik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTFhYjkzMjAmXG52YXIgdGltZV9zZWxlY3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF81MWFiOTMyMF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAge1xuICAgICAgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0sXG4gICAgICBvbjoge1xuICAgICAgICBcImJlZm9yZS1lbnRlclwiOiBfdm0uaGFuZGxlTWVudUVudGVyLFxuICAgICAgICBcImFmdGVyLWxlYXZlXCI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIF92bS4kZW1pdChcImRvZGVzdHJveVwiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlZjogXCJwb3BwZXJcIixcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1waWNrZXItcGFuZWwgdGltZS1zZWxlY3QgZWwtcG9wcGVyXCIsXG4gICAgICAgICAgY2xhc3M6IF92bS5wb3BwZXJDbGFzcyxcbiAgICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLndpZHRoICsgXCJweFwiIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJlbC1zY3JvbGxiYXJcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHsgbm9yZXNpemU6IFwiXCIsIFwid3JhcC1jbGFzc1wiOiBcImVsLXBpY2tlci1wYW5lbF9fY29udGVudFwiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBfdm0uX2woX3ZtLml0ZW1zLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGtleTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInRpbWUtc2VsZWN0LWl0ZW1cIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBfdm0udmFsdWUgPT09IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBpdGVtLnZhbHVlID09PSBfdm0uZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ2xpY2soaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoaXRlbS52YWx1ZSkpXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciB0aW1lX3NlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUxYWI5MzIwX3N0YXRpY1JlbmRlckZucyA9IFtdXG50aW1lX3NlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUxYWI5MzIwX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MWFiOTMyMCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG52YXIgcGFyc2VUaW1lID0gZnVuY3Rpb24gcGFyc2VUaW1lKHRpbWUpIHtcbiAgdmFyIHZhbHVlcyA9ICh0aW1lIHx8ICcnKS5zcGxpdCgnOicpO1xuICBpZiAodmFsdWVzLmxlbmd0aCA+PSAyKSB7XG4gICAgdmFyIGhvdXJzID0gcGFyc2VJbnQodmFsdWVzWzBdLCAxMCk7XG4gICAgdmFyIG1pbnV0ZXMgPSBwYXJzZUludCh2YWx1ZXNbMV0sIDEwKTtcblxuICAgIHJldHVybiB7XG4gICAgICBob3VyczogaG91cnMsXG4gICAgICBtaW51dGVzOiBtaW51dGVzXG4gICAgfTtcbiAgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBjb21wYXJlVGltZSA9IGZ1bmN0aW9uIGNvbXBhcmVUaW1lKHRpbWUxLCB0aW1lMikge1xuICB2YXIgdmFsdWUxID0gcGFyc2VUaW1lKHRpbWUxKTtcbiAgdmFyIHZhbHVlMiA9IHBhcnNlVGltZSh0aW1lMik7XG5cbiAgdmFyIG1pbnV0ZXMxID0gdmFsdWUxLm1pbnV0ZXMgKyB2YWx1ZTEuaG91cnMgKiA2MDtcbiAgdmFyIG1pbnV0ZXMyID0gdmFsdWUyLm1pbnV0ZXMgKyB2YWx1ZTIuaG91cnMgKiA2MDtcblxuICBpZiAobWludXRlczEgPT09IG1pbnV0ZXMyKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gbWludXRlczEgPiBtaW51dGVzMiA/IDEgOiAtMTtcbn07XG5cbnZhciBmb3JtYXRUaW1lID0gZnVuY3Rpb24gZm9ybWF0VGltZSh0aW1lKSB7XG4gIHJldHVybiAodGltZS5ob3VycyA8IDEwID8gJzAnICsgdGltZS5ob3VycyA6IHRpbWUuaG91cnMpICsgJzonICsgKHRpbWUubWludXRlcyA8IDEwID8gJzAnICsgdGltZS5taW51dGVzIDogdGltZS5taW51dGVzKTtcbn07XG5cbnZhciBuZXh0VGltZSA9IGZ1bmN0aW9uIG5leHRUaW1lKHRpbWUsIHN0ZXApIHtcbiAgdmFyIHRpbWVWYWx1ZSA9IHBhcnNlVGltZSh0aW1lKTtcbiAgdmFyIHN0ZXBWYWx1ZSA9IHBhcnNlVGltZShzdGVwKTtcblxuICB2YXIgbmV4dCA9IHtcbiAgICBob3VyczogdGltZVZhbHVlLmhvdXJzLFxuICAgIG1pbnV0ZXM6IHRpbWVWYWx1ZS5taW51dGVzXG4gIH07XG5cbiAgbmV4dC5taW51dGVzICs9IHN0ZXBWYWx1ZS5taW51dGVzO1xuICBuZXh0LmhvdXJzICs9IHN0ZXBWYWx1ZS5ob3VycztcblxuICBuZXh0LmhvdXJzICs9IE1hdGguZmxvb3IobmV4dC5taW51dGVzIC8gNjApO1xuICBuZXh0Lm1pbnV0ZXMgPSBuZXh0Lm1pbnV0ZXMgJSA2MDtcblxuICByZXR1cm4gZm9ybWF0VGltZShuZXh0KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVfc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgY29tcG9uZW50czogeyBFbFNjcm9sbGJhcjogc2Nyb2xsYmFyX2RlZmF1bHQuYSB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKCF2YWwpIHJldHVybjtcbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnNjcm9sbFRvT3B0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhpdGVtKSB7XG4gICAgICBpZiAoIWl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgncGljaycsIGl0ZW0udmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xlYXI6IGZ1bmN0aW9uIGhhbmRsZUNsZWFyKCkge1xuICAgICAgdGhpcy4kZW1pdCgncGljaycsIG51bGwpO1xuICAgIH0sXG4gICAgc2Nyb2xsVG9PcHRpb246IGZ1bmN0aW9uIHNjcm9sbFRvT3B0aW9uKCkge1xuICAgICAgdmFyIHNlbGVjdG9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnLnNlbGVjdGVkJztcblxuICAgICAgdmFyIG1lbnUgPSB0aGlzLiRyZWZzLnBvcHBlci5xdWVyeVNlbGVjdG9yKCcuZWwtcGlja2VyLXBhbmVsX19jb250ZW50Jyk7XG4gICAgICBzY3JvbGxfaW50b192aWV3X2RlZmF1bHQoKShtZW51LCBtZW51LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpKTtcbiAgICB9LFxuICAgIGhhbmRsZU1lbnVFbnRlcjogZnVuY3Rpb24gaGFuZGxlTWVudUVudGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgICAgfSkuaW5kZXhPZih0aGlzLnZhbHVlKSAhPT0gLTE7XG4gICAgICB2YXIgaGFzRGVmYXVsdCA9IHRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnZhbHVlO1xuICAgICAgfSkuaW5kZXhPZih0aGlzLmRlZmF1bHRWYWx1ZSkgIT09IC0xO1xuICAgICAgdmFyIG9wdGlvbiA9IHNlbGVjdGVkICYmICcuc2VsZWN0ZWQnIHx8IGhhc0RlZmF1bHQgJiYgJy5kZWZhdWx0JyB8fCAnLnRpbWUtc2VsZWN0LWl0ZW06bm90KC5kaXNhYmxlZCknO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLnNjcm9sbFRvT3B0aW9uKG9wdGlvbik7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNjcm9sbERvd246IGZ1bmN0aW9uIHNjcm9sbERvd24oc3RlcCkge1xuICAgICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgIHZhciBsZW5ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgdG90YWwgPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgaW5kZXggPSBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgICB9KS5pbmRleE9mKHRoaXMudmFsdWUpO1xuICAgICAgd2hpbGUgKHRvdGFsLS0pIHtcbiAgICAgICAgaW5kZXggPSAoaW5kZXggKyBzdGVwICsgbGVuZ3RoKSAlIGxlbmd0aDtcbiAgICAgICAgaWYgKCFpdGVtc1tpbmRleF0uZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdwaWNrJywgaXRlbXNbaW5kZXhdLnZhbHVlLCB0cnVlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGlzVmFsaWRWYWx1ZTogZnVuY3Rpb24gaXNWYWxpZFZhbHVlKGRhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gIWl0ZW0uZGlzYWJsZWQ7XG4gICAgICB9KS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgICB9KS5pbmRleE9mKGRhdGUpICE9PSAtMTtcbiAgICB9LFxuICAgIGhhbmRsZUtleWRvd246IGZ1bmN0aW9uIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgIGlmIChrZXlDb2RlID09PSAzOCB8fCBrZXlDb2RlID09PSA0MCkge1xuICAgICAgICB2YXIgbWFwcGluZyA9IHsgNDA6IDEsIDM4OiAtMSB9O1xuICAgICAgICB2YXIgb2Zmc2V0ID0gbWFwcGluZ1trZXlDb2RlLnRvU3RyaW5nKCldO1xuICAgICAgICB0aGlzLnNjcm9sbERvd24ob2Zmc2V0KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9wcGVyQ2xhc3M6ICcnLFxuICAgICAgc3RhcnQ6ICcwOTowMCcsXG4gICAgICBlbmQ6ICcxODowMCcsXG4gICAgICBzdGVwOiAnMDA6MzAnLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgZGVmYXVsdFZhbHVlOiAnJyxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgbWluVGltZTogJycsXG4gICAgICBtYXhUaW1lOiAnJyxcbiAgICAgIHdpZHRoOiAwXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbXM6IGZ1bmN0aW9uIGl0ZW1zKCkge1xuICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydDtcbiAgICAgIHZhciBlbmQgPSB0aGlzLmVuZDtcbiAgICAgIHZhciBzdGVwID0gdGhpcy5zdGVwO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICAgIGlmIChzdGFydCAmJiBlbmQgJiYgc3RlcCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IHN0YXJ0O1xuICAgICAgICB3aGlsZSAoY29tcGFyZVRpbWUoY3VycmVudCwgZW5kKSA8PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgdmFsdWU6IGN1cnJlbnQsXG4gICAgICAgICAgICBkaXNhYmxlZDogY29tcGFyZVRpbWUoY3VycmVudCwgdGhpcy5taW5UaW1lIHx8ICctMTotMScpIDw9IDAgfHwgY29tcGFyZVRpbWUoY3VycmVudCwgdGhpcy5tYXhUaW1lIHx8ICcxMDA6MTAwJykgPj0gMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGN1cnJlbnQgPSBuZXh0VGltZShjdXJyZW50LCBzdGVwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXNlbGVjdC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFuZWxfdGltZV9zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAodGltZV9zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtc2VsZWN0LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRpbWVfc2VsZWN0X2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFuZWxfdGltZV9zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHRpbWVfc2VsZWN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfNTFhYjkzMjBfcmVuZGVyLFxuICB0aW1lX3NlbGVjdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUxYWI5MzIwX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdGltZV9zZWxlY3RfYXBpOyB9XG50aW1lX3NlbGVjdF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXNlbGVjdC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGltZV9zZWxlY3QgPSAodGltZV9zZWxlY3RfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyL3RpbWUtc2VsZWN0LmpzXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwaWNrZXJfdGltZV9zZWxlY3QgPSAoe1xuICBtaXhpbnM6IFtwaWNrZXJdLFxuXG4gIG5hbWU6ICdFbFRpbWVTZWxlY3QnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFRpbWVTZWxlY3QnLFxuXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3RpbWUtc2VsZWN0J1xuICAgIH1cbiAgfSxcblxuICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICB0aGlzLnBhbmVsID0gdGltZV9zZWxlY3Q7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lLXNlbGVjdC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5waWNrZXJfdGltZV9zZWxlY3QuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChwaWNrZXJfdGltZV9zZWxlY3QubmFtZSwgcGlja2VyX3RpbWVfc2VsZWN0KTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RpbWVfc2VsZWN0ID0gKHBpY2tlcl90aW1lX3NlbGVjdCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXJhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYjI4NjYwZSZcbnZhciB0aW1lX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZmIyODY2MGVfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZWwtem9vbS1pbi10b3BcIiB9LFxuICAgICAgb246IHtcbiAgICAgICAgXCJhZnRlci1sZWF2ZVwiOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBfdm0uJGVtaXQoXCJkb2Rlc3Ryb3lcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlciBlbC1waWNrZXItcGFuZWwgZWwtcG9wcGVyXCIsXG4gICAgICAgICAgY2xhc3M6IF92bS5wb3BwZXJDbGFzc1xuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY29udGVudFwiIH0sIFtcbiAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1yYW5nZS1waWNrZXJfX2NlbGxcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGltZS1yYW5nZS1waWNrZXJfX2hlYWRlclwiIH0sIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwuZGF0ZXBpY2tlci5zdGFydFRpbWVcIikpKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fYm9keSBlbC10aW1lLXBhbmVsX19jb250ZW50XCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgICBcImhhcy1zZWNvbmRzXCI6IF92bS5zaG93U2Vjb25kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJpcy1hcnJvd1wiOiBfdm0uYXJyb3dDb250cm9sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInRpbWUtc3Bpbm5lclwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJtaW5TcGlubmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJzaG93LXNlY29uZHNcIjogX3ZtLnNob3dTZWNvbmRzLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYW0tcG0tbW9kZVwiOiBfdm0uYW1QbU1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcnJvdy1jb250cm9sXCI6IF92bS5hcnJvd0NvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLm1pbkRhdGVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVNaW5DaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3QtcmFuZ2VcIjogX3ZtLnNldE1pblNlbGVjdGlvblJhbmdlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fY2VsbFwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9faGVhZGVyXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnQoXCJlbC5kYXRlcGlja2VyLmVuZFRpbWVcIikpKVxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgXCJlbC10aW1lLXJhbmdlLXBpY2tlcl9fYm9keSBlbC10aW1lLXBhbmVsX19jb250ZW50XCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgICBcImhhcy1zZWNvbmRzXCI6IF92bS5zaG93U2Vjb25kcyxcbiAgICAgICAgICAgICAgICAgICAgXCJpcy1hcnJvd1wiOiBfdm0uYXJyb3dDb250cm9sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInRpbWUtc3Bpbm5lclwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJtYXhTcGlubmVyXCIsXG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJzaG93LXNlY29uZHNcIjogX3ZtLnNob3dTZWNvbmRzLFxuICAgICAgICAgICAgICAgICAgICAgIFwiYW0tcG0tbW9kZVwiOiBfdm0uYW1QbU1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgXCJhcnJvdy1jb250cm9sXCI6IF92bS5hcnJvd0NvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZTogX3ZtLm1heERhdGVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVNYXhDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3QtcmFuZ2VcIjogX3ZtLnNldE1heFNlbGVjdGlvblJhbmdlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSksXG4gICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19mb290ZXJcIiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWUtcGFuZWxfX2J0biBjYW5jZWxcIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUNhbmNlbCgpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIuY2FuY2VsXCIpKSldXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10aW1lLXBhbmVsX19idG4gY29uZmlybVwiLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwiYnV0dG9uXCIsIGRpc2FibGVkOiBfdm0uYnRuRGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQ29uZmlybSgpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIuY29uZmlybVwiKSkpXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciB0aW1lX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZmIyODY2MGVfc3RhdGljUmVuZGVyRm5zID0gW11cbnRpbWVfcmFuZ2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mYjI4NjYwZV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXJhbmdlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mYjI4NjYwZSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGF0ZS1waWNrZXIvc3JjL3BhbmVsL3RpbWUtcmFuZ2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbnZhciBNSU5fVElNRSA9IE9iamVjdChkYXRlX3V0aWxfW1wicGFyc2VEYXRlXCJdKSgnMDA6MDA6MDAnLCAnSEg6bW06c3MnKTtcbnZhciBNQVhfVElNRSA9IE9iamVjdChkYXRlX3V0aWxfW1wicGFyc2VEYXRlXCJdKSgnMjM6NTk6NTknLCAnSEg6bW06c3MnKTtcblxudmFyIHRpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19taW5UaW1lT2ZEYXkgPSBmdW5jdGlvbiBtaW5UaW1lT2ZEYXkoZGF0ZSkge1xuICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJtb2RpZnlEYXRlXCJdKShNSU5fVElNRSwgZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbn07XG5cbnZhciB0aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbWF4VGltZU9mRGF5ID0gZnVuY3Rpb24gbWF4VGltZU9mRGF5KGRhdGUpIHtcbiAgcmV0dXJuIE9iamVjdChkYXRlX3V0aWxfW1wibW9kaWZ5RGF0ZVwiXSkoTUFYX1RJTUUsIGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG59O1xuXG4vLyBpbmNyZWFzZSB0aW1lIGJ5IGFtb3VudCBvZiBtaWxsaXNlY29uZHMsIGJ1dCB3aXRoaW4gdGhlIHJhbmdlIG9mIGRheVxudmFyIGFkdmFuY2VUaW1lID0gZnVuY3Rpb24gYWR2YW5jZVRpbWUoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBuZXcgRGF0ZShNYXRoLm1pbihkYXRlLmdldFRpbWUoKSArIGFtb3VudCwgdGltZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX21heFRpbWVPZkRheShkYXRlKS5nZXRUaW1lKCkpKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBjb21wb25lbnRzOiB7IFRpbWVTcGlubmVyOiB0aW1lX3NwaW5uZXIgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNob3dTZWNvbmRzOiBmdW5jdGlvbiBzaG93U2Vjb25kcygpIHtcbiAgICAgIHJldHVybiAodGhpcy5mb3JtYXQgfHwgJycpLmluZGV4T2YoJ3NzJykgIT09IC0xO1xuICAgIH0sXG4gICAgb2Zmc2V0OiBmdW5jdGlvbiBvZmZzZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93U2Vjb25kcyA/IDExIDogODtcbiAgICB9LFxuICAgIHNwaW5uZXI6IGZ1bmN0aW9uIHNwaW5uZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25SYW5nZVswXSA8IHRoaXMub2Zmc2V0ID8gdGhpcy4kcmVmcy5taW5TcGlubmVyIDogdGhpcy4kcmVmcy5tYXhTcGlubmVyO1xuICAgIH0sXG4gICAgYnRuRGlzYWJsZWQ6IGZ1bmN0aW9uIGJ0bkRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWluRGF0ZS5nZXRUaW1lKCkgPiB0aGlzLm1heERhdGUuZ2V0VGltZSgpO1xuICAgIH0sXG4gICAgYW1QbU1vZGU6IGZ1bmN0aW9uIGFtUG1Nb2RlKCkge1xuICAgICAgaWYgKCh0aGlzLmZvcm1hdCB8fCAnJykuaW5kZXhPZignQScpICE9PSAtMSkgcmV0dXJuICdBJztcbiAgICAgIGlmICgodGhpcy5mb3JtYXQgfHwgJycpLmluZGV4T2YoJ2EnKSAhPT0gLTEpIHJldHVybiAnYSc7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvcHBlckNsYXNzOiAnJyxcbiAgICAgIG1pbkRhdGU6IG5ldyBEYXRlKCksXG4gICAgICBtYXhEYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdmFsdWU6IFtdLFxuICAgICAgb2xkVmFsdWU6IFtuZXcgRGF0ZSgpLCBuZXcgRGF0ZSgpXSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICAgIGZvcm1hdDogJ0hIOm1tOnNzJyxcbiAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uUmFuZ2U6IFswLCAyXSxcbiAgICAgIGFycm93Q29udHJvbDogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoX3ZhbHVlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShfdmFsdWUpKSB7XG4gICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKF92YWx1ZVswXSk7XG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IG5ldyBEYXRlKF92YWx1ZVsxXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBuZXcgRGF0ZSh0aGlzLmRlZmF1bHRWYWx1ZVswXSk7XG4gICAgICAgICAgdGhpcy5tYXhEYXRlID0gbmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWVbMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5taW5EYXRlID0gbmV3IERhdGUodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IGFkdmFuY2VUaW1lKG5ldyBEYXRlKHRoaXMuZGVmYXVsdFZhbHVlKSwgNjAgKiA2MCAqIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWluRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgdGhpcy5tYXhEYXRlID0gYWR2YW5jZVRpbWUobmV3IERhdGUoKSwgNjAgKiA2MCAqIDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy4kcmVmcy5taW5TcGlubmVyLmVtaXRTZWxlY3RSYW5nZSgnaG91cnMnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbGVhcjogZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdwaWNrJywgbnVsbCk7XG4gICAgfSxcbiAgICBoYW5kbGVDYW5jZWw6IGZ1bmN0aW9uIGhhbmRsZUNhbmNlbCgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCB0aGlzLm9sZFZhbHVlKTtcbiAgICB9LFxuICAgIGhhbmRsZU1pbkNoYW5nZTogZnVuY3Rpb24gaGFuZGxlTWluQ2hhbmdlKGRhdGUpIHtcbiAgICAgIHRoaXMubWluRGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiY2xlYXJNaWxsaXNlY29uZHNcIl0pKGRhdGUpO1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoKTtcbiAgICB9LFxuICAgIGhhbmRsZU1heENoYW5nZTogZnVuY3Rpb24gaGFuZGxlTWF4Q2hhbmdlKGRhdGUpIHtcbiAgICAgIHRoaXMubWF4RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wiY2xlYXJNaWxsaXNlY29uZHNcIl0pKGRhdGUpO1xuICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UoKTtcbiAgICB9LFxuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKCkge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZFZhbHVlKFt0aGlzLm1pbkRhdGUsIHRoaXMubWF4RGF0ZV0pKSB7XG4gICAgICAgIHRoaXMuJHJlZnMubWluU3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2UgPSBbW3RpbWVfcmFuZ2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19taW5UaW1lT2ZEYXkodGhpcy5taW5EYXRlKSwgdGhpcy5tYXhEYXRlXV07XG4gICAgICAgIHRoaXMuJHJlZnMubWF4U3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2UgPSBbW3RoaXMubWluRGF0ZSwgdGltZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX21heFRpbWVPZkRheSh0aGlzLm1heERhdGUpXV07XG4gICAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBbdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGVdLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldE1pblNlbGVjdGlvblJhbmdlOiBmdW5jdGlvbiBzZXRNaW5TZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKSB7XG4gICAgICB0aGlzLiRlbWl0KCdzZWxlY3QtcmFuZ2UnLCBzdGFydCwgZW5kLCAnbWluJyk7XG4gICAgICB0aGlzLnNlbGVjdGlvblJhbmdlID0gW3N0YXJ0LCBlbmRdO1xuICAgIH0sXG4gICAgc2V0TWF4U2VsZWN0aW9uUmFuZ2U6IGZ1bmN0aW9uIHNldE1heFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3NlbGVjdC1yYW5nZScsIHN0YXJ0LCBlbmQsICdtYXgnKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2UgPSBbc3RhcnQgKyB0aGlzLm9mZnNldCwgZW5kICsgdGhpcy5vZmZzZXRdO1xuICAgIH0sXG4gICAgaGFuZGxlQ29uZmlybTogZnVuY3Rpb24gaGFuZGxlQ29uZmlybSgpIHtcbiAgICAgIHZhciB2aXNpYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgdmFyIG1pblNlbGVjdGFibGVSYW5nZSA9IHRoaXMuJHJlZnMubWluU3Bpbm5lci5zZWxlY3RhYmxlUmFuZ2U7XG4gICAgICB2YXIgbWF4U2VsZWN0YWJsZVJhbmdlID0gdGhpcy4kcmVmcy5tYXhTcGlubmVyLnNlbGVjdGFibGVSYW5nZTtcblxuICAgICAgdGhpcy5taW5EYXRlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJsaW1pdFRpbWVSYW5nZVwiXSkodGhpcy5taW5EYXRlLCBtaW5TZWxlY3RhYmxlUmFuZ2UsIHRoaXMuZm9ybWF0KTtcbiAgICAgIHRoaXMubWF4RGF0ZSA9IE9iamVjdChkYXRlX3V0aWxfW1wibGltaXRUaW1lUmFuZ2VcIl0pKHRoaXMubWF4RGF0ZSwgbWF4U2VsZWN0YWJsZVJhbmdlLCB0aGlzLmZvcm1hdCk7XG5cbiAgICAgIHRoaXMuJGVtaXQoJ3BpY2snLCBbdGhpcy5taW5EYXRlLCB0aGlzLm1heERhdGVdLCB2aXNpYmxlKTtcbiAgICB9LFxuICAgIGFkanVzdFNwaW5uZXJzOiBmdW5jdGlvbiBhZGp1c3RTcGlubmVycygpIHtcbiAgICAgIHRoaXMuJHJlZnMubWluU3Bpbm5lci5hZGp1c3RTcGlubmVycygpO1xuICAgICAgdGhpcy4kcmVmcy5tYXhTcGlubmVyLmFkanVzdFNwaW5uZXJzKCk7XG4gICAgfSxcbiAgICBjaGFuZ2VTZWxlY3Rpb25SYW5nZTogZnVuY3Rpb24gY2hhbmdlU2VsZWN0aW9uUmFuZ2Uoc3RlcCkge1xuICAgICAgdmFyIGxpc3QgPSB0aGlzLnNob3dTZWNvbmRzID8gWzAsIDMsIDYsIDExLCAxNCwgMTddIDogWzAsIDMsIDgsIDExXTtcbiAgICAgIHZhciBtYXBwaW5nID0gWydob3VycycsICdtaW51dGVzJ10uY29uY2F0KHRoaXMuc2hvd1NlY29uZHMgPyBbJ3NlY29uZHMnXSA6IFtdKTtcbiAgICAgIHZhciBpbmRleCA9IGxpc3QuaW5kZXhPZih0aGlzLnNlbGVjdGlvblJhbmdlWzBdKTtcbiAgICAgIHZhciBuZXh0ID0gKGluZGV4ICsgc3RlcCArIGxpc3QubGVuZ3RoKSAlIGxpc3QubGVuZ3RoO1xuICAgICAgdmFyIGhhbGYgPSBsaXN0Lmxlbmd0aCAvIDI7XG4gICAgICBpZiAobmV4dCA8IGhhbGYpIHtcbiAgICAgICAgdGhpcy4kcmVmcy5taW5TcGlubmVyLmVtaXRTZWxlY3RSYW5nZShtYXBwaW5nW25leHRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJHJlZnMubWF4U3Bpbm5lci5lbWl0U2VsZWN0UmFuZ2UobWFwcGluZ1tuZXh0IC0gaGFsZl0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgaXNWYWxpZFZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkVmFsdWUoZGF0ZSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0ZSkgJiYgT2JqZWN0KGRhdGVfdXRpbF9bXCJ0aW1lV2l0aGluUmFuZ2VcIl0pKHRoaXMubWluRGF0ZSwgdGhpcy4kcmVmcy5taW5TcGlubmVyLnNlbGVjdGFibGVSYW5nZSkgJiYgT2JqZWN0KGRhdGVfdXRpbF9bXCJ0aW1lV2l0aGluUmFuZ2VcIl0pKHRoaXMubWF4RGF0ZSwgdGhpcy4kcmVmcy5tYXhTcGlubmVyLnNlbGVjdGFibGVSYW5nZSk7XG4gICAgfSxcbiAgICBoYW5kbGVLZXlkb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICB2YXIga2V5Q29kZSA9IGV2ZW50LmtleUNvZGU7XG4gICAgICB2YXIgbWFwcGluZyA9IHsgMzg6IC0xLCA0MDogMSwgMzc6IC0xLCAzOTogMSB9O1xuXG4gICAgICAvLyBMZWZ0IG9yIFJpZ2h0XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gMzcgfHwga2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgICAgdmFyIHN0ZXAgPSBtYXBwaW5nW2tleUNvZGVdO1xuICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvblJhbmdlKHN0ZXApO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFVwIG9yIERvd25cbiAgICAgIGlmIChrZXlDb2RlID09PSAzOCB8fCBrZXlDb2RlID09PSA0MCkge1xuICAgICAgICB2YXIgX3N0ZXAgPSBtYXBwaW5nW2tleUNvZGVdO1xuICAgICAgICB0aGlzLnNwaW5uZXIuc2Nyb2xsRG93bihfc3RlcCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGFuZWwvdGltZS1yYW5nZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFuZWxfdGltZV9yYW5nZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXJhbmdlLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRpbWVfcmFuZ2VfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYW5lbF90aW1lX3JhbmdldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB0aW1lX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZmIyODY2MGVfcmVuZGVyLFxuICB0aW1lX3JhbmdldnVlX3R5cGVfdGVtcGxhdGVfaWRfZmIyODY2MGVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0aW1lX3JhbmdlX2FwaTsgfVxudGltZV9yYW5nZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2RhdGUtcGlja2VyL3NyYy9wYW5lbC90aW1lLXJhbmdlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0aW1lX3JhbmdlID0gKHRpbWVfcmFuZ2VfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kYXRlLXBpY2tlci9zcmMvcGlja2VyL3RpbWUtcGlja2VyLmpzXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVfcGlja2VyID0gKHtcbiAgbWl4aW5zOiBbcGlja2VyXSxcblxuICBuYW1lOiAnRWxUaW1lUGlja2VyJyxcblxuICBwcm9wczoge1xuICAgIGlzUmFuZ2U6IEJvb2xlYW4sXG4gICAgYXJyb3dDb250cm9sOiBCb29sZWFuXG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJydcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICBpc1JhbmdlOiBmdW5jdGlvbiBpc1JhbmdlKF9pc1JhbmdlKSB7XG4gICAgICBpZiAodGhpcy5waWNrZXIpIHtcbiAgICAgICAgdGhpcy51bm1vdW50UGlja2VyKCk7XG4gICAgICAgIHRoaXMudHlwZSA9IF9pc1JhbmdlID8gJ3RpbWVyYW5nZScgOiAndGltZSc7XG4gICAgICAgIHRoaXMucGFuZWwgPSBfaXNSYW5nZSA/IHRpbWVfcmFuZ2UgOiBwYW5lbF90aW1lO1xuICAgICAgICB0aGlzLm1vdW50UGlja2VyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnR5cGUgPSBfaXNSYW5nZSA/ICd0aW1lcmFuZ2UnIDogJ3RpbWUnO1xuICAgICAgICB0aGlzLnBhbmVsID0gX2lzUmFuZ2UgPyB0aW1lX3JhbmdlIDogcGFuZWxfdGltZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLnR5cGUgPSB0aGlzLmlzUmFuZ2UgPyAndGltZXJhbmdlJyA6ICd0aW1lJztcbiAgICB0aGlzLnBhbmVsID0gdGhpcy5pc1JhbmdlID8gdGltZV9yYW5nZSA6IHBhbmVsX3RpbWU7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lLXBpY2tlci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG50aW1lX3BpY2tlci5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHRpbWVfcGlja2VyLm5hbWUsIHRpbWVfcGlja2VyKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RpbWVfcGlja2VyID0gKHRpbWVfcGlja2VyKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTIwNjAyNzImXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUyMDYwMjcyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInNwYW5cIixcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczogeyBuYW1lOiBfdm0udHJhbnNpdGlvbiB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBcImFmdGVyLWVudGVyXCI6IF92bS5oYW5kbGVBZnRlckVudGVyLFxuICAgICAgICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uaGFuZGxlQWZ0ZXJMZWF2ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiAhX3ZtLmRpc2FibGVkICYmIF92bS5zaG93UG9wcGVyLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhZGlzYWJsZWQgJiYgc2hvd1BvcHBlclwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZWY6IFwicG9wcGVyXCIsXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBvcG92ZXIgZWwtcG9wcGVyXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLnBvcHBlckNsYXNzLCBfdm0uY29udGVudCAmJiBcImVsLXBvcG92ZXItLXBsYWluXCJdLFxuICAgICAgICAgICAgICBzdHlsZTogeyB3aWR0aDogX3ZtLndpZHRoICsgXCJweFwiIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgcm9sZTogXCJ0b29sdGlwXCIsXG4gICAgICAgICAgICAgICAgaWQ6IF92bS50b29sdGlwSWQsXG4gICAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOlxuICAgICAgICAgICAgICAgICAgX3ZtLmRpc2FibGVkIHx8ICFfdm0uc2hvd1BvcHBlciA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS50aXRsZVxuICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wb3BvdmVyX190aXRsZVwiLFxuICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB0ZXh0Q29udGVudDogX3ZtLl9zKF92bS50aXRsZSkgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uX3QoXCJkZWZhdWx0XCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5jb250ZW50KSldKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfYyhcbiAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgIHsgcmVmOiBcIndyYXBwZXJcIiwgc3RhdGljQ2xhc3M6IFwiZWwtcG9wb3Zlcl9fcmVmZXJlbmNlLXdyYXBwZXJcIiB9LFxuICAgICAgICBbX3ZtLl90KFwicmVmZXJlbmNlXCIpXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUyMDYwMjcyX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTIwNjAyNzJfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjA2MDI3MiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFBvcG92ZXInLFxuXG4gIG1peGluczogW3Z1ZV9wb3BwZXJfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIHRyaWdnZXI6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjbGljaycsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gWydjbGljaycsICdmb2N1cycsICdob3ZlcicsICdtYW51YWwnXS5pbmRleE9mKHZhbHVlKSA+IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgb3BlbkRlbGF5OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBjbG9zZURlbGF5OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAyMDBcbiAgICB9LFxuICAgIHRpdGxlOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgY29udGVudDogU3RyaW5nLFxuICAgIHJlZmVyZW5jZToge30sXG4gICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcbiAgICB3aWR0aDoge30sXG4gICAgdmlzaWJsZUFycm93OiB7XG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBhcnJvd09mZnNldDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgdHJhbnNpdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2ZhZGUtaW4tbGluZWFyJ1xuICAgIH0sXG4gICAgdGFiaW5kZXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0b29sdGlwSWQ6IGZ1bmN0aW9uIHRvb2x0aXBJZCgpIHtcbiAgICAgIHJldHVybiAnZWwtcG9wb3Zlci0nICsgT2JqZWN0KHV0aWxfW1wiZ2VuZXJhdGVJZFwiXSkoKTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgc2hvd1BvcHBlcjogZnVuY3Rpb24gc2hvd1BvcHBlcih2YWwpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhbCA/IHRoaXMuJGVtaXQoJ3Nob3cnKSA6IHRoaXMuJGVtaXQoJ2hpZGUnKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy5yZWZlcmVuY2UgfHwgdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG4gICAgdmFyIHBvcHBlciA9IHRoaXMucG9wcGVyIHx8IHRoaXMuJHJlZnMucG9wcGVyO1xuXG4gICAgaWYgKCFyZWZlcmVuY2UgJiYgdGhpcy4kcmVmcy53cmFwcGVyLmNoaWxkcmVuKSB7XG4gICAgICByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHJlZnMud3JhcHBlci5jaGlsZHJlblswXTtcbiAgICB9XG4gICAgLy8g5Y+v6K6/6Zeu5oCnXG4gICAgaWYgKHJlZmVyZW5jZSkge1xuICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkocmVmZXJlbmNlLCAnZWwtcG9wb3Zlcl9fcmVmZXJlbmNlJyk7XG4gICAgICByZWZlcmVuY2Uuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50b29sdGlwSWQpO1xuICAgICAgcmVmZXJlbmNlLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCB0aGlzLnRhYmluZGV4KTsgLy8gdGFi5bqP5YiXXG4gICAgICBwb3BwZXIuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApO1xuXG4gICAgICBpZiAodGhpcy50cmlnZ2VyICE9PSAnY2xpY2snKSB7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2ZvY3VzaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMuaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgICB2YXIgaW5zdGFuY2UgPSByZWZlcmVuY2UuX192dWVfXztcbiAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHBvcHBlciwgJ2ZvY3VzaW4nLCB0aGlzLmhhbmRsZUZvY3VzKTtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnZm9jdXNvdXQnLCB0aGlzLmhhbmRsZUJsdXIpO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShwb3BwZXIsICdmb2N1c291dCcsIHRoaXMuaGFuZGxlQmx1cik7XG4gICAgICB9XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5oYW5kbGVDbGljayk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5kb1RvZ2dsZSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2hvdmVyJykge1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlTW91c2VFbnRlcik7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShwb3BwZXIsICdtb3VzZWVudGVyJywgdGhpcy5oYW5kbGVNb3VzZUVudGVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ21vdXNlbGVhdmUnLCB0aGlzLmhhbmRsZU1vdXNlTGVhdmUpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocG9wcGVyLCAnbW91c2VsZWF2ZScsIHRoaXMuaGFuZGxlTW91c2VMZWF2ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIGlmICh0aGlzLnRhYmluZGV4IDwgMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW1BvcG92ZXJdYSBuZWdhdGl2ZSB0YWluZGV4IG1lYW5zIHRoYXQgdGhlIGVsZW1lbnQgY2Fubm90IGJlIGZvY3VzZWQgYnkgdGFiIGtleScpO1xuICAgICAgfVxuICAgICAgaWYgKHJlZmVyZW5jZS5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgdGV4dGFyZWEnKSkge1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdmb2N1c2luJywgdGhpcy5kb1Nob3cpO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdmb2N1c291dCcsIHRoaXMuZG9DbG9zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdtb3VzZWRvd24nLCB0aGlzLmRvU2hvdyk7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ21vdXNldXAnLCB0aGlzLmRvQ2xvc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfSxcbiAgZGVhY3RpdmF0ZWQ6IGZ1bmN0aW9uIGRlYWN0aXZhdGVkKCkge1xuICAgIHRoaXMuY2xlYW51cCgpO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGRvVG9nZ2xlOiBmdW5jdGlvbiBkb1RvZ2dsZSgpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9ICF0aGlzLnNob3dQb3BwZXI7XG4gICAgfSxcbiAgICBkb1Nob3c6IGZ1bmN0aW9uIGRvU2hvdygpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9IHRydWU7XG4gICAgfSxcbiAgICBkb0Nsb3NlOiBmdW5jdGlvbiBkb0Nsb3NlKCkge1xuICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVGb2N1czogZnVuY3Rpb24gaGFuZGxlRm9jdXMoKSB7XG4gICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snIHx8IHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykgdGhpcy5zaG93UG9wcGVyID0gdHJ1ZTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljaygpIHtcbiAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXNpbmcnKTtcbiAgICB9LFxuICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoKSB7XG4gICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7XG4gICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snIHx8IHRoaXMudHJpZ2dlciA9PT0gJ2ZvY3VzJykgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICBpZiAodGhpcy5vcGVuRGVsYXkpIHtcbiAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIuc2hvd1BvcHBlciA9IHRydWU7XG4gICAgICAgIH0sIHRoaXMub3BlbkRlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHBlciA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVLZXlkb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGV2KSB7XG4gICAgICBpZiAoZXYua2V5Q29kZSA9PT0gMjcgJiYgdGhpcy50cmlnZ2VyICE9PSAnbWFudWFsJykge1xuICAgICAgICAvLyBlc2NcbiAgICAgICAgdGhpcy5kb0Nsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICBpZiAodGhpcy5jbG9zZURlbGF5KSB7XG4gICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICAgICAgfSwgdGhpcy5jbG9zZURlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRG9jdW1lbnRDbGljazogZnVuY3Rpb24gaGFuZGxlRG9jdW1lbnRDbGljayhlKSB7XG4gICAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2UgfHwgdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG4gICAgICB2YXIgcG9wcGVyID0gdGhpcy5wb3BwZXIgfHwgdGhpcy4kcmVmcy5wb3BwZXI7XG5cbiAgICAgIGlmICghcmVmZXJlbmNlICYmIHRoaXMuJHJlZnMud3JhcHBlci5jaGlsZHJlbikge1xuICAgICAgICByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHJlZnMud3JhcHBlci5jaGlsZHJlblswXTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy4kZWwgfHwgIXJlZmVyZW5jZSB8fCB0aGlzLiRlbC5jb250YWlucyhlLnRhcmdldCkgfHwgcmVmZXJlbmNlLmNvbnRhaW5zKGUudGFyZ2V0KSB8fCAhcG9wcGVyIHx8IHBvcHBlci5jb250YWlucyhlLnRhcmdldCkpIHJldHVybjtcbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlQWZ0ZXJFbnRlcjogZnVuY3Rpb24gaGFuZGxlQWZ0ZXJFbnRlcigpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2FmdGVyLWVudGVyJyk7XG4gICAgfSxcbiAgICBoYW5kbGVBZnRlckxlYXZlOiBmdW5jdGlvbiBoYW5kbGVBZnRlckxlYXZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnYWZ0ZXItbGVhdmUnKTtcbiAgICAgIHRoaXMuZG9EZXN0cm95KCk7XG4gICAgfSxcbiAgICBjbGVhbnVwOiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgaWYgKHRoaXMub3BlbkRlbGF5IHx8IHRoaXMuY2xvc2VEZWxheSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2U7XG5cbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnY2xpY2snLCB0aGlzLmRvVG9nZ2xlKTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2V1cCcsIHRoaXMuZG9DbG9zZSk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNlZG93bicsIHRoaXMuZG9TaG93KTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnZm9jdXNpbicsIHRoaXMuZG9TaG93KTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnZm9jdXNvdXQnLCB0aGlzLmRvQ2xvc2UpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZWRvd24nLCB0aGlzLmRvU2hvdyk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNldXAnLCB0aGlzLmRvQ2xvc2UpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZWxlYXZlJywgdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlTW91c2VFbnRlcik7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKGRvY3VtZW50LCAnY2xpY2snLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIG1haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUyMDYwMjcyX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUyMDYwMjcyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbWFpbl9hcGk7IH1cbm1haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtYWluID0gKG1haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9kaXJlY3RpdmUuanNcbnZhciBnZXRSZWZlcmVuY2UgPSBmdW5jdGlvbiBnZXRSZWZlcmVuY2UoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gIHZhciBfcmVmID0gYmluZGluZy5leHByZXNzaW9uID8gYmluZGluZy52YWx1ZSA6IGJpbmRpbmcuYXJnO1xuICB2YXIgcG9wcGVyID0gdm5vZGUuY29udGV4dC4kcmVmc1tfcmVmXTtcbiAgaWYgKHBvcHBlcikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBvcHBlcikpIHtcbiAgICAgIHBvcHBlclswXS4kcmVmcy5yZWZlcmVuY2UgPSBlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wcGVyLiRyZWZzLnJlZmVyZW5jZSA9IGVsO1xuICAgIH1cbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGlyZWN0aXZlID0gKHtcbiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBnZXRSZWZlcmVuY2UoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgfSxcbiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGdldFJlZmVyZW5jZShlbCwgYmluZGluZywgdm5vZGUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wb3Zlci9pbmRleC5qc1xuXG5cblxuXG5leHRlcm5hbF92dWVfZGVmYXVsdC5hLmRpcmVjdGl2ZSgncG9wb3ZlcicsIGRpcmVjdGl2ZSk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5kaXJlY3RpdmUoJ3BvcG92ZXInLCBkaXJlY3RpdmUpO1xuICBWdWUuY29tcG9uZW50KG1haW4ubmFtZSwgbWFpbik7XG59O1xubWFpbi5kaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBvcG92ZXIgPSAobWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Rvb2x0aXAvc3JjL21haW4uanNcblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19tYWluID0gKHtcbiAgbmFtZTogJ0VsVG9vbHRpcCcsXG5cbiAgbWl4aW5zOiBbdnVlX3BvcHBlcl9kZWZhdWx0LmFdLFxuXG4gIHByb3BzOiB7XG4gICAgb3BlbkRlbGF5OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBtYW51YWw6IEJvb2xlYW4sXG4gICAgZWZmZWN0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGFyaydcbiAgICB9LFxuICAgIGFycm93T2Zmc2V0OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBwb3BwZXJDbGFzczogU3RyaW5nLFxuICAgIGNvbnRlbnQ6IFN0cmluZyxcbiAgICB2aXNpYmxlQXJyb3c6IHtcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHRyYW5zaXRpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdlbC1mYWRlLWluLWxpbmVhcidcbiAgICB9LFxuICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJvdW5kYXJpZXNQYWRkaW5nOiAxMCxcbiAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICBlbnRlcmFibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBoaWRlQWZ0ZXI6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIHRhYmluZGV4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvb2x0aXBJZDogJ2VsLXRvb2x0aXAtJyArIE9iamVjdCh1dGlsX1tcImdlbmVyYXRlSWRcIl0pKCksXG4gICAgICB0aW1lb3V0UGVuZGluZzogbnVsbCxcbiAgICAgIGZvY3VzaW5nOiBmYWxzZVxuICAgIH07XG4gIH0sXG4gIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcblxuICAgIHRoaXMucG9wcGVyVk0gPSBuZXcgZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYSh7XG4gICAgICBkYXRhOiB7IG5vZGU6ICcnIH0sXG4gICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGU7XG4gICAgICB9XG4gICAgfSkuJG1vdW50KCk7XG5cbiAgICB0aGlzLmRlYm91bmNlQ2xvc2UgPSBkZWJvdW5jZV9kZWZhdWx0KCkoMjAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2xvc2VQb3BwZXIoKTtcbiAgICB9KTtcbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMucG9wcGVyVk0pIHtcbiAgICAgIHRoaXMucG9wcGVyVk0ubm9kZSA9IGgoXG4gICAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLnRyYW5zaXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAnYWZ0ZXJMZWF2ZSc6IHRoaXMuZG9EZXN0cm95XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbaChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAnbW91c2VsZWF2ZSc6IGZ1bmN0aW9uIG1vdXNlbGVhdmUoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLnNldEV4cGVjdGVkU3RhdGUoZmFsc2UpO190aGlzMi5kZWJvdW5jZUNsb3NlKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICdtb3VzZWVudGVyJzogZnVuY3Rpb24gbW91c2VlbnRlcigpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuc2V0RXhwZWN0ZWRTdGF0ZSh0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgcmVmOiAncG9wcGVyJyxcbiAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6ICd0b29sdGlwJyxcbiAgICAgICAgICAgICAgaWQ6IHRoaXMudG9vbHRpcElkLFxuICAgICAgICAgICAgICAnYXJpYS1oaWRkZW4nOiB0aGlzLmRpc2FibGVkIHx8ICF0aGlzLnNob3dQb3BwZXIgPyAndHJ1ZScgOiAnZmFsc2UnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGlyZWN0aXZlczogW3tcbiAgICAgICAgICAgICAgbmFtZTogJ3Nob3cnLFxuICAgICAgICAgICAgICB2YWx1ZTogIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5zaG93UG9wcGVyXG4gICAgICAgICAgICB9XSxcblxuICAgICAgICAgICAgJ2NsYXNzJzogWydlbC10b29sdGlwX19wb3BwZXInLCAnaXMtJyArIHRoaXMuZWZmZWN0LCB0aGlzLnBvcHBlckNsYXNzXSB9LFxuICAgICAgICAgIFt0aGlzLiRzbG90cy5jb250ZW50IHx8IHRoaXMuY29udGVudF1cbiAgICAgICAgKV1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0RWxlbWVudCA9IHRoaXMuZ2V0Rmlyc3RFbGVtZW50KCk7XG4gICAgaWYgKCFmaXJzdEVsZW1lbnQpIHJldHVybiBudWxsO1xuXG4gICAgdmFyIGRhdGEgPSBmaXJzdEVsZW1lbnQuZGF0YSA9IGZpcnN0RWxlbWVudC5kYXRhIHx8IHt9O1xuICAgIGRhdGEuc3RhdGljQ2xhc3MgPSB0aGlzLmFkZFRvb2x0aXBDbGFzcyhkYXRhLnN0YXRpY0NsYXNzKTtcblxuICAgIHJldHVybiBmaXJzdEVsZW1lbnQ7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJGVsO1xuICAgIGlmICh0aGlzLiRlbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgdGhpcy4kZWwuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGhpcy50b29sdGlwSWQpO1xuICAgICAgdGhpcy4kZWwuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIHRoaXMudGFiaW5kZXgpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdtb3VzZWVudGVyJywgdGhpcy5zaG93KTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnbW91c2VsZWF2ZScsIHRoaXMuaGlkZSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMy4kc2xvdHMuZGVmYXVsdCB8fCAhX3RoaXMzLiRzbG90cy5kZWZhdWx0Lmxlbmd0aCkge1xuICAgICAgICAgIF90aGlzMy5oYW5kbGVGb2N1cygpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5zdGFuY2UgPSBfdGhpczMuJHNsb3RzLmRlZmF1bHRbMF0uY29tcG9uZW50SW5zdGFuY2U7XG4gICAgICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5mb2N1cykge1xuICAgICAgICAgIGluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMzLmhhbmRsZUZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdibHVyJywgdGhpcy5oYW5kbGVCbHVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnY2xpY2snLCB0aGlzLnJlbW92ZUZvY3VzaW5nKTtcbiAgICB9XG4gICAgLy8gZml4IGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE0NDI0XG4gICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy5wb3BwZXJWTSkge1xuICAgICAgdGhpcy5wb3BwZXJWTS4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMzLnZhbHVlKSB7XG4gICAgICAgICAgX3RoaXMzLnVwZGF0ZVBvcHBlcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBmb2N1c2luZzogZnVuY3Rpb24gZm9jdXNpbmcodmFsKSB7XG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXNpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnZm9jdXNpbmcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBzaG93OiBmdW5jdGlvbiBzaG93KCkge1xuICAgICAgdGhpcy5zZXRFeHBlY3RlZFN0YXRlKHRydWUpO1xuICAgICAgdGhpcy5oYW5kbGVTaG93UG9wcGVyKCk7XG4gICAgfSxcbiAgICBoaWRlOiBmdW5jdGlvbiBoaWRlKCkge1xuICAgICAgdGhpcy5zZXRFeHBlY3RlZFN0YXRlKGZhbHNlKTtcbiAgICAgIHRoaXMuZGVib3VuY2VDbG9zZSgpO1xuICAgIH0sXG4gICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICAgICAgdGhpcy5mb2N1c2luZyA9IHRydWU7XG4gICAgICB0aGlzLnNob3coKTtcbiAgICB9LFxuICAgIGhhbmRsZUJsdXI6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9LFxuICAgIHJlbW92ZUZvY3VzaW5nOiBmdW5jdGlvbiByZW1vdmVGb2N1c2luZygpIHtcbiAgICAgIHRoaXMuZm9jdXNpbmcgPSBmYWxzZTtcbiAgICB9LFxuICAgIGFkZFRvb2x0aXBDbGFzczogZnVuY3Rpb24gYWRkVG9vbHRpcENsYXNzKHByZXYpIHtcbiAgICAgIGlmICghcHJldikge1xuICAgICAgICByZXR1cm4gJ2VsLXRvb2x0aXAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdlbC10b29sdGlwICcgKyBwcmV2LnJlcGxhY2UoJ2VsLXRvb2x0aXAnLCAnJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVTaG93UG9wcGVyOiBmdW5jdGlvbiBoYW5kbGVTaG93UG9wcGVyKCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5leHBlY3RlZFN0YXRlIHx8IHRoaXMubWFudWFsKSByZXR1cm47XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczQuc2hvd1BvcHBlciA9IHRydWU7XG4gICAgICB9LCB0aGlzLm9wZW5EZWxheSk7XG5cbiAgICAgIGlmICh0aGlzLmhpZGVBZnRlciA+IDApIHtcbiAgICAgICAgdGhpcy50aW1lb3V0UGVuZGluZyA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzNC5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgICAgIH0sIHRoaXMuaGlkZUFmdGVyKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNsb3NlUG9wcGVyOiBmdW5jdGlvbiBoYW5kbGVDbG9zZVBvcHBlcigpIHtcbiAgICAgIGlmICh0aGlzLmVudGVyYWJsZSAmJiB0aGlzLmV4cGVjdGVkU3RhdGUgfHwgdGhpcy5tYW51YWwpIHJldHVybjtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXG4gICAgICBpZiAodGhpcy50aW1lb3V0UGVuZGluZykge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0UGVuZGluZyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kb0Rlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldEV4cGVjdGVkU3RhdGU6IGZ1bmN0aW9uIHNldEV4cGVjdGVkU3RhdGUoZXhwZWN0ZWRTdGF0ZSkge1xuICAgICAgaWYgKGV4cGVjdGVkU3RhdGUgPT09IGZhbHNlKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRQZW5kaW5nKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhwZWN0ZWRTdGF0ZSA9IGV4cGVjdGVkU3RhdGU7XG4gICAgfSxcbiAgICBnZXRGaXJzdEVsZW1lbnQ6IGZ1bmN0aW9uIGdldEZpcnN0RWxlbWVudCgpIHtcbiAgICAgIHZhciBzbG90cyA9IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoc2xvdHMpKSByZXR1cm4gbnVsbDtcbiAgICAgIHZhciBlbGVtZW50ID0gbnVsbDtcbiAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzbG90cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgaWYgKHNsb3RzW2luZGV4XSAmJiBzbG90c1tpbmRleF0udGFnKSB7XG4gICAgICAgICAgZWxlbWVudCA9IHNsb3RzW2luZGV4XTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMucG9wcGVyVk0gJiYgdGhpcy5wb3BwZXJWTS4kZGVzdHJveSgpO1xuICB9LFxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VFbG07XG4gICAgaWYgKHJlZmVyZW5jZS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNlZW50ZXInLCB0aGlzLnNob3cpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNlbGVhdmUnLCB0aGlzLmhpZGUpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ2ZvY3VzJywgdGhpcy5oYW5kbGVGb2N1cyk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnYmx1cicsIHRoaXMuaGFuZGxlQmx1cik7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnY2xpY2snLCB0aGlzLnJlbW92ZUZvY3VzaW5nKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90b29sdGlwL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX21haW4ubmFtZSwgc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfdG9vbHRpcCA9IChzcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjI5YjAxMiZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIyOWIwMTJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwidHJhbnNpdGlvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwibXNnYm94LWZhZGVcIiB9IH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZS1ib3hfX3dyYXBwZXJcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0YWJpbmRleDogXCItMVwiLFxuICAgICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgICAgXCJhcmlhLW1vZGFsXCI6IFwidHJ1ZVwiLFxuICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOiBfdm0udGl0bGUgfHwgXCJkaWFsb2dcIlxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0ICE9PSAkZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVXcmFwcGVyQ2xpY2soJGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveFwiLFxuICAgICAgICAgICAgY2xhc3M6IFtfdm0uY3VzdG9tQ2xhc3MsIF92bS5jZW50ZXIgJiYgXCJlbC1tZXNzYWdlLWJveC0tY2VudGVyXCJdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfdm0udGl0bGUgIT09IG51bGxcbiAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19oZWFkZXJcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X190aXRsZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmljb24gJiYgX3ZtLmNlbnRlclxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1wiZWwtbWVzc2FnZS1ib3hfX3N0YXR1c1wiLCBfdm0uaWNvbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSlcbiAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLnNob3dDbG9zZVxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZS1ib3hfX2hlYWRlcmJ0blwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcImJ1dHRvblwiLCBcImFyaWEtbGFiZWxcIjogXCJDbG9zZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmRpc3Rpbmd1aXNoQ2FuY2VsQW5kQ2xvc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwiY2xvc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJjYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGlzdGluZ3Vpc2hDYW5jZWxBbmRDbG9zZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJjbG9zZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImNhbmNlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2UtYm94X19jbG9zZSBlbC1pY29uLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fY29udGVudFwiIH0sIFtcbiAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fY29udGFpbmVyXCIgfSwgW1xuICAgICAgICAgICAgICAgIF92bS5pY29uICYmICFfdm0uY2VudGVyICYmIF92bS5tZXNzYWdlICE9PSBcIlwiXG4gICAgICAgICAgICAgICAgICA/IF9jKFwiZGl2XCIsIHsgY2xhc3M6IFtcImVsLW1lc3NhZ2UtYm94X19zdGF0dXNcIiwgX3ZtLmljb25dIH0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF92bS5tZXNzYWdlICE9PSBcIlwiXG4gICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fbWVzc2FnZVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFfdm0uZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcInBcIiwgW192bS5fdihfdm0uX3MoX3ZtLm1lc3NhZ2UpKV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfYyhcInBcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ubWVzc2FnZSkgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnNob3dJbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9faW5wdXRcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJlbC1pbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IF92bS5pbnB1dFR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5pbnB1dFBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZUlucHV0RW50ZXIoJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlucHV0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmlucHV0VmFsdWUgPSAkJHZcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1tZXNzYWdlLWJveF9fZXJyb3Jtc2dcIixcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJpbGl0eTogISFfdm0uZWRpdG9yRXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ2aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uZWRpdG9yRXJyb3JNZXNzYWdlKSldXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZS1ib3hfX2J0bnNcIiB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLnNob3dDYW5jZWxCdXR0b25cbiAgICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW192bS5jYW5jZWxCdXR0b25DbGFzc2VzXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmc6IF92bS5jYW5jZWxCdXR0b25Mb2FkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZDogX3ZtLnJvdW5kQnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlQWN0aW9uKFwiY2FuY2VsXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbihcImNhbmNlbFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY2FuY2VsQnV0dG9uVGV4dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udChcImVsLm1lc3NhZ2Vib3guY2FuY2VsXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd0NvbmZpcm1CdXR0b24sXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dDb25maXJtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJjb25maXJtXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLmNvbmZpcm1CdXR0b25DbGFzc2VzXSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nOiBfdm0uY29uZmlybUJ1dHRvbkxvYWRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgcm91bmQ6IF92bS5yb3VuZEJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICBzaXplOiBcInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXlDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiRW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVBY3Rpb24oXCJjb25maXJtXCIpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVBY3Rpb24oXCJjb25maXJtXCIpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uY29uZmlybUJ1dHRvblRleHQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0udChcImVsLm1lc3NhZ2Vib3guY29uZmlybVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgXVxuICAgIClcbiAgXSlcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIyOWIwMTJfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82YjI5YjAxMl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02YjI5YjAxMiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2xvY2FsZVwiXG52YXIgbGliX2xvY2FsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcbnZhciBsaWJfbG9jYWxlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGxpYl9sb2NhbGVfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2FyaWEtZGlhbG9nXCJcbnZhciBhcmlhX2RpYWxvZ18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcbnZhciBhcmlhX2RpYWxvZ19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihhcmlhX2RpYWxvZ18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tZXNzYWdlLWJveC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG5cbnZhciBtZXNzYWdlQm94ID0gdm9pZCAwO1xudmFyIHR5cGVNYXAgPSB7XG4gIHN1Y2Nlc3M6ICdzdWNjZXNzJyxcbiAgaW5mbzogJ2luZm8nLFxuICB3YXJuaW5nOiAnd2FybmluZycsXG4gIGVycm9yOiAnZXJyb3InXG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBtZXNzYWdlX2JveF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW3BvcHVwX2RlZmF1bHQuYSwgbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RhbDoge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgbG9ja1Njcm9sbDoge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd0Nsb3NlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY2xvc2VPbkNsaWNrTW9kYWw6IHtcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNsb3NlT25QcmVzc0VzY2FwZToge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY2xvc2VPbkhhc2hDaGFuZ2U6IHtcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNlbnRlcjoge1xuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB0eXBlOiBCb29sZWFuXG4gICAgfSxcbiAgICByb3VuZEJ1dHRvbjoge1xuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB0eXBlOiBCb29sZWFuXG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEsXG4gICAgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmFcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGljb246IGZ1bmN0aW9uIGljb24oKSB7XG4gICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgICAgICBpY29uQ2xhc3MgPSB0aGlzLmljb25DbGFzcztcblxuICAgICAgcmV0dXJuIGljb25DbGFzcyB8fCAodHlwZSAmJiB0eXBlTWFwW3R5cGVdID8gJ2VsLWljb24tJyArIHR5cGVNYXBbdHlwZV0gOiAnJyk7XG4gICAgfSxcbiAgICBjb25maXJtQnV0dG9uQ2xhc3NlczogZnVuY3Rpb24gY29uZmlybUJ1dHRvbkNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4gJ2VsLWJ1dHRvbi0tcHJpbWFyeSAnICsgdGhpcy5jb25maXJtQnV0dG9uQ2xhc3M7XG4gICAgfSxcbiAgICBjYW5jZWxCdXR0b25DbGFzc2VzOiBmdW5jdGlvbiBjYW5jZWxCdXR0b25DbGFzc2VzKCkge1xuICAgICAgcmV0dXJuICcnICsgdGhpcy5jYW5jZWxCdXR0b25DbGFzcztcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNhZmVDbG9zZTogZnVuY3Rpb24gZ2V0U2FmZUNsb3NlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGN1cnJlbnRJZCA9IHRoaXMudWlkO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoY3VycmVudElkID09PSBfdGhpcy51aWQpIF90aGlzLmRvQ2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sXG4gICAgZG9DbG9zZTogZnVuY3Rpb24gZG9DbG9zZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jbG9zaW5nID0gdHJ1ZTtcblxuICAgICAgdGhpcy5vbkNsb3NlICYmIHRoaXMub25DbG9zZSgpO1xuICAgICAgbWVzc2FnZUJveC5jbG9zZURpYWxvZygpOyAvLyDop6Pnu5FcbiAgICAgIGlmICh0aGlzLmxvY2tTY3JvbGwpIHtcbiAgICAgICAgc2V0VGltZW91dCh0aGlzLnJlc3RvcmVCb2R5U3R5bGUsIDIwMCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wZW5lZCA9IGZhbHNlO1xuICAgICAgdGhpcy5kb0FmdGVyQ2xvc2UoKTtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMyLmFjdGlvbikgX3RoaXMyLmNhbGxiYWNrKF90aGlzMi5hY3Rpb24sIF90aGlzMik7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhhbmRsZVdyYXBwZXJDbGljazogZnVuY3Rpb24gaGFuZGxlV3JhcHBlckNsaWNrKCkge1xuICAgICAgaWYgKHRoaXMuY2xvc2VPbkNsaWNrTW9kYWwpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVBY3Rpb24odGhpcy5kaXN0aW5ndWlzaENhbmNlbEFuZENsb3NlID8gJ2Nsb3NlJyA6ICdjYW5jZWwnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUlucHV0RW50ZXI6IGZ1bmN0aW9uIGhhbmRsZUlucHV0RW50ZXIoKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dFR5cGUgIT09ICd0ZXh0YXJlYScpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQWN0aW9uKCdjb25maXJtJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVBY3Rpb246IGZ1bmN0aW9uIGhhbmRsZUFjdGlvbihhY3Rpb24pIHtcbiAgICAgIGlmICh0aGlzLiR0eXBlID09PSAncHJvbXB0JyAmJiBhY3Rpb24gPT09ICdjb25maXJtJyAmJiAhdGhpcy52YWxpZGF0ZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmJlZm9yZUNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY2xvc2UgPSB0aGlzLmdldFNhZmVDbG9zZSgpO1xuICAgICAgICB0aGlzLmJlZm9yZUNsb3NlKGFjdGlvbiwgdGhpcywgdGhpcy5jbG9zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRvQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLiR0eXBlID09PSAncHJvbXB0Jykge1xuICAgICAgICB2YXIgaW5wdXRQYXR0ZXJuID0gdGhpcy5pbnB1dFBhdHRlcm47XG4gICAgICAgIGlmIChpbnB1dFBhdHRlcm4gJiYgIWlucHV0UGF0dGVybi50ZXN0KHRoaXMuaW5wdXRWYWx1ZSB8fCAnJykpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvckVycm9yTWVzc2FnZSA9IHRoaXMuaW5wdXRFcnJvck1lc3NhZ2UgfHwgT2JqZWN0KGxpYl9sb2NhbGVfW1widFwiXSkoJ2VsLm1lc3NhZ2Vib3guZXJyb3InKTtcbiAgICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKSh0aGlzLmdldElucHV0RWxlbWVudCgpLCAnaW52YWxpZCcpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5wdXRWYWxpZGF0b3IgPSB0aGlzLmlucHV0VmFsaWRhdG9yO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIHZhbGlkYXRlUmVzdWx0ID0gaW5wdXRWYWxpZGF0b3IodGhpcy5pbnB1dFZhbHVlKTtcbiAgICAgICAgICBpZiAodmFsaWRhdGVSZXN1bHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckVycm9yTWVzc2FnZSA9IHRoaXMuaW5wdXRFcnJvck1lc3NhZ2UgfHwgT2JqZWN0KGxpYl9sb2NhbGVfW1widFwiXSkoJ2VsLm1lc3NhZ2Vib3guZXJyb3InKTtcbiAgICAgICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCksICdpbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGVSZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckVycm9yTWVzc2FnZSA9IHZhbGlkYXRlUmVzdWx0O1xuICAgICAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSwgJ2ludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKSh0aGlzLmdldElucHV0RWxlbWVudCgpLCAnaW52YWxpZCcpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBnZXRGaXJzdEZvY3VzOiBmdW5jdGlvbiBnZXRGaXJzdEZvY3VzKCkge1xuICAgICAgdmFyIGJ0biA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1tZXNzYWdlLWJveF9fYnRucyAuZWwtYnV0dG9uJyk7XG4gICAgICB2YXIgdGl0bGUgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtbWVzc2FnZS1ib3hfX2J0bnMgLmVsLW1lc3NhZ2UtYm94X190aXRsZScpO1xuICAgICAgcmV0dXJuIGJ0biB8fCB0aXRsZTtcbiAgICB9LFxuICAgIGdldElucHV0RWxlbWVudDogZnVuY3Rpb24gZ2V0SW5wdXRFbGVtZW50KCkge1xuICAgICAgdmFyIGlucHV0UmVmcyA9IHRoaXMuJHJlZnMuaW5wdXQuJHJlZnM7XG4gICAgICByZXR1cm4gaW5wdXRSZWZzLmlucHV0IHx8IGlucHV0UmVmcy50ZXh0YXJlYTtcbiAgICB9LFxuICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcbiAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKCdjbG9zZScpO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsKSB7XG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG4gICAgICAgICAgaWYgKF90aGlzMy4kdHlwZSA9PT0gJ3Byb21wdCcgJiYgdmFsICE9PSBudWxsKSB7XG4gICAgICAgICAgICBfdGhpczMudmFsaWRhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgdGhpcy51aWQrKztcbiAgICAgICAgaWYgKHRoaXMuJHR5cGUgPT09ICdhbGVydCcgfHwgdGhpcy4kdHlwZSA9PT0gJ2NvbmZpcm0nKSB7XG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgX3RoaXM0LiRyZWZzLmNvbmZpcm0uJGVsLmZvY3VzKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c0FmdGVyQ2xvc2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgbWVzc2FnZUJveCA9IG5ldyBhcmlhX2RpYWxvZ19kZWZhdWx0LmEodGhpcy4kZWwsIHRoaXMuZm9jdXNBZnRlckNsb3NlZCwgdGhpcy5nZXRGaXJzdEZvY3VzKCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBwcm9tcHRcbiAgICAgIGlmICh0aGlzLiR0eXBlICE9PSAncHJvbXB0JykgcmV0dXJuO1xuICAgICAgaWYgKHZhbCkge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoX3RoaXM0LiRyZWZzLmlucHV0ICYmIF90aGlzNC4kcmVmcy5pbnB1dC4kZWwpIHtcbiAgICAgICAgICAgIF90aGlzNC5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgNTAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yRXJyb3JNZXNzYWdlID0gJyc7XG4gICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCksICdpbnZhbGlkJyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXM1LmNsb3NlT25IYXNoQ2hhbmdlKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgX3RoaXM1LmNsb3NlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jbG9zZU9uSGFzaENoYW5nZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2hhc2hjaGFuZ2UnLCB0aGlzLmNsb3NlKTtcbiAgICB9XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBtZXNzYWdlQm94LmNsb3NlRGlhbG9nKCk7XG4gICAgfSk7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVpZDogMSxcbiAgICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIHR5cGU6ICcnLFxuICAgICAgaWNvbkNsYXNzOiAnJyxcbiAgICAgIGN1c3RvbUNsYXNzOiAnJyxcbiAgICAgIHNob3dJbnB1dDogZmFsc2UsXG4gICAgICBpbnB1dFZhbHVlOiBudWxsLFxuICAgICAgaW5wdXRQbGFjZWhvbGRlcjogJycsXG4gICAgICBpbnB1dFR5cGU6ICd0ZXh0JyxcbiAgICAgIGlucHV0UGF0dGVybjogbnVsbCxcbiAgICAgIGlucHV0VmFsaWRhdG9yOiBudWxsLFxuICAgICAgaW5wdXRFcnJvck1lc3NhZ2U6ICcnLFxuICAgICAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXG4gICAgICBzaG93Q2FuY2VsQnV0dG9uOiBmYWxzZSxcbiAgICAgIGFjdGlvbjogJycsXG4gICAgICBjb25maXJtQnV0dG9uVGV4dDogJycsXG4gICAgICBjYW5jZWxCdXR0b25UZXh0OiAnJyxcbiAgICAgIGNvbmZpcm1CdXR0b25Mb2FkaW5nOiBmYWxzZSxcbiAgICAgIGNhbmNlbEJ1dHRvbkxvYWRpbmc6IGZhbHNlLFxuICAgICAgY29uZmlybUJ1dHRvbkNsYXNzOiAnJyxcbiAgICAgIGNvbmZpcm1CdXR0b25EaXNhYmxlZDogZmFsc2UsXG4gICAgICBjYW5jZWxCdXR0b25DbGFzczogJycsXG4gICAgICBlZGl0b3JFcnJvck1lc3NhZ2U6IG51bGwsXG4gICAgICBjYWxsYmFjazogbnVsbCxcbiAgICAgIGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzogZmFsc2UsXG4gICAgICBmb2N1c0FmdGVyQ2xvc2VkOiBudWxsLFxuICAgICAgaXNPbkNvbXBvc2l0aW9uOiBmYWxzZSxcbiAgICAgIGRpc3Rpbmd1aXNoQ2FuY2VsQW5kQ2xvc2U6IGZhbHNlXG4gICAgfTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19tZXNzYWdlX2JveF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtZXNzYWdlX2JveF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZXNzYWdlLWJveC9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBzcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX21lc3NhZ2VfYm94X3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIyOWIwMTJfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmIyOWIwMTJfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzcmNfbWFpbl9hcGk7IH1cbnNyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvbWVzc2FnZS1ib3gvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1lc3NhZ2VfYm94X3NyY19tYWluID0gKHNyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy92ZG9tXCJcbnZhciB2ZG9tXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L3NyYy9tYWluLmpzXG52YXIgbWFpbl90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgbWFpbl9kZWZhdWx0cyA9IHtcbiAgdGl0bGU6IG51bGwsXG4gIG1lc3NhZ2U6ICcnLFxuICB0eXBlOiAnJyxcbiAgaWNvbkNsYXNzOiAnJyxcbiAgc2hvd0lucHV0OiBmYWxzZSxcbiAgc2hvd0Nsb3NlOiB0cnVlLFxuICBtb2RhbEZhZGU6IHRydWUsXG4gIGxvY2tTY3JvbGw6IHRydWUsXG4gIGNsb3NlT25DbGlja01vZGFsOiB0cnVlLFxuICBjbG9zZU9uUHJlc3NFc2NhcGU6IHRydWUsXG4gIGNsb3NlT25IYXNoQ2hhbmdlOiB0cnVlLFxuICBpbnB1dFZhbHVlOiBudWxsLFxuICBpbnB1dFBsYWNlaG9sZGVyOiAnJyxcbiAgaW5wdXRUeXBlOiAndGV4dCcsXG4gIGlucHV0UGF0dGVybjogbnVsbCxcbiAgaW5wdXRWYWxpZGF0b3I6IG51bGwsXG4gIGlucHV0RXJyb3JNZXNzYWdlOiAnJyxcbiAgc2hvd0NvbmZpcm1CdXR0b246IHRydWUsXG4gIHNob3dDYW5jZWxCdXR0b246IGZhbHNlLFxuICBjb25maXJtQnV0dG9uUG9zaXRpb246ICdyaWdodCcsXG4gIGNvbmZpcm1CdXR0b25IaWdobGlnaHQ6IGZhbHNlLFxuICBjYW5jZWxCdXR0b25IaWdobGlnaHQ6IGZhbHNlLFxuICBjb25maXJtQnV0dG9uVGV4dDogJycsXG4gIGNhbmNlbEJ1dHRvblRleHQ6ICcnLFxuICBjb25maXJtQnV0dG9uQ2xhc3M6ICcnLFxuICBjYW5jZWxCdXR0b25DbGFzczogJycsXG4gIGN1c3RvbUNsYXNzOiAnJyxcbiAgYmVmb3JlQ2xvc2U6IG51bGwsXG4gIGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzogZmFsc2UsXG4gIGNlbnRlcjogZmFsc2UsXG4gIHJvdW5kQnV0dG9uOiBmYWxzZSxcbiAgZGlzdGluZ3Vpc2hDYW5jZWxBbmRDbG9zZTogZmFsc2Vcbn07XG5cblxuXG5cblxuXG52YXIgTWVzc2FnZUJveENvbnN0cnVjdG9yID0gZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5leHRlbmQobWVzc2FnZV9ib3hfc3JjX21haW4pO1xuXG52YXIgY3VycmVudE1zZyA9IHZvaWQgMCxcbiAgICBtYWluX2luc3RhbmNlID0gdm9pZCAwO1xudmFyIG1zZ1F1ZXVlID0gW107XG5cbnZhciBkZWZhdWx0Q2FsbGJhY2sgPSBmdW5jdGlvbiBkZWZhdWx0Q2FsbGJhY2soYWN0aW9uKSB7XG4gIGlmIChjdXJyZW50TXNnKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gY3VycmVudE1zZy5jYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAobWFpbl9pbnN0YW5jZS5zaG93SW5wdXQpIHtcbiAgICAgICAgY2FsbGJhY2sobWFpbl9pbnN0YW5jZS5pbnB1dFZhbHVlLCBhY3Rpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGN1cnJlbnRNc2cucmVzb2x2ZSkge1xuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2NvbmZpcm0nKSB7XG4gICAgICAgIGlmIChtYWluX2luc3RhbmNlLnNob3dJbnB1dCkge1xuICAgICAgICAgIGN1cnJlbnRNc2cucmVzb2x2ZSh7IHZhbHVlOiBtYWluX2luc3RhbmNlLmlucHV0VmFsdWUsIGFjdGlvbjogYWN0aW9uIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRNc2cucmVzb2x2ZShhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRNc2cucmVqZWN0ICYmIChhY3Rpb24gPT09ICdjYW5jZWwnIHx8IGFjdGlvbiA9PT0gJ2Nsb3NlJykpIHtcbiAgICAgICAgY3VycmVudE1zZy5yZWplY3QoYWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbnZhciBpbml0SW5zdGFuY2UgPSBmdW5jdGlvbiBpbml0SW5zdGFuY2UoKSB7XG4gIG1haW5faW5zdGFuY2UgPSBuZXcgTWVzc2FnZUJveENvbnN0cnVjdG9yKHtcbiAgICBlbDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgfSk7XG5cbiAgbWFpbl9pbnN0YW5jZS5jYWxsYmFjayA9IGRlZmF1bHRDYWxsYmFjaztcbn07XG5cbnZhciBtYWluX3Nob3dOZXh0TXNnID0gZnVuY3Rpb24gc2hvd05leHRNc2coKSB7XG4gIGlmICghbWFpbl9pbnN0YW5jZSkge1xuICAgIGluaXRJbnN0YW5jZSgpO1xuICB9XG4gIG1haW5faW5zdGFuY2UuYWN0aW9uID0gJyc7XG5cbiAgaWYgKCFtYWluX2luc3RhbmNlLnZpc2libGUgfHwgbWFpbl9pbnN0YW5jZS5jbG9zZVRpbWVyKSB7XG4gICAgaWYgKG1zZ1F1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGN1cnJlbnRNc2cgPSBtc2dRdWV1ZS5zaGlmdCgpO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IGN1cnJlbnRNc2cub3B0aW9ucztcbiAgICAgIGZvciAodmFyIHByb3AgaW4gb3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgIG1haW5faW5zdGFuY2VbcHJvcF0gPSBvcHRpb25zW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5jYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG1haW5faW5zdGFuY2UuY2FsbGJhY2sgPSBkZWZhdWx0Q2FsbGJhY2s7XG4gICAgICB9XG5cbiAgICAgIHZhciBvbGRDYiA9IG1haW5faW5zdGFuY2UuY2FsbGJhY2s7XG4gICAgICBtYWluX2luc3RhbmNlLmNhbGxiYWNrID0gZnVuY3Rpb24gKGFjdGlvbiwgaW5zdGFuY2UpIHtcbiAgICAgICAgb2xkQ2IoYWN0aW9uLCBpbnN0YW5jZSk7XG4gICAgICAgIHNob3dOZXh0TXNnKCk7XG4gICAgICB9O1xuICAgICAgaWYgKE9iamVjdCh2ZG9tX1tcImlzVk5vZGVcIl0pKG1haW5faW5zdGFuY2UubWVzc2FnZSkpIHtcbiAgICAgICAgbWFpbl9pbnN0YW5jZS4kc2xvdHMuZGVmYXVsdCA9IFttYWluX2luc3RhbmNlLm1lc3NhZ2VdO1xuICAgICAgICBtYWluX2luc3RhbmNlLm1lc3NhZ2UgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIG1haW5faW5zdGFuY2UuJHNsb3RzLmRlZmF1bHQ7XG4gICAgICB9XG4gICAgICBbJ21vZGFsJywgJ3Nob3dDbG9zZScsICdjbG9zZU9uQ2xpY2tNb2RhbCcsICdjbG9zZU9uUHJlc3NFc2NhcGUnLCAnY2xvc2VPbkhhc2hDaGFuZ2UnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIGlmIChtYWluX2luc3RhbmNlW3Byb3BdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBtYWluX2luc3RhbmNlW3Byb3BdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1haW5faW5zdGFuY2UuJGVsKTtcblxuICAgICAgZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1haW5faW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBtYWluX01lc3NhZ2VCb3ggPSBmdW5jdGlvbiBNZXNzYWdlQm94KG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGlmIChleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJyB8fCBPYmplY3QodmRvbV9bXCJpc1ZOb2RlXCJdKShvcHRpb25zKSkge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBtZXNzYWdlOiBvcHRpb25zXG4gICAgfTtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMudGl0bGUgPSBhcmd1bWVudHNbMV07XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMuY2FsbGJhY2sgJiYgIWNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zLmNhbGxiYWNrO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICBtc2dRdWV1ZS5wdXNoKHtcbiAgICAgICAgb3B0aW9uczogbWVyZ2VfZGVmYXVsdCgpKHt9LCBtYWluX2RlZmF1bHRzLCBNZXNzYWdlQm94LmRlZmF1bHRzLCBvcHRpb25zKSxcbiAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICByZWplY3Q6IHJlamVjdFxuICAgICAgfSk7XG5cbiAgICAgIG1haW5fc2hvd05leHRNc2coKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBtc2dRdWV1ZS5wdXNoKHtcbiAgICAgIG9wdGlvbnM6IG1lcmdlX2RlZmF1bHQoKSh7fSwgbWFpbl9kZWZhdWx0cywgTWVzc2FnZUJveC5kZWZhdWx0cywgb3B0aW9ucyksXG4gICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICB9KTtcblxuICAgIG1haW5fc2hvd05leHRNc2coKTtcbiAgfVxufTtcblxubWFpbl9NZXNzYWdlQm94LnNldERlZmF1bHRzID0gZnVuY3Rpb24gKGRlZmF1bHRzKSB7XG4gIG1haW5fTWVzc2FnZUJveC5kZWZhdWx0cyA9IGRlZmF1bHRzO1xufTtcblxubWFpbl9NZXNzYWdlQm94LmFsZXJ0ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zKSB7XG4gIGlmICgodHlwZW9mIHRpdGxlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogbWFpbl90eXBlb2YodGl0bGUpKSA9PT0gJ29iamVjdCcpIHtcbiAgICBvcHRpb25zID0gdGl0bGU7XG4gICAgdGl0bGUgPSAnJztcbiAgfSBlbHNlIGlmICh0aXRsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGl0bGUgPSAnJztcbiAgfVxuICByZXR1cm4gbWFpbl9NZXNzYWdlQm94KG1lcmdlX2RlZmF1bHQoKSh7XG4gICAgdGl0bGU6IHRpdGxlLFxuICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgJHR5cGU6ICdhbGVydCcsXG4gICAgY2xvc2VPblByZXNzRXNjYXBlOiBmYWxzZSxcbiAgICBjbG9zZU9uQ2xpY2tNb2RhbDogZmFsc2VcbiAgfSwgb3B0aW9ucykpO1xufTtcblxubWFpbl9NZXNzYWdlQm94LmNvbmZpcm0gPSBmdW5jdGlvbiAobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnMpIHtcbiAgaWYgKCh0eXBlb2YgdGl0bGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBtYWluX3R5cGVvZih0aXRsZSkpID09PSAnb2JqZWN0Jykge1xuICAgIG9wdGlvbnMgPSB0aXRsZTtcbiAgICB0aXRsZSA9ICcnO1xuICB9IGVsc2UgaWYgKHRpdGxlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aXRsZSA9ICcnO1xuICB9XG4gIHJldHVybiBtYWluX01lc3NhZ2VCb3gobWVyZ2VfZGVmYXVsdCgpKHtcbiAgICB0aXRsZTogdGl0bGUsXG4gICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAkdHlwZTogJ2NvbmZpcm0nLFxuICAgIHNob3dDYW5jZWxCdXR0b246IHRydWVcbiAgfSwgb3B0aW9ucykpO1xufTtcblxubWFpbl9NZXNzYWdlQm94LnByb21wdCA9IGZ1bmN0aW9uIChtZXNzYWdlLCB0aXRsZSwgb3B0aW9ucykge1xuICBpZiAoKHR5cGVvZiB0aXRsZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IG1haW5fdHlwZW9mKHRpdGxlKSkgPT09ICdvYmplY3QnKSB7XG4gICAgb3B0aW9ucyA9IHRpdGxlO1xuICAgIHRpdGxlID0gJyc7XG4gIH0gZWxzZSBpZiAodGl0bGUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRpdGxlID0gJyc7XG4gIH1cbiAgcmV0dXJuIG1haW5fTWVzc2FnZUJveChtZXJnZV9kZWZhdWx0KCkoe1xuICAgIHRpdGxlOiB0aXRsZSxcbiAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIHNob3dDYW5jZWxCdXR0b246IHRydWUsXG4gICAgc2hvd0lucHV0OiB0cnVlLFxuICAgICR0eXBlOiAncHJvbXB0J1xuICB9LCBvcHRpb25zKSk7XG59O1xuXG5tYWluX01lc3NhZ2VCb3guY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIG1haW5faW5zdGFuY2UuZG9DbG9zZSgpO1xuICBtYWluX2luc3RhbmNlLnZpc2libGUgPSBmYWxzZTtcbiAgbXNnUXVldWUgPSBbXTtcbiAgY3VycmVudE1zZyA9IG51bGw7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19tZXNzYWdlX2JveF9zcmNfbWFpbiA9IChtYWluX01lc3NhZ2VCb3gpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UtYm94L2luZGV4LmpzXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1lc3NhZ2VfYm94ID0gKHBhY2thZ2VzX21lc3NhZ2VfYm94X3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGI0NjRjMDYmXG52YXIgYnJlYWRjcnVtYnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzRiNDY0YzA2X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWJyZWFkY3J1bWJcIixcbiAgICAgIGF0dHJzOiB7IFwiYXJpYS1sYWJlbFwiOiBcIkJyZWFkY3J1bWJcIiwgcm9sZTogXCJuYXZpZ2F0aW9uXCIgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIGJyZWFkY3J1bWJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF80YjQ2NGMwNl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuYnJlYWRjcnVtYnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzRiNDY0YzA2X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGI0NjRjMDYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJyZWFkY3J1bWJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxCcmVhZGNydW1iJyxcblxuICBwcm9wczoge1xuICAgIHNlcGFyYXRvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJy8nXG4gICAgfSxcbiAgICBzZXBhcmF0b3JDbGFzczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgcHJvdmlkZTogZnVuY3Rpb24gcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWxCcmVhZGNydW1iOiB0aGlzXG4gICAgfTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCcuZWwtYnJlYWRjcnVtYl9faXRlbScpO1xuICAgIGlmIChpdGVtcy5sZW5ndGgpIHtcbiAgICAgIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3BhZ2UnKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYnJlYWRjcnVtYnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChicmVhZGNydW1idnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgYnJlYWRjcnVtYl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19icmVhZGNydW1idnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBicmVhZGNydW1idnVlX3R5cGVfdGVtcGxhdGVfaWRfNGI0NjRjMDZfcmVuZGVyLFxuICBicmVhZGNydW1idnVlX3R5cGVfdGVtcGxhdGVfaWRfNGI0NjRjMDZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBicmVhZGNydW1iX2FwaTsgfVxuYnJlYWRjcnVtYl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJyZWFkY3J1bWIgPSAoYnJlYWRjcnVtYl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JyZWFkY3J1bWIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYnJlYWRjcnVtYi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGJyZWFkY3J1bWIubmFtZSwgYnJlYWRjcnVtYik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19icmVhZGNydW1iID0gKGJyZWFkY3J1bWIpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWZjZjllYWFjJlxudmFyIGJyZWFkY3J1bWJfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZjZjllYWFjX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1icmVhZGNydW1iX19pdGVtXCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJzcGFuXCIsXG4gICAgICB7XG4gICAgICAgIHJlZjogXCJsaW5rXCIsXG4gICAgICAgIGNsYXNzOiBbXCJlbC1icmVhZGNydW1iX19pbm5lclwiLCBfdm0udG8gPyBcImlzLWxpbmtcIiA6IFwiXCJdLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImxpbmtcIiB9XG4gICAgICB9LFxuICAgICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgICAgMlxuICAgICksXG4gICAgX3ZtLnNlcGFyYXRvckNsYXNzXG4gICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtYnJlYWRjcnVtYl9fc2VwYXJhdG9yXCIsXG4gICAgICAgICAgY2xhc3M6IF92bS5zZXBhcmF0b3JDbGFzc1xuICAgICAgICB9KVxuICAgICAgOiBfYyhcbiAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1icmVhZGNydW1iX19zZXBhcmF0b3JcIixcbiAgICAgICAgICAgIGF0dHJzOiB7IHJvbGU6IFwicHJlc2VudGF0aW9uXCIgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLnNlcGFyYXRvcikpXVxuICAgICAgICApXG4gIF0pXG59XG52YXIgYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfZmNmOWVhYWNfc3RhdGljUmVuZGVyRm5zID0gW11cbmJyZWFkY3J1bWJfaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2ZjZjllYWFjX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mY2Y5ZWFhYyZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQnJlYWRjcnVtYkl0ZW0nLFxuICBwcm9wczoge1xuICAgIHRvOiB7fSxcbiAgICByZXBsYWNlOiBCb29sZWFuXG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcGFyYXRvcjogJycsXG4gICAgICBzZXBhcmF0b3JDbGFzczogJydcbiAgICB9O1xuICB9LFxuXG5cbiAgaW5qZWN0OiBbJ2VsQnJlYWRjcnVtYiddLFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuc2VwYXJhdG9yID0gdGhpcy5lbEJyZWFkY3J1bWIuc2VwYXJhdG9yO1xuICAgIHRoaXMuc2VwYXJhdG9yQ2xhc3MgPSB0aGlzLmVsQnJlYWRjcnVtYi5zZXBhcmF0b3JDbGFzcztcbiAgICB2YXIgbGluayA9IHRoaXMuJHJlZnMubGluaztcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgncm9sZScsICdsaW5rJyk7XG4gICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChfKSB7XG4gICAgICB2YXIgdG8gPSBfdGhpcy50byxcbiAgICAgICAgICAkcm91dGVyID0gX3RoaXMuJHJvdXRlcjtcblxuICAgICAgaWYgKCF0byB8fCAhJHJvdXRlcikgcmV0dXJuO1xuICAgICAgX3RoaXMucmVwbGFjZSA/ICRyb3V0ZXIucmVwbGFjZSh0bykgOiAkcm91dGVyLnB1c2godG8pO1xuICAgIH0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYnJlYWRjcnVtYi9zcmMvYnJlYWRjcnVtYi1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGJyZWFkY3J1bWJfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9icmVhZGNydW1iL3NyYy9icmVhZGNydW1iLWl0ZW0udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgYnJlYWRjcnVtYl9pdGVtX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2JyZWFkY3J1bWJfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgYnJlYWRjcnVtYl9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfZmNmOWVhYWNfcmVuZGVyLFxuICBicmVhZGNydW1iX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9mY2Y5ZWFhY19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGJyZWFkY3J1bWJfaXRlbV9hcGk7IH1cbmJyZWFkY3J1bWJfaXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2JyZWFkY3J1bWIvc3JjL2JyZWFkY3J1bWItaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYnJlYWRjcnVtYl9pdGVtID0gKGJyZWFkY3J1bWJfaXRlbV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JyZWFkY3J1bWItaXRlbS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5icmVhZGNydW1iX2l0ZW0uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChicmVhZGNydW1iX2l0ZW0ubmFtZSwgYnJlYWRjcnVtYl9pdGVtKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2JyZWFkY3J1bWJfaXRlbSA9IChicmVhZGNydW1iX2l0ZW0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hMWI1ZmYzNCZcbnZhciBmb3JtdnVlX3R5cGVfdGVtcGxhdGVfaWRfYTFiNWZmMzRfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZm9ybVwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWZvcm1cIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIF92bS5sYWJlbFBvc2l0aW9uID8gXCJlbC1mb3JtLS1sYWJlbC1cIiArIF92bS5sYWJlbFBvc2l0aW9uIDogXCJcIixcbiAgICAgICAgeyBcImVsLWZvcm0tLWlubGluZVwiOiBfdm0uaW5saW5lIH1cbiAgICAgIF1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBmb3JtdnVlX3R5cGVfdGVtcGxhdGVfaWRfYTFiNWZmMzRfc3RhdGljUmVuZGVyRm5zID0gW11cbmZvcm12dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMWI1ZmYzNF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWExYjVmZjM0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZm9ybXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEZvcm0nLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbEZvcm0nLFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsRm9ybTogdGhpc1xuICAgIH07XG4gIH0sXG5cblxuICBwcm9wczoge1xuICAgIG1vZGVsOiBPYmplY3QsXG4gICAgcnVsZXM6IE9iamVjdCxcbiAgICBsYWJlbFBvc2l0aW9uOiBTdHJpbmcsXG4gICAgbGFiZWxXaWR0aDogU3RyaW5nLFxuICAgIGxhYmVsU3VmZml4OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgaW5saW5lOiBCb29sZWFuLFxuICAgIGlubGluZU1lc3NhZ2U6IEJvb2xlYW4sXG4gICAgc3RhdHVzSWNvbjogQm9vbGVhbixcbiAgICBzaG93TWVzc2FnZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICB2YWxpZGF0ZU9uUnVsZUNoYW5nZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGhpZGVSZXF1aXJlZEFzdGVyaXNrOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgcnVsZXM6IGZ1bmN0aW9uIHJ1bGVzKCkge1xuICAgICAgLy8gcmVtb3ZlIHRoZW4gYWRkIGV2ZW50IGxpc3RlbmVycyBvbiBmb3JtLWl0ZW0gYWZ0ZXIgZm9ybSBydWxlcyBjaGFuZ2VcbiAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGZpZWxkLnJlbW92ZVZhbGlkYXRlRXZlbnRzKCk7XG4gICAgICAgIGZpZWxkLmFkZFZhbGlkYXRlRXZlbnRzKCk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVPblJ1bGVDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZShmdW5jdGlvbiAoKSB7fSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGF1dG9MYWJlbFdpZHRoOiBmdW5jdGlvbiBhdXRvTGFiZWxXaWR0aCgpIHtcbiAgICAgIGlmICghdGhpcy5wb3RlbnRpYWxMYWJlbFdpZHRoQXJyLmxlbmd0aCkgcmV0dXJuIDA7XG4gICAgICB2YXIgbWF4ID0gTWF0aC5tYXguYXBwbHkoTWF0aCwgdGhpcy5wb3RlbnRpYWxMYWJlbFdpZHRoQXJyKTtcbiAgICAgIHJldHVybiBtYXggPyBtYXggKyAncHgnIDogJyc7XG4gICAgfVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgcG90ZW50aWFsTGFiZWxXaWR0aEFycjogW10gLy8gdXNlIHRoaXMgYXJyYXkgdG8gY2FsY3VsYXRlIGF1dG8gd2lkdGhcbiAgICB9O1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLiRvbignZWwuZm9ybS5hZGRGaWVsZCcsIGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgIF90aGlzLmZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHRoaXMuJG9uKCdlbC5mb3JtLnJlbW92ZUZpZWxkJywgZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICBpZiAoZmllbGQucHJvcCkge1xuICAgICAgICBfdGhpcy5maWVsZHMuc3BsaWNlKF90aGlzLmZpZWxkcy5pbmRleE9mKGZpZWxkKSwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0RmllbGRzOiBmdW5jdGlvbiByZXNldEZpZWxkcygpIHtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IFdhcm5dW0Zvcm1dbW9kZWwgaXMgcmVxdWlyZWQgZm9yIHJlc2V0RmllbGRzIHRvIHdvcmsuJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGZpZWxkLnJlc2V0RmllbGQoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xlYXJWYWxpZGF0ZTogZnVuY3Rpb24gY2xlYXJWYWxpZGF0ZSgpIHtcbiAgICAgIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG5cbiAgICAgIHZhciBmaWVsZHMgPSBwcm9wcy5sZW5ndGggPyB0eXBlb2YgcHJvcHMgPT09ICdzdHJpbmcnID8gdGhpcy5maWVsZHMuZmlsdGVyKGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT09IGZpZWxkLnByb3A7XG4gICAgICB9KSA6IHRoaXMuZmllbGRzLmZpbHRlcihmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLmluZGV4T2YoZmllbGQucHJvcCkgPiAtMTtcbiAgICAgIH0pIDogdGhpcy5maWVsZHM7XG4gICAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQuY2xlYXJWYWxpZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdmFsaWRhdGUoY2FsbGJhY2spIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtGb3JtXW1vZGVsIGlzIHJlcXVpcmVkIGZvciB2YWxpZGF0ZSB0byB3b3JrIScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9taXNlID0gdm9pZCAwO1xuICAgICAgLy8gaWYgbm8gY2FsbGJhY2ssIHJldHVybiBwcm9taXNlXG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nICYmIHdpbmRvdy5Qcm9taXNlKSB7XG4gICAgICAgIHByb21pc2UgPSBuZXcgd2luZG93LlByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2sodmFsaWQsIGludmFsaWRGaWVsZHMpIHtcbiAgICAgICAgICAgIHZhbGlkID8gcmVzb2x2ZSh2YWxpZCkgOiByZWplY3QoaW52YWxpZEZpZWxkcyk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWxpZCA9IHRydWU7XG4gICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgLy8g5aaC5p6c6ZyA6KaB6aqM6K+B55qEZmllbGRz5Li656m677yM6LCD55So6aqM6K+B5pe256uL5Yi76L+U5ZueY2FsbGJhY2tcbiAgICAgIGlmICh0aGlzLmZpZWxkcy5sZW5ndGggPT09IDAgJiYgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sodHJ1ZSk7XG4gICAgICB9XG4gICAgICB2YXIgaW52YWxpZEZpZWxkcyA9IHt9O1xuICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgZmllbGQudmFsaWRhdGUoJycsIGZ1bmN0aW9uIChtZXNzYWdlLCBmaWVsZCkge1xuICAgICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpbnZhbGlkRmllbGRzID0gbWVyZ2VfZGVmYXVsdCgpKHt9LCBpbnZhbGlkRmllbGRzLCBmaWVsZCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyAmJiArK2NvdW50ID09PSBfdGhpczIuZmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsaWQsIGludmFsaWRGaWVsZHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZUZpZWxkOiBmdW5jdGlvbiB2YWxpZGF0ZUZpZWxkKHByb3BzLCBjYikge1xuICAgICAgcHJvcHMgPSBbXS5jb25jYXQocHJvcHMpO1xuICAgICAgdmFyIGZpZWxkcyA9IHRoaXMuZmllbGRzLmZpbHRlcihmdW5jdGlvbiAoZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzLmluZGV4T2YoZmllbGQucHJvcCkgIT09IC0xO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWZpZWxkcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXXBsZWFzZSBwYXNzIGNvcnJlY3QgcHJvcHMhJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XG4gICAgICAgIGZpZWxkLnZhbGlkYXRlKCcnLCBjYik7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldExhYmVsV2lkdGhJbmRleDogZnVuY3Rpb24gZ2V0TGFiZWxXaWR0aEluZGV4KHdpZHRoKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIuaW5kZXhPZih3aWR0aCk7XG4gICAgICAvLyBpdCdzIGltcG9zc2libGVcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbRWxlbWVudEZvcm1ddW5wZWN0ZWQgd2lkdGggJywgd2lkdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH0sXG4gICAgcmVnaXN0ZXJMYWJlbFdpZHRoOiBmdW5jdGlvbiByZWdpc3RlckxhYmVsV2lkdGgodmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICh2YWwgJiYgb2xkVmFsKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuZ2V0TGFiZWxXaWR0aEluZGV4KG9sZFZhbCk7XG4gICAgICAgIHRoaXMucG90ZW50aWFsTGFiZWxXaWR0aEFyci5zcGxpY2UoaW5kZXgsIDEsIHZhbCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLnBvdGVudGlhbExhYmVsV2lkdGhBcnIucHVzaCh2YWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVyZWdpc3RlckxhYmVsV2lkdGg6IGZ1bmN0aW9uIGRlcmVnaXN0ZXJMYWJlbFdpZHRoKHZhbCkge1xuICAgICAgdmFyIGluZGV4ID0gdGhpcy5nZXRMYWJlbFdpZHRoSW5kZXgodmFsKTtcbiAgICAgIHRoaXMucG90ZW50aWFsTGFiZWxXaWR0aEFyci5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19mb3JtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGZvcm12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBmb3JtX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2Zvcm12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGZvcm12dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMWI1ZmYzNF9yZW5kZXIsXG4gIGZvcm12dWVfdHlwZV90ZW1wbGF0ZV9pZF9hMWI1ZmYzNF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGZvcm1fYXBpOyB9XG5mb3JtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZm9ybS9zcmMvZm9ybS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Zvcm0gPSAoZm9ybV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX2Zvcm0uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfZm9ybS5uYW1lLCBzcmNfZm9ybSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19mb3JtID0gKHNyY19mb3JtKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iNmYzZGI2YyZcbnZhciBmb3JtX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9iNmYzZGI2Y19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1mb3JtLWl0ZW1cIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBcImVsLWZvcm0taXRlbS0tZmVlZGJhY2tcIjogX3ZtLmVsRm9ybSAmJiBfdm0uZWxGb3JtLnN0YXR1c0ljb24sXG4gICAgICAgICAgXCJpcy1lcnJvclwiOiBfdm0udmFsaWRhdGVTdGF0ZSA9PT0gXCJlcnJvclwiLFxuICAgICAgICAgIFwiaXMtdmFsaWRhdGluZ1wiOiBfdm0udmFsaWRhdGVTdGF0ZSA9PT0gXCJ2YWxpZGF0aW5nXCIsXG4gICAgICAgICAgXCJpcy1zdWNjZXNzXCI6IF92bS52YWxpZGF0ZVN0YXRlID09PSBcInN1Y2Nlc3NcIixcbiAgICAgICAgICBcImlzLXJlcXVpcmVkXCI6IF92bS5pc1JlcXVpcmVkIHx8IF92bS5yZXF1aXJlZCxcbiAgICAgICAgICBcImlzLW5vLWFzdGVyaXNrXCI6IF92bS5lbEZvcm0gJiYgX3ZtLmVsRm9ybS5oaWRlUmVxdWlyZWRBc3Rlcmlza1xuICAgICAgICB9LFxuICAgICAgICBfdm0uc2l6ZUNsYXNzID8gXCJlbC1mb3JtLWl0ZW0tLVwiICsgX3ZtLnNpemVDbGFzcyA6IFwiXCJcbiAgICAgIF1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImxhYmVsLXdyYXBcIixcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBcImlzLWF1dG8td2lkdGhcIjogX3ZtLmxhYmVsU3R5bGUgJiYgX3ZtLmxhYmVsU3R5bGUud2lkdGggPT09IFwiYXV0b1wiLFxuICAgICAgICAgICAgXCJ1cGRhdGUtYWxsXCI6IF92bS5mb3JtLmxhYmVsV2lkdGggPT09IFwiYXV0b1wiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLmxhYmVsIHx8IF92bS4kc2xvdHMubGFiZWxcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWZvcm0taXRlbV9fbGFiZWxcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0ubGFiZWxTdHlsZSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGZvcjogX3ZtLmxhYmVsRm9yIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdChcImxhYmVsXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0ubGFiZWwgKyBfdm0uZm9ybS5sYWJlbFN1ZmZpeCkpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1mb3JtLWl0ZW1fX2NvbnRlbnRcIiwgc3R5bGU6IF92bS5jb250ZW50U3R5bGUgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcInRyYW5zaXRpb25cIixcbiAgICAgICAgICAgIHsgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0gfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnZhbGlkYXRlU3RhdGUgPT09IFwiZXJyb3JcIiAmJlxuICAgICAgICAgICAgICBfdm0uc2hvd01lc3NhZ2UgJiZcbiAgICAgICAgICAgICAgX3ZtLmZvcm0uc2hvd01lc3NhZ2VcbiAgICAgICAgICAgICAgICA/IF92bS5fdChcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1mb3JtLWl0ZW1fX2Vycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1mb3JtLWl0ZW1fX2Vycm9yLS1pbmxpbmVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBfdm0uaW5saW5lTWVzc2FnZSA9PT0gXCJib29sZWFuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfdm0uaW5saW5lTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IChfdm0uZWxGb3JtICYmIF92bS5lbEZvcm0uaW5saW5lTWVzc2FnZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS52YWxpZGF0ZU1lc3NhZ2UpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICB7IGVycm9yOiBfdm0udmFsaWRhdGVNZXNzYWdlIH1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgZm9ybV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfYjZmM2RiNmNfc3RhdGljUmVuZGVyRm5zID0gW11cbmZvcm1faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2I2ZjNkYjZjX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1iNmYzZGI2YyZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImFzeW5jLXZhbGlkYXRvclwiXG52YXIgZXh0ZXJuYWxfYXN5bmNfdmFsaWRhdG9yXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xudmFyIGV4dGVybmFsX2FzeW5jX3ZhbGlkYXRvcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF9hc3luY192YWxpZGF0b3JfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZm9ybS9zcmMvbGFiZWwtd3JhcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbGFiZWxfd3JhcHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIHByb3BzOiB7XG4gICAgaXNBdXRvV2lkdGg6IEJvb2xlYW4sXG4gICAgdXBkYXRlQWxsOiBCb29sZWFuXG4gIH0sXG5cbiAgaW5qZWN0OiBbJ2VsRm9ybScsICdlbEZvcm1JdGVtJ10sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG5cbiAgICB2YXIgc2xvdHMgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIGlmICghc2xvdHMpIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLmlzQXV0b1dpZHRoKSB7XG4gICAgICB2YXIgYXV0b0xhYmVsV2lkdGggPSB0aGlzLmVsRm9ybS5hdXRvTGFiZWxXaWR0aDtcbiAgICAgIHZhciBzdHlsZSA9IHt9O1xuICAgICAgaWYgKGF1dG9MYWJlbFdpZHRoICYmIGF1dG9MYWJlbFdpZHRoICE9PSAnYXV0bycpIHtcbiAgICAgICAgdmFyIG1hcmdpbkxlZnQgPSBwYXJzZUludChhdXRvTGFiZWxXaWR0aCwgMTApIC0gdGhpcy5jb21wdXRlZFdpZHRoO1xuICAgICAgICBpZiAobWFyZ2luTGVmdCkge1xuICAgICAgICAgIHN0eWxlLm1hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0ICsgJ3B4JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1mb3JtLWl0ZW1fX2xhYmVsLXdyYXAnLCBzdHlsZTogc3R5bGUgfSxcbiAgICAgICAgW3Nsb3RzXVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNsb3RzWzBdO1xuICAgIH1cbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRMYWJlbFdpZHRoOiBmdW5jdGlvbiBnZXRMYWJlbFdpZHRoKCkge1xuICAgICAgaWYgKHRoaXMuJGVsICYmIHRoaXMuJGVsLmZpcnN0RWxlbWVudENoaWxkKSB7XG4gICAgICAgIHZhciBjb21wdXRlZFdpZHRoID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy4kZWwuZmlyc3RFbGVtZW50Q2hpbGQpLndpZHRoO1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHBhcnNlRmxvYXQoY29tcHV0ZWRXaWR0aCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSxcbiAgICB1cGRhdGVMYWJlbFdpZHRoOiBmdW5jdGlvbiB1cGRhdGVMYWJlbFdpZHRoKCkge1xuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3VwZGF0ZSc7XG5cbiAgICAgIGlmICh0aGlzLiRzbG90cy5kZWZhdWx0ICYmIHRoaXMuaXNBdXRvV2lkdGggJiYgdGhpcy4kZWwuZmlyc3RFbGVtZW50Q2hpbGQpIHtcbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgICB0aGlzLmNvbXB1dGVkV2lkdGggPSB0aGlzLmdldExhYmVsV2lkdGgoKTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgdGhpcy5lbEZvcm0uZGVyZWdpc3RlckxhYmVsV2lkdGgodGhpcy5jb21wdXRlZFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGNvbXB1dGVkV2lkdGg6IGZ1bmN0aW9uIGNvbXB1dGVkV2lkdGgodmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICh0aGlzLnVwZGF0ZUFsbCkge1xuICAgICAgICB0aGlzLmVsRm9ybS5yZWdpc3RlckxhYmVsV2lkdGgodmFsLCBvbGRWYWwpO1xuICAgICAgICB0aGlzLmVsRm9ybUl0ZW0udXBkYXRlQ29tcHV0ZWRMYWJlbFdpZHRoKHZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXB1dGVkV2lkdGg6IDBcbiAgICB9O1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlTGFiZWxXaWR0aCgndXBkYXRlJyk7XG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgdGhpcy51cGRhdGVMYWJlbFdpZHRoKCd1cGRhdGUnKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnVwZGF0ZUxhYmVsV2lkdGgoJ3JlbW92ZScpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS9zcmMvbGFiZWwtd3JhcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2xhYmVsX3dyYXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobGFiZWxfd3JhcHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb3JtL3NyYy9sYWJlbC13cmFwLnZ1ZVxudmFyIGxhYmVsX3dyYXBfcmVuZGVyLCBsYWJlbF93cmFwX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBsYWJlbF93cmFwX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2xhYmVsX3dyYXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGxhYmVsX3dyYXBfcmVuZGVyLFxuICBsYWJlbF93cmFwX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbGFiZWxfd3JhcF9hcGk7IH1cbmxhYmVsX3dyYXBfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9mb3JtL3NyYy9sYWJlbC13cmFwLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBsYWJlbF93cmFwID0gKGxhYmVsX3dyYXBfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZm9ybS9zcmMvZm9ybS1pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb3JtX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxGb3JtSXRlbScsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsRm9ybUl0ZW0nLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbEZvcm1JdGVtOiB0aGlzXG4gICAgfTtcbiAgfSxcblxuXG4gIGluamVjdDogWydlbEZvcm0nXSxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgbGFiZWxXaWR0aDogU3RyaW5nLFxuICAgIHByb3A6IFN0cmluZyxcbiAgICByZXF1aXJlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHVuZGVmaW5lZFxuICAgIH0sXG4gICAgcnVsZXM6IFtPYmplY3QsIEFycmF5XSxcbiAgICBlcnJvcjogU3RyaW5nLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBTdHJpbmcsXG4gICAgZm9yOiBTdHJpbmcsXG4gICAgaW5saW5lTWVzc2FnZToge1xuICAgICAgdHlwZTogW1N0cmluZywgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgc2hvd01lc3NhZ2U6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBzaXplOiBTdHJpbmdcbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIC8vIHVzZSB0aGlzIGNvbXBvbmVudCB0byBjYWxjdWxhdGUgYXV0byB3aWR0aFxuICAgIExhYmVsV3JhcDogbGFiZWxfd3JhcFxuICB9LFxuICB3YXRjaDoge1xuICAgIGVycm9yOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVNZXNzYWdlID0gdmFsdWU7XG4gICAgICAgIHRoaXMudmFsaWRhdGVTdGF0ZSA9IHZhbHVlID8gJ2Vycm9yJyA6ICcnO1xuICAgICAgfVxuICAgIH0sXG4gICAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHZhbHVlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRlU3RhdGUgPSB2YWx1ZTtcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxGb3I6IGZ1bmN0aW9uIGxhYmVsRm9yKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9yIHx8IHRoaXMucHJvcDtcbiAgICB9LFxuICAgIGxhYmVsU3R5bGU6IGZ1bmN0aW9uIGxhYmVsU3R5bGUoKSB7XG4gICAgICB2YXIgcmV0ID0ge307XG4gICAgICBpZiAodGhpcy5mb3JtLmxhYmVsUG9zaXRpb24gPT09ICd0b3AnKSByZXR1cm4gcmV0O1xuICAgICAgdmFyIGxhYmVsV2lkdGggPSB0aGlzLmxhYmVsV2lkdGggfHwgdGhpcy5mb3JtLmxhYmVsV2lkdGg7XG4gICAgICBpZiAobGFiZWxXaWR0aCkge1xuICAgICAgICByZXQud2lkdGggPSBsYWJlbFdpZHRoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuICAgIGNvbnRlbnRTdHlsZTogZnVuY3Rpb24gY29udGVudFN0eWxlKCkge1xuICAgICAgdmFyIHJldCA9IHt9O1xuICAgICAgdmFyIGxhYmVsID0gdGhpcy5sYWJlbDtcbiAgICAgIGlmICh0aGlzLmZvcm0ubGFiZWxQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy5mb3JtLmlubGluZSkgcmV0dXJuIHJldDtcbiAgICAgIGlmICghbGFiZWwgJiYgIXRoaXMubGFiZWxXaWR0aCAmJiB0aGlzLmlzTmVzdGVkKSByZXR1cm4gcmV0O1xuICAgICAgdmFyIGxhYmVsV2lkdGggPSB0aGlzLmxhYmVsV2lkdGggfHwgdGhpcy5mb3JtLmxhYmVsV2lkdGg7XG4gICAgICBpZiAobGFiZWxXaWR0aCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsV2lkdGggPT09ICdhdXRvJykge1xuICAgICAgICAgIHJldC5tYXJnaW5MZWZ0ID0gdGhpcy5jb21wdXRlZExhYmVsV2lkdGg7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtLmxhYmVsV2lkdGggPT09ICdhdXRvJykge1xuICAgICAgICAgIHJldC5tYXJnaW5MZWZ0ID0gdGhpcy5lbEZvcm0uYXV0b0xhYmVsV2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5tYXJnaW5MZWZ0ID0gbGFiZWxXaWR0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBmb3JtOiBmdW5jdGlvbiBmb3JtKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHZhciBwYXJlbnROYW1lID0gcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG4gICAgICB3aGlsZSAocGFyZW50TmFtZSAhPT0gJ0VsRm9ybScpIHtcbiAgICAgICAgaWYgKHBhcmVudE5hbWUgPT09ICdFbEZvcm1JdGVtJykge1xuICAgICAgICAgIHRoaXMuaXNOZXN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH0sXG4gICAgZmllbGRWYWx1ZTogZnVuY3Rpb24gZmllbGRWYWx1ZSgpIHtcbiAgICAgIHZhciBtb2RlbCA9IHRoaXMuZm9ybS5tb2RlbDtcbiAgICAgIGlmICghbW9kZWwgfHwgIXRoaXMucHJvcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXRoID0gdGhpcy5wcm9wO1xuICAgICAgaWYgKHBhdGguaW5kZXhPZignOicpICE9PSAtMSkge1xuICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC86LywgJy4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIE9iamVjdCh1dGlsX1tcImdldFByb3BCeVBhdGhcIl0pKG1vZGVsLCBwYXRoLCB0cnVlKS52O1xuICAgIH0sXG4gICAgaXNSZXF1aXJlZDogZnVuY3Rpb24gaXNSZXF1aXJlZCgpIHtcbiAgICAgIHZhciBydWxlcyA9IHRoaXMuZ2V0UnVsZXMoKTtcbiAgICAgIHZhciBpc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgICAgIGlmIChydWxlcyAmJiBydWxlcy5sZW5ndGgpIHtcbiAgICAgICAgcnVsZXMuZXZlcnkoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgICAgICBpZiAocnVsZS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1JlcXVpcmVkO1xuICAgIH0sXG4gICAgX2Zvcm1TaXplOiBmdW5jdGlvbiBfZm9ybVNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbEZvcm0uc2l6ZTtcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBlbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZm9ybVNpemU7XG4gICAgfSxcbiAgICBzaXplQ2xhc3M6IGZ1bmN0aW9uIHNpemVDbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWRhdGVTdGF0ZTogJycsXG4gICAgICB2YWxpZGF0ZU1lc3NhZ2U6ICcnLFxuICAgICAgdmFsaWRhdGVEaXNhYmxlZDogZmFsc2UsXG4gICAgICB2YWxpZGF0b3I6IHt9LFxuICAgICAgaXNOZXN0ZWQ6IGZhbHNlLFxuICAgICAgY29tcHV0ZWRMYWJlbFdpZHRoOiAnJ1xuICAgIH07XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlOiBmdW5jdGlvbiB2YWxpZGF0ZSh0cmlnZ2VyKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHV0aWxfW1wibm9vcFwiXTtcblxuICAgICAgdGhpcy52YWxpZGF0ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICB2YXIgcnVsZXMgPSB0aGlzLmdldEZpbHRlcmVkUnVsZSh0cmlnZ2VyKTtcbiAgICAgIGlmICgoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMCkgJiYgdGhpcy5yZXF1aXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnZhbGlkYXRlU3RhdGUgPSAndmFsaWRhdGluZyc7XG5cbiAgICAgIHZhciBkZXNjcmlwdG9yID0ge307XG4gICAgICBpZiAocnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBydWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgICAgZGVsZXRlIHJ1bGUudHJpZ2dlcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBkZXNjcmlwdG9yW3RoaXMucHJvcF0gPSBydWxlcztcblxuICAgICAgdmFyIHZhbGlkYXRvciA9IG5ldyBleHRlcm5hbF9hc3luY192YWxpZGF0b3JfZGVmYXVsdC5hKGRlc2NyaXB0b3IpO1xuICAgICAgdmFyIG1vZGVsID0ge307XG5cbiAgICAgIG1vZGVsW3RoaXMucHJvcF0gPSB0aGlzLmZpZWxkVmFsdWU7XG5cbiAgICAgIHZhbGlkYXRvci52YWxpZGF0ZShtb2RlbCwgeyBmaXJzdEZpZWxkczogdHJ1ZSB9LCBmdW5jdGlvbiAoZXJyb3JzLCBpbnZhbGlkRmllbGRzKSB7XG4gICAgICAgIF90aGlzLnZhbGlkYXRlU3RhdGUgPSAhZXJyb3JzID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJztcbiAgICAgICAgX3RoaXMudmFsaWRhdGVNZXNzYWdlID0gZXJyb3JzID8gZXJyb3JzWzBdLm1lc3NhZ2UgOiAnJztcblxuICAgICAgICBjYWxsYmFjayhfdGhpcy52YWxpZGF0ZU1lc3NhZ2UsIGludmFsaWRGaWVsZHMpO1xuICAgICAgICBfdGhpcy5lbEZvcm0gJiYgX3RoaXMuZWxGb3JtLiRlbWl0KCd2YWxpZGF0ZScsIF90aGlzLnByb3AsICFlcnJvcnMsIF90aGlzLnZhbGlkYXRlTWVzc2FnZSB8fCBudWxsKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xlYXJWYWxpZGF0ZTogZnVuY3Rpb24gY2xlYXJWYWxpZGF0ZSgpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVTdGF0ZSA9ICcnO1xuICAgICAgdGhpcy52YWxpZGF0ZU1lc3NhZ2UgPSAnJztcbiAgICAgIHRoaXMudmFsaWRhdGVEaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0sXG4gICAgcmVzZXRGaWVsZDogZnVuY3Rpb24gcmVzZXRGaWVsZCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLnZhbGlkYXRlU3RhdGUgPSAnJztcbiAgICAgIHRoaXMudmFsaWRhdGVNZXNzYWdlID0gJyc7XG5cbiAgICAgIHZhciBtb2RlbCA9IHRoaXMuZm9ybS5tb2RlbDtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZmllbGRWYWx1ZTtcbiAgICAgIHZhciBwYXRoID0gdGhpcy5wcm9wO1xuICAgICAgaWYgKHBhdGguaW5kZXhPZignOicpICE9PSAtMSkge1xuICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC86LywgJy4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3AgPSBPYmplY3QodXRpbF9bXCJnZXRQcm9wQnlQYXRoXCJdKShtb2RlbCwgcGF0aCwgdHJ1ZSk7XG5cbiAgICAgIHRoaXMudmFsaWRhdGVEaXNhYmxlZCA9IHRydWU7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcHJvcC5vW3Byb3Aua10gPSBbXS5jb25jYXQodGhpcy5pbml0aWFsVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvcC5vW3Byb3Aua10gPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gcmVzZXQgdmFsaWRhdGVEaXNhYmxlZCBhZnRlciBvbkZpZWxkQ2hhbmdlIHRyaWdnZXJlZFxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIudmFsaWRhdGVEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFRpbWVTZWxlY3QnLCAnZmllbGRSZXNldCcsIHRoaXMuaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIGdldFJ1bGVzOiBmdW5jdGlvbiBnZXRSdWxlcygpIHtcbiAgICAgIHZhciBmb3JtUnVsZXMgPSB0aGlzLmZvcm0ucnVsZXM7XG4gICAgICB2YXIgc2VsZlJ1bGVzID0gdGhpcy5ydWxlcztcbiAgICAgIHZhciByZXF1aXJlZFJ1bGUgPSB0aGlzLnJlcXVpcmVkICE9PSB1bmRlZmluZWQgPyB7IHJlcXVpcmVkOiAhIXRoaXMucmVxdWlyZWQgfSA6IFtdO1xuXG4gICAgICB2YXIgcHJvcCA9IE9iamVjdCh1dGlsX1tcImdldFByb3BCeVBhdGhcIl0pKGZvcm1SdWxlcywgdGhpcy5wcm9wIHx8ICcnKTtcbiAgICAgIGZvcm1SdWxlcyA9IGZvcm1SdWxlcyA/IHByb3Aub1t0aGlzLnByb3AgfHwgJyddIHx8IHByb3AudiA6IFtdO1xuXG4gICAgICByZXR1cm4gW10uY29uY2F0KHNlbGZSdWxlcyB8fCBmb3JtUnVsZXMgfHwgW10pLmNvbmNhdChyZXF1aXJlZFJ1bGUpO1xuICAgIH0sXG4gICAgZ2V0RmlsdGVyZWRSdWxlOiBmdW5jdGlvbiBnZXRGaWx0ZXJlZFJ1bGUodHJpZ2dlcikge1xuICAgICAgdmFyIHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpO1xuXG4gICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGZ1bmN0aW9uIChydWxlKSB7XG4gICAgICAgIGlmICghcnVsZS50cmlnZ2VyIHx8IHRyaWdnZXIgPT09ICcnKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocnVsZS50cmlnZ2VyKSkge1xuICAgICAgICAgIHJldHVybiBydWxlLnRyaWdnZXIuaW5kZXhPZih0cmlnZ2VyKSA+IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBydWxlLnRyaWdnZXIgPT09IHRyaWdnZXI7XG4gICAgICAgIH1cbiAgICAgIH0pLm1hcChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VfZGVmYXVsdCgpKHt9LCBydWxlKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgb25GaWVsZEJsdXI6IGZ1bmN0aW9uIG9uRmllbGRCbHVyKCkge1xuICAgICAgdGhpcy52YWxpZGF0ZSgnYmx1cicpO1xuICAgIH0sXG4gICAgb25GaWVsZENoYW5nZTogZnVuY3Rpb24gb25GaWVsZENoYW5nZSgpIHtcbiAgICAgIGlmICh0aGlzLnZhbGlkYXRlRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy52YWxpZGF0ZSgnY2hhbmdlJyk7XG4gICAgfSxcbiAgICB1cGRhdGVDb21wdXRlZExhYmVsV2lkdGg6IGZ1bmN0aW9uIHVwZGF0ZUNvbXB1dGVkTGFiZWxXaWR0aCh3aWR0aCkge1xuICAgICAgdGhpcy5jb21wdXRlZExhYmVsV2lkdGggPSB3aWR0aCA/IHdpZHRoICsgJ3B4JyA6ICcnO1xuICAgIH0sXG4gICAgYWRkVmFsaWRhdGVFdmVudHM6IGZ1bmN0aW9uIGFkZFZhbGlkYXRlRXZlbnRzKCkge1xuICAgICAgdmFyIHJ1bGVzID0gdGhpcy5nZXRSdWxlcygpO1xuXG4gICAgICBpZiAocnVsZXMubGVuZ3RoIHx8IHRoaXMucmVxdWlyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLiRvbignZWwuZm9ybS5ibHVyJywgdGhpcy5vbkZpZWxkQmx1cik7XG4gICAgICAgIHRoaXMuJG9uKCdlbC5mb3JtLmNoYW5nZScsIHRoaXMub25GaWVsZENoYW5nZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVWYWxpZGF0ZUV2ZW50czogZnVuY3Rpb24gcmVtb3ZlVmFsaWRhdGVFdmVudHMoKSB7XG4gICAgICB0aGlzLiRvZmYoKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMucHJvcCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtJywgJ2VsLmZvcm0uYWRkRmllbGQnLCBbdGhpc10pO1xuXG4gICAgICB2YXIgaW5pdGlhbFZhbHVlID0gdGhpcy5maWVsZFZhbHVlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5pdGlhbFZhbHVlKSkge1xuICAgICAgICBpbml0aWFsVmFsdWUgPSBbXS5jb25jYXQoaW5pdGlhbFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnaW5pdGlhbFZhbHVlJywge1xuICAgICAgICB2YWx1ZTogaW5pdGlhbFZhbHVlXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hZGRWYWxpZGF0ZUV2ZW50cygpO1xuICAgIH1cbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm0nLCAnZWwuZm9ybS5yZW1vdmVGaWVsZCcsIFt0aGlzXSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9mb3JtL3NyYy9mb3JtLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19mb3JtX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZm9ybV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvcm0vc3JjL2Zvcm0taXRlbS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBmb3JtX2l0ZW1fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfZm9ybV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBmb3JtX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF9iNmYzZGI2Y19yZW5kZXIsXG4gIGZvcm1faXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkX2I2ZjNkYjZjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZm9ybV9pdGVtX2FwaTsgfVxuZm9ybV9pdGVtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZm9ybS9zcmMvZm9ybS1pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBmb3JtX2l0ZW0gPSAoZm9ybV9pdGVtX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9ybS1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZvcm1faXRlbS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGZvcm1faXRlbS5uYW1lLCBmb3JtX2l0ZW0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfZm9ybV9pdGVtID0gKGZvcm1faXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1iYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIwMzFmMzNhJlxudmFyIHRhYl9iYXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMDMxZjMzYV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwge1xuICAgIHN0YXRpY0NsYXNzOiBcImVsLXRhYnNfX2FjdGl2ZS1iYXJcIixcbiAgICBjbGFzczogXCJpcy1cIiArIF92bS5yb290VGFicy50YWJQb3NpdGlvbixcbiAgICBzdHlsZTogX3ZtLmJhclN0eWxlXG4gIH0pXG59XG52YXIgdGFiX2JhcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMzFmMzNhX3N0YXRpY1JlbmRlckZucyA9IFtdXG50YWJfYmFydnVlX3R5cGVfdGVtcGxhdGVfaWRfMjAzMWYzM2FfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMDMxZjMzYSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFiX2JhcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdUYWJCYXInLFxuXG4gIHByb3BzOiB7XG4gICAgdGFiczogQXJyYXlcbiAgfSxcblxuICBpbmplY3Q6IFsncm9vdFRhYnMnXSxcblxuICBjb21wdXRlZDoge1xuICAgIGJhclN0eWxlOiB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciB0YWJTaXplID0gMDtcbiAgICAgICAgdmFyIHNpemVOYW1lID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKSAhPT0gLTEgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgICAgIHZhciBzaXplRGlyID0gc2l6ZU5hbWUgPT09ICd3aWR0aCcgPyAneCcgOiAneSc7XG4gICAgICAgIHZhciBmaXJzdFVwcGVyQ2FzZSA9IGZ1bmN0aW9uIGZpcnN0VXBwZXJDYXNlKHN0cikge1xuICAgICAgICAgIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oIHxeKVthLXpdL2csIGZ1bmN0aW9uIChMKSB7XG4gICAgICAgICAgICByZXR1cm4gTC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRhYnMuZXZlcnkoZnVuY3Rpb24gKHRhYiwgaW5kZXgpIHtcbiAgICAgICAgICB2YXIgJGVsID0gT2JqZWN0KHV0aWxfW1wiYXJyYXlGaW5kXCJdKShfdGhpcy4kcGFyZW50LiRyZWZzLnRhYnMgfHwgW10sIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdC5pZC5yZXBsYWNlKCd0YWItJywgJycpID09PSB0YWIucGFuZU5hbWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKCEkZWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRhYi5hY3RpdmUpIHtcbiAgICAgICAgICAgIG9mZnNldCArPSAkZWxbJ2NsaWVudCcgKyBmaXJzdFVwcGVyQ2FzZShzaXplTmFtZSldO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRhYlNpemUgPSAkZWxbJ2NsaWVudCcgKyBmaXJzdFVwcGVyQ2FzZShzaXplTmFtZSldO1xuICAgICAgICAgICAgdmFyIHRhYlN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCRlbCk7XG4gICAgICAgICAgICBpZiAoc2l6ZU5hbWUgPT09ICd3aWR0aCcgJiYgX3RoaXMudGFicy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHRhYlNpemUgLT0gcGFyc2VGbG9hdCh0YWJTdHlsZXMucGFkZGluZ0xlZnQpICsgcGFyc2VGbG9hdCh0YWJTdHlsZXMucGFkZGluZ1JpZ2h0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaXplTmFtZSA9PT0gJ3dpZHRoJykge1xuICAgICAgICAgICAgICBvZmZzZXQgKz0gcGFyc2VGbG9hdCh0YWJTdHlsZXMucGFkZGluZ0xlZnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIHRyYW5zZm9ybSA9ICd0cmFuc2xhdGUnICsgZmlyc3RVcHBlckNhc2Uoc2l6ZURpcikgKyAnKCcgKyBvZmZzZXQgKyAncHgpJztcbiAgICAgICAgc3R5bGVbc2l6ZU5hbWVdID0gdGFiU2l6ZSArICdweCc7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgICAgc3R5bGUubXNUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgIHN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9zcmMvdGFiLWJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhYl9iYXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAodGFiX2JhcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRhYl9iYXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdGFiX2JhcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGFiX2JhcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMzFmMzNhX3JlbmRlcixcbiAgdGFiX2JhcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzIwMzFmMzNhX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdGFiX2Jhcl9hcGk7IH1cbnRhYl9iYXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90YWJzL3NyYy90YWItYmFyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWJfYmFyID0gKHRhYl9iYXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLW5hdi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxudmFyIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZSA9IGZ1bmN0aW9uIGZpcnN0VXBwZXJDYXNlKHN0cikge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKCB8XilbYS16XS9nLCBmdW5jdGlvbiAoTCkge1xuICAgIHJldHVybiBMLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdUYWJOYXYnLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBUYWJCYXI6IHRhYl9iYXJcbiAgfSxcblxuICBpbmplY3Q6IFsncm9vdFRhYnMnXSxcblxuICBwcm9wczoge1xuICAgIHBhbmVzOiBBcnJheSxcbiAgICBjdXJyZW50TmFtZTogU3RyaW5nLFxuICAgIGVkaXRhYmxlOiBCb29sZWFuLFxuICAgIG9uVGFiQ2xpY2s6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbm9vcFxuICAgIH0sXG4gICAgb25UYWJSZW1vdmU6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbm9vcFxuICAgIH0sXG4gICAgdHlwZTogU3RyaW5nLFxuICAgIHN0cmV0Y2g6IEJvb2xlYW5cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzY3JvbGxhYmxlOiBmYWxzZSxcbiAgICAgIG5hdk9mZnNldDogMCxcbiAgICAgIGlzRm9jdXM6IGZhbHNlLFxuICAgICAgZm9jdXNhYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmF2U3R5bGU6IGZ1bmN0aW9uIG5hdlN0eWxlKCkge1xuICAgICAgdmFyIGRpciA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YodGhpcy5yb290VGFicy50YWJQb3NpdGlvbikgIT09IC0xID8gJ1gnIDogJ1knO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlJyArIGRpciArICcoLScgKyB0aGlzLm5hdk9mZnNldCArICdweCknXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2l6ZU5hbWU6IGZ1bmN0aW9uIHNpemVOYW1lKCkge1xuICAgICAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YodGhpcy5yb290VGFicy50YWJQb3NpdGlvbikgIT09IC0xID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2Nyb2xsUHJldjogZnVuY3Rpb24gc2Nyb2xsUHJldigpIHtcbiAgICAgIHZhciBjb250YWluZXJTaXplID0gdGhpcy4kcmVmcy5uYXZTY3JvbGxbJ29mZnNldCcgKyB0YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZmlyc3RVcHBlckNhc2UodGhpcy5zaXplTmFtZSldO1xuICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLm5hdk9mZnNldDtcblxuICAgICAgaWYgKCFjdXJyZW50T2Zmc2V0KSByZXR1cm47XG5cbiAgICAgIHZhciBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0ID4gY29udGFpbmVyU2l6ZSA/IGN1cnJlbnRPZmZzZXQgLSBjb250YWluZXJTaXplIDogMDtcblxuICAgICAgdGhpcy5uYXZPZmZzZXQgPSBuZXdPZmZzZXQ7XG4gICAgfSxcbiAgICBzY3JvbGxOZXh0OiBmdW5jdGlvbiBzY3JvbGxOZXh0KCkge1xuICAgICAgdmFyIG5hdlNpemUgPSB0aGlzLiRyZWZzLm5hdlsnb2Zmc2V0JyArIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZSh0aGlzLnNpemVOYW1lKV07XG4gICAgICB2YXIgY29udGFpbmVyU2l6ZSA9IHRoaXMuJHJlZnMubmF2U2Nyb2xsWydvZmZzZXQnICsgdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2ZpcnN0VXBwZXJDYXNlKHRoaXMuc2l6ZU5hbWUpXTtcbiAgICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gdGhpcy5uYXZPZmZzZXQ7XG5cbiAgICAgIGlmIChuYXZTaXplIC0gY3VycmVudE9mZnNldCA8PSBjb250YWluZXJTaXplKSByZXR1cm47XG5cbiAgICAgIHZhciBuZXdPZmZzZXQgPSBuYXZTaXplIC0gY3VycmVudE9mZnNldCA+IGNvbnRhaW5lclNpemUgKiAyID8gY3VycmVudE9mZnNldCArIGNvbnRhaW5lclNpemUgOiBuYXZTaXplIC0gY29udGFpbmVyU2l6ZTtcblxuICAgICAgdGhpcy5uYXZPZmZzZXQgPSBuZXdPZmZzZXQ7XG4gICAgfSxcbiAgICBzY3JvbGxUb0FjdGl2ZVRhYjogZnVuY3Rpb24gc2Nyb2xsVG9BY3RpdmVUYWIoKSB7XG4gICAgICBpZiAoIXRoaXMuc2Nyb2xsYWJsZSkgcmV0dXJuO1xuICAgICAgdmFyIG5hdiA9IHRoaXMuJHJlZnMubmF2O1xuICAgICAgdmFyIGFjdGl2ZVRhYiA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5pcy1hY3RpdmUnKTtcbiAgICAgIGlmICghYWN0aXZlVGFiKSByZXR1cm47XG4gICAgICB2YXIgbmF2U2Nyb2xsID0gdGhpcy4kcmVmcy5uYXZTY3JvbGw7XG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZih0aGlzLnJvb3RUYWJzLnRhYlBvc2l0aW9uKSAhPT0gLTE7XG4gICAgICB2YXIgYWN0aXZlVGFiQm91bmRpbmcgPSBhY3RpdmVUYWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgbmF2U2Nyb2xsQm91bmRpbmcgPSBuYXZTY3JvbGwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgbWF4T2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gbmF2Lm9mZnNldFdpZHRoIC0gbmF2U2Nyb2xsQm91bmRpbmcud2lkdGggOiBuYXYub2Zmc2V0SGVpZ2h0IC0gbmF2U2Nyb2xsQm91bmRpbmcuaGVpZ2h0O1xuICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLm5hdk9mZnNldDtcbiAgICAgIHZhciBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0O1xuXG4gICAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgIGlmIChhY3RpdmVUYWJCb3VuZGluZy5sZWZ0IDwgbmF2U2Nyb2xsQm91bmRpbmcubGVmdCkge1xuICAgICAgICAgIG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQgLSAobmF2U2Nyb2xsQm91bmRpbmcubGVmdCAtIGFjdGl2ZVRhYkJvdW5kaW5nLmxlZnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3RpdmVUYWJCb3VuZGluZy5yaWdodCA+IG5hdlNjcm9sbEJvdW5kaW5nLnJpZ2h0KSB7XG4gICAgICAgICAgbmV3T2Zmc2V0ID0gY3VycmVudE9mZnNldCArIGFjdGl2ZVRhYkJvdW5kaW5nLnJpZ2h0IC0gbmF2U2Nyb2xsQm91bmRpbmcucmlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhY3RpdmVUYWJCb3VuZGluZy50b3AgPCBuYXZTY3JvbGxCb3VuZGluZy50b3ApIHtcbiAgICAgICAgICBuZXdPZmZzZXQgPSBjdXJyZW50T2Zmc2V0IC0gKG5hdlNjcm9sbEJvdW5kaW5nLnRvcCAtIGFjdGl2ZVRhYkJvdW5kaW5nLnRvcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGl2ZVRhYkJvdW5kaW5nLmJvdHRvbSA+IG5hdlNjcm9sbEJvdW5kaW5nLmJvdHRvbSkge1xuICAgICAgICAgIG5ld09mZnNldCA9IGN1cnJlbnRPZmZzZXQgKyAoYWN0aXZlVGFiQm91bmRpbmcuYm90dG9tIC0gbmF2U2Nyb2xsQm91bmRpbmcuYm90dG9tKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV3T2Zmc2V0ID0gTWF0aC5tYXgobmV3T2Zmc2V0LCAwKTtcbiAgICAgIHRoaXMubmF2T2Zmc2V0ID0gTWF0aC5taW4obmV3T2Zmc2V0LCBtYXhPZmZzZXQpO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlZnMubmF2KSByZXR1cm47XG4gICAgICB2YXIgc2l6ZU5hbWUgPSB0aGlzLnNpemVOYW1lO1xuICAgICAgdmFyIG5hdlNpemUgPSB0aGlzLiRyZWZzLm5hdlsnb2Zmc2V0JyArIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZShzaXplTmFtZSldO1xuICAgICAgdmFyIGNvbnRhaW5lclNpemUgPSB0aGlzLiRyZWZzLm5hdlNjcm9sbFsnb2Zmc2V0JyArIHRhYl9uYXZ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19maXJzdFVwcGVyQ2FzZShzaXplTmFtZSldO1xuICAgICAgdmFyIGN1cnJlbnRPZmZzZXQgPSB0aGlzLm5hdk9mZnNldDtcblxuICAgICAgaWYgKGNvbnRhaW5lclNpemUgPCBuYXZTaXplKSB7XG4gICAgICAgIHZhciBfY3VycmVudE9mZnNldCA9IHRoaXMubmF2T2Zmc2V0O1xuICAgICAgICB0aGlzLnNjcm9sbGFibGUgPSB0aGlzLnNjcm9sbGFibGUgfHwge307XG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZS5wcmV2ID0gX2N1cnJlbnRPZmZzZXQ7XG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZS5uZXh0ID0gX2N1cnJlbnRPZmZzZXQgKyBjb250YWluZXJTaXplIDwgbmF2U2l6ZTtcbiAgICAgICAgaWYgKG5hdlNpemUgLSBfY3VycmVudE9mZnNldCA8IGNvbnRhaW5lclNpemUpIHtcbiAgICAgICAgICB0aGlzLm5hdk9mZnNldCA9IG5hdlNpemUgLSBjb250YWluZXJTaXplO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjcm9sbGFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGN1cnJlbnRPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgdGhpcy5uYXZPZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjaGFuZ2VUYWI6IGZ1bmN0aW9uIGNoYW5nZVRhYihlKSB7XG4gICAgICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZTtcbiAgICAgIHZhciBuZXh0SW5kZXggPSB2b2lkIDA7XG4gICAgICB2YXIgY3VycmVudEluZGV4ID0gdm9pZCAwLFxuICAgICAgICAgIHRhYkxpc3QgPSB2b2lkIDA7XG4gICAgICBpZiAoWzM3LCAzOCwgMzksIDQwXS5pbmRleE9mKGtleUNvZGUpICE9PSAtMSkge1xuICAgICAgICAvLyDlt6blj7PkuIrkuIvplK7mm7TmjaJ0YWJcbiAgICAgICAgdGFiTGlzdCA9IGUuY3VycmVudFRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT10YWJdJyk7XG4gICAgICAgIGN1cnJlbnRJbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwodGFiTGlzdCwgZS50YXJnZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGtleUNvZGUgPT09IDM3IHx8IGtleUNvZGUgPT09IDM4KSB7XG4gICAgICAgIC8vIGxlZnRcbiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgIC8vIGZpcnN0XG4gICAgICAgICAgbmV4dEluZGV4ID0gdGFiTGlzdC5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJpZ2h0XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPCB0YWJMaXN0Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBub3QgbGFzdFxuICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGFiTGlzdFtuZXh0SW5kZXhdLmZvY3VzKCk7IC8vIOaUueWPmOeEpueCueWFg+e0oFxuICAgICAgdGFiTGlzdFtuZXh0SW5kZXhdLmNsaWNrKCk7IC8vIOmAieS4reS4i+S4gOS4qnRhYlxuICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgIH0sXG4gICAgc2V0Rm9jdXM6IGZ1bmN0aW9uIHNldEZvY3VzKCkge1xuICAgICAgaWYgKHRoaXMuZm9jdXNhYmxlKSB7XG4gICAgICAgIHRoaXMuaXNGb2N1cyA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW1vdmVGb2N1czogZnVuY3Rpb24gcmVtb3ZlRm9jdXMoKSB7XG4gICAgICB0aGlzLmlzRm9jdXMgPSBmYWxzZTtcbiAgICB9LFxuICAgIHZpc2liaWxpdHlDaGFuZ2VIYW5kbGVyOiBmdW5jdGlvbiB2aXNpYmlsaXR5Q2hhbmdlSGFuZGxlcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciB2aXNpYmlsaXR5ID0gZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgICAgaWYgKHZpc2liaWxpdHkgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgIHRoaXMuZm9jdXNhYmxlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHZpc2liaWxpdHkgPT09ICd2aXNpYmxlJykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5mb2N1c2FibGUgPSB0cnVlO1xuICAgICAgICB9LCA1MCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB3aW5kb3dCbHVySGFuZGxlcjogZnVuY3Rpb24gd2luZG93Qmx1ckhhbmRsZXIoKSB7XG4gICAgICB0aGlzLmZvY3VzYWJsZSA9IGZhbHNlO1xuICAgIH0sXG4gICAgd2luZG93Rm9jdXNIYW5kbGVyOiBmdW5jdGlvbiB3aW5kb3dGb2N1c0hhbmRsZXIoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5mb2N1c2FibGUgPSB0cnVlO1xuICAgICAgfSwgNTApO1xuICAgIH1cbiAgfSxcblxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgICBwYW5lcyA9IHRoaXMucGFuZXMsXG4gICAgICAgIGVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZSxcbiAgICAgICAgc3RyZXRjaCA9IHRoaXMuc3RyZXRjaCxcbiAgICAgICAgb25UYWJDbGljayA9IHRoaXMub25UYWJDbGljayxcbiAgICAgICAgb25UYWJSZW1vdmUgPSB0aGlzLm9uVGFiUmVtb3ZlLFxuICAgICAgICBuYXZTdHlsZSA9IHRoaXMubmF2U3R5bGUsXG4gICAgICAgIHNjcm9sbGFibGUgPSB0aGlzLnNjcm9sbGFibGUsXG4gICAgICAgIHNjcm9sbE5leHQgPSB0aGlzLnNjcm9sbE5leHQsXG4gICAgICAgIHNjcm9sbFByZXYgPSB0aGlzLnNjcm9sbFByZXYsXG4gICAgICAgIGNoYW5nZVRhYiA9IHRoaXMuY2hhbmdlVGFiLFxuICAgICAgICBzZXRGb2N1cyA9IHRoaXMuc2V0Rm9jdXMsXG4gICAgICAgIHJlbW92ZUZvY3VzID0gdGhpcy5yZW1vdmVGb2N1cztcblxuICAgIHZhciBzY3JvbGxCdG4gPSBzY3JvbGxhYmxlID8gW2goXG4gICAgICAnc3BhbicsXG4gICAgICB7ICdjbGFzcyc6IFsnZWwtdGFic19fbmF2LXByZXYnLCBzY3JvbGxhYmxlLnByZXYgPyAnJyA6ICdpcy1kaXNhYmxlZCddLCBvbjoge1xuICAgICAgICAgICdjbGljayc6IHNjcm9sbFByZXZcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1hcnJvdy1sZWZ0JyB9KV1cbiAgICApLCBoKFxuICAgICAgJ3NwYW4nLFxuICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdi1uZXh0Jywgc2Nyb2xsYWJsZS5uZXh0ID8gJycgOiAnaXMtZGlzYWJsZWQnXSwgb246IHtcbiAgICAgICAgICAnY2xpY2snOiBzY3JvbGxOZXh0XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbaCgnaScsIHsgJ2NsYXNzJzogJ2VsLWljb24tYXJyb3ctcmlnaHQnIH0pXVxuICAgICldIDogbnVsbDtcblxuICAgIHZhciB0YWJzID0gdGhpcy5fbChwYW5lcywgZnVuY3Rpb24gKHBhbmUsIGluZGV4KSB7XG4gICAgICB2YXIgX3JlZjtcblxuICAgICAgdmFyIHRhYk5hbWUgPSBwYW5lLm5hbWUgfHwgcGFuZS5pbmRleCB8fCBpbmRleDtcbiAgICAgIHZhciBjbG9zYWJsZSA9IHBhbmUuaXNDbG9zYWJsZSB8fCBlZGl0YWJsZTtcblxuICAgICAgcGFuZS5pbmRleCA9ICcnICsgaW5kZXg7XG5cbiAgICAgIHZhciBidG5DbG9zZSA9IGNsb3NhYmxlID8gaCgnc3BhbicsIHsgJ2NsYXNzJzogJ2VsLWljb24tY2xvc2UnLCBvbjoge1xuICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKGV2KSB7XG4gICAgICAgICAgICBvblRhYlJlbW92ZShwYW5lLCBldik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KSA6IG51bGw7XG5cbiAgICAgIHZhciB0YWJMYWJlbENvbnRlbnQgPSBwYW5lLiRzbG90cy5sYWJlbCB8fCBwYW5lLmxhYmVsO1xuICAgICAgdmFyIHRhYmluZGV4ID0gcGFuZS5hY3RpdmUgPyAwIDogLTE7XG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICAnY2xhc3MnOiAoX3JlZiA9IHtcbiAgICAgICAgICAgICdlbC10YWJzX19pdGVtJzogdHJ1ZVxuICAgICAgICAgIH0sIF9yZWZbJ2lzLScgKyBfdGhpczMucm9vdFRhYnMudGFiUG9zaXRpb25dID0gdHJ1ZSwgX3JlZlsnaXMtYWN0aXZlJ10gPSBwYW5lLmFjdGl2ZSwgX3JlZlsnaXMtZGlzYWJsZWQnXSA9IHBhbmUuZGlzYWJsZWQsIF9yZWZbJ2lzLWNsb3NhYmxlJ10gPSBjbG9zYWJsZSwgX3JlZlsnaXMtZm9jdXMnXSA9IF90aGlzMy5pc0ZvY3VzLCBfcmVmKSxcbiAgICAgICAgICBhdHRyczogeyBpZDogJ3RhYi0nICsgdGFiTmFtZSxcblxuICAgICAgICAgICAgJ2FyaWEtY29udHJvbHMnOiAncGFuZS0nICsgdGFiTmFtZSxcbiAgICAgICAgICAgIHJvbGU6ICd0YWInLFxuICAgICAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBwYW5lLmFjdGl2ZSxcblxuICAgICAgICAgICAgdGFiaW5kZXg6IHRhYmluZGV4XG4gICAgICAgICAgfSxcbiAgICAgICAgICBrZXk6ICd0YWItJyArIHRhYk5hbWUsIHJlZjogJ3RhYnMnLCByZWZJbkZvcjogdHJ1ZSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2ZvY3VzJzogZnVuY3Rpb24gZm9jdXMoKSB7XG4gICAgICAgICAgICAgIHNldEZvY3VzKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2JsdXInOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgICAgICAgICByZW1vdmVGb2N1cygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdjbGljayc6IGZ1bmN0aW9uIGNsaWNrKGV2KSB7XG4gICAgICAgICAgICAgIHJlbW92ZUZvY3VzKCk7b25UYWJDbGljayhwYW5lLCB0YWJOYW1lLCBldik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2tleWRvd24nOiBmdW5jdGlvbiBrZXlkb3duKGV2KSB7XG4gICAgICAgICAgICAgIGlmIChjbG9zYWJsZSAmJiAoZXYua2V5Q29kZSA9PT0gNDYgfHwgZXYua2V5Q29kZSA9PT0gOCkpIHtcbiAgICAgICAgICAgICAgICBvblRhYlJlbW92ZShwYW5lLCBldik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFt0YWJMYWJlbENvbnRlbnQsIGJ0bkNsb3NlXVxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdi13cmFwJywgc2Nyb2xsYWJsZSA/ICdpcy1zY3JvbGxhYmxlJyA6ICcnLCAnaXMtJyArIHRoaXMucm9vdFRhYnMudGFiUG9zaXRpb25dIH0sXG4gICAgICBbc2Nyb2xsQnRuLCBoKFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdi1zY3JvbGwnXSwgcmVmOiAnbmF2U2Nyb2xsJyB9LFxuICAgICAgICBbaChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAnY2xhc3MnOiBbJ2VsLXRhYnNfX25hdicsICdpcy0nICsgdGhpcy5yb290VGFicy50YWJQb3NpdGlvbiwgc3RyZXRjaCAmJiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHRoaXMucm9vdFRhYnMudGFiUG9zaXRpb24pICE9PSAtMSA/ICdpcy1zdHJldGNoJyA6ICcnXSxcbiAgICAgICAgICAgIHJlZjogJ25hdicsXG4gICAgICAgICAgICBzdHlsZTogbmF2U3R5bGUsXG4gICAgICAgICAgICBhdHRyczogeyByb2xlOiAndGFibGlzdCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAna2V5ZG93bic6IGNoYW5nZVRhYlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgWyF0eXBlID8gaCgndGFiLWJhcicsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7IHRhYnM6IHBhbmVzIH1cbiAgICAgICAgICB9KSA6IG51bGwsIHRhYnNdXG4gICAgICAgICldXG4gICAgICApXVxuICAgICk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICBPYmplY3QocmVzaXplX2V2ZW50X1tcImFkZFJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy51cGRhdGUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLnZpc2liaWxpdHlDaGFuZ2VIYW5kbGVyKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMud2luZG93Qmx1ckhhbmRsZXIpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMud2luZG93Rm9jdXNIYW5kbGVyKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzNC5zY3JvbGxUb0FjdGl2ZVRhYigpO1xuICAgIH0sIDApO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLiRlbCAmJiB0aGlzLnVwZGF0ZSkgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJyZW1vdmVSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMudXBkYXRlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgdGhpcy52aXNpYmlsaXR5Q2hhbmdlSGFuZGxlcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLndpbmRvd0JsdXJIYW5kbGVyKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLndpbmRvd0ZvY3VzSGFuZGxlcik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItbmF2LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0YWJfbmF2dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1uYXYudnVlXG52YXIgdGFiX25hdl9yZW5kZXIsIHRhYl9uYXZfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRhYl9uYXZfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdGFiX25hdnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGFiX25hdl9yZW5kZXIsXG4gIHRhYl9uYXZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0YWJfbmF2X2FwaTsgfVxudGFiX25hdl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3RhYnMvc3JjL3RhYi1uYXYudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYl9uYXYgPSAodGFiX25hdl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90YWJzL3NyYy90YWJzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxUYWJzJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgVGFiTmF2OiB0YWJfbmF2XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgYWN0aXZlTmFtZTogU3RyaW5nLFxuICAgIGNsb3NhYmxlOiBCb29sZWFuLFxuICAgIGFkZGFibGU6IEJvb2xlYW4sXG4gICAgdmFsdWU6IHt9LFxuICAgIGVkaXRhYmxlOiBCb29sZWFuLFxuICAgIHRhYlBvc2l0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAndG9wJ1xuICAgIH0sXG4gICAgYmVmb3JlTGVhdmU6IEZ1bmN0aW9uLFxuICAgIHN0cmV0Y2g6IEJvb2xlYW5cbiAgfSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICByb290VGFiczogdGhpc1xuICAgIH07XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnROYW1lOiB0aGlzLnZhbHVlIHx8IHRoaXMuYWN0aXZlTmFtZSxcbiAgICAgIHBhbmVzOiBbXVxuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIGFjdGl2ZU5hbWU6IGZ1bmN0aW9uIGFjdGl2ZU5hbWUodmFsdWUpIHtcbiAgICAgIHRoaXMuc2V0Q3VycmVudE5hbWUodmFsdWUpO1xuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKF92YWx1ZSkge1xuICAgICAgdGhpcy5zZXRDdXJyZW50TmFtZShfdmFsdWUpO1xuICAgIH0sXG4gICAgY3VycmVudE5hbWU6IGZ1bmN0aW9uIGN1cnJlbnROYW1lKHZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy4kcmVmcy5uYXYpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLiRyZWZzLm5hdi4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgICAgIF90aGlzLiRyZWZzLm5hdi5zY3JvbGxUb0FjdGl2ZVRhYigpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNhbGNQYW5lSW5zdGFuY2VzOiBmdW5jdGlvbiBjYWxjUGFuZUluc3RhbmNlcygpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB2YXIgaXNGb3JjZVVwZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLiRzbG90cy5kZWZhdWx0KSB7XG4gICAgICAgIHZhciBwYW5lU2xvdHMgPSB0aGlzLiRzbG90cy5kZWZhdWx0LmZpbHRlcihmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgICByZXR1cm4gdm5vZGUudGFnICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yLm9wdGlvbnMubmFtZSA9PT0gJ0VsVGFiUGFuZSc7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyB1cGRhdGUgaW5kZWVkXG4gICAgICAgIHZhciBwYW5lcyA9IHBhbmVTbG90cy5tYXAoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSBfcmVmLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBwYW5lc0NoYW5nZWQgPSAhKHBhbmVzLmxlbmd0aCA9PT0gdGhpcy5wYW5lcy5sZW5ndGggJiYgcGFuZXMuZXZlcnkoZnVuY3Rpb24gKHBhbmUsIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHBhbmUgPT09IF90aGlzMi5wYW5lc1tpbmRleF07XG4gICAgICAgIH0pKTtcbiAgICAgICAgaWYgKGlzRm9yY2VVcGRhdGUgfHwgcGFuZXNDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5wYW5lcyA9IHBhbmVzO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFuZXMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRoaXMucGFuZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZVRhYkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVUYWJDbGljayh0YWIsIHRhYk5hbWUsIGV2ZW50KSB7XG4gICAgICBpZiAodGFiLmRpc2FibGVkKSByZXR1cm47XG4gICAgICB0aGlzLnNldEN1cnJlbnROYW1lKHRhYk5hbWUpO1xuICAgICAgdGhpcy4kZW1pdCgndGFiLWNsaWNrJywgdGFiLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVUYWJSZW1vdmU6IGZ1bmN0aW9uIGhhbmRsZVRhYlJlbW92ZShwYW5lLCBldikge1xuICAgICAgaWYgKHBhbmUuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy4kZW1pdCgnZWRpdCcsIHBhbmUubmFtZSwgJ3JlbW92ZScpO1xuICAgICAgdGhpcy4kZW1pdCgndGFiLXJlbW92ZScsIHBhbmUubmFtZSk7XG4gICAgfSxcbiAgICBoYW5kbGVUYWJBZGQ6IGZ1bmN0aW9uIGhhbmRsZVRhYkFkZCgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2VkaXQnLCBudWxsLCAnYWRkJyk7XG4gICAgICB0aGlzLiRlbWl0KCd0YWItYWRkJyk7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50TmFtZTogZnVuY3Rpb24gc2V0Q3VycmVudE5hbWUodmFsdWUpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2hhbmdlQ3VycmVudE5hbWUgPSBmdW5jdGlvbiBjaGFuZ2VDdXJyZW50TmFtZSgpIHtcbiAgICAgICAgX3RoaXMzLmN1cnJlbnROYW1lID0gdmFsdWU7XG4gICAgICAgIF90aGlzMy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5hbWUgIT09IHZhbHVlICYmIHRoaXMuYmVmb3JlTGVhdmUpIHtcbiAgICAgICAgdmFyIGJlZm9yZSA9IHRoaXMuYmVmb3JlTGVhdmUodmFsdWUsIHRoaXMuY3VycmVudE5hbWUpO1xuICAgICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aGVuKSB7XG4gICAgICAgICAgYmVmb3JlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2hhbmdlQ3VycmVudE5hbWUoKTtcbiAgICAgICAgICAgIF90aGlzMy4kcmVmcy5uYXYgJiYgX3RoaXMzLiRyZWZzLm5hdi5yZW1vdmVGb2N1cygpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvcHVsbC8xNDgxNlxuICAgICAgICAgICAgLy8gaWdub3JlIHByb21pc2UgcmVqZWN0aW9uIGluIGBiZWZvcmUtbGVhdmVgIGhvb2tcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChiZWZvcmUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgY2hhbmdlQ3VycmVudE5hbWUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhbmdlQ3VycmVudE5hbWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBfcmVmMjtcblxuICAgIHZhciB0eXBlID0gdGhpcy50eXBlLFxuICAgICAgICBoYW5kbGVUYWJDbGljayA9IHRoaXMuaGFuZGxlVGFiQ2xpY2ssXG4gICAgICAgIGhhbmRsZVRhYlJlbW92ZSA9IHRoaXMuaGFuZGxlVGFiUmVtb3ZlLFxuICAgICAgICBoYW5kbGVUYWJBZGQgPSB0aGlzLmhhbmRsZVRhYkFkZCxcbiAgICAgICAgY3VycmVudE5hbWUgPSB0aGlzLmN1cnJlbnROYW1lLFxuICAgICAgICBwYW5lcyA9IHRoaXMucGFuZXMsXG4gICAgICAgIGVkaXRhYmxlID0gdGhpcy5lZGl0YWJsZSxcbiAgICAgICAgYWRkYWJsZSA9IHRoaXMuYWRkYWJsZSxcbiAgICAgICAgdGFiUG9zaXRpb24gPSB0aGlzLnRhYlBvc2l0aW9uLFxuICAgICAgICBzdHJldGNoID0gdGhpcy5zdHJldGNoO1xuXG5cbiAgICB2YXIgbmV3QnV0dG9uID0gZWRpdGFibGUgfHwgYWRkYWJsZSA/IGgoXG4gICAgICAnc3BhbicsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6ICdlbC10YWJzX19uZXctdGFiJyxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnY2xpY2snOiBoYW5kbGVUYWJBZGQsXG4gICAgICAgICAgJ2tleWRvd24nOiBmdW5jdGlvbiBrZXlkb3duKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgICAgaGFuZGxlVGFiQWRkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHRhYmluZGV4OiAnMCdcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1wbHVzJyB9KV1cbiAgICApIDogbnVsbDtcblxuICAgIHZhciBuYXZEYXRhID0ge1xuICAgICAgcHJvcHM6IHtcbiAgICAgICAgY3VycmVudE5hbWU6IGN1cnJlbnROYW1lLFxuICAgICAgICBvblRhYkNsaWNrOiBoYW5kbGVUYWJDbGljayxcbiAgICAgICAgb25UYWJSZW1vdmU6IGhhbmRsZVRhYlJlbW92ZSxcbiAgICAgICAgZWRpdGFibGU6IGVkaXRhYmxlLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBwYW5lczogcGFuZXMsXG4gICAgICAgIHN0cmV0Y2g6IHN0cmV0Y2hcbiAgICAgIH0sXG4gICAgICByZWY6ICduYXYnXG4gICAgfTtcbiAgICB2YXIgaGVhZGVyID0gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiBbJ2VsLXRhYnNfX2hlYWRlcicsICdpcy0nICsgdGFiUG9zaXRpb25dIH0sXG4gICAgICBbbmV3QnV0dG9uLCBoKCd0YWItbmF2JywgbmF2RGF0YSldXG4gICAgKTtcbiAgICB2YXIgcGFuZWxzID0gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiAnZWwtdGFic19fY29udGVudCcgfSxcbiAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0XVxuICAgICk7XG5cbiAgICByZXR1cm4gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiAoX3JlZjIgPSB7XG4gICAgICAgICAgJ2VsLXRhYnMnOiB0cnVlLFxuICAgICAgICAgICdlbC10YWJzLS1jYXJkJzogdHlwZSA9PT0gJ2NhcmQnXG4gICAgICAgIH0sIF9yZWYyWydlbC10YWJzLS0nICsgdGFiUG9zaXRpb25dID0gdHJ1ZSwgX3JlZjJbJ2VsLXRhYnMtLWJvcmRlci1jYXJkJ10gPSB0eXBlID09PSAnYm9yZGVyLWNhcmQnLCBfcmVmMikgfSxcbiAgICAgIFt0YWJQb3NpdGlvbiAhPT0gJ2JvdHRvbScgPyBbaGVhZGVyLCBwYW5lbHNdIDogW3BhbmVscywgaGVhZGVyXV1cbiAgICApO1xuICB9LFxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50TmFtZSkge1xuICAgICAgdGhpcy5zZXRDdXJyZW50TmFtZSgnMCcpO1xuICAgIH1cblxuICAgIHRoaXMuJG9uKCd0YWItbmF2LXVwZGF0ZScsIHRoaXMuY2FsY1BhbmVJbnN0YW5jZXMuYmluZChudWxsLCB0cnVlKSk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5jYWxjUGFuZUluc3RhbmNlcygpO1xuICB9LFxuICB1cGRhdGVkOiBmdW5jdGlvbiB1cGRhdGVkKCkge1xuICAgIHRoaXMuY2FsY1BhbmVJbnN0YW5jZXMoKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYnMudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY190YWJzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHRhYnN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9zcmMvdGFicy52dWVcbnZhciB0YWJzX3JlbmRlciwgdGFic19zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdGFic19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY190YWJzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB0YWJzX3JlbmRlcixcbiAgdGFic19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHRhYnNfYXBpOyB9XG50YWJzX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGFicy9zcmMvdGFicy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFicyA9ICh0YWJzX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG50YWJzLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodGFicy5uYW1lLCB0YWJzKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RhYnMgPSAodGFicyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1wYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05MTQ1YTA3MCZcbnZhciB0YWJfcGFuZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzkxNDVhMDcwX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiAhX3ZtLmxhenkgfHwgX3ZtLmxvYWRlZCB8fCBfdm0uYWN0aXZlXG4gICAgPyBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uYWN0aXZlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImFjdGl2ZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10YWItcGFuZVwiLFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICByb2xlOiBcInRhYnBhbmVsXCIsXG4gICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6ICFfdm0uYWN0aXZlLFxuICAgICAgICAgICAgaWQ6IFwicGFuZS1cIiArIF92bS5wYW5lTmFtZSxcbiAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFwidGFiLVwiICsgX3ZtLnBhbmVOYW1lXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICA6IF92bS5fZSgpXG59XG52YXIgdGFiX3BhbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF85MTQ1YTA3MF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudGFiX3BhbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF85MTQ1YTA3MF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RhYnMvc3JjL3RhYi1wYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD05MTQ1YTA3MCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdGFiX3BhbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxUYWJQYW5lJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxUYWJQYW5lJyxcblxuICBwcm9wczoge1xuICAgIGxhYmVsOiBTdHJpbmcsXG4gICAgbGFiZWxDb250ZW50OiBGdW5jdGlvbixcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgY2xvc2FibGU6IEJvb2xlYW4sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbGF6eTogQm9vbGVhblxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiBudWxsLFxuICAgICAgbG9hZGVkOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGlzQ2xvc2FibGU6IGZ1bmN0aW9uIGlzQ2xvc2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zYWJsZSB8fCB0aGlzLiRwYXJlbnQuY2xvc2FibGU7XG4gICAgfSxcbiAgICBhY3RpdmU6IGZ1bmN0aW9uIGFjdGl2ZSgpIHtcbiAgICAgIHZhciBhY3RpdmUgPSB0aGlzLiRwYXJlbnQuY3VycmVudE5hbWUgPT09ICh0aGlzLm5hbWUgfHwgdGhpcy5pbmRleCk7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3RpdmU7XG4gICAgfSxcbiAgICBwYW5lTmFtZTogZnVuY3Rpb24gcGFuZU5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYW1lIHx8IHRoaXMuaW5kZXg7XG4gICAgfVxuICB9LFxuXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgdGhpcy4kcGFyZW50LiRlbWl0KCd0YWItbmF2LXVwZGF0ZScpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY190YWJfcGFuZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0YWJfcGFuZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWJzL3NyYy90YWItcGFuZS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0YWJfcGFuZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY190YWJfcGFuZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdGFiX3BhbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF85MTQ1YTA3MF9yZW5kZXIsXG4gIHRhYl9wYW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfOTE0NWEwNzBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0YWJfcGFuZV9hcGk7IH1cbnRhYl9wYW5lX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGFicy9zcmMvdGFiLXBhbmUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhYl9wYW5lID0gKHRhYl9wYW5lX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFiLXBhbmUvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudGFiX3BhbmUuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudCh0YWJfcGFuZS5uYW1lLCB0YWJfcGFuZSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190YWJfcGFuZSA9ICh0YWJfcGFuZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFRhZycsXG4gIHByb3BzOiB7XG4gICAgdGV4dDogU3RyaW5nLFxuICAgIGNsb3NhYmxlOiBCb29sZWFuLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgICBoaXQ6IEJvb2xlYW4sXG4gICAgZGlzYWJsZVRyYW5zaXRpb25zOiBCb29sZWFuLFxuICAgIGNvbG9yOiBTdHJpbmcsXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGVmZmVjdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2xpZ2h0JyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydkYXJrJywgJ2xpZ2h0JywgJ3BsYWluJ10uaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrJywgZXZlbnQpO1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWdTaXplOiBmdW5jdGlvbiB0YWdTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgICAgdGFnU2l6ZSA9IHRoaXMudGFnU2l6ZSxcbiAgICAgICAgaGl0ID0gdGhpcy5oaXQsXG4gICAgICAgIGVmZmVjdCA9IHRoaXMuZWZmZWN0O1xuXG4gICAgdmFyIGNsYXNzZXMgPSBbJ2VsLXRhZycsIHR5cGUgPyAnZWwtdGFnLS0nICsgdHlwZSA6ICcnLCB0YWdTaXplID8gJ2VsLXRhZy0tJyArIHRhZ1NpemUgOiAnJywgZWZmZWN0ID8gJ2VsLXRhZy0tJyArIGVmZmVjdCA6ICcnLCBoaXQgJiYgJ2lzLWhpdCddO1xuICAgIHZhciB0YWdFbCA9IGgoXG4gICAgICAnc3BhbicsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvciB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdjbGljayc6IHRoaXMuaGFuZGxlQ2xpY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0LCB0aGlzLmNsb3NhYmxlICYmIGgoJ2knLCB7ICdjbGFzcyc6ICdlbC10YWdfX2Nsb3NlIGVsLWljb24tY2xvc2UnLCBvbjoge1xuICAgICAgICAgICdjbGljayc6IHRoaXMuaGFuZGxlQ2xvc2VcbiAgICAgICAgfVxuICAgICAgfSldXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmRpc2FibGVUcmFuc2l0aW9ucyA/IHRhZ0VsIDogaChcbiAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgIHtcbiAgICAgICAgYXR0cnM6IHsgbmFtZTogJ2VsLXpvb20taW4tY2VudGVyJyB9XG4gICAgICB9LFxuICAgICAgW3RhZ0VsXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0YWd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFnL3NyYy90YWcudnVlXG52YXIgdGFnX3JlbmRlciwgdGFnX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciB0YWdfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdGFndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB0YWdfcmVuZGVyLFxuICB0YWdfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0YWdfYXBpOyB9XG50YWdfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90YWcvc3JjL3RhZy52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhZyA9ICh0YWdfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX3RhZy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY190YWcubmFtZSwgc3JjX3RhZyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190YWcgPSAoc3JjX3RhZyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU0NzU3NWE2JlxudmFyIHRyZWV2dWVfdHlwZV90ZW1wbGF0ZV9pZF81NDc1NzVhNl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC10cmVlXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBcImVsLXRyZWUtLWhpZ2hsaWdodC1jdXJyZW50XCI6IF92bS5oaWdobGlnaHRDdXJyZW50LFxuICAgICAgICBcImlzLWRyYWdnaW5nXCI6ICEhX3ZtLmRyYWdTdGF0ZS5kcmFnZ2luZ05vZGUsXG4gICAgICAgIFwiaXMtZHJvcC1ub3QtYWxsb3dcIjogIV92bS5kcmFnU3RhdGUuYWxsb3dEcm9wLFxuICAgICAgICBcImlzLWRyb3AtaW5uZXJcIjogX3ZtLmRyYWdTdGF0ZS5kcm9wVHlwZSA9PT0gXCJpbm5lclwiXG4gICAgICB9LFxuICAgICAgYXR0cnM6IHsgcm9sZTogXCJ0cmVlXCIgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLl9sKF92bS5yb290LmNoaWxkTm9kZXMsIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBfYyhcImVsLXRyZWUtbm9kZVwiLCB7XG4gICAgICAgICAga2V5OiBfdm0uZ2V0Tm9kZUtleShjaGlsZCksXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIG5vZGU6IGNoaWxkLFxuICAgICAgICAgICAgcHJvcHM6IF92bS5wcm9wcyxcbiAgICAgICAgICAgIFwicmVuZGVyLWFmdGVyLWV4cGFuZFwiOiBfdm0ucmVuZGVyQWZ0ZXJFeHBhbmQsXG4gICAgICAgICAgICBcInNob3ctY2hlY2tib3hcIjogX3ZtLnNob3dDaGVja2JveCxcbiAgICAgICAgICAgIFwicmVuZGVyLWNvbnRlbnRcIjogX3ZtLnJlbmRlckNvbnRlbnRcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7IFwibm9kZS1leHBhbmRcIjogX3ZtLmhhbmRsZU5vZGVFeHBhbmQgfVxuICAgICAgICB9KVxuICAgICAgfSksXG4gICAgICBfdm0uaXNFbXB0eVxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZV9fZW1wdHktYmxvY2tcIiB9LCBbXG4gICAgICAgICAgICBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC10cmVlX19lbXB0eS10ZXh0XCIgfSwgW1xuICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5lbXB0eVRleHQpKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgdmFsdWU6IF92bS5kcmFnU3RhdGUuc2hvd0Ryb3BJbmRpY2F0b3IsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcImRyYWdTdGF0ZS5zaG93RHJvcEluZGljYXRvclwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICByZWY6IFwiZHJvcEluZGljYXRvclwiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC10cmVlX19kcm9wLWluZGljYXRvclwiXG4gICAgICB9KVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgdHJlZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0NzU3NWE2X3N0YXRpY1JlbmRlckZucyA9IFtdXG50cmVldnVlX3R5cGVfdGVtcGxhdGVfaWRfNTQ3NTc1YTZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NDc1NzVhNiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL3NyYy9tb2RlbC91dGlsLmpzXG52YXIgTk9ERV9LRVkgPSAnJHRyZWVOb2RlSWQnO1xuXG52YXIgbWFya05vZGVEYXRhID0gZnVuY3Rpb24gbWFya05vZGVEYXRhKG5vZGUsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8IGRhdGFbTk9ERV9LRVldKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkYXRhLCBOT0RFX0tFWSwge1xuICAgIHZhbHVlOiBub2RlLmlkLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pO1xufTtcblxudmFyIHV0aWxfZ2V0Tm9kZUtleSA9IGZ1bmN0aW9uIGdldE5vZGVLZXkoa2V5LCBkYXRhKSB7XG4gIGlmICgha2V5KSByZXR1cm4gZGF0YVtOT0RFX0tFWV07XG4gIHJldHVybiBkYXRhW2tleV07XG59O1xuXG52YXIgZmluZE5lYXJlc3RDb21wb25lbnQgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdENvbXBvbmVudChlbGVtZW50LCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB0YXJnZXQgPSBlbGVtZW50O1xuICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC50YWdOYW1lICE9PSAnQk9EWScpIHtcbiAgICBpZiAodGFyZ2V0Ll9fdnVlX18gJiYgdGFyZ2V0Ll9fdnVlX18uJG9wdGlvbnMubmFtZSA9PT0gY29tcG9uZW50TmFtZSkge1xuICAgICAgcmV0dXJuIHRhcmdldC5fX3Z1ZV9fO1xuICAgIH1cbiAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL21vZGVsL25vZGUuanNcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIG5vZGVfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5cblxuXG5cbnZhciBnZXRDaGlsZFN0YXRlID0gZnVuY3Rpb24gZ2V0Q2hpbGRTdGF0ZShub2RlKSB7XG4gIHZhciBhbGwgPSB0cnVlO1xuICB2YXIgbm9uZSA9IHRydWU7XG4gIHZhciBhbGxXaXRob3V0RGlzYWJsZSA9IHRydWU7XG4gIGZvciAodmFyIGkgPSAwLCBqID0gbm9kZS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgbiA9IG5vZGVbaV07XG4gICAgaWYgKG4uY2hlY2tlZCAhPT0gdHJ1ZSB8fCBuLmluZGV0ZXJtaW5hdGUpIHtcbiAgICAgIGFsbCA9IGZhbHNlO1xuICAgICAgaWYgKCFuLmRpc2FibGVkKSB7XG4gICAgICAgIGFsbFdpdGhvdXREaXNhYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChuLmNoZWNrZWQgIT09IGZhbHNlIHx8IG4uaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgbm9uZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFsbDogYWxsLCBub25lOiBub25lLCBhbGxXaXRob3V0RGlzYWJsZTogYWxsV2l0aG91dERpc2FibGUsIGhhbGY6ICFhbGwgJiYgIW5vbmUgfTtcbn07XG5cbnZhciByZUluaXRDaGVja2VkID0gZnVuY3Rpb24gcmVJbml0Q2hlY2tlZChub2RlKSB7XG4gIGlmIChub2RlLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgdmFyIF9nZXRDaGlsZFN0YXRlID0gZ2V0Q2hpbGRTdGF0ZShub2RlLmNoaWxkTm9kZXMpLFxuICAgICAgYWxsID0gX2dldENoaWxkU3RhdGUuYWxsLFxuICAgICAgbm9uZSA9IF9nZXRDaGlsZFN0YXRlLm5vbmUsXG4gICAgICBoYWxmID0gX2dldENoaWxkU3RhdGUuaGFsZjtcblxuICBpZiAoYWxsKSB7XG4gICAgbm9kZS5jaGVja2VkID0gdHJ1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgfSBlbHNlIGlmIChoYWxmKSB7XG4gICAgbm9kZS5jaGVja2VkID0gZmFsc2U7XG4gICAgbm9kZS5pbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChub25lKSB7XG4gICAgbm9kZS5jaGVja2VkID0gZmFsc2U7XG4gICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gIH1cblxuICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG4gIGlmICghcGFyZW50IHx8IHBhcmVudC5sZXZlbCA9PT0gMCkgcmV0dXJuO1xuXG4gIGlmICghbm9kZS5zdG9yZS5jaGVja1N0cmljdGx5KSB7XG4gICAgcmVJbml0Q2hlY2tlZChwYXJlbnQpO1xuICB9XG59O1xuXG52YXIgZ2V0UHJvcGVydHlGcm9tRGF0YSA9IGZ1bmN0aW9uIGdldFByb3BlcnR5RnJvbURhdGEobm9kZSwgcHJvcCkge1xuICB2YXIgcHJvcHMgPSBub2RlLnN0b3JlLnByb3BzO1xuICB2YXIgZGF0YSA9IG5vZGUuZGF0YSB8fCB7fTtcbiAgdmFyIGNvbmZpZyA9IHByb3BzW3Byb3BdO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGNvbmZpZyhkYXRhLCBub2RlKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkYXRhW2NvbmZpZ107XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgZGF0YVByb3AgPSBkYXRhW3Byb3BdO1xuICAgIHJldHVybiBkYXRhUHJvcCA9PT0gdW5kZWZpbmVkID8gJycgOiBkYXRhUHJvcDtcbiAgfVxufTtcblxudmFyIG5vZGVJZFNlZWQgPSAwO1xuXG52YXIgbm9kZV9Ob2RlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBOb2RlKG9wdGlvbnMpIHtcbiAgICBub2RlX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5vZGUpO1xuXG4gICAgdGhpcy5pZCA9IG5vZGVJZFNlZWQrKztcbiAgICB0aGlzLnRleHQgPSBudWxsO1xuICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YSA9IG51bGw7XG4gICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICAgIHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuaXNDdXJyZW50ID0gZmFsc2U7XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBvcHRpb25zW25hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGludGVybmFsXG4gICAgdGhpcy5sZXZlbCA9IDA7XG4gICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNoaWxkTm9kZXMgPSBbXTtcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgdGhpcy5sZXZlbCA9IHRoaXMucGFyZW50LmxldmVsICsgMTtcbiAgICB9XG5cbiAgICB2YXIgc3RvcmUgPSB0aGlzLnN0b3JlO1xuICAgIGlmICghc3RvcmUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW05vZGVdc3RvcmUgaXMgcmVxdWlyZWQhJyk7XG4gICAgfVxuICAgIHN0b3JlLnJlZ2lzdGVyTm9kZSh0aGlzKTtcblxuICAgIHZhciBwcm9wcyA9IHN0b3JlLnByb3BzO1xuICAgIGlmIChwcm9wcyAmJiB0eXBlb2YgcHJvcHMuaXNMZWFmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIGlzTGVhZiA9IGdldFByb3BlcnR5RnJvbURhdGEodGhpcywgJ2lzTGVhZicpO1xuICAgICAgaWYgKHR5cGVvZiBpc0xlYWYgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLmlzTGVhZkJ5VXNlciA9IGlzTGVhZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RvcmUubGF6eSAhPT0gdHJ1ZSAmJiB0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuc2V0RGF0YSh0aGlzLmRhdGEpO1xuXG4gICAgICBpZiAoc3RvcmUuZGVmYXVsdEV4cGFuZEFsbCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMubGV2ZWwgPiAwICYmIHN0b3JlLmxhenkgJiYgc3RvcmUuZGVmYXVsdEV4cGFuZEFsbCkge1xuICAgICAgdGhpcy5leHBhbmQoKTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZGF0YSkpIHtcbiAgICAgIG1hcmtOb2RlRGF0YSh0aGlzLCB0aGlzLmRhdGEpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGF0YSkgcmV0dXJuO1xuICAgIHZhciBkZWZhdWx0RXhwYW5kZWRLZXlzID0gc3RvcmUuZGVmYXVsdEV4cGFuZGVkS2V5cztcbiAgICB2YXIga2V5ID0gc3RvcmUua2V5O1xuICAgIGlmIChrZXkgJiYgZGVmYXVsdEV4cGFuZGVkS2V5cyAmJiBkZWZhdWx0RXhwYW5kZWRLZXlzLmluZGV4T2YodGhpcy5rZXkpICE9PSAtMSkge1xuICAgICAgdGhpcy5leHBhbmQobnVsbCwgc3RvcmUuYXV0b0V4cGFuZFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGtleSAmJiBzdG9yZS5jdXJyZW50Tm9kZUtleSAhPT0gdW5kZWZpbmVkICYmIHRoaXMua2V5ID09PSBzdG9yZS5jdXJyZW50Tm9kZUtleSkge1xuICAgICAgc3RvcmUuY3VycmVudE5vZGUgPSB0aGlzO1xuICAgICAgc3RvcmUuY3VycmVudE5vZGUuaXNDdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RvcmUubGF6eSkge1xuICAgICAgc3RvcmUuX2luaXREZWZhdWx0Q2hlY2tlZE5vZGUodGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVMZWFmU3RhdGUoKTtcbiAgfVxuXG4gIE5vZGUucHJvdG90eXBlLnNldERhdGEgPSBmdW5jdGlvbiBzZXREYXRhKGRhdGEpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIG1hcmtOb2RlRGF0YSh0aGlzLCBkYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY2hpbGROb2RlcyA9IFtdO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdm9pZCAwO1xuICAgIGlmICh0aGlzLmxldmVsID09PSAwICYmIHRoaXMuZGF0YSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICBjaGlsZHJlbiA9IHRoaXMuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGRyZW4gPSBnZXRQcm9wZXJ0eUZyb21EYXRhKHRoaXMsICdjaGlsZHJlbicpIHx8IFtdO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICB0aGlzLmluc2VydENoaWxkKHsgZGF0YTogY2hpbGRyZW5baV0gfSk7XG4gICAgfVxuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gY29udGFpbnModGFyZ2V0KSB7XG4gICAgdmFyIGRlZXAgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHRydWU7XG5cbiAgICB2YXIgd2FsayA9IGZ1bmN0aW9uIHdhbGsocGFyZW50KSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGROb2RlcyB8fCBbXTtcbiAgICAgIHZhciByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgICBpZiAoY2hpbGQgPT09IHRhcmdldCB8fCBkZWVwICYmIHdhbGsoY2hpbGQpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHdhbGsodGhpcyk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudDtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgfVxuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmluc2VydENoaWxkID0gZnVuY3Rpb24gaW5zZXJ0Q2hpbGQoY2hpbGQsIGluZGV4LCBiYXRjaCkge1xuICAgIGlmICghY2hpbGQpIHRocm93IG5ldyBFcnJvcignaW5zZXJ0Q2hpbGQgZXJyb3I6IGNoaWxkIGlzIHJlcXVpcmVkLicpO1xuXG4gICAgaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBOb2RlKSkge1xuICAgICAgaWYgKCFiYXRjaCkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmdldENoaWxkcmVuKHRydWUpIHx8IFtdO1xuICAgICAgICBpZiAoY2hpbGRyZW4uaW5kZXhPZihjaGlsZC5kYXRhKSA9PT0gLTEpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAndW5kZWZpbmVkJyB8fCBpbmRleCA8IDApIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGQuZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleCwgMCwgY2hpbGQuZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtZXJnZV9kZWZhdWx0KCkoY2hpbGQsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLFxuICAgICAgICBzdG9yZTogdGhpcy5zdG9yZVxuICAgICAgfSk7XG4gICAgICBjaGlsZCA9IG5ldyBOb2RlKGNoaWxkKTtcbiAgICB9XG5cbiAgICBjaGlsZC5sZXZlbCA9IHRoaXMubGV2ZWwgKyAxO1xuXG4gICAgaWYgKHR5cGVvZiBpbmRleCA9PT0gJ3VuZGVmaW5lZCcgfHwgaW5kZXggPCAwKSB7XG4gICAgICB0aGlzLmNoaWxkTm9kZXMucHVzaChjaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIGluc2VydEJlZm9yZShjaGlsZCwgcmVmKSB7XG4gICAgdmFyIGluZGV4ID0gdm9pZCAwO1xuICAgIGlmIChyZWYpIHtcbiAgICAgIGluZGV4ID0gdGhpcy5jaGlsZE5vZGVzLmluZGV4T2YocmVmKTtcbiAgICB9XG4gICAgdGhpcy5pbnNlcnRDaGlsZChjaGlsZCwgaW5kZXgpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIoY2hpbGQsIHJlZikge1xuICAgIHZhciBpbmRleCA9IHZvaWQgMDtcbiAgICBpZiAocmVmKSB7XG4gICAgICBpbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKHJlZik7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSBpbmRleCArPSAxO1xuICAgIH1cbiAgICB0aGlzLmluc2VydENoaWxkKGNoaWxkLCBpbmRleCk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiByZW1vdmVDaGlsZChjaGlsZCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuZ2V0Q2hpbGRyZW4oKSB8fCBbXTtcbiAgICB2YXIgZGF0YUluZGV4ID0gY2hpbGRyZW4uaW5kZXhPZihjaGlsZC5kYXRhKTtcbiAgICBpZiAoZGF0YUluZGV4ID4gLTEpIHtcbiAgICAgIGNoaWxkcmVuLnNwbGljZShkYXRhSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IHRoaXMuY2hpbGROb2Rlcy5pbmRleE9mKGNoaWxkKTtcblxuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICB0aGlzLnN0b3JlICYmIHRoaXMuc3RvcmUuZGVyZWdpc3Rlck5vZGUoY2hpbGQpO1xuICAgICAgY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuY2hpbGROb2Rlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlTGVhZlN0YXRlKCk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGRCeURhdGEgPSBmdW5jdGlvbiByZW1vdmVDaGlsZEJ5RGF0YShkYXRhKSB7XG4gICAgdmFyIHRhcmdldE5vZGUgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkTm9kZXNbaV0uZGF0YSA9PT0gZGF0YSkge1xuICAgICAgICB0YXJnZXROb2RlID0gdGhpcy5jaGlsZE5vZGVzW2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0Tm9kZSkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZCh0YXJnZXROb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZXhwYW5kID0gZnVuY3Rpb24gZXhwYW5kKGNhbGxiYWNrLCBleHBhbmRQYXJlbnQpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGRvbmUgPSBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgaWYgKGV4cGFuZFBhcmVudCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gX3RoaXMucGFyZW50O1xuICAgICAgICB3aGlsZSAocGFyZW50LmxldmVsID4gMCkge1xuICAgICAgICAgIHBhcmVudC5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3RoaXMuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5zaG91bGRMb2FkRGF0YSgpKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICBpZiAoX3RoaXMuY2hlY2tlZCkge1xuICAgICAgICAgICAgX3RoaXMuc2V0Q2hlY2tlZCh0cnVlLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFfdGhpcy5zdG9yZS5jaGVja1N0cmljdGx5KSB7XG4gICAgICAgICAgICByZUluaXRDaGVja2VkKF90aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9uZSgpO1xuICAgIH1cbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5kb0NyZWF0ZUNoaWxkcmVuID0gZnVuY3Rpb24gZG9DcmVhdGVDaGlsZHJlbihhcnJheSkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICBfdGhpczIuaW5zZXJ0Q2hpbGQobWVyZ2VfZGVmYXVsdCgpKHsgZGF0YTogaXRlbSB9LCBkZWZhdWx0UHJvcHMpLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmNvbGxhcHNlID0gZnVuY3Rpb24gY29sbGFwc2UoKSB7XG4gICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnNob3VsZExvYWREYXRhID0gZnVuY3Rpb24gc2hvdWxkTG9hZERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUubGF6eSA9PT0gdHJ1ZSAmJiB0aGlzLnN0b3JlLmxvYWQgJiYgIXRoaXMubG9hZGVkO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnVwZGF0ZUxlYWZTdGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZUxlYWZTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5zdG9yZS5sYXp5ID09PSB0cnVlICYmIHRoaXMubG9hZGVkICE9PSB0cnVlICYmIHR5cGVvZiB0aGlzLmlzTGVhZkJ5VXNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuaXNMZWFmID0gdGhpcy5pc0xlYWZCeVVzZXI7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5jaGlsZE5vZGVzO1xuICAgIGlmICghdGhpcy5zdG9yZS5sYXp5IHx8IHRoaXMuc3RvcmUubGF6eSA9PT0gdHJ1ZSAmJiB0aGlzLmxvYWRlZCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5pc0xlYWYgPSAhY2hpbGROb2RlcyB8fCBjaGlsZE5vZGVzLmxlbmd0aCA9PT0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0xlYWYgPSBmYWxzZTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5zZXRDaGVja2VkID0gZnVuY3Rpb24gc2V0Q2hlY2tlZCh2YWx1ZSwgZGVlcCwgcmVjdXJzaW9uLCBwYXNzVmFsdWUpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IHZhbHVlID09PSAnaGFsZic7XG4gICAgdGhpcy5jaGVja2VkID0gdmFsdWUgPT09IHRydWU7XG5cbiAgICBpZiAodGhpcy5zdG9yZS5jaGVja1N0cmljdGx5KSByZXR1cm47XG5cbiAgICBpZiAoISh0aGlzLnNob3VsZExvYWREYXRhKCkgJiYgIXRoaXMuc3RvcmUuY2hlY2tEZXNjZW5kYW50cykpIHtcbiAgICAgIHZhciBfZ2V0Q2hpbGRTdGF0ZTIgPSBnZXRDaGlsZFN0YXRlKHRoaXMuY2hpbGROb2RlcyksXG4gICAgICAgICAgYWxsID0gX2dldENoaWxkU3RhdGUyLmFsbCxcbiAgICAgICAgICBhbGxXaXRob3V0RGlzYWJsZSA9IF9nZXRDaGlsZFN0YXRlMi5hbGxXaXRob3V0RGlzYWJsZTtcblxuICAgICAgaWYgKCF0aGlzLmlzTGVhZiAmJiAhYWxsICYmIGFsbFdpdGhvdXREaXNhYmxlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGFuZGxlRGVzY2VuZGFudHMgPSBmdW5jdGlvbiBoYW5kbGVEZXNjZW5kYW50cygpIHtcbiAgICAgICAgaWYgKGRlZXApIHtcbiAgICAgICAgICB2YXIgY2hpbGROb2RlcyA9IF90aGlzMy5jaGlsZE5vZGVzO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjaGlsZCA9IGNoaWxkTm9kZXNbaV07XG4gICAgICAgICAgICBwYXNzVmFsdWUgPSBwYXNzVmFsdWUgfHwgdmFsdWUgIT09IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGlzQ2hlY2sgPSBjaGlsZC5kaXNhYmxlZCA/IGNoaWxkLmNoZWNrZWQgOiBwYXNzVmFsdWU7XG4gICAgICAgICAgICBjaGlsZC5zZXRDaGVja2VkKGlzQ2hlY2ssIGRlZXAsIHRydWUsIHBhc3NWYWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9nZXRDaGlsZFN0YXRlMyA9IGdldENoaWxkU3RhdGUoY2hpbGROb2RlcyksXG4gICAgICAgICAgICAgIGhhbGYgPSBfZ2V0Q2hpbGRTdGF0ZTMuaGFsZixcbiAgICAgICAgICAgICAgX2FsbCA9IF9nZXRDaGlsZFN0YXRlMy5hbGw7XG5cbiAgICAgICAgICBpZiAoIV9hbGwpIHtcbiAgICAgICAgICAgIF90aGlzMy5jaGVja2VkID0gX2FsbDtcbiAgICAgICAgICAgIF90aGlzMy5pbmRldGVybWluYXRlID0gaGFsZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWREYXRhKCkpIHtcbiAgICAgICAgLy8gT25seSB3b3JrIG9uIGxhenkgbG9hZCBkYXRhLlxuICAgICAgICB0aGlzLmxvYWREYXRhKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBoYW5kbGVEZXNjZW5kYW50cygpO1xuICAgICAgICAgIHJlSW5pdENoZWNrZWQoX3RoaXMzKTtcbiAgICAgICAgfSwge1xuICAgICAgICAgIGNoZWNrZWQ6IHZhbHVlICE9PSBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFuZGxlRGVzY2VuZGFudHMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQgfHwgcGFyZW50LmxldmVsID09PSAwKSByZXR1cm47XG5cbiAgICBpZiAoIXJlY3Vyc2lvbikge1xuICAgICAgcmVJbml0Q2hlY2tlZChwYXJlbnQpO1xuICAgIH1cbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5nZXRDaGlsZHJlbiA9IGZ1bmN0aW9uIGdldENoaWxkcmVuKCkge1xuICAgIHZhciBmb3JjZUluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIC8vIHRoaXMgaXMgZGF0YVxuICAgIGlmICh0aGlzLmxldmVsID09PSAwKSByZXR1cm4gdGhpcy5kYXRhO1xuICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGlmICghZGF0YSkgcmV0dXJuIG51bGw7XG5cbiAgICB2YXIgcHJvcHMgPSB0aGlzLnN0b3JlLnByb3BzO1xuICAgIHZhciBjaGlsZHJlbiA9ICdjaGlsZHJlbic7XG4gICAgaWYgKHByb3BzKSB7XG4gICAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuIHx8ICdjaGlsZHJlbic7XG4gICAgfVxuXG4gICAgaWYgKGRhdGFbY2hpbGRyZW5dID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGRhdGFbY2hpbGRyZW5dID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZm9yY2VJbml0ICYmICFkYXRhW2NoaWxkcmVuXSkge1xuICAgICAgZGF0YVtjaGlsZHJlbl0gPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YVtjaGlsZHJlbl07XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUudXBkYXRlQ2hpbGRyZW4gPSBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbigpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBuZXdEYXRhID0gdGhpcy5nZXRDaGlsZHJlbigpIHx8IFtdO1xuICAgIHZhciBvbGREYXRhID0gdGhpcy5jaGlsZE5vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuZGF0YTtcbiAgICB9KTtcblxuICAgIHZhciBuZXdEYXRhTWFwID0ge307XG4gICAgdmFyIG5ld05vZGVzID0gW107XG5cbiAgICBuZXdEYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICB2YXIga2V5ID0gaXRlbVtOT0RFX0tFWV07XG4gICAgICB2YXIgaXNOb2RlRXhpc3RzID0gISFrZXkgJiYgT2JqZWN0KHV0aWxfW1wiYXJyYXlGaW5kSW5kZXhcIl0pKG9sZERhdGEsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIHJldHVybiBkYXRhW05PREVfS0VZXSA9PT0ga2V5O1xuICAgICAgfSkgPj0gMDtcbiAgICAgIGlmIChpc05vZGVFeGlzdHMpIHtcbiAgICAgICAgbmV3RGF0YU1hcFtrZXldID0geyBpbmRleDogaW5kZXgsIGRhdGE6IGl0ZW0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld05vZGVzLnB1c2goeyBpbmRleDogaW5kZXgsIGRhdGE6IGl0ZW0gfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuc3RvcmUubGF6eSkge1xuICAgICAgb2xkRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmICghbmV3RGF0YU1hcFtpdGVtW05PREVfS0VZXV0pIF90aGlzNC5yZW1vdmVDaGlsZEJ5RGF0YShpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld05vZGVzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBpbmRleCA9IF9yZWYuaW5kZXgsXG4gICAgICAgICAgZGF0YSA9IF9yZWYuZGF0YTtcblxuICAgICAgX3RoaXM0Lmluc2VydENoaWxkKHsgZGF0YTogZGF0YSB9LCBpbmRleCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUxlYWZTdGF0ZSgpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmxvYWREYXRhID0gZnVuY3Rpb24gbG9hZERhdGEoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gICAgaWYgKHRoaXMuc3RvcmUubGF6eSA9PT0gdHJ1ZSAmJiB0aGlzLnN0b3JlLmxvYWQgJiYgIXRoaXMubG9hZGVkICYmICghdGhpcy5sb2FkaW5nIHx8IE9iamVjdC5rZXlzKGRlZmF1bHRQcm9wcykubGVuZ3RoKSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgdmFyIHJlc29sdmUgPSBmdW5jdGlvbiByZXNvbHZlKGNoaWxkcmVuKSB7XG4gICAgICAgIF90aGlzNS5sb2FkZWQgPSB0cnVlO1xuICAgICAgICBfdGhpczUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBfdGhpczUuY2hpbGROb2RlcyA9IFtdO1xuXG4gICAgICAgIF90aGlzNS5kb0NyZWF0ZUNoaWxkcmVuKGNoaWxkcmVuLCBkZWZhdWx0UHJvcHMpO1xuXG4gICAgICAgIF90aGlzNS51cGRhdGVMZWFmU3RhdGUoKTtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY2FsbGJhY2suY2FsbChfdGhpczUsIGNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5zdG9yZS5sb2FkKHRoaXMsIHJlc29sdmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKE5vZGUsIFt7XG4gICAga2V5OiAnbGFiZWwnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFByb3BlcnR5RnJvbURhdGEodGhpcywgJ2xhYmVsJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAna2V5JyxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciBub2RlS2V5ID0gdGhpcy5zdG9yZS5rZXk7XG4gICAgICBpZiAodGhpcy5kYXRhKSByZXR1cm4gdGhpcy5kYXRhW25vZGVLZXldO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZGlzYWJsZWQnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFByb3BlcnR5RnJvbURhdGEodGhpcywgJ2Rpc2FibGVkJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnbmV4dFNpYmxpbmcnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICB2YXIgaW5kZXggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIHJldHVybiBwYXJlbnQuY2hpbGROb2Rlc1tpbmRleCArIDFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdwcmV2aW91c1NpYmxpbmcnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50O1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICB2YXIgaW5kZXggPSBwYXJlbnQuY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgIHJldHVybiBpbmRleCA+IDAgPyBwYXJlbnQuY2hpbGROb2Rlc1tpbmRleCAtIDFdIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE5vZGU7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1vZGVsX25vZGUgPSAobm9kZV9Ob2RlKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvbW9kZWwvdHJlZS1zdG9yZS5qc1xudmFyIHRyZWVfc3RvcmVfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gdHJlZV9zdG9yZV9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cblxuXG5cbnZhciB0cmVlX3N0b3JlX1RyZWVTdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVHJlZVN0b3JlKG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdHJlZV9zdG9yZV9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmVlU3RvcmUpO1xuXG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50Tm9kZUtleSA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkob3B0aW9uKSkge1xuICAgICAgICB0aGlzW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5ub2Rlc01hcCA9IHt9O1xuXG4gICAgdGhpcy5yb290ID0gbmV3IG1vZGVsX25vZGUoe1xuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgc3RvcmU6IHRoaXNcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmxhenkgJiYgdGhpcy5sb2FkKSB7XG4gICAgICB2YXIgbG9hZEZuID0gdGhpcy5sb2FkO1xuICAgICAgbG9hZEZuKHRoaXMucm9vdCwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgX3RoaXMucm9vdC5kb0NyZWF0ZUNoaWxkcmVuKGRhdGEpO1xuICAgICAgICBfdGhpcy5faW5pdERlZmF1bHRDaGVja2VkTm9kZXMoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpO1xuICAgIH1cbiAgfVxuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gZmlsdGVyKHZhbHVlKSB7XG4gICAgdmFyIGZpbHRlck5vZGVNZXRob2QgPSB0aGlzLmZpbHRlck5vZGVNZXRob2Q7XG4gICAgdmFyIGxhenkgPSB0aGlzLmxhenk7XG4gICAgdmFyIHRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2Uobm9kZSkge1xuICAgICAgdmFyIGNoaWxkTm9kZXMgPSBub2RlLnJvb3QgPyBub2RlLnJvb3QuY2hpbGROb2RlcyA6IG5vZGUuY2hpbGROb2RlcztcblxuICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBjaGlsZC52aXNpYmxlID0gZmlsdGVyTm9kZU1ldGhvZC5jYWxsKGNoaWxkLCB2YWx1ZSwgY2hpbGQuZGF0YSwgY2hpbGQpO1xuXG4gICAgICAgIHRyYXZlcnNlKGNoaWxkKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoIW5vZGUudmlzaWJsZSAmJiBjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICB2YXIgYWxsSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgYWxsSGlkZGVuID0gIWNoaWxkTm9kZXMuc29tZShmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQudmlzaWJsZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG5vZGUucm9vdCkge1xuICAgICAgICAgIG5vZGUucm9vdC52aXNpYmxlID0gYWxsSGlkZGVuID09PSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnZpc2libGUgPSBhbGxIaWRkZW4gPT09IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG5cbiAgICAgIGlmIChub2RlLnZpc2libGUgJiYgIW5vZGUuaXNMZWFmICYmICFsYXp5KSBub2RlLmV4cGFuZCgpO1xuICAgIH07XG5cbiAgICB0cmF2ZXJzZSh0aGlzKTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnNldERhdGEgPSBmdW5jdGlvbiBzZXREYXRhKG5ld1ZhbCkge1xuICAgIHZhciBpbnN0YW5jZUNoYW5nZWQgPSBuZXdWYWwgIT09IHRoaXMucm9vdC5kYXRhO1xuICAgIGlmIChpbnN0YW5jZUNoYW5nZWQpIHtcbiAgICAgIHRoaXMucm9vdC5zZXREYXRhKG5ld1ZhbCk7XG4gICAgICB0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvb3QudXBkYXRlQ2hpbGRyZW4oKTtcbiAgICB9XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5nZXROb2RlID0gZnVuY3Rpb24gZ2V0Tm9kZShkYXRhKSB7XG4gICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBtb2RlbF9ub2RlKSByZXR1cm4gZGF0YTtcbiAgICB2YXIga2V5ID0gKHR5cGVvZiBkYXRhID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogdHJlZV9zdG9yZV90eXBlb2YoZGF0YSkpICE9PSAnb2JqZWN0JyA/IGRhdGEgOiB1dGlsX2dldE5vZGVLZXkodGhpcy5rZXksIGRhdGEpO1xuICAgIHJldHVybiB0aGlzLm5vZGVzTWFwW2tleV0gfHwgbnVsbDtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIGluc2VydEJlZm9yZShkYXRhLCByZWZEYXRhKSB7XG4gICAgdmFyIHJlZk5vZGUgPSB0aGlzLmdldE5vZGUocmVmRGF0YSk7XG4gICAgcmVmTm9kZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKHsgZGF0YTogZGF0YSB9LCByZWZOb2RlKTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLmluc2VydEFmdGVyID0gZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIoZGF0YSwgcmVmRGF0YSkge1xuICAgIHZhciByZWZOb2RlID0gdGhpcy5nZXROb2RlKHJlZkRhdGEpO1xuICAgIHJlZk5vZGUucGFyZW50Lmluc2VydEFmdGVyKHsgZGF0YTogZGF0YSB9LCByZWZOb2RlKTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShkYXRhKSB7XG4gICAgdmFyIG5vZGUgPSB0aGlzLmdldE5vZGUoZGF0YSk7XG5cbiAgICBpZiAobm9kZSAmJiBub2RlLnBhcmVudCkge1xuICAgICAgaWYgKG5vZGUgPT09IHRoaXMuY3VycmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG51bGw7XG4gICAgICB9XG4gICAgICBub2RlLnBhcmVudC5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQoZGF0YSwgcGFyZW50RGF0YSkge1xuICAgIHZhciBwYXJlbnROb2RlID0gcGFyZW50RGF0YSA/IHRoaXMuZ2V0Tm9kZShwYXJlbnREYXRhKSA6IHRoaXMucm9vdDtcblxuICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICBwYXJlbnROb2RlLmluc2VydENoaWxkKHsgZGF0YTogZGF0YSB9KTtcbiAgICB9XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5faW5pdERlZmF1bHRDaGVja2VkTm9kZXMgPSBmdW5jdGlvbiBfaW5pdERlZmF1bHRDaGVja2VkTm9kZXMoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgZGVmYXVsdENoZWNrZWRLZXlzID0gdGhpcy5kZWZhdWx0Q2hlY2tlZEtleXMgfHwgW107XG4gICAgdmFyIG5vZGVzTWFwID0gdGhpcy5ub2Rlc01hcDtcblxuICAgIGRlZmF1bHRDaGVja2VkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChjaGVja2VkS2V5KSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzTWFwW2NoZWNrZWRLZXldO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBub2RlLnNldENoZWNrZWQodHJ1ZSwgIV90aGlzMi5jaGVja1N0cmljdGx5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLl9pbml0RGVmYXVsdENoZWNrZWROb2RlID0gZnVuY3Rpb24gX2luaXREZWZhdWx0Q2hlY2tlZE5vZGUobm9kZSkge1xuICAgIHZhciBkZWZhdWx0Q2hlY2tlZEtleXMgPSB0aGlzLmRlZmF1bHRDaGVja2VkS2V5cyB8fCBbXTtcblxuICAgIGlmIChkZWZhdWx0Q2hlY2tlZEtleXMuaW5kZXhPZihub2RlLmtleSkgIT09IC0xKSB7XG4gICAgICBub2RlLnNldENoZWNrZWQodHJ1ZSwgIXRoaXMuY2hlY2tTdHJpY3RseSk7XG4gICAgfVxuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0RGVmYXVsdENoZWNrZWRLZXkgPSBmdW5jdGlvbiBzZXREZWZhdWx0Q2hlY2tlZEtleShuZXdWYWwpIHtcbiAgICBpZiAobmV3VmFsICE9PSB0aGlzLmRlZmF1bHRDaGVja2VkS2V5cykge1xuICAgICAgdGhpcy5kZWZhdWx0Q2hlY2tlZEtleXMgPSBuZXdWYWw7XG4gICAgICB0aGlzLl9pbml0RGVmYXVsdENoZWNrZWROb2RlcygpO1xuICAgIH1cbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnJlZ2lzdGVyTm9kZSA9IGZ1bmN0aW9uIHJlZ2lzdGVyTm9kZShub2RlKSB7XG4gICAgdmFyIGtleSA9IHRoaXMua2V5O1xuICAgIGlmICgha2V5IHx8ICFub2RlIHx8ICFub2RlLmRhdGEpIHJldHVybjtcblxuICAgIHZhciBub2RlS2V5ID0gbm9kZS5rZXk7XG4gICAgaWYgKG5vZGVLZXkgIT09IHVuZGVmaW5lZCkgdGhpcy5ub2Rlc01hcFtub2RlLmtleV0gPSBub2RlO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuZGVyZWdpc3Rlck5vZGUgPSBmdW5jdGlvbiBkZXJlZ2lzdGVyTm9kZShub2RlKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIga2V5ID0gdGhpcy5rZXk7XG4gICAgaWYgKCFrZXkgfHwgIW5vZGUgfHwgIW5vZGUuZGF0YSkgcmV0dXJuO1xuXG4gICAgbm9kZS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICBfdGhpczMuZGVyZWdpc3Rlck5vZGUoY2hpbGQpO1xuICAgIH0pO1xuXG4gICAgZGVsZXRlIHRoaXMubm9kZXNNYXBbbm9kZS5rZXldO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuZ2V0Q2hlY2tlZE5vZGVzID0gZnVuY3Rpb24gZ2V0Q2hlY2tlZE5vZGVzKCkge1xuICAgIHZhciBsZWFmT25seSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgdmFyIGluY2x1ZGVIYWxmQ2hlY2tlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgICB2YXIgY2hlY2tlZE5vZGVzID0gW107XG4gICAgdmFyIHRyYXZlcnNlID0gZnVuY3Rpb24gdHJhdmVyc2Uobm9kZSkge1xuICAgICAgdmFyIGNoaWxkTm9kZXMgPSBub2RlLnJvb3QgPyBub2RlLnJvb3QuY2hpbGROb2RlcyA6IG5vZGUuY2hpbGROb2RlcztcblxuICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoKGNoaWxkLmNoZWNrZWQgfHwgaW5jbHVkZUhhbGZDaGVja2VkICYmIGNoaWxkLmluZGV0ZXJtaW5hdGUpICYmICghbGVhZk9ubHkgfHwgbGVhZk9ubHkgJiYgY2hpbGQuaXNMZWFmKSkge1xuICAgICAgICAgIGNoZWNrZWROb2Rlcy5wdXNoKGNoaWxkLmRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhdmVyc2UoY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRyYXZlcnNlKHRoaXMpO1xuXG4gICAgcmV0dXJuIGNoZWNrZWROb2RlcztcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLmdldENoZWNrZWRLZXlzID0gZnVuY3Rpb24gZ2V0Q2hlY2tlZEtleXMoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgbGVhZk9ubHkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hlY2tlZE5vZGVzKGxlYWZPbmx5KS5tYXAoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiAoZGF0YSB8fCB7fSlbX3RoaXM0LmtleV07XG4gICAgfSk7XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5nZXRIYWxmQ2hlY2tlZE5vZGVzID0gZnVuY3Rpb24gZ2V0SGFsZkNoZWNrZWROb2RlcygpIHtcbiAgICB2YXIgbm9kZXMgPSBbXTtcbiAgICB2YXIgdHJhdmVyc2UgPSBmdW5jdGlvbiB0cmF2ZXJzZShub2RlKSB7XG4gICAgICB2YXIgY2hpbGROb2RlcyA9IG5vZGUucm9vdCA/IG5vZGUucm9vdC5jaGlsZE5vZGVzIDogbm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgICBjaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZC5pbmRldGVybWluYXRlKSB7XG4gICAgICAgICAgbm9kZXMucHVzaChjaGlsZC5kYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYXZlcnNlKGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0cmF2ZXJzZSh0aGlzKTtcblxuICAgIHJldHVybiBub2RlcztcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLmdldEhhbGZDaGVja2VkS2V5cyA9IGZ1bmN0aW9uIGdldEhhbGZDaGVja2VkS2V5cygpIHtcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHJldHVybiB0aGlzLmdldEhhbGZDaGVja2VkTm9kZXMoKS5tYXAoZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiAoZGF0YSB8fCB7fSlbX3RoaXM1LmtleV07XG4gICAgfSk7XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5fZ2V0QWxsTm9kZXMgPSBmdW5jdGlvbiBfZ2V0QWxsTm9kZXMoKSB7XG4gICAgdmFyIGFsbE5vZGVzID0gW107XG4gICAgdmFyIG5vZGVzTWFwID0gdGhpcy5ub2Rlc01hcDtcbiAgICBmb3IgKHZhciBub2RlS2V5IGluIG5vZGVzTWFwKSB7XG4gICAgICBpZiAobm9kZXNNYXAuaGFzT3duUHJvcGVydHkobm9kZUtleSkpIHtcbiAgICAgICAgYWxsTm9kZXMucHVzaChub2Rlc01hcFtub2RlS2V5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFsbE5vZGVzO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUudXBkYXRlQ2hpbGRyZW4gPSBmdW5jdGlvbiB1cGRhdGVDaGlsZHJlbihrZXksIGRhdGEpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZXNNYXBba2V5XTtcbiAgICBpZiAoIW5vZGUpIHJldHVybjtcbiAgICB2YXIgY2hpbGROb2RlcyA9IG5vZGUuY2hpbGROb2RlcztcbiAgICBmb3IgKHZhciBpID0gY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNoaWxkID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgIHRoaXMucmVtb3ZlKGNoaWxkLmRhdGEpO1xuICAgIH1cbiAgICBmb3IgKHZhciBfaSA9IDAsIGogPSBkYXRhLmxlbmd0aDsgX2kgPCBqOyBfaSsrKSB7XG4gICAgICB2YXIgX2NoaWxkID0gZGF0YVtfaV07XG4gICAgICB0aGlzLmFwcGVuZChfY2hpbGQsIG5vZGUuZGF0YSk7XG4gICAgfVxuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuX3NldENoZWNrZWRLZXlzID0gZnVuY3Rpb24gX3NldENoZWNrZWRLZXlzKGtleSkge1xuICAgIHZhciBsZWFmT25seSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgdmFyIGNoZWNrZWRLZXlzID0gYXJndW1lbnRzWzJdO1xuXG4gICAgdmFyIGFsbE5vZGVzID0gdGhpcy5fZ2V0QWxsTm9kZXMoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYi5sZXZlbCAtIGEubGV2ZWw7XG4gICAgfSk7XG4gICAgdmFyIGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNoZWNrZWRLZXlzKTtcbiAgICBhbGxOb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5zZXRDaGVja2VkKGZhbHNlLCBmYWxzZSk7XG4gICAgfSk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGogPSBhbGxOb2Rlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gYWxsTm9kZXNbaV07XG4gICAgICB2YXIgbm9kZUtleSA9IG5vZGUuZGF0YVtrZXldLnRvU3RyaW5nKCk7XG4gICAgICB2YXIgY2hlY2tlZCA9IGtleXMuaW5kZXhPZihub2RlS2V5KSA+IC0xO1xuICAgICAgaWYgKCFjaGVja2VkKSB7XG4gICAgICAgIGlmIChub2RlLmNoZWNrZWQgJiYgIWNhY2hlW25vZGVLZXldKSB7XG4gICAgICAgICAgbm9kZS5zZXRDaGVja2VkKGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LmxldmVsID4gMCkge1xuICAgICAgICBjYWNoZVtwYXJlbnQuZGF0YVtrZXldXSA9IHRydWU7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmlzTGVhZiB8fCB0aGlzLmNoZWNrU3RyaWN0bHkpIHtcbiAgICAgICAgbm9kZS5zZXRDaGVja2VkKHRydWUsIGZhbHNlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBub2RlLnNldENoZWNrZWQodHJ1ZSwgdHJ1ZSk7XG5cbiAgICAgIGlmIChsZWFmT25seSkge1xuICAgICAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG5vZGUuc2V0Q2hlY2tlZChmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgIHZhciB0cmF2ZXJzZSA9IGZ1bmN0aW9uIHRyYXZlcnNlKG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xuICAgICAgICAgICAgY2hpbGROb2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgICBpZiAoIWNoaWxkLmlzTGVhZikge1xuICAgICAgICAgICAgICAgIGNoaWxkLnNldENoZWNrZWQoZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0cmF2ZXJzZShjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRyYXZlcnNlKG5vZGUpO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnNldENoZWNrZWROb2RlcyA9IGZ1bmN0aW9uIHNldENoZWNrZWROb2RlcyhhcnJheSkge1xuICAgIHZhciBsZWFmT25seSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgICB2YXIga2V5ID0gdGhpcy5rZXk7XG4gICAgdmFyIGNoZWNrZWRLZXlzID0ge307XG4gICAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgY2hlY2tlZEtleXNbKGl0ZW0gfHwge30pW2tleV1dID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3NldENoZWNrZWRLZXlzKGtleSwgbGVhZk9ubHksIGNoZWNrZWRLZXlzKTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnNldENoZWNrZWRLZXlzID0gZnVuY3Rpb24gc2V0Q2hlY2tlZEtleXMoa2V5cykge1xuICAgIHZhciBsZWFmT25seSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgICB0aGlzLmRlZmF1bHRDaGVja2VkS2V5cyA9IGtleXM7XG4gICAgdmFyIGtleSA9IHRoaXMua2V5O1xuICAgIHZhciBjaGVja2VkS2V5cyA9IHt9O1xuICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBjaGVja2VkS2V5c1trZXldID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3NldENoZWNrZWRLZXlzKGtleSwgbGVhZk9ubHksIGNoZWNrZWRLZXlzKTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnNldERlZmF1bHRFeHBhbmRlZEtleXMgPSBmdW5jdGlvbiBzZXREZWZhdWx0RXhwYW5kZWRLZXlzKGtleXMpIHtcbiAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgIGtleXMgPSBrZXlzIHx8IFtdO1xuICAgIHRoaXMuZGVmYXVsdEV4cGFuZGVkS2V5cyA9IGtleXM7XG5cbiAgICBrZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG5vZGUgPSBfdGhpczYuZ2V0Tm9kZShrZXkpO1xuICAgICAgaWYgKG5vZGUpIG5vZGUuZXhwYW5kKG51bGwsIF90aGlzNi5hdXRvRXhwYW5kUGFyZW50KTtcbiAgICB9KTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnNldENoZWNrZWQgPSBmdW5jdGlvbiBzZXRDaGVja2VkKGRhdGEsIGNoZWNrZWQsIGRlZXApIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuZ2V0Tm9kZShkYXRhKTtcblxuICAgIGlmIChub2RlKSB7XG4gICAgICBub2RlLnNldENoZWNrZWQoISFjaGVja2VkLCBkZWVwKTtcbiAgICB9XG4gIH07XG5cbiAgVHJlZVN0b3JlLnByb3RvdHlwZS5nZXRDdXJyZW50Tm9kZSA9IGZ1bmN0aW9uIGdldEN1cnJlbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnROb2RlO1xuICB9O1xuXG4gIFRyZWVTdG9yZS5wcm90b3R5cGUuc2V0Q3VycmVudE5vZGUgPSBmdW5jdGlvbiBzZXRDdXJyZW50Tm9kZShjdXJyZW50Tm9kZSkge1xuICAgIHZhciBwcmV2Q3VycmVudE5vZGUgPSB0aGlzLmN1cnJlbnROb2RlO1xuICAgIGlmIChwcmV2Q3VycmVudE5vZGUpIHtcbiAgICAgIHByZXZDdXJyZW50Tm9kZS5pc0N1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlO1xuICAgIHRoaXMuY3VycmVudE5vZGUuaXNDdXJyZW50ID0gdHJ1ZTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnNldFVzZXJDdXJyZW50Tm9kZSA9IGZ1bmN0aW9uIHNldFVzZXJDdXJyZW50Tm9kZShub2RlKSB7XG4gICAgdmFyIGtleSA9IG5vZGVbdGhpcy5rZXldO1xuICAgIHZhciBjdXJyTm9kZSA9IHRoaXMubm9kZXNNYXBba2V5XTtcbiAgICB0aGlzLnNldEN1cnJlbnROb2RlKGN1cnJOb2RlKTtcbiAgfTtcblxuICBUcmVlU3RvcmUucHJvdG90eXBlLnNldEN1cnJlbnROb2RlS2V5ID0gZnVuY3Rpb24gc2V0Q3VycmVudE5vZGVLZXkoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCBrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50Tm9kZSAmJiAodGhpcy5jdXJyZW50Tm9kZS5pc0N1cnJlbnQgPSBmYWxzZSk7XG4gICAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5vZGUgPSB0aGlzLmdldE5vZGUoa2V5KTtcbiAgICBpZiAobm9kZSkge1xuICAgICAgdGhpcy5zZXRDdXJyZW50Tm9kZShub2RlKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFRyZWVTdG9yZTtcbn0oKTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdHJlZV9zdG9yZSA9ICh0cmVlX3N0b3JlX1RyZWVTdG9yZSk7XG47XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUtbm9kZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2JhM2VmMGUmXG52YXIgdHJlZV9ub2RldnVlX3R5cGVfdGVtcGxhdGVfaWRfM2JhM2VmMGVfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzXG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLm5vZGUudmlzaWJsZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcIm5vZGUudmlzaWJsZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZWY6IFwibm9kZVwiLFxuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZS1ub2RlXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBcImlzLWV4cGFuZGVkXCI6IF92bS5leHBhbmRlZCxcbiAgICAgICAgXCJpcy1jdXJyZW50XCI6IF92bS5ub2RlLmlzQ3VycmVudCxcbiAgICAgICAgXCJpcy1oaWRkZW5cIjogIV92bS5ub2RlLnZpc2libGUsXG4gICAgICAgIFwiaXMtZm9jdXNhYmxlXCI6ICFfdm0ubm9kZS5kaXNhYmxlZCxcbiAgICAgICAgXCJpcy1jaGVja2VkXCI6ICFfdm0ubm9kZS5kaXNhYmxlZCAmJiBfdm0ubm9kZS5jaGVja2VkXG4gICAgICB9LFxuICAgICAgYXR0cnM6IHtcbiAgICAgICAgcm9sZTogXCJ0cmVlaXRlbVwiLFxuICAgICAgICB0YWJpbmRleDogXCItMVwiLFxuICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLmV4cGFuZGVkLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogX3ZtLm5vZGUuZGlzYWJsZWQsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IF92bS5ub2RlLmNoZWNrZWQsXG4gICAgICAgIGRyYWdnYWJsZTogX3ZtLnRyZWUuZHJhZ2dhYmxlXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlQ2xpY2soJGV2ZW50KVxuICAgICAgICB9LFxuICAgICAgICBjb250ZXh0bWVudTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMkMS5oYW5kbGVDb250ZXh0TWVudSgkZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdzdGFydDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVEcmFnU3RhcnQoJGV2ZW50KVxuICAgICAgICB9LFxuICAgICAgICBkcmFnb3ZlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVEcmFnT3ZlcigkZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGRyYWdlbmQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlRHJhZ0VuZCgkZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIGRyb3A6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlRHJvcCgkZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZS1ub2RlX19jb250ZW50XCIsXG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIFwicGFkZGluZy1sZWZ0XCI6IChfdm0ubm9kZS5sZXZlbCAtIDEpICogX3ZtLnRyZWUuaW5kZW50ICsgXCJweFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImlzLWxlYWZcIjogX3ZtLm5vZGUuaXNMZWFmLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiAhX3ZtLm5vZGUuaXNMZWFmICYmIF92bS5leHBhbmRlZFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcImVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb25cIixcbiAgICAgICAgICAgICAgX3ZtLnRyZWUuaWNvbkNsYXNzID8gX3ZtLnRyZWUuaWNvbkNsYXNzIDogXCJlbC1pY29uLWNhcmV0LXJpZ2h0XCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVFeHBhbmRJY29uQ2xpY2soJGV2ZW50KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLnNob3dDaGVja2JveFxuICAgICAgICAgICAgPyBfYyhcImVsLWNoZWNrYm94XCIsIHtcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgaW5kZXRlcm1pbmF0ZTogX3ZtLm5vZGUuaW5kZXRlcm1pbmF0ZSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhIV92bS5ub2RlLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjaGFuZ2U6IF92bS5oYW5kbGVDaGVja0NoYW5nZSB9LFxuICAgICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ubm9kZS5jaGVja2VkLFxuICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChfdm0ubm9kZSwgXCJjaGVja2VkXCIsICQkdilcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm5vZGUuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0ubm9kZS5sb2FkaW5nXG4gICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJlZS1ub2RlX19sb2FkaW5nLWljb24gZWwtaWNvbi1sb2FkaW5nXCJcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX2MoXCJub2RlLWNvbnRlbnRcIiwgeyBhdHRyczogeyBub2RlOiBfdm0ubm9kZSB9IH0pXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfYyhcImVsLWNvbGxhcHNlLXRyYW5zaXRpb25cIiwgW1xuICAgICAgICAhX3ZtLnJlbmRlckFmdGVyRXhwYW5kIHx8IF92bS5jaGlsZE5vZGVSZW5kZXJlZFxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRyZWUtbm9kZV9fY2hpbGRyZW5cIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyByb2xlOiBcImdyb3VwXCIsIFwiYXJpYS1leHBhbmRlZFwiOiBfdm0uZXhwYW5kZWQgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBfdm0uX2woX3ZtLm5vZGUuY2hpbGROb2RlcywgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJlbC10cmVlLW5vZGVcIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBfdm0uZ2V0Tm9kZUtleShjaGlsZCksXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBcInJlbmRlci1jb250ZW50XCI6IF92bS5yZW5kZXJDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlci1hZnRlci1leHBhbmRcIjogX3ZtLnJlbmRlckFmdGVyRXhwYW5kLFxuICAgICAgICAgICAgICAgICAgICBcInNob3ctY2hlY2tib3hcIjogX3ZtLnNob3dDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgbm9kZTogY2hpbGRcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBcIm5vZGUtZXhwYW5kXCI6IF92bS5oYW5kbGVDaGlsZE5vZGVFeHBhbmQgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgXSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHRyZWVfbm9kZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNiYTNlZjBlX3N0YXRpY1JlbmRlckZucyA9IFtdXG50cmVlX25vZGV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zYmEzZWYwZV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUtbm9kZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9M2JhM2VmMGUmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUtbm9kZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdHJlZV9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVHJlZU5vZGUnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFRyZWVOb2RlJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICBub2RlOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgIH0sXG4gICAgcHJvcHM6IHt9LFxuICAgIHJlbmRlckNvbnRlbnQ6IEZ1bmN0aW9uLFxuICAgIHJlbmRlckFmdGVyRXhwYW5kOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd0NoZWNrYm94OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ29sbGFwc2VUcmFuc2l0aW9uOiBjb2xsYXBzZV90cmFuc2l0aW9uX2RlZmF1bHQuYSxcbiAgICBFbENoZWNrYm94OiBjaGVja2JveF9kZWZhdWx0LmEsXG4gICAgTm9kZUNvbnRlbnQ6IHtcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIG5vZGU6IHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgICB2YXIgdHJlZSA9IHBhcmVudC50cmVlO1xuICAgICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZTtcbiAgICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGEsXG4gICAgICAgICAgICBzdG9yZSA9IG5vZGUuc3RvcmU7XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudC5yZW5kZXJDb250ZW50ID8gcGFyZW50LnJlbmRlckNvbnRlbnQuY2FsbChwYXJlbnQuX3JlbmRlclByb3h5LCBoLCB7IF9zZWxmOiB0cmVlLiR2bm9kZS5jb250ZXh0LCBub2RlOiBub2RlLCBkYXRhOiBkYXRhLCBzdG9yZTogc3RvcmUgfSkgOiB0cmVlLiRzY29wZWRTbG90cy5kZWZhdWx0ID8gdHJlZS4kc2NvcGVkU2xvdHMuZGVmYXVsdCh7IG5vZGU6IG5vZGUsIGRhdGE6IGRhdGEgfSkgOiBoKFxuICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICB7ICdjbGFzcyc6ICdlbC10cmVlLW5vZGVfX2xhYmVsJyB9LFxuICAgICAgICAgIFtub2RlLmxhYmVsXVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0cmVlOiBudWxsLFxuICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgY2hpbGROb2RlUmVuZGVyZWQ6IGZhbHNlLFxuICAgICAgb2xkQ2hlY2tlZDogbnVsbCxcbiAgICAgIG9sZEluZGV0ZXJtaW5hdGU6IG51bGxcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICAnbm9kZS5pbmRldGVybWluYXRlJzogZnVuY3Rpb24gbm9kZUluZGV0ZXJtaW5hdGUodmFsKSB7XG4gICAgICB0aGlzLmhhbmRsZVNlbGVjdENoYW5nZSh0aGlzLm5vZGUuY2hlY2tlZCwgdmFsKTtcbiAgICB9LFxuICAgICdub2RlLmNoZWNrZWQnOiBmdW5jdGlvbiBub2RlQ2hlY2tlZCh2YWwpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VsZWN0Q2hhbmdlKHZhbCwgdGhpcy5ub2RlLmluZGV0ZXJtaW5hdGUpO1xuICAgIH0sXG4gICAgJ25vZGUuZXhwYW5kZWQnOiBmdW5jdGlvbiBub2RlRXhwYW5kZWQodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5leHBhbmRlZCA9IHZhbDtcbiAgICAgIH0pO1xuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLmNoaWxkTm9kZVJlbmRlcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE5vZGVLZXk6IGZ1bmN0aW9uIGdldE5vZGVLZXkobm9kZSkge1xuICAgICAgcmV0dXJuIHV0aWxfZ2V0Tm9kZUtleSh0aGlzLnRyZWUubm9kZUtleSwgbm9kZS5kYXRhKTtcbiAgICB9LFxuICAgIGhhbmRsZVNlbGVjdENoYW5nZTogZnVuY3Rpb24gaGFuZGxlU2VsZWN0Q2hhbmdlKGNoZWNrZWQsIGluZGV0ZXJtaW5hdGUpIHtcbiAgICAgIGlmICh0aGlzLm9sZENoZWNrZWQgIT09IGNoZWNrZWQgJiYgdGhpcy5vbGRJbmRldGVybWluYXRlICE9PSBpbmRldGVybWluYXRlKSB7XG4gICAgICAgIHRoaXMudHJlZS4kZW1pdCgnY2hlY2stY2hhbmdlJywgdGhpcy5ub2RlLmRhdGEsIGNoZWNrZWQsIGluZGV0ZXJtaW5hdGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5vbGRDaGVja2VkID0gY2hlY2tlZDtcbiAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICB2YXIgc3RvcmUgPSB0aGlzLnRyZWUuc3RvcmU7XG4gICAgICBzdG9yZS5zZXRDdXJyZW50Tm9kZSh0aGlzLm5vZGUpO1xuICAgICAgdGhpcy50cmVlLiRlbWl0KCdjdXJyZW50LWNoYW5nZScsIHN0b3JlLmN1cnJlbnROb2RlID8gc3RvcmUuY3VycmVudE5vZGUuZGF0YSA6IG51bGwsIHN0b3JlLmN1cnJlbnROb2RlKTtcbiAgICAgIHRoaXMudHJlZS5jdXJyZW50Tm9kZSA9IHRoaXM7XG4gICAgICBpZiAodGhpcy50cmVlLmV4cGFuZE9uQ2xpY2tOb2RlKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRXhwYW5kSWNvbkNsaWNrKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50cmVlLmNoZWNrT25DbGlja05vZGUgJiYgIXRoaXMubm9kZS5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrQ2hhbmdlKG51bGwsIHtcbiAgICAgICAgICB0YXJnZXQ6IHsgY2hlY2tlZDogIXRoaXMubm9kZS5jaGVja2VkIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnRyZWUuJGVtaXQoJ25vZGUtY2xpY2snLCB0aGlzLm5vZGUuZGF0YSwgdGhpcy5ub2RlLCB0aGlzKTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbnRleHRNZW51OiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0TWVudShldmVudCkge1xuICAgICAgaWYgKHRoaXMudHJlZS5fZXZlbnRzWydub2RlLWNvbnRleHRtZW51J10gJiYgdGhpcy50cmVlLl9ldmVudHNbJ25vZGUtY29udGV4dG1lbnUnXS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmVlLiRlbWl0KCdub2RlLWNvbnRleHRtZW51JywgZXZlbnQsIHRoaXMubm9kZS5kYXRhLCB0aGlzLm5vZGUsIHRoaXMpO1xuICAgIH0sXG4gICAgaGFuZGxlRXhwYW5kSWNvbkNsaWNrOiBmdW5jdGlvbiBoYW5kbGVFeHBhbmRJY29uQ2xpY2soKSB7XG4gICAgICBpZiAodGhpcy5ub2RlLmlzTGVhZikgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMuZXhwYW5kZWQpIHtcbiAgICAgICAgdGhpcy50cmVlLiRlbWl0KCdub2RlLWNvbGxhcHNlJywgdGhpcy5ub2RlLmRhdGEsIHRoaXMubm9kZSwgdGhpcyk7XG4gICAgICAgIHRoaXMubm9kZS5jb2xsYXBzZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ub2RlLmV4cGFuZCgpO1xuICAgICAgICB0aGlzLiRlbWl0KCdub2RlLWV4cGFuZCcsIHRoaXMubm9kZS5kYXRhLCB0aGlzLm5vZGUsIHRoaXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2hlY2tDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoZWNrQ2hhbmdlKHZhbHVlLCBldikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMubm9kZS5zZXRDaGVja2VkKGV2LnRhcmdldC5jaGVja2VkLCAhdGhpcy50cmVlLmNoZWNrU3RyaWN0bHkpO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RvcmUgPSBfdGhpczIudHJlZS5zdG9yZTtcbiAgICAgICAgX3RoaXMyLnRyZWUuJGVtaXQoJ2NoZWNrJywgX3RoaXMyLm5vZGUuZGF0YSwge1xuICAgICAgICAgIGNoZWNrZWROb2Rlczogc3RvcmUuZ2V0Q2hlY2tlZE5vZGVzKCksXG4gICAgICAgICAgY2hlY2tlZEtleXM6IHN0b3JlLmdldENoZWNrZWRLZXlzKCksXG4gICAgICAgICAgaGFsZkNoZWNrZWROb2Rlczogc3RvcmUuZ2V0SGFsZkNoZWNrZWROb2RlcygpLFxuICAgICAgICAgIGhhbGZDaGVja2VkS2V5czogc3RvcmUuZ2V0SGFsZkNoZWNrZWRLZXlzKClcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhhbmRsZUNoaWxkTm9kZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlQ2hpbGROb2RlRXhwYW5kKG5vZGVEYXRhLCBub2RlLCBpbnN0YW5jZSkge1xuICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsVHJlZU5vZGUnLCAndHJlZS1ub2RlLWV4cGFuZCcsIG5vZGUpO1xuICAgICAgdGhpcy50cmVlLiRlbWl0KCdub2RlLWV4cGFuZCcsIG5vZGVEYXRhLCBub2RlLCBpbnN0YW5jZSk7XG4gICAgfSxcbiAgICBoYW5kbGVEcmFnU3RhcnQ6IGZ1bmN0aW9uIGhhbmRsZURyYWdTdGFydChldmVudCkge1xuICAgICAgaWYgKCF0aGlzLnRyZWUuZHJhZ2dhYmxlKSByZXR1cm47XG4gICAgICB0aGlzLnRyZWUuJGVtaXQoJ3RyZWUtbm9kZS1kcmFnLXN0YXJ0JywgZXZlbnQsIHRoaXMpO1xuICAgIH0sXG4gICAgaGFuZGxlRHJhZ092ZXI6IGZ1bmN0aW9uIGhhbmRsZURyYWdPdmVyKGV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMudHJlZS5kcmFnZ2FibGUpIHJldHVybjtcbiAgICAgIHRoaXMudHJlZS4kZW1pdCgndHJlZS1ub2RlLWRyYWctb3ZlcicsIGV2ZW50LCB0aGlzKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcbiAgICBoYW5kbGVEcm9wOiBmdW5jdGlvbiBoYW5kbGVEcm9wKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH0sXG4gICAgaGFuZGxlRHJhZ0VuZDogZnVuY3Rpb24gaGFuZGxlRHJhZ0VuZChldmVudCkge1xuICAgICAgaWYgKCF0aGlzLnRyZWUuZHJhZ2dhYmxlKSByZXR1cm47XG4gICAgICB0aGlzLnRyZWUuJGVtaXQoJ3RyZWUtbm9kZS1kcmFnLWVuZCcsIGV2ZW50LCB0aGlzKTtcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG5cbiAgICBpZiAocGFyZW50LmlzVHJlZSkge1xuICAgICAgdGhpcy50cmVlID0gcGFyZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyZWUgPSBwYXJlbnQudHJlZTtcbiAgICB9XG5cbiAgICB2YXIgdHJlZSA9IHRoaXMudHJlZTtcbiAgICBpZiAoIXRyZWUpIHtcbiAgICAgIGNvbnNvbGUud2FybignQ2FuIG5vdCBmaW5kIG5vZGVcXCdzIHRyZWUuJyk7XG4gICAgfVxuXG4gICAgdmFyIHByb3BzID0gdHJlZS5wcm9wcyB8fCB7fTtcbiAgICB2YXIgY2hpbGRyZW5LZXkgPSBwcm9wc1snY2hpbGRyZW4nXSB8fCAnY2hpbGRyZW4nO1xuXG4gICAgdGhpcy4kd2F0Y2goJ25vZGUuZGF0YS4nICsgY2hpbGRyZW5LZXksIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5ub2RlLnVwZGF0ZUNoaWxkcmVuKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5ub2RlLmV4cGFuZGVkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hpbGROb2RlUmVuZGVyZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyZWUuYWNjb3JkaW9uKSB7XG4gICAgICB0aGlzLiRvbigndHJlZS1ub2RlLWV4cGFuZCcsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGlmIChfdGhpczMubm9kZSAhPT0gbm9kZSkge1xuICAgICAgICAgIF90aGlzMy5ub2RlLmNvbGxhcHNlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyZWUvc3JjL3RyZWUtbm9kZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RyZWVfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0cmVlX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS1ub2RlLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRyZWVfbm9kZV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY190cmVlX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHRyZWVfbm9kZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzNiYTNlZjBlX3JlbmRlcixcbiAgdHJlZV9ub2RldnVlX3R5cGVfdGVtcGxhdGVfaWRfM2JhM2VmMGVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0cmVlX25vZGVfYXBpOyB9XG50cmVlX25vZGVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90cmVlL3NyYy90cmVlLW5vZGUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRyZWVfbm9kZSA9ICh0cmVlX25vZGVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0cmVldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVHJlZScsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbFRyZWVOb2RlOiB0cmVlX25vZGVcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yZTogbnVsbCxcbiAgICAgIHJvb3Q6IG51bGwsXG4gICAgICBjdXJyZW50Tm9kZTogbnVsbCxcbiAgICAgIHRyZWVJdGVtczogbnVsbCxcbiAgICAgIGNoZWNrYm94SXRlbXM6IFtdLFxuICAgICAgZHJhZ1N0YXRlOiB7XG4gICAgICAgIHNob3dEcm9wSW5kaWNhdG9yOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dpbmdOb2RlOiBudWxsLFxuICAgICAgICBkcm9wTm9kZTogbnVsbCxcbiAgICAgICAgYWxsb3dEcm9wOiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuXG4gIHByb3BzOiB7XG4gICAgZGF0YToge1xuICAgICAgdHlwZTogQXJyYXlcbiAgICB9LFxuICAgIGVtcHR5VGV4dDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QobGliX2xvY2FsZV9bXCJ0XCJdKSgnZWwudHJlZS5lbXB0eVRleHQnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbmRlckFmdGVyRXhwYW5kOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgbm9kZUtleTogU3RyaW5nLFxuICAgIGNoZWNrU3RyaWN0bHk6IEJvb2xlYW4sXG4gICAgZGVmYXVsdEV4cGFuZEFsbDogQm9vbGVhbixcbiAgICBleHBhbmRPbkNsaWNrTm9kZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNoZWNrT25DbGlja05vZGU6IEJvb2xlYW4sXG4gICAgY2hlY2tEZXNjZW5kYW50czoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBhdXRvRXhwYW5kUGFyZW50OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgZGVmYXVsdENoZWNrZWRLZXlzOiBBcnJheSxcbiAgICBkZWZhdWx0RXhwYW5kZWRLZXlzOiBBcnJheSxcbiAgICBjdXJyZW50Tm9kZUtleTogW1N0cmluZywgTnVtYmVyXSxcbiAgICByZW5kZXJDb250ZW50OiBGdW5jdGlvbixcbiAgICBzaG93Q2hlY2tib3g6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgZHJhZ2dhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGFsbG93RHJhZzogRnVuY3Rpb24sXG4gICAgYWxsb3dEcm9wOiBGdW5jdGlvbixcbiAgICBwcm9wczoge1xuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gICAgICAgICAgbGFiZWw6ICdsYWJlbCcsXG4gICAgICAgICAgZGlzYWJsZWQ6ICdkaXNhYmxlZCdcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGxhenk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgaGlnaGxpZ2h0Q3VycmVudDogQm9vbGVhbixcbiAgICBsb2FkOiBGdW5jdGlvbixcbiAgICBmaWx0ZXJOb2RlTWV0aG9kOiBGdW5jdGlvbixcbiAgICBhY2NvcmRpb246IEJvb2xlYW4sXG4gICAgaW5kZW50OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxOFxuICAgIH0sXG4gICAgaWNvbkNsYXNzOiBTdHJpbmdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNoaWxkcmVuOiB7XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdHJlZUl0ZW1BcnJheTogZnVuY3Rpb24gdHJlZUl0ZW1BcnJheSgpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLnRyZWVJdGVtcyk7XG4gICAgfSxcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgICAgdmFyIGNoaWxkTm9kZXMgPSB0aGlzLnJvb3QuY2hpbGROb2RlcztcblxuICAgICAgcmV0dXJuICFjaGlsZE5vZGVzIHx8IGNoaWxkTm9kZXMubGVuZ3RoID09PSAwIHx8IGNoaWxkTm9kZXMuZXZlcnkoZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIHZpc2libGUgPSBfcmVmLnZpc2libGU7XG4gICAgICAgIHJldHVybiAhdmlzaWJsZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGRlZmF1bHRDaGVja2VkS2V5czogZnVuY3Rpb24gZGVmYXVsdENoZWNrZWRLZXlzKG5ld1ZhbCkge1xuICAgICAgdGhpcy5zdG9yZS5zZXREZWZhdWx0Q2hlY2tlZEtleShuZXdWYWwpO1xuICAgIH0sXG4gICAgZGVmYXVsdEV4cGFuZGVkS2V5czogZnVuY3Rpb24gZGVmYXVsdEV4cGFuZGVkS2V5cyhuZXdWYWwpIHtcbiAgICAgIHRoaXMuc3RvcmUuZGVmYXVsdEV4cGFuZGVkS2V5cyA9IG5ld1ZhbDtcbiAgICAgIHRoaXMuc3RvcmUuc2V0RGVmYXVsdEV4cGFuZGVkS2V5cyhuZXdWYWwpO1xuICAgIH0sXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YShuZXdWYWwpIHtcbiAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShuZXdWYWwpO1xuICAgIH0sXG4gICAgY2hlY2tib3hJdGVtczogZnVuY3Rpb24gY2hlY2tib3hJdGVtcyh2YWwpIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwodmFsLCBmdW5jdGlvbiAoY2hlY2tib3gpIHtcbiAgICAgICAgY2hlY2tib3guc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIC0xKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgY2hlY2tTdHJpY3RseTogZnVuY3Rpb24gY2hlY2tTdHJpY3RseShuZXdWYWwpIHtcbiAgICAgIHRoaXMuc3RvcmUuY2hlY2tTdHJpY3RseSA9IG5ld1ZhbDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKHZhbHVlKSB7XG4gICAgICBpZiAoIXRoaXMuZmlsdGVyTm9kZU1ldGhvZCkgdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gZmlsdGVyTm9kZU1ldGhvZCBpcyByZXF1aXJlZCB3aGVuIGZpbHRlcicpO1xuICAgICAgdGhpcy5zdG9yZS5maWx0ZXIodmFsdWUpO1xuICAgIH0sXG4gICAgZ2V0Tm9kZUtleTogZnVuY3Rpb24gZ2V0Tm9kZUtleShub2RlKSB7XG4gICAgICByZXR1cm4gdXRpbF9nZXROb2RlS2V5KHRoaXMubm9kZUtleSwgbm9kZS5kYXRhKTtcbiAgICB9LFxuICAgIGdldE5vZGVQYXRoOiBmdW5jdGlvbiBnZXROb2RlUGF0aChkYXRhKSB7XG4gICAgICBpZiAoIXRoaXMubm9kZUtleSkgdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiBnZXROb2RlUGF0aCcpO1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLnN0b3JlLmdldE5vZGUoZGF0YSk7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybiBbXTtcbiAgICAgIHZhciBwYXRoID0gW25vZGUuZGF0YV07XG4gICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG4gICAgICB3aGlsZSAocGFyZW50ICYmIHBhcmVudCAhPT0gdGhpcy5yb290KSB7XG4gICAgICAgIHBhdGgucHVzaChwYXJlbnQuZGF0YSk7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0aC5yZXZlcnNlKCk7XG4gICAgfSxcbiAgICBnZXRDaGVja2VkTm9kZXM6IGZ1bmN0aW9uIGdldENoZWNrZWROb2RlcyhsZWFmT25seSwgaW5jbHVkZUhhbGZDaGVja2VkKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRDaGVja2VkTm9kZXMobGVhZk9ubHksIGluY2x1ZGVIYWxmQ2hlY2tlZCk7XG4gICAgfSxcbiAgICBnZXRDaGVja2VkS2V5czogZnVuY3Rpb24gZ2V0Q2hlY2tlZEtleXMobGVhZk9ubHkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldENoZWNrZWRLZXlzKGxlYWZPbmx5KTtcbiAgICB9LFxuICAgIGdldEN1cnJlbnROb2RlOiBmdW5jdGlvbiBnZXRDdXJyZW50Tm9kZSgpIHtcbiAgICAgIHZhciBjdXJyZW50Tm9kZSA9IHRoaXMuc3RvcmUuZ2V0Q3VycmVudE5vZGUoKTtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZSA/IGN1cnJlbnROb2RlLmRhdGEgOiBudWxsO1xuICAgIH0sXG4gICAgZ2V0Q3VycmVudEtleTogZnVuY3Rpb24gZ2V0Q3VycmVudEtleSgpIHtcbiAgICAgIGlmICghdGhpcy5ub2RlS2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIGdldEN1cnJlbnRLZXknKTtcbiAgICAgIHZhciBjdXJyZW50Tm9kZSA9IHRoaXMuZ2V0Q3VycmVudE5vZGUoKTtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZSA/IGN1cnJlbnROb2RlW3RoaXMubm9kZUtleV0gOiBudWxsO1xuICAgIH0sXG4gICAgc2V0Q2hlY2tlZE5vZGVzOiBmdW5jdGlvbiBzZXRDaGVja2VkTm9kZXMobm9kZXMsIGxlYWZPbmx5KSB7XG4gICAgICBpZiAoIXRoaXMubm9kZUtleSkgdGhyb3cgbmV3IEVycm9yKCdbVHJlZV0gbm9kZUtleSBpcyByZXF1aXJlZCBpbiBzZXRDaGVja2VkTm9kZXMnKTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0Q2hlY2tlZE5vZGVzKG5vZGVzLCBsZWFmT25seSk7XG4gICAgfSxcbiAgICBzZXRDaGVja2VkS2V5czogZnVuY3Rpb24gc2V0Q2hlY2tlZEtleXMoa2V5cywgbGVhZk9ubHkpIHtcbiAgICAgIGlmICghdGhpcy5ub2RlS2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIHNldENoZWNrZWRLZXlzJyk7XG4gICAgICB0aGlzLnN0b3JlLnNldENoZWNrZWRLZXlzKGtleXMsIGxlYWZPbmx5KTtcbiAgICB9LFxuICAgIHNldENoZWNrZWQ6IGZ1bmN0aW9uIHNldENoZWNrZWQoZGF0YSwgY2hlY2tlZCwgZGVlcCkge1xuICAgICAgdGhpcy5zdG9yZS5zZXRDaGVja2VkKGRhdGEsIGNoZWNrZWQsIGRlZXApO1xuICAgIH0sXG4gICAgZ2V0SGFsZkNoZWNrZWROb2RlczogZnVuY3Rpb24gZ2V0SGFsZkNoZWNrZWROb2RlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEhhbGZDaGVja2VkTm9kZXMoKTtcbiAgICB9LFxuICAgIGdldEhhbGZDaGVja2VkS2V5czogZnVuY3Rpb24gZ2V0SGFsZkNoZWNrZWRLZXlzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0SGFsZkNoZWNrZWRLZXlzKCk7XG4gICAgfSxcbiAgICBzZXRDdXJyZW50Tm9kZTogZnVuY3Rpb24gc2V0Q3VycmVudE5vZGUobm9kZSkge1xuICAgICAgaWYgKCF0aGlzLm5vZGVLZXkpIHRocm93IG5ldyBFcnJvcignW1RyZWVdIG5vZGVLZXkgaXMgcmVxdWlyZWQgaW4gc2V0Q3VycmVudE5vZGUnKTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0VXNlckN1cnJlbnROb2RlKG5vZGUpO1xuICAgIH0sXG4gICAgc2V0Q3VycmVudEtleTogZnVuY3Rpb24gc2V0Q3VycmVudEtleShrZXkpIHtcbiAgICAgIGlmICghdGhpcy5ub2RlS2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIHNldEN1cnJlbnRLZXknKTtcbiAgICAgIHRoaXMuc3RvcmUuc2V0Q3VycmVudE5vZGVLZXkoa2V5KTtcbiAgICB9LFxuICAgIGdldE5vZGU6IGZ1bmN0aW9uIGdldE5vZGUoZGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0Tm9kZShkYXRhKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKGRhdGEpIHtcbiAgICAgIHRoaXMuc3RvcmUucmVtb3ZlKGRhdGEpO1xuICAgIH0sXG4gICAgYXBwZW5kOiBmdW5jdGlvbiBhcHBlbmQoZGF0YSwgcGFyZW50Tm9kZSkge1xuICAgICAgdGhpcy5zdG9yZS5hcHBlbmQoZGF0YSwgcGFyZW50Tm9kZSk7XG4gICAgfSxcbiAgICBpbnNlcnRCZWZvcmU6IGZ1bmN0aW9uIGluc2VydEJlZm9yZShkYXRhLCByZWZOb2RlKSB7XG4gICAgICB0aGlzLnN0b3JlLmluc2VydEJlZm9yZShkYXRhLCByZWZOb2RlKTtcbiAgICB9LFxuICAgIGluc2VydEFmdGVyOiBmdW5jdGlvbiBpbnNlcnRBZnRlcihkYXRhLCByZWZOb2RlKSB7XG4gICAgICB0aGlzLnN0b3JlLmluc2VydEFmdGVyKGRhdGEsIHJlZk5vZGUpO1xuICAgIH0sXG4gICAgaGFuZGxlTm9kZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlTm9kZUV4cGFuZChub2RlRGF0YSwgbm9kZSwgaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuYnJvYWRjYXN0KCdFbFRyZWVOb2RlJywgJ3RyZWUtbm9kZS1leHBhbmQnLCBub2RlKTtcbiAgICAgIHRoaXMuJGVtaXQoJ25vZGUtZXhwYW5kJywgbm9kZURhdGEsIG5vZGUsIGluc3RhbmNlKTtcbiAgICB9LFxuICAgIHVwZGF0ZUtleUNoaWxkcmVuOiBmdW5jdGlvbiB1cGRhdGVLZXlDaGlsZHJlbihrZXksIGRhdGEpIHtcbiAgICAgIGlmICghdGhpcy5ub2RlS2V5KSB0aHJvdyBuZXcgRXJyb3IoJ1tUcmVlXSBub2RlS2V5IGlzIHJlcXVpcmVkIGluIHVwZGF0ZUtleUNoaWxkJyk7XG4gICAgICB0aGlzLnN0b3JlLnVwZGF0ZUNoaWxkcmVuKGtleSwgZGF0YSk7XG4gICAgfSxcbiAgICBpbml0VGFiSW5kZXg6IGZ1bmN0aW9uIGluaXRUYWJJbmRleCgpIHtcbiAgICAgIHRoaXMudHJlZUl0ZW1zID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnLmlzLWZvY3VzYWJsZVtyb2xlPXRyZWVpdGVtXScpO1xuICAgICAgdGhpcy5jaGVja2JveEl0ZW1zID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnaW5wdXRbdHlwZT1jaGVja2JveF0nKTtcbiAgICAgIHZhciBjaGVja2VkSXRlbSA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5pcy1jaGVja2VkW3JvbGU9dHJlZWl0ZW1dJyk7XG4gICAgICBpZiAoY2hlY2tlZEl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgIGNoZWNrZWRJdGVtWzBdLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy50cmVlSXRlbXNbMF0gJiYgdGhpcy50cmVlSXRlbXNbMF0uc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsIDApO1xuICAgIH0sXG4gICAgaGFuZGxlS2V5ZG93bjogZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihldikge1xuICAgICAgdmFyIGN1cnJlbnRJdGVtID0gZXYudGFyZ2V0O1xuICAgICAgaWYgKGN1cnJlbnRJdGVtLmNsYXNzTmFtZS5pbmRleE9mKCdlbC10cmVlLW5vZGUnKSA9PT0gLTEpIHJldHVybjtcbiAgICAgIHZhciBrZXlDb2RlID0gZXYua2V5Q29kZTtcbiAgICAgIHRoaXMudHJlZUl0ZW1zID0gdGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnLmlzLWZvY3VzYWJsZVtyb2xlPXRyZWVpdGVtXScpO1xuICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IHRoaXMudHJlZUl0ZW1BcnJheS5pbmRleE9mKGN1cnJlbnRJdGVtKTtcbiAgICAgIHZhciBuZXh0SW5kZXggPSB2b2lkIDA7XG4gICAgICBpZiAoWzM4LCA0MF0uaW5kZXhPZihrZXlDb2RlKSA+IC0xKSB7XG4gICAgICAgIC8vIHVw44CBZG93blxuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgICAgICAvLyB1cFxuICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCAhPT0gMCA/IGN1cnJlbnRJbmRleCAtIDEgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5leHRJbmRleCA9IGN1cnJlbnRJbmRleCA8IHRoaXMudHJlZUl0ZW1BcnJheS5sZW5ndGggLSAxID8gY3VycmVudEluZGV4ICsgMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cmVlSXRlbUFycmF5W25leHRJbmRleF0uZm9jdXMoKTsgLy8g6YCJ5LitXG4gICAgICB9XG4gICAgICBpZiAoWzM3LCAzOV0uaW5kZXhPZihrZXlDb2RlKSA+IC0xKSB7XG4gICAgICAgIC8vIGxlZnTjgIFyaWdodCDlsZXlvIBcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY3VycmVudEl0ZW0uY2xpY2soKTsgLy8g6YCJ5LitXG4gICAgICB9XG4gICAgICB2YXIgaGFzSW5wdXQgPSBjdXJyZW50SXRlbS5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImNoZWNrYm94XCJdJyk7XG4gICAgICBpZiAoWzEzLCAzMl0uaW5kZXhPZihrZXlDb2RlKSA+IC0xICYmIGhhc0lucHV0KSB7XG4gICAgICAgIC8vIHNwYWNlIGVudGVy6YCJ5LitY2hlY2tib3hcbiAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaGFzSW5wdXQuY2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdGhpcy5pc1RyZWUgPSB0cnVlO1xuXG4gICAgdGhpcy5zdG9yZSA9IG5ldyB0cmVlX3N0b3JlKHtcbiAgICAgIGtleTogdGhpcy5ub2RlS2V5LFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgbGF6eTogdGhpcy5sYXp5LFxuICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICBsb2FkOiB0aGlzLmxvYWQsXG4gICAgICBjdXJyZW50Tm9kZUtleTogdGhpcy5jdXJyZW50Tm9kZUtleSxcbiAgICAgIGNoZWNrU3RyaWN0bHk6IHRoaXMuY2hlY2tTdHJpY3RseSxcbiAgICAgIGNoZWNrRGVzY2VuZGFudHM6IHRoaXMuY2hlY2tEZXNjZW5kYW50cyxcbiAgICAgIGRlZmF1bHRDaGVja2VkS2V5czogdGhpcy5kZWZhdWx0Q2hlY2tlZEtleXMsXG4gICAgICBkZWZhdWx0RXhwYW5kZWRLZXlzOiB0aGlzLmRlZmF1bHRFeHBhbmRlZEtleXMsXG4gICAgICBhdXRvRXhwYW5kUGFyZW50OiB0aGlzLmF1dG9FeHBhbmRQYXJlbnQsXG4gICAgICBkZWZhdWx0RXhwYW5kQWxsOiB0aGlzLmRlZmF1bHRFeHBhbmRBbGwsXG4gICAgICBmaWx0ZXJOb2RlTWV0aG9kOiB0aGlzLmZpbHRlck5vZGVNZXRob2RcbiAgICB9KTtcblxuICAgIHRoaXMucm9vdCA9IHRoaXMuc3RvcmUucm9vdDtcblxuICAgIHZhciBkcmFnU3RhdGUgPSB0aGlzLmRyYWdTdGF0ZTtcbiAgICB0aGlzLiRvbigndHJlZS1ub2RlLWRyYWctc3RhcnQnLCBmdW5jdGlvbiAoZXZlbnQsIHRyZWVOb2RlKSB7XG4gICAgICBpZiAodHlwZW9mIF90aGlzLmFsbG93RHJhZyA9PT0gJ2Z1bmN0aW9uJyAmJiAhX3RoaXMuYWxsb3dEcmFnKHRyZWVOb2RlLm5vZGUpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuXG4gICAgICAvLyB3cmFwIGluIHRyeSBjYXRjaCB0byBhZGRyZXNzIElFJ3MgZXJyb3Igd2hlbiBmaXJzdCBwYXJhbSBpcyAndGV4dC9wbGFpbidcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIHNldERhdGEgaXMgcmVxdWlyZWQgZm9yIGRyYWdnYWJsZSB0byB3b3JrIGluIEZpcmVGb3hcbiAgICAgICAgLy8gdGhlIGNvbnRlbnQgaGFzIHRvIGJlICcnIHNvIGRyYWdnaW5nIGEgbm9kZSBvdXQgb2YgdGhlIHRyZWUgd29uJ3Qgb3BlbiBhIG5ldyB0YWIgaW4gRmlyZUZveFxuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dC9wbGFpbicsICcnKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICBkcmFnU3RhdGUuZHJhZ2dpbmdOb2RlID0gdHJlZU5vZGU7XG4gICAgICBfdGhpcy4kZW1pdCgnbm9kZS1kcmFnLXN0YXJ0JywgdHJlZU5vZGUubm9kZSwgZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy4kb24oJ3RyZWUtbm9kZS1kcmFnLW92ZXInLCBmdW5jdGlvbiAoZXZlbnQsIHRyZWVOb2RlKSB7XG4gICAgICB2YXIgZHJvcE5vZGUgPSBmaW5kTmVhcmVzdENvbXBvbmVudChldmVudC50YXJnZXQsICdFbFRyZWVOb2RlJyk7XG4gICAgICB2YXIgb2xkRHJvcE5vZGUgPSBkcmFnU3RhdGUuZHJvcE5vZGU7XG4gICAgICBpZiAob2xkRHJvcE5vZGUgJiYgb2xkRHJvcE5vZGUgIT09IGRyb3BOb2RlKSB7XG4gICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKG9sZERyb3BOb2RlLiRlbCwgJ2lzLWRyb3AtaW5uZXInKTtcbiAgICAgIH1cbiAgICAgIHZhciBkcmFnZ2luZ05vZGUgPSBkcmFnU3RhdGUuZHJhZ2dpbmdOb2RlO1xuICAgICAgaWYgKCFkcmFnZ2luZ05vZGUgfHwgIWRyb3BOb2RlKSByZXR1cm47XG5cbiAgICAgIHZhciBkcm9wUHJldiA9IHRydWU7XG4gICAgICB2YXIgZHJvcElubmVyID0gdHJ1ZTtcbiAgICAgIHZhciBkcm9wTmV4dCA9IHRydWU7XG4gICAgICB2YXIgdXNlckFsbG93RHJvcElubmVyID0gdHJ1ZTtcbiAgICAgIGlmICh0eXBlb2YgX3RoaXMuYWxsb3dEcm9wID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGRyb3BQcmV2ID0gX3RoaXMuYWxsb3dEcm9wKGRyYWdnaW5nTm9kZS5ub2RlLCBkcm9wTm9kZS5ub2RlLCAncHJldicpO1xuICAgICAgICB1c2VyQWxsb3dEcm9wSW5uZXIgPSBkcm9wSW5uZXIgPSBfdGhpcy5hbGxvd0Ryb3AoZHJhZ2dpbmdOb2RlLm5vZGUsIGRyb3BOb2RlLm5vZGUsICdpbm5lcicpO1xuICAgICAgICBkcm9wTmV4dCA9IF90aGlzLmFsbG93RHJvcChkcmFnZ2luZ05vZGUubm9kZSwgZHJvcE5vZGUubm9kZSwgJ25leHQnKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gZHJvcElubmVyID8gJ21vdmUnIDogJ25vbmUnO1xuICAgICAgaWYgKChkcm9wUHJldiB8fCBkcm9wSW5uZXIgfHwgZHJvcE5leHQpICYmIG9sZERyb3BOb2RlICE9PSBkcm9wTm9kZSkge1xuICAgICAgICBpZiAob2xkRHJvcE5vZGUpIHtcbiAgICAgICAgICBfdGhpcy4kZW1pdCgnbm9kZS1kcmFnLWxlYXZlJywgZHJhZ2dpbmdOb2RlLm5vZGUsIG9sZERyb3BOb2RlLm5vZGUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy4kZW1pdCgnbm9kZS1kcmFnLWVudGVyJywgZHJhZ2dpbmdOb2RlLm5vZGUsIGRyb3BOb2RlLm5vZGUsIGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRyb3BQcmV2IHx8IGRyb3BJbm5lciB8fCBkcm9wTmV4dCkge1xuICAgICAgICBkcmFnU3RhdGUuZHJvcE5vZGUgPSBkcm9wTm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRyb3BOb2RlLm5vZGUubmV4dFNpYmxpbmcgPT09IGRyYWdnaW5nTm9kZS5ub2RlKSB7XG4gICAgICAgIGRyb3BOZXh0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZHJvcE5vZGUubm9kZS5wcmV2aW91c1NpYmxpbmcgPT09IGRyYWdnaW5nTm9kZS5ub2RlKSB7XG4gICAgICAgIGRyb3BQcmV2ID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZHJvcE5vZGUubm9kZS5jb250YWlucyhkcmFnZ2luZ05vZGUubm9kZSwgZmFsc2UpKSB7XG4gICAgICAgIGRyb3BJbm5lciA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGRyYWdnaW5nTm9kZS5ub2RlID09PSBkcm9wTm9kZS5ub2RlIHx8IGRyYWdnaW5nTm9kZS5ub2RlLmNvbnRhaW5zKGRyb3BOb2RlLm5vZGUpKSB7XG4gICAgICAgIGRyb3BQcmV2ID0gZmFsc2U7XG4gICAgICAgIGRyb3BJbm5lciA9IGZhbHNlO1xuICAgICAgICBkcm9wTmV4dCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB2YXIgdGFyZ2V0UG9zaXRpb24gPSBkcm9wTm9kZS4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgdHJlZVBvc2l0aW9uID0gX3RoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICB2YXIgZHJvcFR5cGUgPSB2b2lkIDA7XG4gICAgICB2YXIgcHJldlBlcmNlbnQgPSBkcm9wUHJldiA/IGRyb3BJbm5lciA/IDAuMjUgOiBkcm9wTmV4dCA/IDAuNDUgOiAxIDogLTE7XG4gICAgICB2YXIgbmV4dFBlcmNlbnQgPSBkcm9wTmV4dCA/IGRyb3BJbm5lciA/IDAuNzUgOiBkcm9wUHJldiA/IDAuNTUgOiAwIDogMTtcblxuICAgICAgdmFyIGluZGljYXRvclRvcCA9IC05OTk5O1xuICAgICAgdmFyIGRpc3RhbmNlID0gZXZlbnQuY2xpZW50WSAtIHRhcmdldFBvc2l0aW9uLnRvcDtcbiAgICAgIGlmIChkaXN0YW5jZSA8IHRhcmdldFBvc2l0aW9uLmhlaWdodCAqIHByZXZQZXJjZW50KSB7XG4gICAgICAgIGRyb3BUeXBlID0gJ2JlZm9yZSc7XG4gICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID4gdGFyZ2V0UG9zaXRpb24uaGVpZ2h0ICogbmV4dFBlcmNlbnQpIHtcbiAgICAgICAgZHJvcFR5cGUgPSAnYWZ0ZXInO1xuICAgICAgfSBlbHNlIGlmIChkcm9wSW5uZXIpIHtcbiAgICAgICAgZHJvcFR5cGUgPSAnaW5uZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHJvcFR5cGUgPSAnbm9uZSc7XG4gICAgICB9XG5cbiAgICAgIHZhciBpY29uUG9zaXRpb24gPSBkcm9wTm9kZS4kZWwucXVlcnlTZWxlY3RvcignLmVsLXRyZWUtbm9kZV9fZXhwYW5kLWljb24nKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHZhciBkcm9wSW5kaWNhdG9yID0gX3RoaXMuJHJlZnMuZHJvcEluZGljYXRvcjtcbiAgICAgIGlmIChkcm9wVHlwZSA9PT0gJ2JlZm9yZScpIHtcbiAgICAgICAgaW5kaWNhdG9yVG9wID0gaWNvblBvc2l0aW9uLnRvcCAtIHRyZWVQb3NpdGlvbi50b3A7XG4gICAgICB9IGVsc2UgaWYgKGRyb3BUeXBlID09PSAnYWZ0ZXInKSB7XG4gICAgICAgIGluZGljYXRvclRvcCA9IGljb25Qb3NpdGlvbi5ib3R0b20gLSB0cmVlUG9zaXRpb24udG9wO1xuICAgICAgfVxuICAgICAgZHJvcEluZGljYXRvci5zdHlsZS50b3AgPSBpbmRpY2F0b3JUb3AgKyAncHgnO1xuICAgICAgZHJvcEluZGljYXRvci5zdHlsZS5sZWZ0ID0gaWNvblBvc2l0aW9uLnJpZ2h0IC0gdHJlZVBvc2l0aW9uLmxlZnQgKyAncHgnO1xuXG4gICAgICBpZiAoZHJvcFR5cGUgPT09ICdpbm5lcicpIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkoZHJvcE5vZGUuJGVsLCAnaXMtZHJvcC1pbm5lcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkoZHJvcE5vZGUuJGVsLCAnaXMtZHJvcC1pbm5lcicpO1xuICAgICAgfVxuXG4gICAgICBkcmFnU3RhdGUuc2hvd0Ryb3BJbmRpY2F0b3IgPSBkcm9wVHlwZSA9PT0gJ2JlZm9yZScgfHwgZHJvcFR5cGUgPT09ICdhZnRlcic7XG4gICAgICBkcmFnU3RhdGUuYWxsb3dEcm9wID0gZHJhZ1N0YXRlLnNob3dEcm9wSW5kaWNhdG9yIHx8IHVzZXJBbGxvd0Ryb3BJbm5lcjtcbiAgICAgIGRyYWdTdGF0ZS5kcm9wVHlwZSA9IGRyb3BUeXBlO1xuICAgICAgX3RoaXMuJGVtaXQoJ25vZGUtZHJhZy1vdmVyJywgZHJhZ2dpbmdOb2RlLm5vZGUsIGRyb3BOb2RlLm5vZGUsIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuJG9uKCd0cmVlLW5vZGUtZHJhZy1lbmQnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIHZhciBkcmFnZ2luZ05vZGUgPSBkcmFnU3RhdGUuZHJhZ2dpbmdOb2RlLFxuICAgICAgICAgIGRyb3BUeXBlID0gZHJhZ1N0YXRlLmRyb3BUeXBlLFxuICAgICAgICAgIGRyb3BOb2RlID0gZHJhZ1N0YXRlLmRyb3BOb2RlO1xuXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7XG5cbiAgICAgIGlmIChkcmFnZ2luZ05vZGUgJiYgZHJvcE5vZGUpIHtcbiAgICAgICAgdmFyIGRyYWdnaW5nTm9kZUNvcHkgPSB7IGRhdGE6IGRyYWdnaW5nTm9kZS5ub2RlLmRhdGEgfTtcbiAgICAgICAgaWYgKGRyb3BUeXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICBkcmFnZ2luZ05vZGUubm9kZS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZHJvcFR5cGUgPT09ICdiZWZvcmUnKSB7XG4gICAgICAgICAgZHJvcE5vZGUubm9kZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKGRyYWdnaW5nTm9kZUNvcHksIGRyb3BOb2RlLm5vZGUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRyb3BUeXBlID09PSAnYWZ0ZXInKSB7XG4gICAgICAgICAgZHJvcE5vZGUubm9kZS5wYXJlbnQuaW5zZXJ0QWZ0ZXIoZHJhZ2dpbmdOb2RlQ29weSwgZHJvcE5vZGUubm9kZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZHJvcFR5cGUgPT09ICdpbm5lcicpIHtcbiAgICAgICAgICBkcm9wTm9kZS5ub2RlLmluc2VydENoaWxkKGRyYWdnaW5nTm9kZUNvcHkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkcm9wVHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgX3RoaXMuc3RvcmUucmVnaXN0ZXJOb2RlKGRyYWdnaW5nTm9kZUNvcHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkoZHJvcE5vZGUuJGVsLCAnaXMtZHJvcC1pbm5lcicpO1xuXG4gICAgICAgIF90aGlzLiRlbWl0KCdub2RlLWRyYWctZW5kJywgZHJhZ2dpbmdOb2RlLm5vZGUsIGRyb3BOb2RlLm5vZGUsIGRyb3BUeXBlLCBldmVudCk7XG4gICAgICAgIGlmIChkcm9wVHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgX3RoaXMuJGVtaXQoJ25vZGUtZHJvcCcsIGRyYWdnaW5nTm9kZS5ub2RlLCBkcm9wTm9kZS5ub2RlLCBkcm9wVHlwZSwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZHJhZ2dpbmdOb2RlICYmICFkcm9wTm9kZSkge1xuICAgICAgICBfdGhpcy4kZW1pdCgnbm9kZS1kcmFnLWVuZCcsIGRyYWdnaW5nTm9kZS5ub2RlLCBudWxsLCBkcm9wVHlwZSwgZXZlbnQpO1xuICAgICAgfVxuXG4gICAgICBkcmFnU3RhdGUuc2hvd0Ryb3BJbmRpY2F0b3IgPSBmYWxzZTtcbiAgICAgIGRyYWdTdGF0ZS5kcmFnZ2luZ05vZGUgPSBudWxsO1xuICAgICAgZHJhZ1N0YXRlLmRyb3BOb2RlID0gbnVsbDtcbiAgICAgIGRyYWdTdGF0ZS5hbGxvd0Ryb3AgPSB0cnVlO1xuICAgIH0pO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuaW5pdFRhYkluZGV4KCk7XG4gICAgdGhpcy4kZWwuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bik7XG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgdGhpcy50cmVlSXRlbXMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT10cmVlaXRlbV0nKTtcbiAgICB0aGlzLmNoZWNrYm94SXRlbXMgPSB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPWNoZWNrYm94XScpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9zcmMvdHJlZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RyZWV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAodHJlZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRyZWVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfdHJlZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdHJlZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0NzU3NWE2X3JlbmRlcixcbiAgdHJlZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU0NzU3NWE2X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdHJlZV9hcGk7IH1cbnRyZWVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90cmVlL3NyYy90cmVlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdHJlZSA9ICh0cmVlX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJlZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5zcmNfdHJlZS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY190cmVlLm5hbWUsIHNyY190cmVlKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3RyZWUgPSAoc3JjX3RyZWUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9hbGVydC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NmU1MzM0MWImXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZlNTMzNDFiX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRyYW5zaXRpb25cIiwgeyBhdHRyczogeyBuYW1lOiBcImVsLWFsZXJ0LWZhZGVcIiB9IH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtYWxlcnRcIixcbiAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICBfdm0udHlwZUNsYXNzLFxuICAgICAgICAgIF92bS5jZW50ZXIgPyBcImlzLWNlbnRlclwiIDogXCJcIixcbiAgICAgICAgICBcImlzLVwiICsgX3ZtLmVmZmVjdFxuICAgICAgICBdLFxuICAgICAgICBhdHRyczogeyByb2xlOiBcImFsZXJ0XCIgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX3ZtLnNob3dJY29uXG4gICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1hbGVydF9faWNvblwiLFxuICAgICAgICAgICAgICBjbGFzczogW192bS5pY29uQ2xhc3MsIF92bS5pc0JpZ0ljb25dXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtYWxlcnRfX2NvbnRlbnRcIiB9LCBbXG4gICAgICAgICAgX3ZtLnRpdGxlIHx8IF92bS4kc2xvdHMudGl0bGVcbiAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1hbGVydF9fdGl0bGVcIiwgY2xhc3M6IFtfdm0uaXNCb2xkVGl0bGVdIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdChcInRpdGxlXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSldLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uJHNsb3RzLmRlZmF1bHQgJiYgIV92bS5kZXNjcmlwdGlvblxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcInBcIixcbiAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWFsZXJ0X19kZXNjcmlwdGlvblwiIH0sXG4gICAgICAgICAgICAgICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uZGVzY3JpcHRpb24gJiYgIV92bS4kc2xvdHMuZGVmYXVsdFxuICAgICAgICAgICAgPyBfYyhcInBcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1hbGVydF9fZGVzY3JpcHRpb25cIiB9LCBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uZGVzY3JpcHRpb24pKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiaVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5jbG9zYWJsZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiY2xvc2FibGVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtYWxlcnRfX2Nsb3NlYnRuXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgXCJpcy1jdXN0b21lZFwiOiBfdm0uY2xvc2VUZXh0ICE9PSBcIlwiLFxuICAgICAgICAgICAgICAgIFwiZWwtaWNvbi1jbG9zZVwiOiBfdm0uY2xvc2VUZXh0ID09PSBcIlwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgX3ZtLmNsb3NlKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0uY2xvc2VUZXh0KSldXG4gICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgXVxuICAgIClcbiAgXSlcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNmU1MzM0MWJfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZTUzMzQxYl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2FsZXJ0L3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02ZTUzMzQxYiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYWxlcnQvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG52YXIgVFlQRV9DTEFTU0VTX01BUCA9IHtcbiAgJ3N1Y2Nlc3MnOiAnZWwtaWNvbi1zdWNjZXNzJyxcbiAgJ3dhcm5pbmcnOiAnZWwtaWNvbi13YXJuaW5nJyxcbiAgJ2Vycm9yJzogJ2VsLWljb24tZXJyb3InXG59O1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYWxlcnRfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxBbGVydCcsXG5cbiAgcHJvcHM6IHtcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2luZm8nXG4gICAgfSxcbiAgICBjbG9zYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNsb3NlVGV4dDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIHNob3dJY29uOiBCb29sZWFuLFxuICAgIGNlbnRlcjogQm9vbGVhbixcbiAgICBlZmZlY3Q6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdsaWdodCcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gWydsaWdodCcsICdkYXJrJ10uaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiB0cnVlXG4gICAgfTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBjbG9zZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdHlwZUNsYXNzOiBmdW5jdGlvbiB0eXBlQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gJ2VsLWFsZXJ0LS0nICsgdGhpcy50eXBlO1xuICAgIH0sXG4gICAgaWNvbkNsYXNzOiBmdW5jdGlvbiBpY29uQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gVFlQRV9DTEFTU0VTX01BUFt0aGlzLnR5cGVdIHx8ICdlbC1pY29uLWluZm8nO1xuICAgIH0sXG4gICAgaXNCaWdJY29uOiBmdW5jdGlvbiBpc0JpZ0ljb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdGlvbiB8fCB0aGlzLiRzbG90cy5kZWZhdWx0ID8gJ2lzLWJpZycgOiAnJztcbiAgICB9LFxuICAgIGlzQm9sZFRpdGxlOiBmdW5jdGlvbiBpc0JvbGRUaXRsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uIHx8IHRoaXMuJHNsb3RzLmRlZmF1bHQgPyAnaXMtYm9sZCcgOiAnJztcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hbGVydC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfYWxlcnRfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoYWxlcnRfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYWxlcnQvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgYWxlcnRfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19hbGVydF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZlNTMzNDFiX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZlNTMzNDFiX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYWxlcnRfc3JjX21haW5fYXBpOyB9XG5hbGVydF9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2FsZXJ0L3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhbGVydF9zcmNfbWFpbiA9IChhbGVydF9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2FsZXJ0L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmFsZXJ0X3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoYWxlcnRfc3JjX21haW4ubmFtZSwgYWxlcnRfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfYWxlcnQgPSAoYWxlcnRfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQzZGJjM2Q4JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80M2RiYzNkOF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJ0cmFuc2l0aW9uXCIsIHsgYXR0cnM6IHsgbmFtZTogXCJlbC1ub3RpZmljYXRpb24tZmFkZVwiIH0gfSwgW1xuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjbGFzczogW1wiZWwtbm90aWZpY2F0aW9uXCIsIF92bS5jdXN0b21DbGFzcywgX3ZtLmhvcml6b250YWxDbGFzc10sXG4gICAgICAgIHN0eWxlOiBfdm0ucG9zaXRpb25TdHlsZSxcbiAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJhbGVydFwiIH0sXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBfdm0uY2xlYXJUaW1lcigpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgIF92bS5zdGFydFRpbWVyKClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsaWNrOiBfdm0uY2xpY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX3ZtLnR5cGUgfHwgX3ZtLmljb25DbGFzc1xuICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbm90aWZpY2F0aW9uX19pY29uXCIsXG4gICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLnR5cGVDbGFzcywgX3ZtLmljb25DbGFzc11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1ub3RpZmljYXRpb25fX2dyb3VwXCIsXG4gICAgICAgICAgICBjbGFzczogeyBcImlzLXdpdGgtaWNvblwiOiBfdm0udHlwZUNsYXNzIHx8IF92bS5pY29uQ2xhc3MgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXCJoMlwiLCB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW5vdGlmaWNhdGlvbl9fdGl0bGVcIixcbiAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdGV4dENvbnRlbnQ6IF92bS5fcyhfdm0udGl0bGUpIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwibWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1ub3RpZmljYXRpb25fX2NvbnRlbnRcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiLCBbXG4gICAgICAgICAgICAgICAgICAhX3ZtLmRhbmdlcm91c2x5VXNlSFRNTFN0cmluZ1xuICAgICAgICAgICAgICAgICAgICA/IF9jKFwicFwiLCBbX3ZtLl92KF92bS5fcyhfdm0ubWVzc2FnZSkpXSlcbiAgICAgICAgICAgICAgICAgICAgOiBfYyhcInBcIiwgeyBkb21Qcm9wczogeyBpbm5lckhUTUw6IF92bS5fcyhfdm0ubWVzc2FnZSkgfSB9KVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfdm0uc2hvd0Nsb3NlXG4gICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbm90aWZpY2F0aW9uX19jbG9zZUJ0biBlbC1pY29uLWNsb3NlXCIsXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5jbG9zZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICBdXG4gICAgKVxuICBdKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80M2RiYzNkOF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQzZGJjM2Q4X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbm90aWZpY2F0aW9uL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00M2RiYzNkOCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbm90aWZpY2F0aW9uL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxudmFyIG1haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc190eXBlTWFwID0ge1xuICBzdWNjZXNzOiAnc3VjY2VzcycsXG4gIGluZm86ICdpbmZvJyxcbiAgd2FybmluZzogJ3dhcm5pbmcnLFxuICBlcnJvcjogJ2Vycm9yJ1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbm90aWZpY2F0aW9uX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICB0aXRsZTogJycsXG4gICAgICBtZXNzYWdlOiAnJyxcbiAgICAgIGR1cmF0aW9uOiA0NTAwLFxuICAgICAgdHlwZTogJycsXG4gICAgICBzaG93Q2xvc2U6IHRydWUsXG4gICAgICBjdXN0b21DbGFzczogJycsXG4gICAgICBpY29uQ2xhc3M6ICcnLFxuICAgICAgb25DbG9zZTogbnVsbCxcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAgdmVydGljYWxPZmZzZXQ6IDAsXG4gICAgICB0aW1lcjogbnVsbCxcbiAgICAgIGRhbmdlcm91c2x5VXNlSFRNTFN0cmluZzogZmFsc2UsXG4gICAgICBwb3NpdGlvbjogJ3RvcC1yaWdodCdcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlQ2xhc3M6IGZ1bmN0aW9uIHR5cGVDbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgJiYgbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3R5cGVNYXBbdGhpcy50eXBlXSA/ICdlbC1pY29uLScgKyBtYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdHlwZU1hcFt0aGlzLnR5cGVdIDogJyc7XG4gICAgfSxcbiAgICBob3Jpem9udGFsQ2xhc3M6IGZ1bmN0aW9uIGhvcml6b250YWxDbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnBvc2l0aW9uLmluZGV4T2YoJ3JpZ2h0JykgPiAtMSA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgfSxcbiAgICB2ZXJ0aWNhbFByb3BlcnR5OiBmdW5jdGlvbiB2ZXJ0aWNhbFByb3BlcnR5KCkge1xuICAgICAgcmV0dXJuICgvXnRvcC0vLnRlc3QodGhpcy5wb3NpdGlvbikgPyAndG9wJyA6ICdib3R0b20nXG4gICAgICApO1xuICAgIH0sXG4gICAgcG9zaXRpb25TdHlsZTogZnVuY3Rpb24gcG9zaXRpb25TdHlsZSgpIHtcbiAgICAgIHZhciBfcmVmO1xuXG4gICAgICByZXR1cm4gX3JlZiA9IHt9LCBfcmVmW3RoaXMudmVydGljYWxQcm9wZXJ0eV0gPSB0aGlzLnZlcnRpY2FsT2Zmc2V0ICsgJ3B4JywgX3JlZjtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjbG9zZWQ6IGZ1bmN0aW9uIGNsb3NlZChuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuJGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLmRlc3Ryb3lFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRlc3Ryb3lFbGVtZW50OiBmdW5jdGlvbiBkZXN0cm95RWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCB0aGlzLmRlc3Ryb3lFbGVtZW50KTtcbiAgICAgIHRoaXMuJGRlc3Ryb3kodHJ1ZSk7XG4gICAgICB0aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGVsKTtcbiAgICB9LFxuICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljaygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMub25DbGljaygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhclRpbWVyOiBmdW5jdGlvbiBjbGVhclRpbWVyKCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgIH0sXG4gICAgc3RhcnRUaW1lcjogZnVuY3Rpb24gc3RhcnRUaW1lcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmR1cmF0aW9uID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIF90aGlzLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzLmR1cmF0aW9uKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGtleWRvd246IGZ1bmN0aW9uIGtleWRvd24oZSkge1xuICAgICAgaWYgKGUua2V5Q29kZSA9PT0gNDYgfHwgZS5rZXlDb2RlID09PSA4KSB7XG4gICAgICAgIHRoaXMuY2xlYXJUaW1lcigpOyAvLyBkZXRlbGUg5Y+W5raI5YCS6K6h5pe2XG4gICAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgLy8gZXNj5YWz6Zet5raI5oGvXG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhcnRUaW1lcigpOyAvLyDmgaLlpI3lgJLorqHml7ZcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBpZiAodGhpcy5kdXJhdGlvbiA+IDApIHtcbiAgICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpczIuY2xvc2VkKSB7XG4gICAgICAgICAgX3RoaXMyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMuZHVyYXRpb24pO1xuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL25vdGlmaWNhdGlvbi9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbm90aWZpY2F0aW9uX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG5vdGlmaWNhdGlvbl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgbm90aWZpY2F0aW9uX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfbm90aWZpY2F0aW9uX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDNkYmMzZDhfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDNkYmMzZDhfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBub3RpZmljYXRpb25fc3JjX21haW5fYXBpOyB9XG5ub3RpZmljYXRpb25fc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG5vdGlmaWNhdGlvbl9zcmNfbWFpbiA9IChub3RpZmljYXRpb25fc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9ub3RpZmljYXRpb24vc3JjL21haW4uanNcblxuXG5cblxuXG52YXIgTm90aWZpY2F0aW9uQ29uc3RydWN0b3IgPSBleHRlcm5hbF92dWVfZGVmYXVsdC5hLmV4dGVuZChub3RpZmljYXRpb25fc3JjX21haW4pO1xuXG52YXIgc3JjX21haW5faW5zdGFuY2UgPSB2b2lkIDA7XG52YXIgaW5zdGFuY2VzID0gW107XG52YXIgc2VlZCA9IDE7XG5cbnZhciBtYWluX05vdGlmaWNhdGlvbiA9IGZ1bmN0aW9uIE5vdGlmaWNhdGlvbihvcHRpb25zKSB7XG4gIGlmIChleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgb3B0aW9ucyA9IG1lcmdlX2RlZmF1bHQoKSh7fSwgb3B0aW9ucyk7XG4gIHZhciB1c2VyT25DbG9zZSA9IG9wdGlvbnMub25DbG9zZTtcbiAgdmFyIGlkID0gJ25vdGlmaWNhdGlvbl8nICsgc2VlZCsrO1xuICB2YXIgcG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uIHx8ICd0b3AtcmlnaHQnO1xuXG4gIG9wdGlvbnMub25DbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBOb3RpZmljYXRpb24uY2xvc2UoaWQsIHVzZXJPbkNsb3NlKTtcbiAgfTtcblxuICBzcmNfbWFpbl9pbnN0YW5jZSA9IG5ldyBOb3RpZmljYXRpb25Db25zdHJ1Y3Rvcih7XG4gICAgZGF0YTogb3B0aW9uc1xuICB9KTtcblxuICBpZiAoT2JqZWN0KHZkb21fW1wiaXNWTm9kZVwiXSkob3B0aW9ucy5tZXNzYWdlKSkge1xuICAgIHNyY19tYWluX2luc3RhbmNlLiRzbG90cy5kZWZhdWx0ID0gW29wdGlvbnMubWVzc2FnZV07XG4gICAgb3B0aW9ucy5tZXNzYWdlID0gJ1JFUExBQ0VEX0JZX1ZOT0RFJztcbiAgfVxuICBzcmNfbWFpbl9pbnN0YW5jZS5pZCA9IGlkO1xuICBzcmNfbWFpbl9pbnN0YW5jZS4kbW91bnQoKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzcmNfbWFpbl9pbnN0YW5jZS4kZWwpO1xuICBzcmNfbWFpbl9pbnN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcbiAgc3JjX21haW5faW5zdGFuY2UuZG9tID0gc3JjX21haW5faW5zdGFuY2UuJGVsO1xuICBzcmNfbWFpbl9pbnN0YW5jZS5kb20uc3R5bGUuekluZGV4ID0gcG9wdXBfW1wiUG9wdXBNYW5hZ2VyXCJdLm5leHRaSW5kZXgoKTtcblxuICB2YXIgdmVydGljYWxPZmZzZXQgPSBvcHRpb25zLm9mZnNldCB8fCAwO1xuICBpbnN0YW5jZXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgcmV0dXJuIGl0ZW0ucG9zaXRpb24gPT09IHBvc2l0aW9uO1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmVydGljYWxPZmZzZXQgKz0gaXRlbS4kZWwub2Zmc2V0SGVpZ2h0ICsgMTY7XG4gIH0pO1xuICB2ZXJ0aWNhbE9mZnNldCArPSAxNjtcbiAgc3JjX21haW5faW5zdGFuY2UudmVydGljYWxPZmZzZXQgPSB2ZXJ0aWNhbE9mZnNldDtcbiAgaW5zdGFuY2VzLnB1c2goc3JjX21haW5faW5zdGFuY2UpO1xuICByZXR1cm4gc3JjX21haW5faW5zdGFuY2U7XG59O1xuXG5bJ3N1Y2Nlc3MnLCAnd2FybmluZycsICdpbmZvJywgJ2Vycm9yJ10uZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBtYWluX05vdGlmaWNhdGlvblt0eXBlXSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnc3RyaW5nJyB8fCBPYmplY3QodmRvbV9bXCJpc1ZOb2RlXCJdKShvcHRpb25zKSkge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgbWVzc2FnZTogb3B0aW9uc1xuICAgICAgfTtcbiAgICB9XG4gICAgb3B0aW9ucy50eXBlID0gdHlwZTtcbiAgICByZXR1cm4gbWFpbl9Ob3RpZmljYXRpb24ob3B0aW9ucyk7XG4gIH07XG59KTtcblxubWFpbl9Ob3RpZmljYXRpb24uY2xvc2UgPSBmdW5jdGlvbiAoaWQsIHVzZXJPbkNsb3NlKSB7XG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgbGVuID0gaW5zdGFuY2VzLmxlbmd0aDtcbiAgdmFyIGluc3RhbmNlID0gaW5zdGFuY2VzLmZpbHRlcihmdW5jdGlvbiAoaW5zdGFuY2UsIGkpIHtcbiAgICBpZiAoaW5zdGFuY2UuaWQgPT09IGlkKSB7XG4gICAgICBpbmRleCA9IGk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KVswXTtcbiAgaWYgKCFpbnN0YW5jZSkgcmV0dXJuO1xuXG4gIGlmICh0eXBlb2YgdXNlck9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICB1c2VyT25DbG9zZShpbnN0YW5jZSk7XG4gIH1cbiAgaW5zdGFuY2VzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgaWYgKGxlbiA8PSAxKSByZXR1cm47XG4gIHZhciBwb3NpdGlvbiA9IGluc3RhbmNlLnBvc2l0aW9uO1xuICB2YXIgcmVtb3ZlZEhlaWdodCA9IGluc3RhbmNlLmRvbS5vZmZzZXRIZWlnaHQ7XG4gIGZvciAodmFyIGkgPSBpbmRleDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgIGlmIChpbnN0YW5jZXNbaV0ucG9zaXRpb24gPT09IHBvc2l0aW9uKSB7XG4gICAgICBpbnN0YW5jZXNbaV0uZG9tLnN0eWxlW2luc3RhbmNlLnZlcnRpY2FsUHJvcGVydHldID0gcGFyc2VJbnQoaW5zdGFuY2VzW2ldLmRvbS5zdHlsZVtpbnN0YW5jZS52ZXJ0aWNhbFByb3BlcnR5XSwgMTApIC0gcmVtb3ZlZEhlaWdodCAtIDE2ICsgJ3B4JztcbiAgICB9XG4gIH1cbn07XG5cbm1haW5fTm90aWZpY2F0aW9uLmNsb3NlQWxsID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gaW5zdGFuY2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaW5zdGFuY2VzW2ldLmNsb3NlKCk7XG4gIH1cbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX25vdGlmaWNhdGlvbl9zcmNfbWFpbiA9IChtYWluX05vdGlmaWNhdGlvbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL25vdGlmaWNhdGlvbi9pbmRleC5qc1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBub3RpZmljYXRpb24gPSAocGFja2FnZXNfbm90aWZpY2F0aW9uX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2xpZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMjcwODY0NCZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMzI3MDg2NDRfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBcImlzLXZlcnRpY2FsXCI6IF92bS52ZXJ0aWNhbCxcbiAgICAgICAgXCJlbC1zbGlkZXItLXdpdGgtaW5wdXRcIjogX3ZtLnNob3dJbnB1dFxuICAgICAgfSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHJvbGU6IFwic2xpZGVyXCIsXG4gICAgICAgIFwiYXJpYS12YWx1ZW1pblwiOiBfdm0ubWluLFxuICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogX3ZtLm1heCxcbiAgICAgICAgXCJhcmlhLW9yaWVudGF0aW9uXCI6IF92bS52ZXJ0aWNhbCA/IFwidmVydGljYWxcIiA6IFwiaG9yaXpvbnRhbFwiLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogX3ZtLnNsaWRlckRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uc2hvd0lucHV0ICYmICFfdm0ucmFuZ2VcbiAgICAgICAgPyBfYyhcImVsLWlucHV0LW51bWJlclwiLCB7XG4gICAgICAgICAgICByZWY6IFwiaW5wdXRcIixcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlcl9faW5wdXRcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHN0ZXA6IF92bS5zdGVwLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnNsaWRlckRpc2FibGVkLFxuICAgICAgICAgICAgICBjb250cm9sczogX3ZtLnNob3dJbnB1dENvbnRyb2xzLFxuICAgICAgICAgICAgICBtaW46IF92bS5taW4sXG4gICAgICAgICAgICAgIG1heDogX3ZtLm1heCxcbiAgICAgICAgICAgICAgZGVib3VuY2U6IF92bS5kZWJvdW5jZSxcbiAgICAgICAgICAgICAgc2l6ZTogX3ZtLmlucHV0U2l6ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7IGNoYW5nZTogX3ZtLmVtaXRDaGFuZ2UgfSxcbiAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uZmlyc3RWYWx1ZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgIF92bS5maXJzdFZhbHVlID0gJCR2XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBcInNsaWRlclwiLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlcl9fcnVud2F5XCIsXG4gICAgICAgICAgY2xhc3M6IHsgXCJzaG93LWlucHV0XCI6IF92bS5zaG93SW5wdXQsIGRpc2FibGVkOiBfdm0uc2xpZGVyRGlzYWJsZWQgfSxcbiAgICAgICAgICBzdHlsZTogX3ZtLnJ1bndheVN0eWxlLFxuICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ub25TbGlkZXJDbGljayB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlcl9fYmFyXCIsIHN0eWxlOiBfdm0uYmFyU3R5bGUgfSksXG4gICAgICAgICAgX2MoXCJzbGlkZXItYnV0dG9uXCIsIHtcbiAgICAgICAgICAgIHJlZjogXCJidXR0b24xXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB2ZXJ0aWNhbDogX3ZtLnZlcnRpY2FsLFxuICAgICAgICAgICAgICBcInRvb2x0aXAtY2xhc3NcIjogX3ZtLnRvb2x0aXBDbGFzc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0uZmlyc3RWYWx1ZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICAgIF92bS5maXJzdFZhbHVlID0gJCR2XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZmlyc3RWYWx1ZVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgX3ZtLnJhbmdlXG4gICAgICAgICAgICA/IF9jKFwic2xpZGVyLWJ1dHRvblwiLCB7XG4gICAgICAgICAgICAgICAgcmVmOiBcImJ1dHRvbjJcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgdmVydGljYWw6IF92bS52ZXJ0aWNhbCxcbiAgICAgICAgICAgICAgICAgIFwidG9vbHRpcC1jbGFzc1wiOiBfdm0udG9vbHRpcENsYXNzXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5zZWNvbmRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnNlY29uZFZhbHVlID0gJCR2XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJzZWNvbmRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uX2woX3ZtLnN0b3BzLCBmdW5jdGlvbihpdGVtLCBrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0uc2hvd1N0b3BzXG4gICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zbGlkZXJfX3N0b3BcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0uZ2V0U3RvcFN0eWxlKGl0ZW0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIF92bS5tYXJrTGlzdC5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLm1hcmtMaXN0LCBmdW5jdGlvbihpdGVtLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zbGlkZXJfX3N0b3AgZWwtc2xpZGVyX19tYXJrcy1zdG9wXCIsXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5nZXRTdG9wU3R5bGUoaXRlbS5wb3NpdGlvbilcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1zbGlkZXJfX21hcmtzXCIgfSxcbiAgICAgICAgICAgICAgICAgIF92bS5fbChfdm0ubWFya0xpc3QsIGZ1bmN0aW9uKGl0ZW0sIGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXCJzbGlkZXItbWFya2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmdldFN0b3BTdHlsZShpdGVtLnBvc2l0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBtYXJrOiBpdGVtLm1hcmsgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgIF0sXG4gICAgICAgIDJcbiAgICAgIClcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8zMjcwODY0NF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzMyNzA4NjQ0X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2xpZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zMjcwODY0NCZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2lucHV0LW51bWJlclwiXG52YXIgaW5wdXRfbnVtYmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xudmFyIGlucHV0X251bWJlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihpbnB1dF9udW1iZXJfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zbGlkZXIvc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTcyZDJhZDImXG52YXIgYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfZTcyZDJhZDJfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgcmVmOiBcImJ1dHRvblwiLFxuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc2xpZGVyX19idXR0b24td3JhcHBlclwiLFxuICAgICAgY2xhc3M6IHsgaG92ZXI6IF92bS5ob3ZlcmluZywgZHJhZ2dpbmc6IF92bS5kcmFnZ2luZyB9LFxuICAgICAgc3R5bGU6IF92bS53cmFwcGVyU3R5bGUsXG4gICAgICBhdHRyczogeyB0YWJpbmRleDogXCIwXCIgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXI6IF92bS5oYW5kbGVNb3VzZUVudGVyLFxuICAgICAgICBtb3VzZWxlYXZlOiBfdm0uaGFuZGxlTW91c2VMZWF2ZSxcbiAgICAgICAgbW91c2Vkb3duOiBfdm0ub25CdXR0b25Eb3duLFxuICAgICAgICB0b3VjaHN0YXJ0OiBfdm0ub25CdXR0b25Eb3duLFxuICAgICAgICBmb2N1czogX3ZtLmhhbmRsZU1vdXNlRW50ZXIsXG4gICAgICAgIGJsdXI6IF92bS5oYW5kbGVNb3VzZUxlYXZlLFxuICAgICAgICBrZXlkb3duOiBbXG4gICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJsZWZ0XCIsIDM3LCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgXCJMZWZ0XCIsXG4gICAgICAgICAgICAgICAgXCJBcnJvd0xlZnRcIlxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJidXR0b25cIiBpbiAkZXZlbnQgJiYgJGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF92bS5vbkxlZnRLZXlEb3duKCRldmVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwicmlnaHRcIiwgMzksICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICBcIlJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgXCJBcnJvd1JpZ2h0XCJcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiYnV0dG9uXCIgaW4gJGV2ZW50ICYmICRldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfdm0ub25SaWdodEtleURvd24oJGV2ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgXCJEb3duXCIsXG4gICAgICAgICAgICAgICAgXCJBcnJvd0Rvd25cIlxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgcmV0dXJuIF92bS5vbkxlZnRLZXlEb3duKCRldmVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidXBcIiwgMzgsICRldmVudC5rZXksIFtcIlVwXCIsIFwiQXJyb3dVcFwiXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgIHJldHVybiBfdm0ub25SaWdodEtleURvd24oJGV2ZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZWwtdG9vbHRpcFwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBcInRvb2x0aXBcIixcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBcInRvcFwiLFxuICAgICAgICAgICAgXCJwb3BwZXItY2xhc3NcIjogX3ZtLnRvb2x0aXBDbGFzcyxcbiAgICAgICAgICAgIGRpc2FibGVkOiAhX3ZtLnNob3dUb29sdGlwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHsgYXR0cnM6IHsgc2xvdDogXCJjb250ZW50XCIgfSwgc2xvdDogXCJjb250ZW50XCIgfSwgW1xuICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uZm9ybWF0VmFsdWUpKVxuICAgICAgICAgIF0pLFxuICAgICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNsaWRlcl9fYnV0dG9uXCIsXG4gICAgICAgICAgICBjbGFzczogeyBob3ZlcjogX3ZtLmhvdmVyaW5nLCBkcmFnZ2luZzogX3ZtLmRyYWdnaW5nIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9lNzJkMmFkMl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfZTcyZDJhZDJfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zbGlkZXIvc3JjL2J1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTcyZDJhZDImXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NsaWRlci9zcmMvYnV0dG9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2xpZGVyX3NyY19idXR0b252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTbGlkZXJCdXR0b24nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbFRvb2x0aXA6IHRvb2x0aXBfZGVmYXVsdC5hXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgdmVydGljYWw6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgdG9vbHRpcENsYXNzOiBTdHJpbmdcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBkcmFnZ2luZzogZmFsc2UsXG4gICAgICBpc0NsaWNrOiBmYWxzZSxcbiAgICAgIHN0YXJ0WDogMCxcbiAgICAgIGN1cnJlbnRYOiAwLFxuICAgICAgc3RhcnRZOiAwLFxuICAgICAgY3VycmVudFk6IDAsXG4gICAgICBzdGFydFBvc2l0aW9uOiAwLFxuICAgICAgbmV3UG9zaXRpb246IG51bGwsXG4gICAgICBvbGRWYWx1ZTogdGhpcy52YWx1ZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGRpc2FibGVkOiBmdW5jdGlvbiBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuc2xpZGVyRGlzYWJsZWQ7XG4gICAgfSxcbiAgICBtYXg6IGZ1bmN0aW9uIG1heCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQubWF4O1xuICAgIH0sXG4gICAgbWluOiBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm1pbjtcbiAgICB9LFxuICAgIHN0ZXA6IGZ1bmN0aW9uIHN0ZXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnN0ZXA7XG4gICAgfSxcbiAgICBzaG93VG9vbHRpcDogZnVuY3Rpb24gc2hvd1Rvb2x0aXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnNob3dUb29sdGlwO1xuICAgIH0sXG4gICAgcHJlY2lzaW9uOiBmdW5jdGlvbiBwcmVjaXNpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LnByZWNpc2lvbjtcbiAgICB9LFxuICAgIGN1cnJlbnRQb3NpdGlvbjogZnVuY3Rpb24gY3VycmVudFBvc2l0aW9uKCkge1xuICAgICAgcmV0dXJuICh0aGlzLnZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pICogMTAwICsgJyUnO1xuICAgIH0sXG4gICAgZW5hYmxlRm9ybWF0OiBmdW5jdGlvbiBlbmFibGVGb3JtYXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LmZvcm1hdFRvb2x0aXAgaW5zdGFuY2VvZiBGdW5jdGlvbjtcbiAgICB9LFxuICAgIGZvcm1hdFZhbHVlOiBmdW5jdGlvbiBmb3JtYXRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuYWJsZUZvcm1hdCAmJiB0aGlzLiRwYXJlbnQuZm9ybWF0VG9vbHRpcCh0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlO1xuICAgIH0sXG4gICAgd3JhcHBlclN0eWxlOiBmdW5jdGlvbiB3cmFwcGVyU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbCA/IHsgYm90dG9tOiB0aGlzLmN1cnJlbnRQb3NpdGlvbiB9IDogeyBsZWZ0OiB0aGlzLmN1cnJlbnRQb3NpdGlvbiB9O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGRyYWdnaW5nOiBmdW5jdGlvbiBkcmFnZ2luZyh2YWwpIHtcbiAgICAgIHRoaXMuJHBhcmVudC5kcmFnZ2luZyA9IHZhbDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGRpc3BsYXlUb29sdGlwOiBmdW5jdGlvbiBkaXNwbGF5VG9vbHRpcCgpIHtcbiAgICAgIHRoaXMuJHJlZnMudG9vbHRpcCAmJiAodGhpcy4kcmVmcy50b29sdGlwLnNob3dQb3BwZXIgPSB0cnVlKTtcbiAgICB9LFxuICAgIGhpZGVUb29sdGlwOiBmdW5jdGlvbiBoaWRlVG9vbHRpcCgpIHtcbiAgICAgIHRoaXMuJHJlZnMudG9vbHRpcCAmJiAodGhpcy4kcmVmcy50b29sdGlwLnNob3dQb3BwZXIgPSBmYWxzZSk7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgICAgdGhpcy5ob3ZlcmluZyA9IHRydWU7XG4gICAgICB0aGlzLmRpc3BsYXlUb29sdGlwKCk7XG4gICAgfSxcbiAgICBoYW5kbGVNb3VzZUxlYXZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgICAgdGhpcy5ob3ZlcmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5oaWRlVG9vbHRpcCgpO1xuICAgIH0sXG4gICAgb25CdXR0b25Eb3duOiBmdW5jdGlvbiBvbkJ1dHRvbkRvd24oZXZlbnQpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5vbkRyYWdTdGFydChldmVudCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbkRyYWdnaW5nKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB0aGlzLm9uRHJhZ2dpbmcpO1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRHJhZ0VuZCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uRHJhZ0VuZCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCB0aGlzLm9uRHJhZ0VuZCk7XG4gICAgfSxcbiAgICBvbkxlZnRLZXlEb3duOiBmdW5jdGlvbiBvbkxlZnRLZXlEb3duKCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHRoaXMubmV3UG9zaXRpb24gPSBwYXJzZUZsb2F0KHRoaXMuY3VycmVudFBvc2l0aW9uKSAtIHRoaXMuc3RlcCAvICh0aGlzLm1heCAtIHRoaXMubWluKSAqIDEwMDtcbiAgICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy5uZXdQb3NpdGlvbik7XG4gICAgICB0aGlzLiRwYXJlbnQuZW1pdENoYW5nZSgpO1xuICAgIH0sXG4gICAgb25SaWdodEtleURvd246IGZ1bmN0aW9uIG9uUmlnaHRLZXlEb3duKCkge1xuICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHRoaXMubmV3UG9zaXRpb24gPSBwYXJzZUZsb2F0KHRoaXMuY3VycmVudFBvc2l0aW9uKSArIHRoaXMuc3RlcCAvICh0aGlzLm1heCAtIHRoaXMubWluKSAqIDEwMDtcbiAgICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy5uZXdQb3NpdGlvbik7XG4gICAgICB0aGlzLiRwYXJlbnQuZW1pdENoYW5nZSgpO1xuICAgIH0sXG4gICAgb25EcmFnU3RhcnQ6IGZ1bmN0aW9uIG9uRHJhZ1N0YXJ0KGV2ZW50KSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNDbGljayA9IHRydWU7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gICAgICAgIGV2ZW50LmNsaWVudFkgPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFk7XG4gICAgICAgIGV2ZW50LmNsaWVudFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICB0aGlzLnN0YXJ0WSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YXJ0WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXJ0UG9zaXRpb24gPSBwYXJzZUZsb2F0KHRoaXMuY3VycmVudFBvc2l0aW9uKTtcbiAgICAgIHRoaXMubmV3UG9zaXRpb24gPSB0aGlzLnN0YXJ0UG9zaXRpb247XG4gICAgfSxcbiAgICBvbkRyYWdnaW5nOiBmdW5jdGlvbiBvbkRyYWdnaW5nKGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgICB0aGlzLmlzQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5VG9vbHRpcCgpO1xuICAgICAgICB0aGlzLiRwYXJlbnQucmVzZXRTaXplKCk7XG4gICAgICAgIHZhciBkaWZmID0gMDtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XG4gICAgICAgICAgZXZlbnQuY2xpZW50WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcbiAgICAgICAgICBldmVudC5jbGllbnRYID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRYO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50WSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICAgICAgZGlmZiA9ICh0aGlzLnN0YXJ0WSAtIHRoaXMuY3VycmVudFkpIC8gdGhpcy4kcGFyZW50LnNsaWRlclNpemUgKiAxMDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50WCA9IGV2ZW50LmNsaWVudFg7XG4gICAgICAgICAgZGlmZiA9ICh0aGlzLmN1cnJlbnRYIC0gdGhpcy5zdGFydFgpIC8gdGhpcy4kcGFyZW50LnNsaWRlclNpemUgKiAxMDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXdQb3NpdGlvbiA9IHRoaXMuc3RhcnRQb3NpdGlvbiArIGRpZmY7XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24odGhpcy5uZXdQb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkRyYWdFbmQ6IGZ1bmN0aW9uIG9uRHJhZ0VuZCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIOmYsuatouWcqCBtb3VzZXVwIOWQjueri+WNs+inpuWPkSBjbGlja++8jOWvvOiHtOa7keWdl+acieWHoOeOh+S6p+eUn+S4gOWwj+auteS9jeenu1xuICAgICAgICAgKiDkuI3kvb/nlKggcHJldmVudERlZmF1bHQg5piv5Zug5Li6IG1vdXNldXAg5ZKMIGNsaWNrIOayoeacieazqOWGjOWcqOWQjOS4gOS4qiBET00g5LiKXG4gICAgICAgICAqL1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICAgIF90aGlzLmhpZGVUb29sdGlwKCk7XG4gICAgICAgICAgaWYgKCFfdGhpcy5pc0NsaWNrKSB7XG4gICAgICAgICAgICBfdGhpcy5zZXRQb3NpdGlvbihfdGhpcy5uZXdQb3NpdGlvbik7XG4gICAgICAgICAgICBfdGhpcy4kcGFyZW50LmVtaXRDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDApO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbkRyYWdnaW5nKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIHRoaXMub25EcmFnZ2luZyk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbkRyYWdFbmQpO1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCB0aGlzLm9uRHJhZ0VuZCk7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdjb250ZXh0bWVudScsIHRoaXMub25EcmFnRW5kKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiBzZXRQb3NpdGlvbihuZXdQb3NpdGlvbikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmIChuZXdQb3NpdGlvbiA9PT0gbnVsbCB8fCBpc05hTihuZXdQb3NpdGlvbikpIHJldHVybjtcbiAgICAgIGlmIChuZXdQb3NpdGlvbiA8IDApIHtcbiAgICAgICAgbmV3UG9zaXRpb24gPSAwO1xuICAgICAgfSBlbHNlIGlmIChuZXdQb3NpdGlvbiA+IDEwMCkge1xuICAgICAgICBuZXdQb3NpdGlvbiA9IDEwMDtcbiAgICAgIH1cbiAgICAgIHZhciBsZW5ndGhQZXJTdGVwID0gMTAwIC8gKCh0aGlzLm1heCAtIHRoaXMubWluKSAvIHRoaXMuc3RlcCk7XG4gICAgICB2YXIgc3RlcHMgPSBNYXRoLnJvdW5kKG5ld1Bvc2l0aW9uIC8gbGVuZ3RoUGVyU3RlcCk7XG4gICAgICB2YXIgdmFsdWUgPSBzdGVwcyAqIGxlbmd0aFBlclN0ZXAgKiAodGhpcy5tYXggLSB0aGlzLm1pbikgKiAwLjAxICsgdGhpcy5taW47XG4gICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWUudG9GaXhlZCh0aGlzLnByZWNpc2lvbikpO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5kaXNwbGF5VG9vbHRpcCgpO1xuICAgICAgICBfdGhpczIuJHJlZnMudG9vbHRpcCAmJiBfdGhpczIuJHJlZnMudG9vbHRpcC51cGRhdGVQb3BwZXIoKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCF0aGlzLmRyYWdnaW5nICYmIHRoaXMudmFsdWUgIT09IHRoaXMub2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2xpZGVyL3NyYy9idXR0b24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3NsaWRlcl9zcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHNsaWRlcl9zcmNfYnV0dG9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvYnV0dG9uLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNyY19idXR0b25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19zbGlkZXJfc3JjX2J1dHRvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgYnV0dG9udnVlX3R5cGVfdGVtcGxhdGVfaWRfZTcyZDJhZDJfcmVuZGVyLFxuICBidXR0b252dWVfdHlwZV90ZW1wbGF0ZV9pZF9lNzJkMmFkMl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNyY19idXR0b25fYXBpOyB9XG5zcmNfYnV0dG9uX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc2xpZGVyL3NyYy9idXR0b24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNsaWRlcl9zcmNfYnV0dG9uID0gKHNyY19idXR0b25fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zbGlkZXIvc3JjL21hcmtlci5qc1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWFya2VyID0gKHtcbiAgbmFtZTogJ0VsTWFya2VyJyxcblxuICBwcm9wczoge1xuICAgIG1hcms6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE9iamVjdF1cbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBoID0gYXJndW1lbnRzWzBdO1xuXG4gICAgdmFyIGxhYmVsID0gdHlwZW9mIHRoaXMubWFyayA9PT0gJ3N0cmluZycgPyB0aGlzLm1hcmsgOiB0aGlzLm1hcmsubGFiZWw7XG5cbiAgICByZXR1cm4gaChcbiAgICAgICdkaXYnLFxuICAgICAgeyAnY2xhc3MnOiAnZWwtc2xpZGVyX19tYXJrcy10ZXh0Jywgc3R5bGU6IHRoaXMubWFyay5zdHlsZSB8fCB7fSB9LFxuICAgICAgW2xhYmVsXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2xpZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNsaWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFNsaWRlcicsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBtaW46IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIG1heDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMTAwXG4gICAgfSxcbiAgICBzdGVwOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfSxcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogW051bWJlciwgQXJyYXldLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgc2hvd0lucHV0OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHNob3dJbnB1dENvbnRyb2xzOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaW5wdXRTaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnc21hbGwnXG4gICAgfSxcbiAgICBzaG93U3RvcHM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd1Rvb2x0aXA6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBmb3JtYXRUb29sdGlwOiBGdW5jdGlvbixcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICByYW5nZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICB2ZXJ0aWNhbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBoZWlnaHQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgZGVib3VuY2U6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDMwMFxuICAgIH0sXG4gICAgbGFiZWw6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgdG9vbHRpcENsYXNzOiBTdHJpbmcsXG4gICAgbWFya3M6IE9iamVjdFxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbElucHV0TnVtYmVyOiBpbnB1dF9udW1iZXJfZGVmYXVsdC5hLFxuICAgIFNsaWRlckJ1dHRvbjogc2xpZGVyX3NyY19idXR0b24sXG4gICAgU2xpZGVyTWFya2VyOiBtYXJrZXJcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaXJzdFZhbHVlOiBudWxsLFxuICAgICAgc2Vjb25kVmFsdWU6IG51bGwsXG4gICAgICBvbGRWYWx1ZTogbnVsbCxcbiAgICAgIGRyYWdnaW5nOiBmYWxzZSxcbiAgICAgIHNsaWRlclNpemU6IDFcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsLCBvbGRWYWwpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nIHx8IEFycmF5LmlzQXJyYXkodmFsKSAmJiBBcnJheS5pc0FycmF5KG9sZFZhbCkgJiYgdmFsLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gaXRlbSA9PT0gb2xkVmFsW2luZGV4XTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VmFsdWVzKCk7XG4gICAgfSxcbiAgICBkcmFnZ2luZzogZnVuY3Rpb24gZHJhZ2dpbmcodmFsKSB7XG4gICAgICBpZiAoIXZhbCkge1xuICAgICAgICB0aGlzLnNldFZhbHVlcygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZmlyc3RWYWx1ZTogZnVuY3Rpb24gZmlyc3RWYWx1ZSh2YWwpIHtcbiAgICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlY29uZFZhbHVlOiBmdW5jdGlvbiBzZWNvbmRWYWx1ZSgpIHtcbiAgICAgIGlmICh0aGlzLnJhbmdlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbjogZnVuY3Rpb24gbWluKCkge1xuICAgICAgdGhpcy5zZXRWYWx1ZXMoKTtcbiAgICB9LFxuICAgIG1heDogZnVuY3Rpb24gbWF4KCkge1xuICAgICAgdGhpcy5zZXRWYWx1ZXMoKTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbHVlQ2hhbmdlZDogZnVuY3Rpb24gdmFsdWVDaGFuZ2VkKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuICFbdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZV0uZXZlcnkoZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IF90aGlzLm9sZFZhbHVlW2luZGV4XTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gdGhpcy5vbGRWYWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFZhbHVlczogZnVuY3Rpb24gc2V0VmFsdWVzKCkge1xuICAgICAgaWYgKHRoaXMubWluID4gdGhpcy5tYXgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignW0VsZW1lbnQgRXJyb3JdW1NsaWRlcl1taW4gc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gbWF4LicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgdmFsID0gdGhpcy52YWx1ZTtcbiAgICAgIGlmICh0aGlzLnJhbmdlICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICBpZiAodmFsWzFdIDwgdGhpcy5taW4pIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIFt0aGlzLm1pbiwgdGhpcy5taW5dKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWxbMF0gPiB0aGlzLm1heCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgW3RoaXMubWF4LCB0aGlzLm1heF0pO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbFswXSA8IHRoaXMubWluKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBbdGhpcy5taW4sIHZhbFsxXV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbFsxXSA+IHRoaXMubWF4KSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBbdmFsWzBdLCB0aGlzLm1heF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZmlyc3RWYWx1ZSA9IHZhbFswXTtcbiAgICAgICAgICB0aGlzLnNlY29uZFZhbHVlID0gdmFsWzFdO1xuICAgICAgICAgIGlmICh0aGlzLnZhbHVlQ2hhbmdlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW3RoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWVdKTtcbiAgICAgICAgICAgIHRoaXMub2xkVmFsdWUgPSB2YWwuc2xpY2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMucmFuZ2UgJiYgdHlwZW9mIHZhbCA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgaWYgKHZhbCA8IHRoaXMubWluKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLm1pbik7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHRoaXMubWF4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSB2YWw7XG4gICAgICAgICAgaWYgKHRoaXMudmFsdWVDaGFuZ2VkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsRm9ybUl0ZW0nLCAnZWwuZm9ybS5jaGFuZ2UnLCB2YWwpO1xuICAgICAgICAgICAgdGhpcy5vbGRWYWx1ZSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHNldFBvc2l0aW9uOiBmdW5jdGlvbiBzZXRQb3NpdGlvbihwZXJjZW50KSB7XG4gICAgICB2YXIgdGFyZ2V0VmFsdWUgPSB0aGlzLm1pbiArIHBlcmNlbnQgKiAodGhpcy5tYXggLSB0aGlzLm1pbikgLyAxMDA7XG4gICAgICBpZiAoIXRoaXMucmFuZ2UpIHtcbiAgICAgICAgdGhpcy4kcmVmcy5idXR0b24xLnNldFBvc2l0aW9uKHBlcmNlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgYnV0dG9uID0gdm9pZCAwO1xuICAgICAgaWYgKE1hdGguYWJzKHRoaXMubWluVmFsdWUgLSB0YXJnZXRWYWx1ZSkgPCBNYXRoLmFicyh0aGlzLm1heFZhbHVlIC0gdGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgIGJ1dHRvbiA9IHRoaXMuZmlyc3RWYWx1ZSA8IHRoaXMuc2Vjb25kVmFsdWUgPyAnYnV0dG9uMScgOiAnYnV0dG9uMic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidXR0b24gPSB0aGlzLmZpcnN0VmFsdWUgPiB0aGlzLnNlY29uZFZhbHVlID8gJ2J1dHRvbjEnIDogJ2J1dHRvbjInO1xuICAgICAgfVxuICAgICAgdGhpcy4kcmVmc1tidXR0b25dLnNldFBvc2l0aW9uKHBlcmNlbnQpO1xuICAgIH0sXG4gICAgb25TbGlkZXJDbGljazogZnVuY3Rpb24gb25TbGlkZXJDbGljayhldmVudCkge1xuICAgICAgaWYgKHRoaXMuc2xpZGVyRGlzYWJsZWQgfHwgdGhpcy5kcmFnZ2luZykgcmV0dXJuO1xuICAgICAgdGhpcy5yZXNldFNpemUoKTtcbiAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG4gICAgICAgIHZhciBzbGlkZXJPZmZzZXRCb3R0b20gPSB0aGlzLiRyZWZzLnNsaWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207XG4gICAgICAgIHRoaXMuc2V0UG9zaXRpb24oKHNsaWRlck9mZnNldEJvdHRvbSAtIGV2ZW50LmNsaWVudFkpIC8gdGhpcy5zbGlkZXJTaXplICogMTAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBzbGlkZXJPZmZzZXRMZWZ0ID0gdGhpcy4kcmVmcy5zbGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgdGhpcy5zZXRQb3NpdGlvbigoZXZlbnQuY2xpZW50WCAtIHNsaWRlck9mZnNldExlZnQpIC8gdGhpcy5zbGlkZXJTaXplICogMTAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH0sXG4gICAgcmVzZXRTaXplOiBmdW5jdGlvbiByZXNldFNpemUoKSB7XG4gICAgICBpZiAodGhpcy4kcmVmcy5zbGlkZXIpIHtcbiAgICAgICAgdGhpcy5zbGlkZXJTaXplID0gdGhpcy4kcmVmcy5zbGlkZXJbJ2NsaWVudCcgKyAodGhpcy52ZXJ0aWNhbCA/ICdIZWlnaHQnIDogJ1dpZHRoJyldO1xuICAgICAgfVxuICAgIH0sXG4gICAgZW1pdENoYW5nZTogZnVuY3Rpb24gZW1pdENoYW5nZSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi4kZW1pdCgnY2hhbmdlJywgX3RoaXMyLnJhbmdlID8gW190aGlzMi5taW5WYWx1ZSwgX3RoaXMyLm1heFZhbHVlXSA6IF90aGlzMi52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldFN0b3BTdHlsZTogZnVuY3Rpb24gZ2V0U3RvcFN0eWxlKHBvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbCA/IHsgJ2JvdHRvbSc6IHBvc2l0aW9uICsgJyUnIH0gOiB7ICdsZWZ0JzogcG9zaXRpb24gKyAnJScgfTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzdG9wczogZnVuY3Rpb24gc3RvcHMoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnNob3dTdG9wcyB8fCB0aGlzLm1pbiA+IHRoaXMubWF4KSByZXR1cm4gW107XG4gICAgICBpZiAodGhpcy5zdGVwID09PSAwKSB7XG4gICAgICAgICBmYWxzZSAmJiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHN0b3BDb3VudCA9ICh0aGlzLm1heCAtIHRoaXMubWluKSAvIHRoaXMuc3RlcDtcbiAgICAgIHZhciBzdGVwV2lkdGggPSAxMDAgKiB0aGlzLnN0ZXAgLyAodGhpcy5tYXggLSB0aGlzLm1pbik7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IHN0b3BDb3VudDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGkgKiBzdGVwV2lkdGgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24gKHN0ZXApIHtcbiAgICAgICAgICByZXR1cm4gc3RlcCA8IDEwMCAqIChfdGhpczMubWluVmFsdWUgLSBfdGhpczMubWluKSAvIChfdGhpczMubWF4IC0gX3RoaXMzLm1pbikgfHwgc3RlcCA+IDEwMCAqIChfdGhpczMubWF4VmFsdWUgLSBfdGhpczMubWluKSAvIChfdGhpczMubWF4IC0gX3RoaXMzLm1pbik7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoZnVuY3Rpb24gKHN0ZXApIHtcbiAgICAgICAgICByZXR1cm4gc3RlcCA+IDEwMCAqIChfdGhpczMuZmlyc3RWYWx1ZSAtIF90aGlzMy5taW4pIC8gKF90aGlzMy5tYXggLSBfdGhpczMubWluKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBtYXJrTGlzdDogZnVuY3Rpb24gbWFya0xpc3QoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLm1hcmtzKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cblxuICAgICAgdmFyIG1hcmtzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubWFya3MpO1xuICAgICAgcmV0dXJuIG1hcmtzS2V5cy5tYXAocGFyc2VGbG9hdCkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYSAtIGI7XG4gICAgICB9KS5maWx0ZXIoZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgICAgIHJldHVybiBwb2ludCA8PSBfdGhpczQubWF4ICYmIHBvaW50ID49IF90aGlzNC5taW47XG4gICAgICB9KS5tYXAoZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgICAgIHBvc2l0aW9uOiAocG9pbnQgLSBfdGhpczQubWluKSAqIDEwMCAvIChfdGhpczQubWF4IC0gX3RoaXM0Lm1pbiksXG4gICAgICAgICAgbWFyazogX3RoaXM0Lm1hcmtzW3BvaW50XVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBtaW5WYWx1ZTogZnVuY3Rpb24gbWluVmFsdWUoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdFZhbHVlLCB0aGlzLnNlY29uZFZhbHVlKTtcbiAgICB9LFxuICAgIG1heFZhbHVlOiBmdW5jdGlvbiBtYXhWYWx1ZSgpIHtcbiAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmZpcnN0VmFsdWUsIHRoaXMuc2Vjb25kVmFsdWUpO1xuICAgIH0sXG4gICAgYmFyU2l6ZTogZnVuY3Rpb24gYmFyU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhbmdlID8gMTAwICogKHRoaXMubWF4VmFsdWUgLSB0aGlzLm1pblZhbHVlKSAvICh0aGlzLm1heCAtIHRoaXMubWluKSArICclJyA6IDEwMCAqICh0aGlzLmZpcnN0VmFsdWUgLSB0aGlzLm1pbikgLyAodGhpcy5tYXggLSB0aGlzLm1pbikgKyAnJSc7XG4gICAgfSxcbiAgICBiYXJTdGFydDogZnVuY3Rpb24gYmFyU3RhcnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYW5nZSA/IDEwMCAqICh0aGlzLm1pblZhbHVlIC0gdGhpcy5taW4pIC8gKHRoaXMubWF4IC0gdGhpcy5taW4pICsgJyUnIDogJzAlJztcbiAgICB9LFxuICAgIHByZWNpc2lvbjogZnVuY3Rpb24gcHJlY2lzaW9uKCkge1xuICAgICAgdmFyIHByZWNpc2lvbnMgPSBbdGhpcy5taW4sIHRoaXMubWF4LCB0aGlzLnN0ZXBdLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgZGVjaW1hbCA9ICgnJyArIGl0ZW0pLnNwbGl0KCcuJylbMV07XG4gICAgICAgIHJldHVybiBkZWNpbWFsID8gZGVjaW1hbC5sZW5ndGggOiAwO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCwgcHJlY2lzaW9ucyk7XG4gICAgfSxcbiAgICBydW53YXlTdHlsZTogZnVuY3Rpb24gcnVud2F5U3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbCA/IHsgaGVpZ2h0OiB0aGlzLmhlaWdodCB9IDoge307XG4gICAgfSxcbiAgICBiYXJTdHlsZTogZnVuY3Rpb24gYmFyU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJ0aWNhbCA/IHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmJhclNpemUsXG4gICAgICAgIGJvdHRvbTogdGhpcy5iYXJTdGFydFxuICAgICAgfSA6IHtcbiAgICAgICAgd2lkdGg6IHRoaXMuYmFyU2l6ZSxcbiAgICAgICAgbGVmdDogdGhpcy5iYXJTdGFydFxuICAgICAgfTtcbiAgICB9LFxuICAgIHNsaWRlckRpc2FibGVkOiBmdW5jdGlvbiBzbGlkZXJEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIHZhbHVldGV4dCA9IHZvaWQgMDtcbiAgICBpZiAodGhpcy5yYW5nZSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5maXJzdFZhbHVlID0gTWF0aC5tYXgodGhpcy5taW4sIHRoaXMudmFsdWVbMF0pO1xuICAgICAgICB0aGlzLnNlY29uZFZhbHVlID0gTWF0aC5taW4odGhpcy5tYXgsIHRoaXMudmFsdWVbMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maXJzdFZhbHVlID0gdGhpcy5taW47XG4gICAgICAgIHRoaXMuc2Vjb25kVmFsdWUgPSB0aGlzLm1heDtcbiAgICAgIH1cbiAgICAgIHRoaXMub2xkVmFsdWUgPSBbdGhpcy5maXJzdFZhbHVlLCB0aGlzLnNlY29uZFZhbHVlXTtcbiAgICAgIHZhbHVldGV4dCA9IHRoaXMuZmlyc3RWYWx1ZSArICctJyArIHRoaXMuc2Vjb25kVmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ251bWJlcicgfHwgaXNOYU4odGhpcy52YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5maXJzdFZhbHVlID0gdGhpcy5taW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpcnN0VmFsdWUgPSBNYXRoLm1pbih0aGlzLm1heCwgTWF0aC5tYXgodGhpcy5taW4sIHRoaXMudmFsdWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub2xkVmFsdWUgPSB0aGlzLmZpcnN0VmFsdWU7XG4gICAgICB2YWx1ZXRleHQgPSB0aGlzLmZpcnN0VmFsdWU7XG4gICAgfVxuICAgIHRoaXMuJGVsLnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZXRleHQnLCB2YWx1ZXRleHQpO1xuXG4gICAgLy8gbGFiZWwgc2NyZWVuIHJlYWRlclxuICAgIHRoaXMuJGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRoaXMubGFiZWwgPyB0aGlzLmxhYmVsIDogJ3NsaWRlciBiZXR3ZWVuICcgKyB0aGlzLm1pbiArICcgYW5kICcgKyB0aGlzLm1heCk7XG5cbiAgICB0aGlzLnJlc2V0U2l6ZSgpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2V0U2l6ZSk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVzZXRTaXplKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NsaWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc2xpZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHNsaWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zbGlkZXIvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc2xpZGVyX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfc2xpZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMzI3MDg2NDRfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMzI3MDg2NDRfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzbGlkZXJfc3JjX21haW5fYXBpOyB9XG5zbGlkZXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zbGlkZXIvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNsaWRlcl9zcmNfbWFpbiA9IChzbGlkZXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zbGlkZXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc2xpZGVyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc2xpZGVyX3NyY19tYWluLm5hbWUsIHNsaWRlcl9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzbGlkZXIgPSAoc2xpZGVyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbG9hZGluZy9zcmMvbG9hZGluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZWVlMGE3YWMmXG52YXIgbG9hZGluZ3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2VlZTBhN2FjX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImVsLWxvYWRpbmctZmFkZVwiIH0sXG4gICAgICBvbjogeyBcImFmdGVyLWxlYXZlXCI6IF92bS5oYW5kbGVBZnRlckxlYXZlIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbG9hZGluZy1tYXNrXCIsXG4gICAgICAgICAgY2xhc3M6IFtfdm0uY3VzdG9tQ2xhc3MsIHsgXCJpcy1mdWxsc2NyZWVuXCI6IF92bS5mdWxsc2NyZWVuIH1dLFxuICAgICAgICAgIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogX3ZtLmJhY2tncm91bmQgfHwgXCJcIiB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWxvYWRpbmctc3Bpbm5lclwiIH0sIFtcbiAgICAgICAgICAgICFfdm0uc3Bpbm5lclxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJzdmdcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiY2lyY3VsYXJcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdmlld0JveDogXCIyNSAyNSA1MCA1MFwiIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIF9jKFwiY2lyY2xlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJwYXRoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgY3g6IFwiNTBcIiwgY3k6IFwiNTBcIiwgcjogXCIyMFwiLCBmaWxsOiBcIm5vbmVcIiB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF9jKFwiaVwiLCB7IGNsYXNzOiBfdm0uc3Bpbm5lciB9KSxcbiAgICAgICAgICAgIF92bS50ZXh0XG4gICAgICAgICAgICAgID8gX2MoXCJwXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtbG9hZGluZy10ZXh0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udGV4dCkpXG4gICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF0pXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBsb2FkaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfZWVlMGE3YWNfc3RhdGljUmVuZGVyRm5zID0gW11cbmxvYWRpbmd2dWVfdHlwZV90ZW1wbGF0ZV9pZF9lZWUwYTdhY19yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2xvYWRpbmcvc3JjL2xvYWRpbmcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWVlZTBhN2FjJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9sb2FkaW5nLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbG9hZGluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHQ6IG51bGwsXG4gICAgICBzcGlubmVyOiBudWxsLFxuICAgICAgYmFja2dyb3VuZDogbnVsbCxcbiAgICAgIGZ1bGxzY3JlZW46IHRydWUsXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIGN1c3RvbUNsYXNzOiAnJ1xuICAgIH07XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQWZ0ZXJMZWF2ZTogZnVuY3Rpb24gaGFuZGxlQWZ0ZXJMZWF2ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2FmdGVyLWxlYXZlJyk7XG4gICAgfSxcbiAgICBzZXRUZXh0OiBmdW5jdGlvbiBzZXRUZXh0KHRleHQpIHtcbiAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbG9hZGluZy9zcmMvbG9hZGluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2xvYWRpbmd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobG9hZGluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9sb2FkaW5nLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGxvYWRpbmdfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfbG9hZGluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbG9hZGluZ3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2VlZTBhN2FjX3JlbmRlcixcbiAgbG9hZGluZ3Z1ZV90eXBlX3RlbXBsYXRlX2lkX2VlZTBhN2FjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbG9hZGluZ19hcGk7IH1cbmxvYWRpbmdfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9sb2FkaW5nL3NyYy9sb2FkaW5nLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBsb2FkaW5nID0gKGxvYWRpbmdfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2FmdGVyLWxlYXZlXCJcbnZhciBhZnRlcl9sZWF2ZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcbnZhciBhZnRlcl9sZWF2ZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihhZnRlcl9sZWF2ZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2xvYWRpbmcvc3JjL2RpcmVjdGl2ZS5qc1xuXG5cblxuXG5cbnZhciBNYXNrID0gZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5leHRlbmQobG9hZGluZyk7XG5cbnZhciBsb2FkaW5nRGlyZWN0aXZlID0ge307XG5sb2FkaW5nRGlyZWN0aXZlLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIGlmIChWdWUucHJvdG90eXBlLiRpc1NlcnZlcikgcmV0dXJuO1xuICB2YXIgdG9nZ2xlTG9hZGluZyA9IGZ1bmN0aW9uIHRvZ2dsZUxvYWRpbmcoZWwsIGJpbmRpbmcpIHtcbiAgICBpZiAoYmluZGluZy52YWx1ZSkge1xuICAgICAgVnVlLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGJpbmRpbmcubW9kaWZpZXJzLmZ1bGxzY3JlZW4pIHtcbiAgICAgICAgICBlbC5vcmlnaW5hbFBvc2l0aW9uID0gT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoZG9jdW1lbnQuYm9keSwgJ3Bvc2l0aW9uJyk7XG4gICAgICAgICAgZWwub3JpZ2luYWxPdmVyZmxvdyA9IE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGRvY3VtZW50LmJvZHksICdvdmVyZmxvdycpO1xuICAgICAgICAgIGVsLm1hc2tTdHlsZS56SW5kZXggPSBwb3B1cF9bXCJQb3B1cE1hbmFnZXJcIl0ubmV4dFpJbmRleCgpO1xuXG4gICAgICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkoZWwubWFzaywgJ2lzLWZ1bGxzY3JlZW4nKTtcbiAgICAgICAgICBpbnNlcnREb20oZG9jdW1lbnQuYm9keSwgZWwsIGJpbmRpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKGVsLm1hc2ssICdpcy1mdWxsc2NyZWVuJyk7XG5cbiAgICAgICAgICBpZiAoYmluZGluZy5tb2RpZmllcnMuYm9keSkge1xuICAgICAgICAgICAgZWwub3JpZ2luYWxQb3NpdGlvbiA9IE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGRvY3VtZW50LmJvZHksICdwb3NpdGlvbicpO1xuXG4gICAgICAgICAgICBbJ3RvcCcsICdsZWZ0J10uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgdmFyIHNjcm9sbCA9IHByb3BlcnR5ID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICAgICAgICAgICAgICBlbC5tYXNrU3R5bGVbcHJvcGVydHldID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbcHJvcGVydHldICsgZG9jdW1lbnQuYm9keVtzY3JvbGxdICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3Njcm9sbF0gLSBwYXJzZUludChPYmplY3QoZG9tX1tcImdldFN0eWxlXCJdKShkb2N1bWVudC5ib2R5LCAnbWFyZ2luLScgKyBwcm9wZXJ0eSksIDEwKSArICdweCc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFsnaGVpZ2h0JywgJ3dpZHRoJ10uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgZWwubWFza1N0eWxlW3Byb3BlcnR5XSA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3Byb3BlcnR5XSArICdweCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaW5zZXJ0RG9tKGRvY3VtZW50LmJvZHksIGVsLCBiaW5kaW5nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZWwub3JpZ2luYWxQb3NpdGlvbiA9IE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGVsLCAncG9zaXRpb24nKTtcbiAgICAgICAgICAgIGluc2VydERvbShlbCwgZWwsIGJpbmRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFmdGVyX2xlYXZlX2RlZmF1bHQoKShlbC5pbnN0YW5jZSwgZnVuY3Rpb24gKF8pIHtcbiAgICAgICAgaWYgKCFlbC5pbnN0YW5jZS5oaWRpbmcpIHJldHVybjtcbiAgICAgICAgZWwuZG9tVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB2YXIgdGFyZ2V0ID0gYmluZGluZy5tb2RpZmllcnMuZnVsbHNjcmVlbiB8fCBiaW5kaW5nLm1vZGlmaWVycy5ib2R5ID8gZG9jdW1lbnQuYm9keSA6IGVsO1xuICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKSh0YXJnZXQsICdlbC1sb2FkaW5nLXBhcmVudC0tcmVsYXRpdmUnKTtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGFyZ2V0LCAnZWwtbG9hZGluZy1wYXJlbnQtLWhpZGRlbicpO1xuICAgICAgICBlbC5pbnN0YW5jZS5oaWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sIDMwMCwgdHJ1ZSk7XG4gICAgICBlbC5pbnN0YW5jZS52aXNpYmxlID0gZmFsc2U7XG4gICAgICBlbC5pbnN0YW5jZS5oaWRpbmcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgdmFyIGluc2VydERvbSA9IGZ1bmN0aW9uIGluc2VydERvbShwYXJlbnQsIGVsLCBiaW5kaW5nKSB7XG4gICAgaWYgKCFlbC5kb21WaXNpYmxlICYmIE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGVsLCAnZGlzcGxheScpICE9PSAnbm9uZScgJiYgT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoZWwsICd2aXNpYmlsaXR5JykgIT09ICdoaWRkZW4nKSB7XG4gICAgICBPYmplY3Qua2V5cyhlbC5tYXNrU3R5bGUpLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgIGVsLm1hc2suc3R5bGVbcHJvcGVydHldID0gZWwubWFza1N0eWxlW3Byb3BlcnR5XTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZWwub3JpZ2luYWxQb3NpdGlvbiAhPT0gJ2Fic29sdXRlJyAmJiBlbC5vcmlnaW5hbFBvc2l0aW9uICE9PSAnZml4ZWQnKSB7XG4gICAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKHBhcmVudCwgJ2VsLWxvYWRpbmctcGFyZW50LS1yZWxhdGl2ZScpO1xuICAgICAgfVxuICAgICAgaWYgKGJpbmRpbmcubW9kaWZpZXJzLmZ1bGxzY3JlZW4gJiYgYmluZGluZy5tb2RpZmllcnMubG9jaykge1xuICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShwYXJlbnQsICdlbC1sb2FkaW5nLXBhcmVudC0taGlkZGVuJyk7XG4gICAgICB9XG4gICAgICBlbC5kb21WaXNpYmxlID0gdHJ1ZTtcblxuICAgICAgcGFyZW50LmFwcGVuZENoaWxkKGVsLm1hc2spO1xuICAgICAgVnVlLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGVsLmluc3RhbmNlLmhpZGluZykge1xuICAgICAgICAgIGVsLmluc3RhbmNlLiRlbWl0KCdhZnRlci1sZWF2ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsLmluc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVsLmRvbUluc2VydGVkID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGVsLmRvbVZpc2libGUgJiYgZWwuaW5zdGFuY2UuaGlkaW5nID09PSB0cnVlKSB7XG4gICAgICBlbC5pbnN0YW5jZS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIGVsLmluc3RhbmNlLmhpZGluZyA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBWdWUuZGlyZWN0aXZlKCdsb2FkaW5nJywge1xuICAgIGJpbmQ6IGZ1bmN0aW9uIGJpbmQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgICB2YXIgdGV4dEV4ciA9IGVsLmdldEF0dHJpYnV0ZSgnZWxlbWVudC1sb2FkaW5nLXRleHQnKTtcbiAgICAgIHZhciBzcGlubmVyRXhyID0gZWwuZ2V0QXR0cmlidXRlKCdlbGVtZW50LWxvYWRpbmctc3Bpbm5lcicpO1xuICAgICAgdmFyIGJhY2tncm91bmRFeHIgPSBlbC5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQtbG9hZGluZy1iYWNrZ3JvdW5kJyk7XG4gICAgICB2YXIgY3VzdG9tQ2xhc3NFeHIgPSBlbC5nZXRBdHRyaWJ1dGUoJ2VsZW1lbnQtbG9hZGluZy1jdXN0b20tY2xhc3MnKTtcbiAgICAgIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gICAgICB2YXIgbWFzayA9IG5ldyBNYXNrKHtcbiAgICAgICAgZWw6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdGV4dDogdm0gJiYgdm1bdGV4dEV4cl0gfHwgdGV4dEV4cixcbiAgICAgICAgICBzcGlubmVyOiB2bSAmJiB2bVtzcGlubmVyRXhyXSB8fCBzcGlubmVyRXhyLFxuICAgICAgICAgIGJhY2tncm91bmQ6IHZtICYmIHZtW2JhY2tncm91bmRFeHJdIHx8IGJhY2tncm91bmRFeHIsXG4gICAgICAgICAgY3VzdG9tQ2xhc3M6IHZtICYmIHZtW2N1c3RvbUNsYXNzRXhyXSB8fCBjdXN0b21DbGFzc0V4cixcbiAgICAgICAgICBmdWxsc2NyZWVuOiAhIWJpbmRpbmcubW9kaWZpZXJzLmZ1bGxzY3JlZW5cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlbC5pbnN0YW5jZSA9IG1hc2s7XG4gICAgICBlbC5tYXNrID0gbWFzay4kZWw7XG4gICAgICBlbC5tYXNrU3R5bGUgPSB7fTtcblxuICAgICAgYmluZGluZy52YWx1ZSAmJiB0b2dnbGVMb2FkaW5nKGVsLCBiaW5kaW5nKTtcbiAgICB9LFxuXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoZWwsIGJpbmRpbmcpIHtcbiAgICAgIGVsLmluc3RhbmNlLnNldFRleHQoZWwuZ2V0QXR0cmlidXRlKCdlbGVtZW50LWxvYWRpbmctdGV4dCcpKTtcbiAgICAgIGlmIChiaW5kaW5nLm9sZFZhbHVlICE9PSBiaW5kaW5nLnZhbHVlKSB7XG4gICAgICAgIHRvZ2dsZUxvYWRpbmcoZWwsIGJpbmRpbmcpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZChlbCwgYmluZGluZykge1xuICAgICAgaWYgKGVsLmRvbUluc2VydGVkKSB7XG4gICAgICAgIGVsLm1hc2sgJiYgZWwubWFzay5wYXJlbnROb2RlICYmIGVsLm1hc2sucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbC5tYXNrKTtcbiAgICAgICAgdG9nZ2xlTG9hZGluZyhlbCwgeyB2YWx1ZTogZmFsc2UsIG1vZGlmaWVyczogYmluZGluZy5tb2RpZmllcnMgfSk7XG4gICAgICB9XG4gICAgICBlbC5pbnN0YW5jZSAmJiBlbC5pbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZGlyZWN0aXZlID0gKGxvYWRpbmdEaXJlY3RpdmUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9sb2FkaW5nL3NyYy9pbmRleC5qc1xuXG5cblxuXG5cblxuXG52YXIgTG9hZGluZ0NvbnN0cnVjdG9yID0gZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5leHRlbmQobG9hZGluZyk7XG5cbnZhciBzcmNfZGVmYXVsdHMgPSB7XG4gIHRleHQ6IG51bGwsXG4gIGZ1bGxzY3JlZW46IHRydWUsXG4gIGJvZHk6IGZhbHNlLFxuICBsb2NrOiBmYWxzZSxcbiAgY3VzdG9tQ2xhc3M6ICcnXG59O1xuXG52YXIgZnVsbHNjcmVlbkxvYWRpbmcgPSB2b2lkIDA7XG5cbkxvYWRpbmdDb25zdHJ1Y3Rvci5wcm90b3R5cGUub3JpZ2luYWxQb3NpdGlvbiA9ICcnO1xuTG9hZGluZ0NvbnN0cnVjdG9yLnByb3RvdHlwZS5vcmlnaW5hbE92ZXJmbG93ID0gJyc7XG5cbkxvYWRpbmdDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgaWYgKHRoaXMuZnVsbHNjcmVlbikge1xuICAgIGZ1bGxzY3JlZW5Mb2FkaW5nID0gdW5kZWZpbmVkO1xuICB9XG4gIGFmdGVyX2xlYXZlX2RlZmF1bHQoKSh0aGlzLCBmdW5jdGlvbiAoXykge1xuICAgIHZhciB0YXJnZXQgPSBfdGhpcy5mdWxsc2NyZWVuIHx8IF90aGlzLmJvZHkgPyBkb2N1bWVudC5ib2R5IDogX3RoaXMudGFyZ2V0O1xuICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRhcmdldCwgJ2VsLWxvYWRpbmctcGFyZW50LS1yZWxhdGl2ZScpO1xuICAgIE9iamVjdChkb21fW1wicmVtb3ZlQ2xhc3NcIl0pKHRhcmdldCwgJ2VsLWxvYWRpbmctcGFyZW50LS1oaWRkZW4nKTtcbiAgICBpZiAoX3RoaXMuJGVsICYmIF90aGlzLiRlbC5wYXJlbnROb2RlKSB7XG4gICAgICBfdGhpcy4kZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChfdGhpcy4kZWwpO1xuICAgIH1cbiAgICBfdGhpcy4kZGVzdHJveSgpO1xuICB9LCAzMDApO1xuICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbn07XG5cbnZhciBzcmNfYWRkU3R5bGUgPSBmdW5jdGlvbiBhZGRTdHlsZShvcHRpb25zLCBwYXJlbnQsIGluc3RhbmNlKSB7XG4gIHZhciBtYXNrU3R5bGUgPSB7fTtcbiAgaWYgKG9wdGlvbnMuZnVsbHNjcmVlbikge1xuICAgIGluc3RhbmNlLm9yaWdpbmFsUG9zaXRpb24gPSBPYmplY3QoZG9tX1tcImdldFN0eWxlXCJdKShkb2N1bWVudC5ib2R5LCAncG9zaXRpb24nKTtcbiAgICBpbnN0YW5jZS5vcmlnaW5hbE92ZXJmbG93ID0gT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93Jyk7XG4gICAgbWFza1N0eWxlLnpJbmRleCA9IHBvcHVwX1tcIlBvcHVwTWFuYWdlclwiXS5uZXh0WkluZGV4KCk7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5ib2R5KSB7XG4gICAgaW5zdGFuY2Uub3JpZ2luYWxQb3NpdGlvbiA9IE9iamVjdChkb21fW1wiZ2V0U3R5bGVcIl0pKGRvY3VtZW50LmJvZHksICdwb3NpdGlvbicpO1xuICAgIFsndG9wJywgJ2xlZnQnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgdmFyIHNjcm9sbCA9IHByb3BlcnR5ID09PSAndG9wJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICAgICAgbWFza1N0eWxlW3Byb3BlcnR5XSA9IG9wdGlvbnMudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3Byb3BlcnR5XSArIGRvY3VtZW50LmJvZHlbc2Nyb2xsXSArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtzY3JvbGxdICsgJ3B4JztcbiAgICB9KTtcbiAgICBbJ2hlaWdodCcsICd3aWR0aCddLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICBtYXNrU3R5bGVbcHJvcGVydHldID0gb3B0aW9ucy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbcHJvcGVydHldICsgJ3B4JztcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpbnN0YW5jZS5vcmlnaW5hbFBvc2l0aW9uID0gT2JqZWN0KGRvbV9bXCJnZXRTdHlsZVwiXSkocGFyZW50LCAncG9zaXRpb24nKTtcbiAgfVxuICBPYmplY3Qua2V5cyhtYXNrU3R5bGUpLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgaW5zdGFuY2UuJGVsLnN0eWxlW3Byb3BlcnR5XSA9IG1hc2tTdHlsZVtwcm9wZXJ0eV07XG4gIH0pO1xufTtcblxudmFyIHNyY19Mb2FkaW5nID0gZnVuY3Rpb24gTG9hZGluZygpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gIGlmIChleHRlcm5hbF92dWVfZGVmYXVsdC5hLnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgb3B0aW9ucyA9IG1lcmdlX2RlZmF1bHQoKSh7fSwgc3JjX2RlZmF1bHRzLCBvcHRpb25zKTtcbiAgaWYgKHR5cGVvZiBvcHRpb25zLnRhcmdldCA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zLnRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob3B0aW9ucy50YXJnZXQpO1xuICB9XG4gIG9wdGlvbnMudGFyZ2V0ID0gb3B0aW9ucy50YXJnZXQgfHwgZG9jdW1lbnQuYm9keTtcbiAgaWYgKG9wdGlvbnMudGFyZ2V0ICE9PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgb3B0aW9ucy5mdWxsc2NyZWVuID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgb3B0aW9ucy5ib2R5ID0gdHJ1ZTtcbiAgfVxuICBpZiAob3B0aW9ucy5mdWxsc2NyZWVuICYmIGZ1bGxzY3JlZW5Mb2FkaW5nKSB7XG4gICAgcmV0dXJuIGZ1bGxzY3JlZW5Mb2FkaW5nO1xuICB9XG5cbiAgdmFyIHBhcmVudCA9IG9wdGlvbnMuYm9keSA/IGRvY3VtZW50LmJvZHkgOiBvcHRpb25zLnRhcmdldDtcbiAgdmFyIGluc3RhbmNlID0gbmV3IExvYWRpbmdDb25zdHJ1Y3Rvcih7XG4gICAgZWw6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpLFxuICAgIGRhdGE6IG9wdGlvbnNcbiAgfSk7XG5cbiAgc3JjX2FkZFN0eWxlKG9wdGlvbnMsIHBhcmVudCwgaW5zdGFuY2UpO1xuICBpZiAoaW5zdGFuY2Uub3JpZ2luYWxQb3NpdGlvbiAhPT0gJ2Fic29sdXRlJyAmJiBpbnN0YW5jZS5vcmlnaW5hbFBvc2l0aW9uICE9PSAnZml4ZWQnKSB7XG4gICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkocGFyZW50LCAnZWwtbG9hZGluZy1wYXJlbnQtLXJlbGF0aXZlJyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMuZnVsbHNjcmVlbiAmJiBvcHRpb25zLmxvY2spIHtcbiAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKShwYXJlbnQsICdlbC1sb2FkaW5nLXBhcmVudC0taGlkZGVuJyk7XG4gIH1cbiAgcGFyZW50LmFwcGVuZENoaWxkKGluc3RhbmNlLiRlbCk7XG4gIGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgIGluc3RhbmNlLnZpc2libGUgPSB0cnVlO1xuICB9KTtcbiAgaWYgKG9wdGlvbnMuZnVsbHNjcmVlbikge1xuICAgIGZ1bGxzY3JlZW5Mb2FkaW5nID0gaW5zdGFuY2U7XG4gIH1cbiAgcmV0dXJuIGluc3RhbmNlO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjID0gKHNyY19Mb2FkaW5nKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbG9hZGluZy9pbmRleC5qc1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbG9hZGluZyA9ICh7XG4gIGluc3RhbGw6IGZ1bmN0aW9uIGluc3RhbGwoVnVlKSB7XG4gICAgVnVlLnVzZShzcmNfZGlyZWN0aXZlKTtcbiAgICBWdWUucHJvdG90eXBlLiRsb2FkaW5nID0gc3JjO1xuICB9LFxuXG4gIGRpcmVjdGl2ZTogc3JjX2RpcmVjdGl2ZSxcbiAgc2VydmljZTogc3JjXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaWNvbi9zcmMvaWNvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9Y2IzZmU3ZjQmXG52YXIgaWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NiM2ZlN2Y0X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImlcIiwgeyBjbGFzczogXCJlbC1pY29uLVwiICsgX3ZtLm5hbWUgfSlcbn1cbnZhciBpY29udnVlX3R5cGVfdGVtcGxhdGVfaWRfY2IzZmU3ZjRfc3RhdGljUmVuZGVyRm5zID0gW11cbmljb252dWVfdHlwZV90ZW1wbGF0ZV9pZF9jYjNmZTdmNF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ljb24vc3JjL2ljb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWNiM2ZlN2Y0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pY29uL3NyYy9pY29uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxJY29uJyxcblxuICBwcm9wczoge1xuICAgIG5hbWU6IFN0cmluZ1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaWNvbi9zcmMvaWNvbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2ljb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoaWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pY29uL3NyYy9pY29uLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGljb25fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaWNvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NiM2ZlN2Y0X3JlbmRlcixcbiAgaWNvbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2NiM2ZlN2Y0X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaWNvbl9hcGk7IH1cbmljb25fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9pY29uL3NyYy9pY29uLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpY29uID0gKGljb25fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pY29uL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmljb24uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChpY29uLm5hbWUsIGljb24pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfaWNvbiA9IChpY29uKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcm93L3NyYy9yb3cuanNcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19yb3cgPSAoe1xuICBuYW1lOiAnRWxSb3cnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFJvdycsXG5cbiAgcHJvcHM6IHtcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfSxcbiAgICBndXR0ZXI6IE51bWJlcixcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAganVzdGlmeToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3N0YXJ0J1xuICAgIH0sXG4gICAgYWxpZ246IFN0cmluZ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc3R5bGU6IGZ1bmN0aW9uIHN0eWxlKCkge1xuICAgICAgdmFyIHJldCA9IHt9O1xuXG4gICAgICBpZiAodGhpcy5ndXR0ZXIpIHtcbiAgICAgICAgcmV0Lm1hcmdpbkxlZnQgPSAnLScgKyB0aGlzLmd1dHRlciAvIDIgKyAncHgnO1xuICAgICAgICByZXQubWFyZ2luUmlnaHQgPSByZXQubWFyZ2luTGVmdDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHJldHVybiBoKHRoaXMudGFnLCB7XG4gICAgICBjbGFzczogWydlbC1yb3cnLCB0aGlzLmp1c3RpZnkgIT09ICdzdGFydCcgPyAnaXMtanVzdGlmeS0nICsgdGhpcy5qdXN0aWZ5IDogJycsIHRoaXMuYWxpZ24gPyAnaXMtYWxpZ24tJyArIHRoaXMuYWxpZ24gOiAnJywgeyAnZWwtcm93LS1mbGV4JzogdGhpcy50eXBlID09PSAnZmxleCcgfV0sXG4gICAgICBzdHlsZTogdGhpcy5zdHlsZVxuICAgIH0sIHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcm93L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19yb3cuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcmNfcm93Lm5hbWUsIHNyY19yb3cpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfcm93ID0gKHNyY19yb3cpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2wvc3JjL2NvbC5qc1xudmFyIGNvbF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb2wgPSAoe1xuICBuYW1lOiAnRWxDb2wnLFxuXG4gIHByb3BzOiB7XG4gICAgc3Bhbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMjRcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9LFxuICAgIG9mZnNldDogTnVtYmVyLFxuICAgIHB1bGw6IE51bWJlcixcbiAgICBwdXNoOiBOdW1iZXIsXG4gICAgeHM6IFtOdW1iZXIsIE9iamVjdF0sXG4gICAgc206IFtOdW1iZXIsIE9iamVjdF0sXG4gICAgbWQ6IFtOdW1iZXIsIE9iamVjdF0sXG4gICAgbGc6IFtOdW1iZXIsIE9iamVjdF0sXG4gICAgeGw6IFtOdW1iZXIsIE9iamVjdF1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGd1dHRlcjogZnVuY3Rpb24gZ3V0dGVyKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LiRvcHRpb25zLmNvbXBvbmVudE5hbWUgIT09ICdFbFJvdycpIHtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmd1dHRlciA6IDA7XG4gICAgfVxuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBjbGFzc0xpc3QgPSBbXTtcbiAgICB2YXIgc3R5bGUgPSB7fTtcblxuICAgIGlmICh0aGlzLmd1dHRlcikge1xuICAgICAgc3R5bGUucGFkZGluZ0xlZnQgPSB0aGlzLmd1dHRlciAvIDIgKyAncHgnO1xuICAgICAgc3R5bGUucGFkZGluZ1JpZ2h0ID0gc3R5bGUucGFkZGluZ0xlZnQ7XG4gICAgfVxuXG4gICAgWydzcGFuJywgJ29mZnNldCcsICdwdWxsJywgJ3B1c2gnXS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICBpZiAoX3RoaXNbcHJvcF0gfHwgX3RoaXNbcHJvcF0gPT09IDApIHtcbiAgICAgICAgY2xhc3NMaXN0LnB1c2gocHJvcCAhPT0gJ3NwYW4nID8gJ2VsLWNvbC0nICsgcHJvcCArICctJyArIF90aGlzW3Byb3BdIDogJ2VsLWNvbC0nICsgX3RoaXNbcHJvcF0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLmZvckVhY2goZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgIGlmICh0eXBlb2YgX3RoaXNbc2l6ZV0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNsYXNzTGlzdC5wdXNoKCdlbC1jb2wtJyArIHNpemUgKyAnLScgKyBfdGhpc1tzaXplXSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbF90eXBlb2YoX3RoaXNbc2l6ZV0pID09PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgcHJvcHMgPSBfdGhpc1tzaXplXTtcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICBjbGFzc0xpc3QucHVzaChwcm9wICE9PSAnc3BhbicgPyAnZWwtY29sLScgKyBzaXplICsgJy0nICsgcHJvcCArICctJyArIHByb3BzW3Byb3BdIDogJ2VsLWNvbC0nICsgc2l6ZSArICctJyArIHByb3BzW3Byb3BdKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaCh0aGlzLnRhZywge1xuICAgICAgY2xhc3M6IFsnZWwtY29sJywgY2xhc3NMaXN0XSxcbiAgICAgIHN0eWxlOiBzdHlsZVxuICAgIH0sIHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNvbC5uYW1lLCBjb2wpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY29sID0gKGNvbCk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE3M2ZlZGY1JlxudmFyIHVwbG9hZF9saXN0dnVlX3R5cGVfdGVtcGxhdGVfaWRfMTczZmVkZjVfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvbi1ncm91cFwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIFwiZWwtdXBsb2FkLWxpc3RcIixcbiAgICAgICAgXCJlbC11cGxvYWQtbGlzdC0tXCIgKyBfdm0ubGlzdFR5cGUsXG4gICAgICAgIHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uZGlzYWJsZWQgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7IHRhZzogXCJ1bFwiLCBuYW1lOiBcImVsLWxpc3RcIiB9XG4gICAgfSxcbiAgICBfdm0uX2woX3ZtLmZpbGVzLCBmdW5jdGlvbihmaWxlKSB7XG4gICAgICByZXR1cm4gX2MoXG4gICAgICAgIFwibGlcIixcbiAgICAgICAge1xuICAgICAgICAgIGtleTogZmlsZS51aWQsXG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIFwiZWwtdXBsb2FkLWxpc3RfX2l0ZW1cIixcbiAgICAgICAgICAgIFwiaXMtXCIgKyBmaWxlLnN0YXR1cyxcbiAgICAgICAgICAgIF92bS5mb2N1c2luZyA/IFwiZm9jdXNpbmdcIiA6IFwiXCJcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0dHJzOiB7IHRhYmluZGV4OiBcIjBcIiB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRlbGV0ZVwiLCBbOCwgNDZdLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICBcIkJhY2tzcGFjZVwiLFxuICAgICAgICAgICAgICAgICAgXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICAgIFwiRGVsXCJcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICFfdm0uZGlzYWJsZWQgJiYgX3ZtLiRlbWl0KFwicmVtb3ZlXCIsIGZpbGUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZm9jdXM6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBfdm0uZm9jdXNpbmcgPSB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5mb2N1c2luZyA9IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBfdm0uZm9jdXNpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF92bS5fdChcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBmaWxlLnN0YXR1cyAhPT0gXCJ1cGxvYWRpbmdcIiAmJlxuICAgICAgICAgICAgICBbXCJwaWN0dXJlLWNhcmRcIiwgXCJwaWN0dXJlXCJdLmluZGV4T2YoX3ZtLmxpc3RUeXBlKSA+IC0xXG4gICAgICAgICAgICAgICAgPyBfYyhcImltZ1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXVwbG9hZC1saXN0X19pdGVtLXRodW1ibmFpbFwiLFxuICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IGZpbGUudXJsLCBhbHQ6IFwiXCIgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC11cGxvYWQtbGlzdF9faXRlbS1uYW1lXCIsXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUNsaWNrKGZpbGUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tZG9jdW1lbnRcIiB9KSxcbiAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoZmlsZS5uYW1lKSArIFwiXFxuICAgICAgXCIpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC11cGxvYWQtbGlzdF9faXRlbS1zdGF0dXMtbGFiZWxcIiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgXCJlbC1pY29uLXVwbG9hZC1zdWNjZXNzXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgXCJlbC1pY29uLWNpcmNsZS1jaGVja1wiOiBfdm0ubGlzdFR5cGUgPT09IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZWwtaWNvbi1jaGVja1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgW1wicGljdHVyZS1jYXJkXCIsIFwicGljdHVyZVwiXS5pbmRleE9mKF92bS5saXN0VHlwZSkgPiAtMVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgIV92bS5kaXNhYmxlZFxuICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1jbG9zZVwiLFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kZW1pdChcInJlbW92ZVwiLCBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAhX3ZtLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgPyBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWNsb3NlLXRpcFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udChcImVsLnVwbG9hZC5kZWxldGVUaXBcIikpKVxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBmaWxlLnN0YXR1cyA9PT0gXCJ1cGxvYWRpbmdcIlxuICAgICAgICAgICAgICAgID8gX2MoXCJlbC1wcm9ncmVzc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogX3ZtLmxpc3RUeXBlID09PSBcInBpY3R1cmUtY2FyZFwiID8gXCJjaXJjbGVcIiA6IFwibGluZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5saXN0VHlwZSA9PT0gXCJwaWN0dXJlLWNhcmRcIiA/IDYgOiAyLFxuICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2U6IF92bS5wYXJzZVBlcmNlbnRhZ2UoZmlsZS5wZXJjZW50YWdlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5saXN0VHlwZSA9PT0gXCJwaWN0dXJlLWNhcmRcIlxuICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdXBsb2FkLWxpc3RfX2l0ZW0tYWN0aW9uc1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZVByZXZpZXcgJiYgX3ZtLmxpc3RUeXBlID09PSBcInBpY3R1cmUtY2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC11cGxvYWQtbGlzdF9faXRlbS1wcmV2aWV3XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZVByZXZpZXcoZmlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLXpvb20taW5cIiB9KV1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAhX3ZtLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC11cGxvYWQtbGlzdF9faXRlbS1kZWxldGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJGVtaXQoXCJyZW1vdmVcIiwgZmlsZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWRlbGV0ZVwiIH0pXVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHsgZmlsZTogZmlsZSB9XG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgfSksXG4gICAgMFxuICApXG59XG52YXIgdXBsb2FkX2xpc3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNzNmZWRmNV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxudXBsb2FkX2xpc3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNzNmZWRmNV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWxpc3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE3M2ZlZGY1JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvcHJvZ3Jlc3NcIlxudmFyIHByb2dyZXNzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xudmFyIHByb2dyZXNzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHByb2dyZXNzXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdXBsb2FkX2xpc3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuXG4gIG5hbWU6ICdFbFVwbG9hZExpc3QnLFxuXG4gIG1peGluczogW2xvY2FsZV9kZWZhdWx0LmFdLFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvY3VzaW5nOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cbiAgY29tcG9uZW50czogeyBFbFByb2dyZXNzOiBwcm9ncmVzc19kZWZhdWx0LmEgfSxcblxuICBwcm9wczoge1xuICAgIGZpbGVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNhYmxlZDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBoYW5kbGVQcmV2aWV3OiBGdW5jdGlvbixcbiAgICBsaXN0VHlwZTogU3RyaW5nXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBwYXJzZVBlcmNlbnRhZ2U6IGZ1bmN0aW9uIHBhcnNlUGVyY2VudGFnZSh2YWwpIHtcbiAgICAgIHJldHVybiBwYXJzZUludCh2YWwsIDEwKTtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhmaWxlKSB7XG4gICAgICB0aGlzLmhhbmRsZVByZXZpZXcgJiYgdGhpcy5oYW5kbGVQcmV2aWV3KGZpbGUpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWxpc3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY191cGxvYWRfbGlzdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh1cGxvYWRfbGlzdHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1saXN0LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHVwbG9hZF9saXN0X2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3VwbG9hZF9saXN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB1cGxvYWRfbGlzdHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE3M2ZlZGY1X3JlbmRlcixcbiAgdXBsb2FkX2xpc3R2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xNzNmZWRmNV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHVwbG9hZF9saXN0X2FwaTsgfVxudXBsb2FkX2xpc3RfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1saXN0LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1cGxvYWRfbGlzdCA9ICh1cGxvYWRfbGlzdF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiYmFiZWwtaGVscGVyLXZ1ZS1qc3gtbWVyZ2UtcHJvcHNcIlxudmFyIGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xudmFyIGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy9hamF4LmpzXG5mdW5jdGlvbiBnZXRFcnJvcihhY3Rpb24sIG9wdGlvbiwgeGhyKSB7XG4gIHZhciBtc2cgPSB2b2lkIDA7XG4gIGlmICh4aHIucmVzcG9uc2UpIHtcbiAgICBtc2cgPSAnJyArICh4aHIucmVzcG9uc2UuZXJyb3IgfHwgeGhyLnJlc3BvbnNlKTtcbiAgfSBlbHNlIGlmICh4aHIucmVzcG9uc2VUZXh0KSB7XG4gICAgbXNnID0gJycgKyB4aHIucmVzcG9uc2VUZXh0O1xuICB9IGVsc2Uge1xuICAgIG1zZyA9ICdmYWlsIHRvIHBvc3QgJyArIGFjdGlvbiArICcgJyArIHhoci5zdGF0dXM7XG4gIH1cblxuICB2YXIgZXJyID0gbmV3IEVycm9yKG1zZyk7XG4gIGVyci5zdGF0dXMgPSB4aHIuc3RhdHVzO1xuICBlcnIubWV0aG9kID0gJ3Bvc3QnO1xuICBlcnIudXJsID0gYWN0aW9uO1xuICByZXR1cm4gZXJyO1xufVxuXG5mdW5jdGlvbiBnZXRCb2R5KHhocikge1xuICB2YXIgdGV4dCA9IHhoci5yZXNwb25zZVRleHQgfHwgeGhyLnJlc3BvbnNlO1xuICBpZiAoIXRleHQpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGxvYWQob3B0aW9uKSB7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICB2YXIgYWN0aW9uID0gb3B0aW9uLmFjdGlvbjtcblxuICBpZiAoeGhyLnVwbG9hZCkge1xuICAgIHhoci51cGxvYWQub25wcm9ncmVzcyA9IGZ1bmN0aW9uIHByb2dyZXNzKGUpIHtcbiAgICAgIGlmIChlLnRvdGFsID4gMCkge1xuICAgICAgICBlLnBlcmNlbnQgPSBlLmxvYWRlZCAvIGUudG90YWwgKiAxMDA7XG4gICAgICB9XG4gICAgICBvcHRpb24ub25Qcm9ncmVzcyhlKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG5cbiAgaWYgKG9wdGlvbi5kYXRhKSB7XG4gICAgT2JqZWN0LmtleXMob3B0aW9uLmRhdGEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgZm9ybURhdGEuYXBwZW5kKGtleSwgb3B0aW9uLmRhdGFba2V5XSk7XG4gICAgfSk7XG4gIH1cblxuICBmb3JtRGF0YS5hcHBlbmQob3B0aW9uLmZpbGVuYW1lLCBvcHRpb24uZmlsZSwgb3B0aW9uLmZpbGUubmFtZSk7XG5cbiAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbiBlcnJvcihlKSB7XG4gICAgb3B0aW9uLm9uRXJyb3IoZSk7XG4gIH07XG5cbiAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uIG9ubG9hZCgpIHtcbiAgICBpZiAoeGhyLnN0YXR1cyA8IDIwMCB8fCB4aHIuc3RhdHVzID49IDMwMCkge1xuICAgICAgcmV0dXJuIG9wdGlvbi5vbkVycm9yKGdldEVycm9yKGFjdGlvbiwgb3B0aW9uLCB4aHIpKTtcbiAgICB9XG5cbiAgICBvcHRpb24ub25TdWNjZXNzKGdldEJvZHkoeGhyKSk7XG4gIH07XG5cbiAgeGhyLm9wZW4oJ3Bvc3QnLCBhY3Rpb24sIHRydWUpO1xuXG4gIGlmIChvcHRpb24ud2l0aENyZWRlbnRpYWxzICYmICd3aXRoQ3JlZGVudGlhbHMnIGluIHhocikge1xuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIGhlYWRlcnMgPSBvcHRpb24uaGVhZGVycyB8fCB7fTtcblxuICBmb3IgKHZhciBpdGVtIGluIGhlYWRlcnMpIHtcbiAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShpdGVtKSAmJiBoZWFkZXJzW2l0ZW1dICE9PSBudWxsKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihpdGVtLCBoZWFkZXJzW2l0ZW1dKTtcbiAgICB9XG4gIH1cbiAgeGhyLnNlbmQoZm9ybURhdGEpO1xuICByZXR1cm4geGhyO1xufVxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1kcmFnZ2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZWJiZjIxOSZcbnZhciB1cGxvYWRfZHJhZ2dlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdlYmJmMjE5X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXVwbG9hZC1kcmFnZ2VyXCIsXG4gICAgICBjbGFzczoge1xuICAgICAgICBcImlzLWRyYWdvdmVyXCI6IF92bS5kcmFnb3ZlclxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGRyb3A6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgcmV0dXJuIF92bS5vbkRyb3AoJGV2ZW50KVxuICAgICAgICB9LFxuICAgICAgICBkcmFnb3ZlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICByZXR1cm4gX3ZtLm9uRHJhZ292ZXIoJGV2ZW50KVxuICAgICAgICB9LFxuICAgICAgICBkcmFnbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgX3ZtLmRyYWdvdmVyID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIHVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ViYmYyMTlfc3RhdGljUmVuZGVyRm5zID0gW11cbnVwbG9hZF9kcmFnZ2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfN2ViYmYyMTlfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1kcmFnZ2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZWJiZjIxOSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQtZHJhZ2dlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1cGxvYWRfZHJhZ2dlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFVwbG9hZERyYWcnLFxuICBwcm9wczoge1xuICAgIGRpc2FibGVkOiBCb29sZWFuXG4gIH0sXG4gIGluamVjdDoge1xuICAgIHVwbG9hZGVyOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ292ZXI6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnb3ZlcjogZnVuY3Rpb24gb25EcmFnb3ZlcigpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRyYWdvdmVyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRHJvcDogZnVuY3Rpb24gb25Ecm9wKGUpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLnVwbG9hZGVyKSByZXR1cm47XG4gICAgICB2YXIgYWNjZXB0ID0gdGhpcy51cGxvYWRlci5hY2NlcHQ7XG4gICAgICB0aGlzLmRyYWdvdmVyID0gZmFsc2U7XG4gICAgICBpZiAoIWFjY2VwdCkge1xuICAgICAgICB0aGlzLiRlbWl0KCdmaWxlJywgZS5kYXRhVHJhbnNmZXIuZmlsZXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLiRlbWl0KCdmaWxlJywgW10uc2xpY2UuY2FsbChlLmRhdGFUcmFuc2Zlci5maWxlcykuZmlsdGVyKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmlsZS50eXBlLFxuICAgICAgICAgICAgbmFtZSA9IGZpbGUubmFtZTtcblxuICAgICAgICB2YXIgZXh0ZW5zaW9uID0gbmFtZS5pbmRleE9mKCcuJykgPiAtMSA/ICcuJyArIG5hbWUuc3BsaXQoJy4nKS5wb3AoKSA6ICcnO1xuICAgICAgICB2YXIgYmFzZVR5cGUgPSB0eXBlLnJlcGxhY2UoL1xcLy4qJC8sICcnKTtcbiAgICAgICAgcmV0dXJuIGFjY2VwdC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgIHJldHVybiB0eXBlLnRyaW0oKTtcbiAgICAgICAgfSkuZmlsdGVyKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgIH0pLnNvbWUoZnVuY3Rpb24gKGFjY2VwdGVkVHlwZSkge1xuICAgICAgICAgIGlmICgvXFwuLiskLy50ZXN0KGFjY2VwdGVkVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRlbnNpb24gPT09IGFjY2VwdGVkVHlwZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKC9cXC9cXCokLy50ZXN0KGFjY2VwdGVkVHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlVHlwZSA9PT0gYWNjZXB0ZWRUeXBlLnJlcGxhY2UoL1xcL1xcKiQvLCAnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgvXlteXFwvXStcXC9bXlxcL10rJC8udGVzdChhY2NlcHRlZFR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gYWNjZXB0ZWRUeXBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLWRyYWdnZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY191cGxvYWRfZHJhZ2dlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh1cGxvYWRfZHJhZ2dlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1kcmFnZ2VyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHVwbG9hZF9kcmFnZ2VyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3VwbG9hZF9kcmFnZ2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB1cGxvYWRfZHJhZ2dlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdlYmJmMjE5X3JlbmRlcixcbiAgdXBsb2FkX2RyYWdnZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZWJiZjIxOV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHVwbG9hZF9kcmFnZ2VyX2FwaTsgfVxudXBsb2FkX2RyYWdnZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC1kcmFnZ2VyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1cGxvYWRfZHJhZ2dlciA9ICh1cGxvYWRfZHJhZ2dlcl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy91cGxvYWQvc3JjL3VwbG9hZC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdXBsb2FkdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgaW5qZWN0OiBbJ3VwbG9hZGVyJ10sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBVcGxvYWREcmFnZ2VyOiB1cGxvYWRfZHJhZ2dlclxuICB9LFxuICBwcm9wczoge1xuICAgIHR5cGU6IFN0cmluZyxcbiAgICBhY3Rpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZmlsZSdcbiAgICB9LFxuICAgIGRhdGE6IE9iamVjdCxcbiAgICBoZWFkZXJzOiBPYmplY3QsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBCb29sZWFuLFxuICAgIG11bHRpcGxlOiBCb29sZWFuLFxuICAgIGFjY2VwdDogU3RyaW5nLFxuICAgIG9uU3RhcnQ6IEZ1bmN0aW9uLFxuICAgIG9uUHJvZ3Jlc3M6IEZ1bmN0aW9uLFxuICAgIG9uU3VjY2VzczogRnVuY3Rpb24sXG4gICAgb25FcnJvcjogRnVuY3Rpb24sXG4gICAgYmVmb3JlVXBsb2FkOiBGdW5jdGlvbixcbiAgICBkcmFnOiBCb29sZWFuLFxuICAgIG9uUHJldmlldzoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHt9XG4gICAgfSxcbiAgICBvblJlbW92ZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHt9XG4gICAgfSxcbiAgICBmaWxlTGlzdDogQXJyYXksXG4gICAgYXV0b1VwbG9hZDogQm9vbGVhbixcbiAgICBsaXN0VHlwZTogU3RyaW5nLFxuICAgIGh0dHBSZXF1ZXN0OiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IHVwbG9hZFxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbGltaXQ6IE51bWJlcixcbiAgICBvbkV4Y2VlZDogRnVuY3Rpb25cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtb3VzZW92ZXI6IGZhbHNlLFxuICAgICAgcmVxczoge31cbiAgICB9O1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGlzSW1hZ2U6IGZ1bmN0aW9uIGlzSW1hZ2Uoc3RyKSB7XG4gICAgICByZXR1cm4gc3RyLmluZGV4T2YoJ2ltYWdlJykgIT09IC0xO1xuICAgIH0sXG4gICAgaGFuZGxlQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXYpIHtcbiAgICAgIHZhciBmaWxlcyA9IGV2LnRhcmdldC5maWxlcztcblxuICAgICAgaWYgKCFmaWxlcykgcmV0dXJuO1xuICAgICAgdGhpcy51cGxvYWRGaWxlcyhmaWxlcyk7XG4gICAgfSxcbiAgICB1cGxvYWRGaWxlczogZnVuY3Rpb24gdXBsb2FkRmlsZXMoZmlsZXMpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmxpbWl0ICYmIHRoaXMuZmlsZUxpc3QubGVuZ3RoICsgZmlsZXMubGVuZ3RoID4gdGhpcy5saW1pdCkge1xuICAgICAgICB0aGlzLm9uRXhjZWVkICYmIHRoaXMub25FeGNlZWQoZmlsZXMsIHRoaXMuZmlsZUxpc3QpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3N0RmlsZXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmaWxlcyk7XG4gICAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgcG9zdEZpbGVzID0gcG9zdEZpbGVzLnNsaWNlKDAsIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAocG9zdEZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHBvc3RGaWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChyYXdGaWxlKSB7XG4gICAgICAgIF90aGlzLm9uU3RhcnQocmF3RmlsZSk7XG4gICAgICAgIGlmIChfdGhpcy5hdXRvVXBsb2FkKSBfdGhpcy51cGxvYWQocmF3RmlsZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwbG9hZDogZnVuY3Rpb24gdXBsb2FkKHJhd0ZpbGUpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRyZWZzLmlucHV0LnZhbHVlID0gbnVsbDtcblxuICAgICAgaWYgKCF0aGlzLmJlZm9yZVVwbG9hZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0KHJhd0ZpbGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYmVmb3JlID0gdGhpcy5iZWZvcmVVcGxvYWQocmF3RmlsZSk7XG4gICAgICBpZiAoYmVmb3JlICYmIGJlZm9yZS50aGVuKSB7XG4gICAgICAgIGJlZm9yZS50aGVuKGZ1bmN0aW9uIChwcm9jZXNzZWRGaWxlKSB7XG4gICAgICAgICAgdmFyIGZpbGVUeXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3NlZEZpbGUpO1xuXG4gICAgICAgICAgaWYgKGZpbGVUeXBlID09PSAnW29iamVjdCBGaWxlXScgfHwgZmlsZVR5cGUgPT09ICdbb2JqZWN0IEJsb2JdJykge1xuICAgICAgICAgICAgaWYgKGZpbGVUeXBlID09PSAnW29iamVjdCBCbG9iXScpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRmlsZSA9IG5ldyBGaWxlKFtwcm9jZXNzZWRGaWxlXSwgcmF3RmlsZS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogcmF3RmlsZS50eXBlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiByYXdGaWxlKSB7XG4gICAgICAgICAgICAgIGlmIChyYXdGaWxlLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkRmlsZVtwXSA9IHJhd0ZpbGVbcF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF90aGlzMi5wb3N0KHByb2Nlc3NlZEZpbGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfdGhpczIucG9zdChyYXdGaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIub25SZW1vdmUobnVsbCwgcmF3RmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChiZWZvcmUgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMucG9zdChyYXdGaWxlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25SZW1vdmUobnVsbCwgcmF3RmlsZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhYm9ydDogZnVuY3Rpb24gYWJvcnQoZmlsZSkge1xuICAgICAgdmFyIHJlcXMgPSB0aGlzLnJlcXM7XG5cbiAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgIHZhciB1aWQgPSBmaWxlO1xuICAgICAgICBpZiAoZmlsZS51aWQpIHVpZCA9IGZpbGUudWlkO1xuICAgICAgICBpZiAocmVxc1t1aWRdKSB7XG4gICAgICAgICAgcmVxc1t1aWRdLmFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHJlcXMpLmZvckVhY2goZnVuY3Rpb24gKHVpZCkge1xuICAgICAgICAgIGlmIChyZXFzW3VpZF0pIHJlcXNbdWlkXS5hYm9ydCgpO1xuICAgICAgICAgIGRlbGV0ZSByZXFzW3VpZF07XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgcG9zdDogZnVuY3Rpb24gcG9zdChyYXdGaWxlKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIHVpZCA9IHJhd0ZpbGUudWlkO1xuXG4gICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBmaWxlOiByYXdGaWxlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGZpbGVuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIGFjdGlvbjogdGhpcy5hY3Rpb24sXG4gICAgICAgIG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uIG9uUHJvZ3Jlc3MoZSkge1xuICAgICAgICAgIF90aGlzMy5vblByb2dyZXNzKGUsIHJhd0ZpbGUpO1xuICAgICAgICB9LFxuICAgICAgICBvblN1Y2Nlc3M6IGZ1bmN0aW9uIG9uU3VjY2VzcyhyZXMpIHtcbiAgICAgICAgICBfdGhpczMub25TdWNjZXNzKHJlcywgcmF3RmlsZSk7XG4gICAgICAgICAgZGVsZXRlIF90aGlzMy5yZXFzW3VpZF07XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgICAgICAgX3RoaXMzLm9uRXJyb3IoZXJyLCByYXdGaWxlKTtcbiAgICAgICAgICBkZWxldGUgX3RoaXMzLnJlcXNbdWlkXTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHZhciByZXEgPSB0aGlzLmh0dHBSZXF1ZXN0KG9wdGlvbnMpO1xuICAgICAgdGhpcy5yZXFzW3VpZF0gPSByZXE7XG4gICAgICBpZiAocmVxICYmIHJlcS50aGVuKSB7XG4gICAgICAgIHJlcS50aGVuKG9wdGlvbnMub25TdWNjZXNzLCBvcHRpb25zLm9uRXJyb3IpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuJHJlZnMuaW5wdXQudmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmNsaWNrKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVLZXlkb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlkb3duKGUpIHtcbiAgICAgIGlmIChlLnRhcmdldCAhPT0gZS5jdXJyZW50VGFyZ2V0KSByZXR1cm47XG4gICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyB8fCBlLmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgIHZhciBoYW5kbGVDbGljayA9IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgIGRyYWcgPSB0aGlzLmRyYWcsXG4gICAgICAgIG5hbWUgPSB0aGlzLm5hbWUsXG4gICAgICAgIGhhbmRsZUNoYW5nZSA9IHRoaXMuaGFuZGxlQ2hhbmdlLFxuICAgICAgICBtdWx0aXBsZSA9IHRoaXMubXVsdGlwbGUsXG4gICAgICAgIGFjY2VwdCA9IHRoaXMuYWNjZXB0LFxuICAgICAgICBsaXN0VHlwZSA9IHRoaXMubGlzdFR5cGUsXG4gICAgICAgIHVwbG9hZEZpbGVzID0gdGhpcy51cGxvYWRGaWxlcyxcbiAgICAgICAgZGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkLFxuICAgICAgICBoYW5kbGVLZXlkb3duID0gdGhpcy5oYW5kbGVLZXlkb3duO1xuXG4gICAgdmFyIGRhdGEgPSB7XG4gICAgICBjbGFzczoge1xuICAgICAgICAnZWwtdXBsb2FkJzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG9uOiB7XG4gICAgICAgIGNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAga2V5ZG93bjogaGFuZGxlS2V5ZG93blxuICAgICAgfVxuICAgIH07XG4gICAgZGF0YS5jbGFzc1snZWwtdXBsb2FkLS0nICsgbGlzdFR5cGVdID0gdHJ1ZTtcbiAgICByZXR1cm4gaChcbiAgICAgICdkaXYnLFxuICAgICAgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfZGVmYXVsdCgpKFtkYXRhLCB7XG4gICAgICAgIGF0dHJzOiB7IHRhYmluZGV4OiAnMCcgfVxuICAgICAgfV0pLFxuICAgICAgW2RyYWcgPyBoKFxuICAgICAgICAndXBsb2FkLWRyYWdnZXInLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHsgZGlzYWJsZWQ6IGRpc2FibGVkIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgICdmaWxlJzogdXBsb2FkRmlsZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0XVxuICAgICAgKSA6IHRoaXMuJHNsb3RzLmRlZmF1bHQsIGgoJ2lucHV0JywgeyAnY2xhc3MnOiAnZWwtdXBsb2FkX19pbnB1dCcsIGF0dHJzOiB7IHR5cGU6ICdmaWxlJywgbmFtZTogbmFtZSwgbXVsdGlwbGU6IG11bHRpcGxlLCBhY2NlcHQ6IGFjY2VwdCB9LFxuICAgICAgICByZWY6ICdpbnB1dCcsIG9uOiB7XG4gICAgICAgICAgJ2NoYW5nZSc6IGhhbmRsZUNoYW5nZVxuICAgICAgICB9XG4gICAgICB9KV1cbiAgICApO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY191cGxvYWR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAodXBsb2FkdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3VwbG9hZC9zcmMvdXBsb2FkLnZ1ZVxudmFyIHVwbG9hZF9yZW5kZXIsIHVwbG9hZF9zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdXBsb2FkX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3VwbG9hZHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgdXBsb2FkX3JlbmRlcixcbiAgdXBsb2FkX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdXBsb2FkX2FwaTsgfVxudXBsb2FkX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdXBsb2FkL3NyYy91cGxvYWQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY191cGxvYWQgPSAodXBsb2FkX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3VwbG9hZC9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG5cblxuZnVuY3Rpb24gc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbm9vcCgpIHt9XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFVwbG9hZCcsXG5cbiAgbWl4aW5zOiBbbWlncmF0aW5nX2RlZmF1bHQuYV0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsUHJvZ3Jlc3M6IHByb2dyZXNzX2RlZmF1bHQuYSxcbiAgICBVcGxvYWRMaXN0OiB1cGxvYWRfbGlzdCxcbiAgICBVcGxvYWQ6IHNyY191cGxvYWRcbiAgfSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRlcjogdGhpc1xuICAgIH07XG4gIH0sXG5cblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYWN0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaGVhZGVyczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRhdGE6IE9iamVjdCxcbiAgICBtdWx0aXBsZTogQm9vbGVhbixcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZmlsZSdcbiAgICB9LFxuICAgIGRyYWc6IEJvb2xlYW4sXG4gICAgZHJhZ2dlcjogQm9vbGVhbixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IEJvb2xlYW4sXG4gICAgc2hvd0ZpbGVMaXN0OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgYWNjZXB0OiBTdHJpbmcsXG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3NlbGVjdCdcbiAgICB9LFxuICAgIGJlZm9yZVVwbG9hZDogRnVuY3Rpb24sXG4gICAgYmVmb3JlUmVtb3ZlOiBGdW5jdGlvbixcbiAgICBvblJlbW92ZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wXG4gICAgfSxcbiAgICBvbkNoYW5nZToge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wXG4gICAgfSxcbiAgICBvblByZXZpZXc6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uXG4gICAgfSxcbiAgICBvblN1Y2Nlc3M6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbm9vcFxuICAgIH0sXG4gICAgb25Qcm9ncmVzczoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wXG4gICAgfSxcbiAgICBvbkVycm9yOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX25vb3BcbiAgICB9LFxuICAgIGZpbGVMaXN0OiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgICBhdXRvVXBsb2FkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgbGlzdFR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd0ZXh0JyAvLyB0ZXh0LHBpY3R1cmUscGljdHVyZS1jYXJkXG4gICAgfSxcbiAgICBodHRwUmVxdWVzdDogRnVuY3Rpb24sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbGltaXQ6IE51bWJlcixcbiAgICBvbkV4Y2VlZDoge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19ub29wXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZEZpbGVzOiBbXSxcbiAgICAgIGRyYWdPdmVyOiBmYWxzZSxcbiAgICAgIGRyYWdpbmc6IGZhbHNlLFxuICAgICAgdGVtcEluZGV4OiAxXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkRGlzYWJsZWQ6IGZ1bmN0aW9uIHVwbG9hZERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBsaXN0VHlwZTogZnVuY3Rpb24gbGlzdFR5cGUodHlwZSkge1xuICAgICAgaWYgKHR5cGUgPT09ICdwaWN0dXJlLWNhcmQnIHx8IHR5cGUgPT09ICdwaWN0dXJlJykge1xuICAgICAgICB0aGlzLnVwbG9hZEZpbGVzID0gdGhpcy51cGxvYWRGaWxlcy5tYXAoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgICBpZiAoIWZpbGUudXJsICYmIGZpbGUucmF3KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBmaWxlLnVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZS5yYXcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tFbGVtZW50IEVycm9yXVtVcGxvYWRdJywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBmaWxlTGlzdDoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihmaWxlTGlzdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZXMgPSBmaWxlTGlzdC5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICBpdGVtLnVpZCA9IGl0ZW0udWlkIHx8IERhdGUubm93KCkgKyBfdGhpcy50ZW1wSW5kZXgrKztcbiAgICAgICAgICBpdGVtLnN0YXR1cyA9IGl0ZW0uc3RhdHVzIHx8ICdzdWNjZXNzJztcbiAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVTdGFydDogZnVuY3Rpb24gaGFuZGxlU3RhcnQocmF3RmlsZSkge1xuICAgICAgcmF3RmlsZS51aWQgPSBEYXRlLm5vdygpICsgdGhpcy50ZW1wSW5kZXgrKztcbiAgICAgIHZhciBmaWxlID0ge1xuICAgICAgICBzdGF0dXM6ICdyZWFkeScsXG4gICAgICAgIG5hbWU6IHJhd0ZpbGUubmFtZSxcbiAgICAgICAgc2l6ZTogcmF3RmlsZS5zaXplLFxuICAgICAgICBwZXJjZW50YWdlOiAwLFxuICAgICAgICB1aWQ6IHJhd0ZpbGUudWlkLFxuICAgICAgICByYXc6IHJhd0ZpbGVcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmxpc3RUeXBlID09PSAncGljdHVyZS1jYXJkJyB8fCB0aGlzLmxpc3RUeXBlID09PSAncGljdHVyZScpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmaWxlLnVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwocmF3RmlsZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tFbGVtZW50IEVycm9yXVtVcGxvYWRdJywgZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy51cGxvYWRGaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgdGhpcy5vbkNoYW5nZShmaWxlLCB0aGlzLnVwbG9hZEZpbGVzKTtcbiAgICB9LFxuICAgIGhhbmRsZVByb2dyZXNzOiBmdW5jdGlvbiBoYW5kbGVQcm9ncmVzcyhldiwgcmF3RmlsZSkge1xuICAgICAgdmFyIGZpbGUgPSB0aGlzLmdldEZpbGUocmF3RmlsZSk7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3MoZXYsIGZpbGUsIHRoaXMudXBsb2FkRmlsZXMpO1xuICAgICAgZmlsZS5zdGF0dXMgPSAndXBsb2FkaW5nJztcbiAgICAgIGZpbGUucGVyY2VudGFnZSA9IGV2LnBlcmNlbnQgfHwgMDtcbiAgICB9LFxuICAgIGhhbmRsZVN1Y2Nlc3M6IGZ1bmN0aW9uIGhhbmRsZVN1Y2Nlc3MocmVzLCByYXdGaWxlKSB7XG4gICAgICB2YXIgZmlsZSA9IHRoaXMuZ2V0RmlsZShyYXdGaWxlKTtcblxuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgZmlsZS5zdGF0dXMgPSAnc3VjY2Vzcyc7XG4gICAgICAgIGZpbGUucmVzcG9uc2UgPSByZXM7XG5cbiAgICAgICAgdGhpcy5vblN1Y2Nlc3MocmVzLCBmaWxlLCB0aGlzLnVwbG9hZEZpbGVzKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShmaWxlLCB0aGlzLnVwbG9hZEZpbGVzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUVycm9yOiBmdW5jdGlvbiBoYW5kbGVFcnJvcihlcnIsIHJhd0ZpbGUpIHtcbiAgICAgIHZhciBmaWxlID0gdGhpcy5nZXRGaWxlKHJhd0ZpbGUpO1xuICAgICAgdmFyIGZpbGVMaXN0ID0gdGhpcy51cGxvYWRGaWxlcztcblxuICAgICAgZmlsZS5zdGF0dXMgPSAnZmFpbCc7XG5cbiAgICAgIGZpbGVMaXN0LnNwbGljZShmaWxlTGlzdC5pbmRleE9mKGZpbGUpLCAxKTtcblxuICAgICAgdGhpcy5vbkVycm9yKGVyciwgZmlsZSwgdGhpcy51cGxvYWRGaWxlcyk7XG4gICAgICB0aGlzLm9uQ2hhbmdlKGZpbGUsIHRoaXMudXBsb2FkRmlsZXMpO1xuICAgIH0sXG4gICAgaGFuZGxlUmVtb3ZlOiBmdW5jdGlvbiBoYW5kbGVSZW1vdmUoZmlsZSwgcmF3KSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKHJhdykge1xuICAgICAgICBmaWxlID0gdGhpcy5nZXRGaWxlKHJhdyk7XG4gICAgICB9XG4gICAgICB2YXIgZG9SZW1vdmUgPSBmdW5jdGlvbiBkb1JlbW92ZSgpIHtcbiAgICAgICAgX3RoaXMyLmFib3J0KGZpbGUpO1xuICAgICAgICB2YXIgZmlsZUxpc3QgPSBfdGhpczIudXBsb2FkRmlsZXM7XG4gICAgICAgIGZpbGVMaXN0LnNwbGljZShmaWxlTGlzdC5pbmRleE9mKGZpbGUpLCAxKTtcbiAgICAgICAgX3RoaXMyLm9uUmVtb3ZlKGZpbGUsIGZpbGVMaXN0KTtcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGhpcy5iZWZvcmVSZW1vdmUpIHtcbiAgICAgICAgZG9SZW1vdmUoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuYmVmb3JlUmVtb3ZlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBiZWZvcmUgPSB0aGlzLmJlZm9yZVJlbW92ZShmaWxlLCB0aGlzLnVwbG9hZEZpbGVzKTtcbiAgICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGhlbikge1xuICAgICAgICAgIGJlZm9yZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvUmVtb3ZlKCk7XG4gICAgICAgICAgfSwgc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfbm9vcCk7XG4gICAgICAgIH0gZWxzZSBpZiAoYmVmb3JlICE9PSBmYWxzZSkge1xuICAgICAgICAgIGRvUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGdldEZpbGU6IGZ1bmN0aW9uIGdldEZpbGUocmF3RmlsZSkge1xuICAgICAgdmFyIGZpbGVMaXN0ID0gdGhpcy51cGxvYWRGaWxlcztcbiAgICAgIHZhciB0YXJnZXQgPSB2b2lkIDA7XG4gICAgICBmaWxlTGlzdC5ldmVyeShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB0YXJnZXQgPSByYXdGaWxlLnVpZCA9PT0gaXRlbS51aWQgPyBpdGVtIDogbnVsbDtcbiAgICAgICAgcmV0dXJuICF0YXJnZXQ7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSxcbiAgICBhYm9ydDogZnVuY3Rpb24gYWJvcnQoZmlsZSkge1xuICAgICAgdGhpcy4kcmVmc1sndXBsb2FkLWlubmVyJ10uYWJvcnQoZmlsZSk7XG4gICAgfSxcbiAgICBjbGVhckZpbGVzOiBmdW5jdGlvbiBjbGVhckZpbGVzKCkge1xuICAgICAgdGhpcy51cGxvYWRGaWxlcyA9IFtdO1xuICAgIH0sXG4gICAgc3VibWl0OiBmdW5jdGlvbiBzdWJtaXQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdGhpcy51cGxvYWRGaWxlcy5maWx0ZXIoZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZpbGUuc3RhdHVzID09PSAncmVhZHknO1xuICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICBfdGhpczMuJHJlZnNbJ3VwbG9hZC1pbm5lciddLnVwbG9hZChmaWxlLnJhdyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAnZGVmYXVsdC1maWxlLWxpc3QnOiAnZGVmYXVsdC1maWxlLWxpc3QgaXMgcmVuYW1lZCB0byBmaWxlLWxpc3QuJyxcbiAgICAgICAgICAnc2hvdy11cGxvYWQtbGlzdCc6ICdzaG93LXVwbG9hZC1saXN0IGlzIHJlbmFtZWQgdG8gc2hvdy1maWxlLWxpc3QuJyxcbiAgICAgICAgICAndGh1bWJuYWlsLW1vZGUnOiAndGh1bWJuYWlsLW1vZGUgaGFzIGJlZW4gZGVwcmVjYXRlZCwgeW91IGNhbiBpbXBsZW1lbnQgdGhlIHNhbWUgZWZmZWN0IGFjY29yZGluZyB0byB0aGlzIGNhc2U6IGh0dHA6Ly9lbGVtZW50LmVsZW1lLmlvLyMvemgtQ04vY29tcG9uZW50L3VwbG9hZCN5b25nLWh1LXRvdS14aWFuZy1zaGFuZy1jaHVhbidcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnVwbG9hZEZpbGVzLmZvckVhY2goZnVuY3Rpb24gKGZpbGUpIHtcbiAgICAgIGlmIChmaWxlLnVybCAmJiBmaWxlLnVybC5pbmRleE9mKCdibG9iOicpID09PSAwKSB7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZmlsZS51cmwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgdXBsb2FkTGlzdCA9IHZvaWQgMDtcblxuICAgIGlmICh0aGlzLnNob3dGaWxlTGlzdCkge1xuICAgICAgdXBsb2FkTGlzdCA9IGgoXG4gICAgICAgIHVwbG9hZF9saXN0LFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLnVwbG9hZERpc2FibGVkLFxuICAgICAgICAgICAgbGlzdFR5cGU6IHRoaXMubGlzdFR5cGUsXG4gICAgICAgICAgICBmaWxlczogdGhpcy51cGxvYWRGaWxlcyxcblxuICAgICAgICAgICAgaGFuZGxlUHJldmlldzogdGhpcy5vblByZXZpZXcgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ3JlbW92ZSc6IHRoaXMuaGFuZGxlUmVtb3ZlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgICAgaWYgKF90aGlzNC4kc2NvcGVkU2xvdHMuZmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzNC4kc2NvcGVkU2xvdHMuZmlsZSh7XG4gICAgICAgICAgICAgIGZpbGU6IHByb3BzLmZpbGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfV1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHVwbG9hZERhdGEgPSB7XG4gICAgICBwcm9wczoge1xuICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXG4gICAgICAgIGRyYWc6IHRoaXMuZHJhZyxcbiAgICAgICAgYWN0aW9uOiB0aGlzLmFjdGlvbixcbiAgICAgICAgbXVsdGlwbGU6IHRoaXMubXVsdGlwbGUsXG4gICAgICAgICdiZWZvcmUtdXBsb2FkJzogdGhpcy5iZWZvcmVVcGxvYWQsXG4gICAgICAgICd3aXRoLWNyZWRlbnRpYWxzJzogdGhpcy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGFjY2VwdDogdGhpcy5hY2NlcHQsXG4gICAgICAgIGZpbGVMaXN0OiB0aGlzLnVwbG9hZEZpbGVzLFxuICAgICAgICBhdXRvVXBsb2FkOiB0aGlzLmF1dG9VcGxvYWQsXG4gICAgICAgIGxpc3RUeXBlOiB0aGlzLmxpc3RUeXBlLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy51cGxvYWREaXNhYmxlZCxcbiAgICAgICAgbGltaXQ6IHRoaXMubGltaXQsXG4gICAgICAgICdvbi1leGNlZWQnOiB0aGlzLm9uRXhjZWVkLFxuICAgICAgICAnb24tc3RhcnQnOiB0aGlzLmhhbmRsZVN0YXJ0LFxuICAgICAgICAnb24tcHJvZ3Jlc3MnOiB0aGlzLmhhbmRsZVByb2dyZXNzLFxuICAgICAgICAnb24tc3VjY2Vzcyc6IHRoaXMuaGFuZGxlU3VjY2VzcyxcbiAgICAgICAgJ29uLWVycm9yJzogdGhpcy5oYW5kbGVFcnJvcixcbiAgICAgICAgJ29uLXByZXZpZXcnOiB0aGlzLm9uUHJldmlldyxcbiAgICAgICAgJ29uLXJlbW92ZSc6IHRoaXMuaGFuZGxlUmVtb3ZlLFxuICAgICAgICAnaHR0cC1yZXF1ZXN0JzogdGhpcy5odHRwUmVxdWVzdFxuICAgICAgfSxcbiAgICAgIHJlZjogJ3VwbG9hZC1pbm5lcidcbiAgICB9O1xuXG4gICAgdmFyIHRyaWdnZXIgPSB0aGlzLiRzbG90cy50cmlnZ2VyIHx8IHRoaXMuJHNsb3RzLmRlZmF1bHQ7XG4gICAgdmFyIHVwbG9hZENvbXBvbmVudCA9IGgoXG4gICAgICAndXBsb2FkJyxcbiAgICAgIHVwbG9hZERhdGEsXG4gICAgICBbdHJpZ2dlcl1cbiAgICApO1xuXG4gICAgcmV0dXJuIGgoJ2RpdicsIFt0aGlzLmxpc3RUeXBlID09PSAncGljdHVyZS1jYXJkJyA/IHVwbG9hZExpc3QgOiAnJywgdGhpcy4kc2xvdHMudHJpZ2dlciA/IFt1cGxvYWRDb21wb25lbnQsIHRoaXMuJHNsb3RzLmRlZmF1bHRdIDogdXBsb2FkQ29tcG9uZW50LCB0aGlzLiRzbG90cy50aXAsIHRoaXMubGlzdFR5cGUgIT09ICdwaWN0dXJlLWNhcmQnID8gdXBsb2FkTGlzdCA6ICcnXSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1cGxvYWRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvc3JjL2luZGV4LnZ1ZVxudmFyIHNyY19yZW5kZXIsIHNyY19zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdXBsb2FkX3NyY19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHVwbG9hZF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHNyY19yZW5kZXIsXG4gIHNyY19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNyY19hcGk7IH1cbnVwbG9hZF9zcmNfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy91cGxvYWQvc3JjL2luZGV4LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB1cGxvYWRfc3JjID0gKHVwbG9hZF9zcmNfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy91cGxvYWQvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudXBsb2FkX3NyYy5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHVwbG9hZF9zcmMubmFtZSwgdXBsb2FkX3NyYyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc191cGxvYWQgPSAodXBsb2FkX3NyYyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI5ZWU0MDYmXG52YXIgcHJvZ3Jlc3N2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMjllZTQwNl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzc1wiLFxuICAgICAgY2xhc3M6IFtcbiAgICAgICAgXCJlbC1wcm9ncmVzcy0tXCIgKyBfdm0udHlwZSxcbiAgICAgICAgX3ZtLnN0YXR1cyA/IFwiaXMtXCIgKyBfdm0uc3RhdHVzIDogXCJcIixcbiAgICAgICAge1xuICAgICAgICAgIFwiZWwtcHJvZ3Jlc3MtLXdpdGhvdXQtdGV4dFwiOiAhX3ZtLnNob3dUZXh0LFxuICAgICAgICAgIFwiZWwtcHJvZ3Jlc3MtLXRleHQtaW5zaWRlXCI6IF92bS50ZXh0SW5zaWRlXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICByb2xlOiBcInByb2dyZXNzYmFyXCIsXG4gICAgICAgIFwiYXJpYS12YWx1ZW5vd1wiOiBfdm0ucGVyY2VudGFnZSxcbiAgICAgICAgXCJhcmlhLXZhbHVlbWluXCI6IFwiMFwiLFxuICAgICAgICBcImFyaWEtdmFsdWVtYXhcIjogXCIxMDBcIlxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLnR5cGUgPT09IFwibGluZVwiXG4gICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1iYXJcIiB9LCBbXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhcl9fb3V0ZXJcIixcbiAgICAgICAgICAgICAgICBzdHlsZTogeyBoZWlnaHQ6IF92bS5zdHJva2VXaWR0aCArIFwicHhcIiB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhcl9faW5uZXJcIixcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5iYXJTdHlsZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnNob3dUZXh0ICYmIF92bS50ZXh0SW5zaWRlXG4gICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1iYXJfX2lubmVyVGV4dFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS5jb250ZW50KSldXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVcIixcbiAgICAgICAgICAgICAgc3R5bGU6IHsgaGVpZ2h0OiBfdm0ud2lkdGggKyBcInB4XCIsIHdpZHRoOiBfdm0ud2lkdGggKyBcInB4XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJzdmdcIiwgeyBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCAxMDAgMTAwXCIgfSB9LCBbXG4gICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWNpcmNsZV9fdHJhY2tcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0udHJhaWxQYXRoU3R5bGUsXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBkOiBfdm0udHJhY2tQYXRoLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiI2U1ZTlmMlwiLFxuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiOiBfdm0ucmVsYXRpdmVTdHJva2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCJcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtY2lyY2xlX19wYXRoXCIsXG4gICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmNpcmNsZVBhdGhTdHlsZSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IF92bS50cmFja1BhdGgsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogX3ZtLnN0cm9rZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLWxpbmVjYXBcIjogX3ZtLnN0cm9rZUxpbmVjYXAsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5wZXJjZW50YWdlID8gX3ZtLnJlbGF0aXZlU3Ryb2tlV2lkdGggOiAwXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApLFxuICAgICAgX3ZtLnNob3dUZXh0ICYmICFfdm0udGV4dEluc2lkZVxuICAgICAgICA/IF9jKFxuICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3NfX3RleHRcIixcbiAgICAgICAgICAgICAgc3R5bGU6IHsgZm9udFNpemU6IF92bS5wcm9ncmVzc1RleHRTaXplICsgXCJweFwiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICFfdm0uc3RhdHVzXG4gICAgICAgICAgICAgICAgPyBbX3ZtLl92KF92bS5fcyhfdm0uY29udGVudCkpXVxuICAgICAgICAgICAgICAgIDogX2MoXCJpXCIsIHsgY2xhc3M6IF92bS5pY29uQ2xhc3MgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXVxuICApXG59XG52YXIgcHJvZ3Jlc3N2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMjllZTQwNl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxucHJvZ3Jlc3N2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMjllZTQwNl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjI5ZWU0MDYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwcm9ncmVzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFByb2dyZXNzJyxcbiAgcHJvcHM6IHtcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnbGluZScsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnbGluZScsICdjaXJjbGUnLCAnZGFzaGJvYXJkJ10uaW5kZXhPZih2YWwpID4gLTE7XG4gICAgICB9XG4gICAgfSxcbiAgICBwZXJjZW50YWdlOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIHZhbCA+PSAwICYmIHZhbCA8PSAxMDA7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdGF0dXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydzdWNjZXNzJywgJ2V4Y2VwdGlvbicsICd3YXJuaW5nJ10uaW5kZXhPZih2YWwpID4gLTE7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdHJva2VXaWR0aDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNlxuICAgIH0sXG4gICAgc3Ryb2tlTGluZWNhcDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3JvdW5kJ1xuICAgIH0sXG4gICAgdGV4dEluc2lkZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICB3aWR0aDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMTI2XG4gICAgfSxcbiAgICBzaG93VGV4dDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBBcnJheSwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGZvcm1hdDogRnVuY3Rpb25cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBiYXJTdHlsZTogZnVuY3Rpb24gYmFyU3R5bGUoKSB7XG4gICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgIHN0eWxlLndpZHRoID0gdGhpcy5wZXJjZW50YWdlICsgJyUnO1xuICAgICAgc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5nZXRDdXJyZW50Q29sb3IodGhpcy5wZXJjZW50YWdlKTtcbiAgICAgIHJldHVybiBzdHlsZTtcbiAgICB9LFxuICAgIHJlbGF0aXZlU3Ryb2tlV2lkdGg6IGZ1bmN0aW9uIHJlbGF0aXZlU3Ryb2tlV2lkdGgoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuc3Ryb2tlV2lkdGggLyB0aGlzLndpZHRoICogMTAwKS50b0ZpeGVkKDEpO1xuICAgIH0sXG4gICAgcmFkaXVzOiBmdW5jdGlvbiByYWRpdXMoKSB7XG4gICAgICBpZiAodGhpcy50eXBlID09PSAnY2lyY2xlJyB8fCB0aGlzLnR5cGUgPT09ICdkYXNoYm9hcmQnKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludCg1MCAtIHBhcnNlRmxvYXQodGhpcy5yZWxhdGl2ZVN0cm9rZVdpZHRoKSAvIDIsIDEwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0sXG4gICAgdHJhY2tQYXRoOiBmdW5jdGlvbiB0cmFja1BhdGgoKSB7XG4gICAgICB2YXIgcmFkaXVzID0gdGhpcy5yYWRpdXM7XG4gICAgICB2YXIgaXNEYXNoYm9hcmQgPSB0aGlzLnR5cGUgPT09ICdkYXNoYm9hcmQnO1xuICAgICAgcmV0dXJuICdcXG4gICAgICAgIE0gNTAgNTBcXG4gICAgICAgIG0gMCAnICsgKGlzRGFzaGJvYXJkID8gJycgOiAnLScpICsgcmFkaXVzICsgJ1xcbiAgICAgICAgYSAnICsgcmFkaXVzICsgJyAnICsgcmFkaXVzICsgJyAwIDEgMSAwICcgKyAoaXNEYXNoYm9hcmQgPyAnLScgOiAnJykgKyByYWRpdXMgKiAyICsgJ1xcbiAgICAgICAgYSAnICsgcmFkaXVzICsgJyAnICsgcmFkaXVzICsgJyAwIDEgMSAwICcgKyAoaXNEYXNoYm9hcmQgPyAnJyA6ICctJykgKyByYWRpdXMgKiAyICsgJ1xcbiAgICAgICAgJztcbiAgICB9LFxuICAgIHBlcmltZXRlcjogZnVuY3Rpb24gcGVyaW1ldGVyKCkge1xuICAgICAgcmV0dXJuIDIgKiBNYXRoLlBJICogdGhpcy5yYWRpdXM7XG4gICAgfSxcbiAgICByYXRlOiBmdW5jdGlvbiByYXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2Rhc2hib2FyZCcgPyAwLjc1IDogMTtcbiAgICB9LFxuICAgIHN0cm9rZURhc2hvZmZzZXQ6IGZ1bmN0aW9uIHN0cm9rZURhc2hvZmZzZXQoKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gLTEgKiB0aGlzLnBlcmltZXRlciAqICgxIC0gdGhpcy5yYXRlKSAvIDI7XG4gICAgICByZXR1cm4gb2Zmc2V0ICsgJ3B4JztcbiAgICB9LFxuICAgIHRyYWlsUGF0aFN0eWxlOiBmdW5jdGlvbiB0cmFpbFBhdGhTdHlsZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0cm9rZURhc2hhcnJheTogdGhpcy5wZXJpbWV0ZXIgKiB0aGlzLnJhdGUgKyAncHgsICcgKyB0aGlzLnBlcmltZXRlciArICdweCcsXG4gICAgICAgIHN0cm9rZURhc2hvZmZzZXQ6IHRoaXMuc3Ryb2tlRGFzaG9mZnNldFxuICAgICAgfTtcbiAgICB9LFxuICAgIGNpcmNsZVBhdGhTdHlsZTogZnVuY3Rpb24gY2lyY2xlUGF0aFN0eWxlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiB0aGlzLnBlcmltZXRlciAqIHRoaXMucmF0ZSAqICh0aGlzLnBlcmNlbnRhZ2UgLyAxMDApICsgJ3B4LCAnICsgdGhpcy5wZXJpbWV0ZXIgKyAncHgnLFxuICAgICAgICBzdHJva2VEYXNob2Zmc2V0OiB0aGlzLnN0cm9rZURhc2hvZmZzZXQsXG4gICAgICAgIHRyYW5zaXRpb246ICdzdHJva2UtZGFzaGFycmF5IDAuNnMgZWFzZSAwcywgc3Ryb2tlIDAuNnMgZWFzZSdcbiAgICAgIH07XG4gICAgfSxcbiAgICBzdHJva2U6IGZ1bmN0aW9uIHN0cm9rZSgpIHtcbiAgICAgIHZhciByZXQgPSB2b2lkIDA7XG4gICAgICBpZiAodGhpcy5jb2xvcikge1xuICAgICAgICByZXQgPSB0aGlzLmdldEN1cnJlbnRDb2xvcih0aGlzLnBlcmNlbnRhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLnN0YXR1cykge1xuICAgICAgICAgIGNhc2UgJ3N1Y2Nlc3MnOlxuICAgICAgICAgICAgcmV0ID0gJyMxM2NlNjYnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZXhjZXB0aW9uJzpcbiAgICAgICAgICAgIHJldCA9ICcjZmY0OTQ5JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICAgICAgcmV0ID0gJyNlNmEyM2MnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldCA9ICcjMjBhMGZmJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuICAgIGljb25DbGFzczogZnVuY3Rpb24gaWNvbkNsYXNzKCkge1xuICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAnd2FybmluZycpIHtcbiAgICAgICAgcmV0dXJuICdlbC1pY29uLXdhcm5pbmcnO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2xpbmUnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnID8gJ2VsLWljb24tY2lyY2xlLWNoZWNrJyA6ICdlbC1pY29uLWNpcmNsZS1jbG9zZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09ICdzdWNjZXNzJyA/ICdlbC1pY29uLWNoZWNrJyA6ICdlbC1pY29uLWNsb3NlJztcbiAgICAgIH1cbiAgICB9LFxuICAgIHByb2dyZXNzVGV4dFNpemU6IGZ1bmN0aW9uIHByb2dyZXNzVGV4dFNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnbGluZScgPyAxMiArIHRoaXMuc3Ryb2tlV2lkdGggKiAwLjQgOiB0aGlzLndpZHRoICogMC4xMTExMTEgKyAyO1xuICAgIH0sXG4gICAgY29udGVudDogZnVuY3Rpb24gY29udGVudCgpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtYXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHRoaXMucGVyY2VudGFnZSkgfHwgJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5wZXJjZW50YWdlICsgJyUnO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGdldEN1cnJlbnRDb2xvcjogZnVuY3Rpb24gZ2V0Q3VycmVudENvbG9yKHBlcmNlbnRhZ2UpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb2xvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcihwZXJjZW50YWdlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuY29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGV2ZWxDb2xvcihwZXJjZW50YWdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldExldmVsQ29sb3I6IGZ1bmN0aW9uIGdldExldmVsQ29sb3IocGVyY2VudGFnZSkge1xuICAgICAgdmFyIGNvbG9yQXJyYXkgPSB0aGlzLmdldENvbG9yQXJyYXkoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHJldHVybiBhLnBlcmNlbnRhZ2UgLSBiLnBlcmNlbnRhZ2U7XG4gICAgICB9KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xvckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjb2xvckFycmF5W2ldLnBlcmNlbnRhZ2UgPiBwZXJjZW50YWdlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbG9yQXJyYXlbaV0uY29sb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2xvckFycmF5W2NvbG9yQXJyYXkubGVuZ3RoIC0gMV0uY29sb3I7XG4gICAgfSxcbiAgICBnZXRDb2xvckFycmF5OiBmdW5jdGlvbiBnZXRDb2xvckFycmF5KCkge1xuICAgICAgdmFyIGNvbG9yID0gdGhpcy5jb2xvcjtcbiAgICAgIHZhciBzcGFuID0gMTAwIC8gY29sb3IubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNvbG9yLm1hcChmdW5jdGlvbiAoc2VyaWVzQ29sb3IsIGluZGV4KSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2VyaWVzQ29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbG9yOiBzZXJpZXNDb2xvcixcbiAgICAgICAgICAgIHBlcmNlbnRhZ2U6IChpbmRleCArIDEpICogc3BhblxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcmllc0NvbG9yO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcHJvZ3Jlc3Mvc3JjL3Byb2dyZXNzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfcHJvZ3Jlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocHJvZ3Jlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcHJvZ3Jlc3Mvc3JjL3Byb2dyZXNzLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHByb2dyZXNzX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3Byb2dyZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBwcm9ncmVzc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzIyOWVlNDA2X3JlbmRlcixcbiAgcHJvZ3Jlc3N2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMjllZTQwNl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHByb2dyZXNzX2FwaTsgfVxucHJvZ3Jlc3NfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHByb2dyZXNzID0gKHByb2dyZXNzX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcHJvZ3Jlc3MvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucHJvZ3Jlc3MuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChwcm9ncmVzcy5uYW1lLCBwcm9ncmVzcyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19wcm9ncmVzcyA9IChwcm9ncmVzcyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NwaW5uZXIvc3JjL3NwaW5uZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5N2I4NTM4JlxudmFyIHNwaW5uZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF82OTdiODUzOF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc3Bpbm5lclwiIH0sIFtcbiAgICBfYyhcbiAgICAgIFwic3ZnXCIsXG4gICAgICB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNwaW5uZXItaW5uZXJcIixcbiAgICAgICAgc3R5bGU6IHsgd2lkdGg6IF92bS5yYWRpdXMgLyAyICsgXCJweFwiLCBoZWlnaHQ6IF92bS5yYWRpdXMgLyAyICsgXCJweFwiIH0sXG4gICAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDUwIDUwXCIgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJjaXJjbGVcIiwge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInBhdGhcIixcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgY3g6IFwiMjVcIixcbiAgICAgICAgICAgIGN5OiBcIjI1XCIsXG4gICAgICAgICAgICByOiBcIjIwXCIsXG4gICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgIHN0cm9rZTogX3ZtLnN0cm9rZUNvbG9yLFxuICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogX3ZtLnN0cm9rZVdpZHRoXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgXVxuICAgIClcbiAgXSlcbn1cbnZhciBzcGlubmVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNjk3Yjg1Mzhfc3RhdGljUmVuZGVyRm5zID0gW11cbnNwaW5uZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF82OTdiODUzOF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NwaW5uZXIvc3JjL3NwaW5uZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5N2I4NTM4JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zcGlubmVyL3NyYy9zcGlubmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNwaW5uZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTcGlubmVyJyxcbiAgcHJvcHM6IHtcbiAgICB0eXBlOiBTdHJpbmcsXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxMDBcbiAgICB9LFxuICAgIHN0cm9rZVdpZHRoOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiA1XG4gICAgfSxcbiAgICBzdHJva2VDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyNlZmVmZWYnXG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3Bpbm5lci9zcmMvc3Bpbm5lci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3NwaW5uZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zcGlubmVyL3NyYy9zcGlubmVyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNwaW5uZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfc3Bpbm5lcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY5N2I4NTM4X3JlbmRlcixcbiAgc3Bpbm5lcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzY5N2I4NTM4X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc3Bpbm5lcl9hcGk7IH1cbnNwaW5uZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zcGlubmVyL3NyYy9zcGlubmVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcGlubmVyID0gKHNwaW5uZXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zcGlubmVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNwaW5uZXIuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzcGlubmVyLm5hbWUsIHNwaW5uZXIpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc3Bpbm5lciA9IChzcGlubmVyKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDU1YjlmNjAmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ1NWI5ZjYwX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7XG4gICAgICBhdHRyczogeyBuYW1lOiBcImVsLW1lc3NhZ2UtZmFkZVwiIH0sXG4gICAgICBvbjogeyBcImFmdGVyLWxlYXZlXCI6IF92bS5oYW5kbGVBZnRlckxlYXZlIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIFwiZWwtbWVzc2FnZVwiLFxuICAgICAgICAgICAgX3ZtLnR5cGUgJiYgIV92bS5pY29uQ2xhc3MgPyBcImVsLW1lc3NhZ2UtLVwiICsgX3ZtLnR5cGUgOiBcIlwiLFxuICAgICAgICAgICAgX3ZtLmNlbnRlciA/IFwiaXMtY2VudGVyXCIgOiBcIlwiLFxuICAgICAgICAgICAgX3ZtLnNob3dDbG9zZSA/IFwiaXMtY2xvc2FibGVcIiA6IFwiXCIsXG4gICAgICAgICAgICBfdm0uY3VzdG9tQ2xhc3NcbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0eWxlOiBfdm0ucG9zaXRpb25TdHlsZSxcbiAgICAgICAgICBhdHRyczogeyByb2xlOiBcImFsZXJ0XCIgfSxcbiAgICAgICAgICBvbjogeyBtb3VzZWVudGVyOiBfdm0uY2xlYXJUaW1lciwgbW91c2VsZWF2ZTogX3ZtLnN0YXJ0VGltZXIgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLmljb25DbGFzc1xuICAgICAgICAgICAgPyBfYyhcImlcIiwgeyBjbGFzczogX3ZtLmljb25DbGFzcyB9KVxuICAgICAgICAgICAgOiBfYyhcImlcIiwgeyBjbGFzczogX3ZtLnR5cGVDbGFzcyB9KSxcbiAgICAgICAgICBfdm0uX3QoXCJkZWZhdWx0XCIsIFtcbiAgICAgICAgICAgICFfdm0uZGFuZ2Vyb3VzbHlVc2VIVE1MU3RyaW5nXG4gICAgICAgICAgICAgID8gX2MoXCJwXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZV9fY29udGVudFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgIDogX2MoXCJwXCIsIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLW1lc3NhZ2VfX2NvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IGlubmVySFRNTDogX3ZtLl9zKF92bS5tZXNzYWdlKSB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKSxcbiAgICAgICAgICBfdm0uc2hvd0Nsb3NlXG4gICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtbWVzc2FnZV9fY2xvc2VCdG4gZWwtaWNvbi1jbG9zZVwiLFxuICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xvc2UgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXVxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ1NWI5ZjYwX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDU1YjlmNjBfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tZXNzYWdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NTViOWY2MCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxudmFyIHNyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfdHlwZU1hcCA9IHtcbiAgc3VjY2VzczogJ3N1Y2Nlc3MnLFxuICBpbmZvOiAnaW5mbycsXG4gIHdhcm5pbmc6ICd3YXJuaW5nJyxcbiAgZXJyb3I6ICdlcnJvcidcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1lc3NhZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICB0eXBlOiAnaW5mbycsXG4gICAgICBpY29uQ2xhc3M6ICcnLFxuICAgICAgY3VzdG9tQ2xhc3M6ICcnLFxuICAgICAgb25DbG9zZTogbnVsbCxcbiAgICAgIHNob3dDbG9zZTogZmFsc2UsXG4gICAgICBjbG9zZWQ6IGZhbHNlLFxuICAgICAgdmVydGljYWxPZmZzZXQ6IDIwLFxuICAgICAgdGltZXI6IG51bGwsXG4gICAgICBkYW5nZXJvdXNseVVzZUhUTUxTdHJpbmc6IGZhbHNlLFxuICAgICAgY2VudGVyOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHR5cGVDbGFzczogZnVuY3Rpb24gdHlwZUNsYXNzKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZSAmJiAhdGhpcy5pY29uQ2xhc3MgPyAnZWwtbWVzc2FnZV9faWNvbiBlbC1pY29uLScgKyBzcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX3R5cGVNYXBbdGhpcy50eXBlXSA6ICcnO1xuICAgIH0sXG4gICAgcG9zaXRpb25TdHlsZTogZnVuY3Rpb24gcG9zaXRpb25TdHlsZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd0b3AnOiB0aGlzLnZlcnRpY2FsT2Zmc2V0ICsgJ3B4J1xuICAgICAgfTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBjbG9zZWQ6IGZ1bmN0aW9uIGNsb3NlZChuZXdWYWwpIHtcbiAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVBZnRlckxlYXZlOiBmdW5jdGlvbiBoYW5kbGVBZnRlckxlYXZlKCkge1xuICAgICAgdGhpcy4kZGVzdHJveSh0cnVlKTtcbiAgICAgIHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpO1xuICAgIH0sXG4gICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uQ2xvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5vbkNsb3NlKHRoaXMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJUaW1lcjogZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICB9LFxuICAgIHN0YXJ0VGltZXI6IGZ1bmN0aW9uIHN0YXJ0VGltZXIoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5kdXJhdGlvbiA+IDApIHtcbiAgICAgICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICghX3RoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICBfdGhpcy5jbG9zZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5kdXJhdGlvbik7XG4gICAgICB9XG4gICAgfSxcbiAgICBrZXlkb3duOiBmdW5jdGlvbiBrZXlkb3duKGUpIHtcbiAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgIC8vIGVzY+WFs+mXrea2iOaBr1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbWVzc2FnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChtZXNzYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2Uvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgbWVzc2FnZV9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX21lc3NhZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NTViOWY2MF9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NTViOWY2MF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIG1lc3NhZ2Vfc3JjX21haW5fYXBpOyB9XG5tZXNzYWdlX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWVzc2FnZV9zcmNfbWFpbiA9IChtZXNzYWdlX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy90eXBlc1wiXG52YXIgdHlwZXNfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbWVzc2FnZS9zcmMvbWFpbi5qc1xudmFyIG1haW5fZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cblxuXG5cblxuXG52YXIgTWVzc2FnZUNvbnN0cnVjdG9yID0gZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5leHRlbmQobWVzc2FnZV9zcmNfbWFpbik7XG5cbnZhciBtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlID0gdm9pZCAwO1xudmFyIG1haW5faW5zdGFuY2VzID0gW107XG52YXIgbWFpbl9zZWVkID0gMTtcblxudmFyIG1haW5fTWVzc2FnZSA9IGZ1bmN0aW9uIE1lc3NhZ2Uob3B0aW9ucykge1xuICBpZiAoZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIG1lc3NhZ2U6IG9wdGlvbnNcbiAgICB9O1xuICB9XG4gIHZhciB1c2VyT25DbG9zZSA9IG9wdGlvbnMub25DbG9zZTtcbiAgdmFyIGlkID0gJ21lc3NhZ2VfJyArIG1haW5fc2VlZCsrO1xuXG4gIG9wdGlvbnMub25DbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBNZXNzYWdlLmNsb3NlKGlkLCB1c2VyT25DbG9zZSk7XG4gIH07XG4gIG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UgPSBuZXcgTWVzc2FnZUNvbnN0cnVjdG9yKHtcbiAgICBkYXRhOiBvcHRpb25zXG4gIH0pO1xuICBtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLmlkID0gaWQ7XG4gIGlmIChPYmplY3QodmRvbV9bXCJpc1ZOb2RlXCJdKShtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLm1lc3NhZ2UpKSB7XG4gICAgbWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS4kc2xvdHMuZGVmYXVsdCA9IFttZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLm1lc3NhZ2VdO1xuICAgIG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UubWVzc2FnZSA9IG51bGw7XG4gIH1cbiAgbWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZS4kbW91bnQoKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLiRlbCk7XG4gIHZhciB2ZXJ0aWNhbE9mZnNldCA9IG9wdGlvbnMub2Zmc2V0IHx8IDIwO1xuICBtYWluX2luc3RhbmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmVydGljYWxPZmZzZXQgKz0gaXRlbS4kZWwub2Zmc2V0SGVpZ2h0ICsgMTY7XG4gIH0pO1xuICBtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlLnZlcnRpY2FsT2Zmc2V0ID0gdmVydGljYWxPZmZzZXQ7XG4gIG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XG4gIG1lc3NhZ2Vfc3JjX21haW5faW5zdGFuY2UuJGVsLnN0eWxlLnpJbmRleCA9IHBvcHVwX1tcIlBvcHVwTWFuYWdlclwiXS5uZXh0WkluZGV4KCk7XG4gIG1haW5faW5zdGFuY2VzLnB1c2gobWVzc2FnZV9zcmNfbWFpbl9pbnN0YW5jZSk7XG4gIHJldHVybiBtZXNzYWdlX3NyY19tYWluX2luc3RhbmNlO1xufTtcblxuWydzdWNjZXNzJywgJ3dhcm5pbmcnLCAnaW5mbycsICdlcnJvciddLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgbWFpbl9NZXNzYWdlW3R5cGVdID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoT2JqZWN0KHR5cGVzX1tcImlzT2JqZWN0XCJdKShvcHRpb25zKSAmJiAhT2JqZWN0KHZkb21fW1wiaXNWTm9kZVwiXSkob3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBtYWluX01lc3NhZ2UobWFpbl9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIHR5cGU6IHR5cGVcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIG1haW5fTWVzc2FnZSh7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbWVzc2FnZTogb3B0aW9uc1xuICAgIH0pO1xuICB9O1xufSk7XG5cbm1haW5fTWVzc2FnZS5jbG9zZSA9IGZ1bmN0aW9uIChpZCwgdXNlck9uQ2xvc2UpIHtcbiAgdmFyIGxlbiA9IG1haW5faW5zdGFuY2VzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciByZW1vdmVkSGVpZ2h0ID0gdm9pZCAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGlkID09PSBtYWluX2luc3RhbmNlc1tpXS5pZCkge1xuICAgICAgcmVtb3ZlZEhlaWdodCA9IG1haW5faW5zdGFuY2VzW2ldLiRlbC5vZmZzZXRIZWlnaHQ7XG4gICAgICBpbmRleCA9IGk7XG4gICAgICBpZiAodHlwZW9mIHVzZXJPbkNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHVzZXJPbkNsb3NlKG1haW5faW5zdGFuY2VzW2ldKTtcbiAgICAgIH1cbiAgICAgIG1haW5faW5zdGFuY2VzLnNwbGljZShpLCAxKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAobGVuIDw9IDEgfHwgaW5kZXggPT09IC0xIHx8IGluZGV4ID4gbWFpbl9pbnN0YW5jZXMubGVuZ3RoIC0gMSkgcmV0dXJuO1xuICBmb3IgKHZhciBfaSA9IGluZGV4OyBfaSA8IGxlbiAtIDE7IF9pKyspIHtcbiAgICB2YXIgZG9tID0gbWFpbl9pbnN0YW5jZXNbX2ldLiRlbDtcbiAgICBkb20uc3R5bGVbJ3RvcCddID0gcGFyc2VJbnQoZG9tLnN0eWxlWyd0b3AnXSwgMTApIC0gcmVtb3ZlZEhlaWdodCAtIDE2ICsgJ3B4JztcbiAgfVxufTtcblxubWFpbl9NZXNzYWdlLmNsb3NlQWxsID0gZnVuY3Rpb24gKCkge1xuICBmb3IgKHZhciBpID0gbWFpbl9pbnN0YW5jZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBtYWluX2luc3RhbmNlc1tpXS5jbG9zZSgpO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19tZXNzYWdlX3NyY19tYWluID0gKG1haW5fTWVzc2FnZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21lc3NhZ2UvaW5kZXguanNcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbWVzc2FnZSA9IChwYWNrYWdlc19tZXNzYWdlX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYmFkZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdjY2I2NTk4JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83Y2NiNjU5OF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWJhZGdlXCIgfSxcbiAgICBbXG4gICAgICBfdm0uX3QoXCJkZWZhdWx0XCIpLFxuICAgICAgX2MoXCJ0cmFuc2l0aW9uXCIsIHsgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLWNlbnRlclwiIH0gfSwgW1xuICAgICAgICBfYyhcInN1cFwiLCB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICAgIV92bS5oaWRkZW4gJiYgKF92bS5jb250ZW50IHx8IF92bS5jb250ZW50ID09PSAwIHx8IF92bS5pc0RvdCksXG4gICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWhpZGRlbiAmJiAoY29udGVudCB8fCBjb250ZW50ID09PSAwIHx8IGlzRG90KVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1iYWRnZV9fY29udGVudFwiLFxuICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICBfdm0udHlwZSA/IFwiZWwtYmFkZ2VfX2NvbnRlbnQtLVwiICsgX3ZtLnR5cGUgOiBudWxsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBcImlzLWZpeGVkXCI6IF92bS4kc2xvdHMuZGVmYXVsdCxcbiAgICAgICAgICAgICAgXCJpcy1kb3RcIjogX3ZtLmlzRG90XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBkb21Qcm9wczogeyB0ZXh0Q29udGVudDogX3ZtLl9zKF92bS5jb250ZW50KSB9XG4gICAgICAgIH0pXG4gICAgICBdKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdjY2I2NTk4X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfN2NjYjY1OThfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9iYWRnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2NjYjY1OTgmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2JhZGdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBiYWRnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEJhZGdlJyxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIG1heDogTnVtYmVyLFxuICAgIGlzRG90OiBCb29sZWFuLFxuICAgIGhpZGRlbjogQm9vbGVhbixcbiAgICB0eXBlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsncHJpbWFyeScsICdzdWNjZXNzJywgJ3dhcm5pbmcnLCAnaW5mbycsICdkYW5nZXInXS5pbmRleE9mKHZhbCkgPiAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZW50OiBmdW5jdGlvbiBjb250ZW50KCkge1xuICAgICAgaWYgKHRoaXMuaXNEb3QpIHJldHVybjtcblxuICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHZhciBtYXggPSB0aGlzLm1heDtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIG1heCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIG1heCA8IHZhbHVlID8gbWF4ICsgJysnIDogdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9iYWRnZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfYmFkZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoYmFkZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYmFkZ2Uvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgYmFkZ2Vfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19iYWRnZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdjY2I2NTk4X3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdjY2I2NTk4X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYmFkZ2Vfc3JjX21haW5fYXBpOyB9XG5iYWRnZV9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2JhZGdlL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBiYWRnZV9zcmNfbWFpbiA9IChiYWRnZV9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhZGdlL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmJhZGdlX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoYmFkZ2Vfc3JjX21haW4ubmFtZSwgYmFkZ2Vfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYmFkZ2UgPSAoYmFkZ2Vfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXJkL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01OWE0YTQwZiZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTlhNGE0MGZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2FyZFwiLFxuICAgICAgY2xhc3M6IF92bS5zaGFkb3cgPyBcImlzLVwiICsgX3ZtLnNoYWRvdyArIFwiLXNoYWRvd1wiIDogXCJpcy1hbHdheXMtc2hhZG93XCJcbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS4kc2xvdHMuaGVhZGVyIHx8IF92bS5oZWFkZXJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNhcmRfX2hlYWRlclwiIH0sXG4gICAgICAgICAgICBbX3ZtLl90KFwiaGVhZGVyXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5oZWFkZXIpKV0pXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jYXJkX19ib2R5XCIsIHN0eWxlOiBfdm0uYm9keVN0eWxlIH0sXG4gICAgICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81OWE0YTQwZl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU5YTRhNDBmX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FyZC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTlhNGE0MGYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NhcmQvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhcmRfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDYXJkJyxcbiAgcHJvcHM6IHtcbiAgICBoZWFkZXI6IHt9LFxuICAgIGJvZHlTdHlsZToge30sXG4gICAgc2hhZG93OiB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJkL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jYXJkX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhcmRfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FyZC9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjYXJkX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfY2FyZF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU5YTRhNDBmX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU5YTRhNDBmX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY2FyZF9zcmNfbWFpbl9hcGk7IH1cbmNhcmRfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYXJkL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXJkX3NyY19tYWluID0gKGNhcmRfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJkL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNhcmRfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChjYXJkX3NyY19tYWluLm5hbWUsIGNhcmRfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FyZCA9IChjYXJkX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmF0ZS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9YWRhNTc3ODImXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2FkYTU3NzgyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhdGVcIixcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHJvbGU6IFwic2xpZGVyXCIsXG4gICAgICAgIFwiYXJpYS12YWx1ZW5vd1wiOiBfdm0uY3VycmVudFZhbHVlLFxuICAgICAgICBcImFyaWEtdmFsdWV0ZXh0XCI6IF92bS50ZXh0LFxuICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogXCIwXCIsXG4gICAgICAgIFwiYXJpYS12YWx1ZW1heFwiOiBfdm0ubWF4LFxuICAgICAgICB0YWJpbmRleDogXCIwXCJcbiAgICAgIH0sXG4gICAgICBvbjogeyBrZXlkb3duOiBfdm0uaGFuZGxlS2V5IH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS5fbChfdm0ubWF4LCBmdW5jdGlvbihpdGVtLCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmF0ZV9faXRlbVwiLFxuICAgICAgICAgICAgc3R5bGU6IHsgY3Vyc29yOiBfdm0ucmF0ZURpc2FibGVkID8gXCJhdXRvXCIgOiBcInBvaW50ZXJcIiB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgbW91c2Vtb3ZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uc2V0Q3VycmVudFZhbHVlKGl0ZW0sICRldmVudClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbW91c2VsZWF2ZTogX3ZtLnJlc2V0Q3VycmVudFZhbHVlLFxuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLnNlbGVjdFZhbHVlKGl0ZW0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImlcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhdGVfX2ljb25cIixcbiAgICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgICAgX3ZtLmNsYXNzZXNbaXRlbSAtIDFdLFxuICAgICAgICAgICAgICAgICAgeyBob3ZlcjogX3ZtLmhvdmVySW5kZXggPT09IGl0ZW0gfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc3R5bGU6IF92bS5nZXRJY29uU3R5bGUoaXRlbSlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF92bS5zaG93RGVjaW1hbEljb24oaXRlbSlcbiAgICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1yYXRlX19kZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5kZWNpbWFsSWNvbkNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0uZGVjaW1hbFN0eWxlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgX3ZtLnNob3dUZXh0IHx8IF92bS5zaG93U2NvcmVcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1yYXRlX190ZXh0XCIsIHN0eWxlOiB7IGNvbG9yOiBfdm0udGV4dENvbG9yIH0gfSxcbiAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50ZXh0KSldXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYWRhNTc3ODJfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF9hZGE1Nzc4Ml9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhdGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWFkYTU3NzgyJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYXRlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmF0ZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFJhdGUnLFxuXG4gIG1peGluczogW21pZ3JhdGluZ19kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9pbnRlckF0TGVmdEhhbGY6IHRydWUsXG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBob3ZlckluZGV4OiAtMVxuICAgIH07XG4gIH0sXG5cblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBsb3dUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDJcbiAgICB9LFxuICAgIGhpZ2hUaHJlc2hvbGQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDRcbiAgICB9LFxuICAgIG1heDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNVxuICAgIH0sXG4gICAgY29sb3JzOiB7XG4gICAgICB0eXBlOiBbQXJyYXksIE9iamVjdF0sXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFsnI0Y3QkEyQScsICcjRjdCQTJBJywgJyNGN0JBMkEnXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZvaWRDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyNDNkQxREUnXG4gICAgfSxcbiAgICBkaXNhYmxlZFZvaWRDb2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyNFRkYyRjcnXG4gICAgfSxcbiAgICBpY29uQ2xhc3Nlczoge1xuICAgICAgdHlwZTogW0FycmF5LCBPYmplY3RdLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbJ2VsLWljb24tc3Rhci1vbicsICdlbC1pY29uLXN0YXItb24nLCAnZWwtaWNvbi1zdGFyLW9uJ107XG4gICAgICB9XG4gICAgfSxcbiAgICB2b2lkSWNvbkNsYXNzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZWwtaWNvbi1zdGFyLW9mZidcbiAgICB9LFxuICAgIGRpc2FibGVkVm9pZEljb25DbGFzczoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2VsLWljb24tc3Rhci1vbidcbiAgICB9LFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGFsbG93SGFsZjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBzaG93VGV4dDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBzaG93U2NvcmU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgdGV4dENvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzFmMmQzZCdcbiAgICB9LFxuICAgIHRleHRzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gWyfmnoHlt64nLCAn5aSx5pybJywgJ+S4gOiIrCcsICfmu6HmhI8nLCAn5oOK5ZacJ107XG4gICAgICB9XG4gICAgfSxcbiAgICBzY29yZVRlbXBsYXRlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAne3ZhbHVlfSdcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0ZXh0OiBmdW5jdGlvbiB0ZXh0KCkge1xuICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgaWYgKHRoaXMuc2hvd1Njb3JlKSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuc2NvcmVUZW1wbGF0ZS5yZXBsYWNlKC9cXHtcXHMqdmFsdWVcXHMqXFx9LywgdGhpcy5yYXRlRGlzYWJsZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5jdXJyZW50VmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dUZXh0KSB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMudGV4dHNbTWF0aC5jZWlsKHRoaXMuY3VycmVudFZhbHVlKSAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIGRlY2ltYWxTdHlsZTogZnVuY3Rpb24gZGVjaW1hbFN0eWxlKCkge1xuICAgICAgdmFyIHdpZHRoID0gJyc7XG4gICAgICBpZiAodGhpcy5yYXRlRGlzYWJsZWQpIHtcbiAgICAgICAgd2lkdGggPSB0aGlzLnZhbHVlRGVjaW1hbCArICclJztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hbGxvd0hhbGYpIHtcbiAgICAgICAgd2lkdGggPSAnNTAlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbG9yOiB0aGlzLmFjdGl2ZUNvbG9yLFxuICAgICAgICB3aWR0aDogd2lkdGhcbiAgICAgIH07XG4gICAgfSxcbiAgICB2YWx1ZURlY2ltYWw6IGZ1bmN0aW9uIHZhbHVlRGVjaW1hbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlICogMTAwIC0gTWF0aC5mbG9vcih0aGlzLnZhbHVlKSAqIDEwMDtcbiAgICB9LFxuICAgIGNsYXNzTWFwOiBmdW5jdGlvbiBjbGFzc01hcCgpIHtcbiAgICAgIHZhciBfcmVmO1xuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmljb25DbGFzc2VzKSA/IChfcmVmID0ge30sIF9yZWZbdGhpcy5sb3dUaHJlc2hvbGRdID0gdGhpcy5pY29uQ2xhc3Nlc1swXSwgX3JlZlt0aGlzLmhpZ2hUaHJlc2hvbGRdID0geyB2YWx1ZTogdGhpcy5pY29uQ2xhc3Nlc1sxXSwgZXhjbHVkZWQ6IHRydWUgfSwgX3JlZlt0aGlzLm1heF0gPSB0aGlzLmljb25DbGFzc2VzWzJdLCBfcmVmKSA6IHRoaXMuaWNvbkNsYXNzZXM7XG4gICAgfSxcbiAgICBkZWNpbWFsSWNvbkNsYXNzOiBmdW5jdGlvbiBkZWNpbWFsSWNvbkNsYXNzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWVGcm9tTWFwKHRoaXMudmFsdWUsIHRoaXMuY2xhc3NNYXApO1xuICAgIH0sXG4gICAgdm9pZENsYXNzOiBmdW5jdGlvbiB2b2lkQ2xhc3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYXRlRGlzYWJsZWQgPyB0aGlzLmRpc2FibGVkVm9pZEljb25DbGFzcyA6IHRoaXMudm9pZEljb25DbGFzcztcbiAgICB9LFxuICAgIGFjdGl2ZUNsYXNzOiBmdW5jdGlvbiBhY3RpdmVDbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlRnJvbU1hcCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5jbGFzc01hcCk7XG4gICAgfSxcbiAgICBjb2xvck1hcDogZnVuY3Rpb24gY29sb3JNYXAoKSB7XG4gICAgICB2YXIgX3JlZjI7XG5cbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMuY29sb3JzKSA/IChfcmVmMiA9IHt9LCBfcmVmMlt0aGlzLmxvd1RocmVzaG9sZF0gPSB0aGlzLmNvbG9yc1swXSwgX3JlZjJbdGhpcy5oaWdoVGhyZXNob2xkXSA9IHsgdmFsdWU6IHRoaXMuY29sb3JzWzFdLCBleGNsdWRlZDogdHJ1ZSB9LCBfcmVmMlt0aGlzLm1heF0gPSB0aGlzLmNvbG9yc1syXSwgX3JlZjIpIDogdGhpcy5jb2xvcnM7XG4gICAgfSxcbiAgICBhY3RpdmVDb2xvcjogZnVuY3Rpb24gYWN0aXZlQ29sb3IoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRWYWx1ZUZyb21NYXAodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuY29sb3JNYXApO1xuICAgIH0sXG4gICAgY2xhc3NlczogZnVuY3Rpb24gY2xhc3NlcygpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB0aHJlc2hvbGQgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmICh0aGlzLmFsbG93SGFsZiAmJiB0aGlzLmN1cnJlbnRWYWx1ZSAhPT0gTWF0aC5mbG9vcih0aGlzLmN1cnJlbnRWYWx1ZSkpIHtcbiAgICAgICAgdGhyZXNob2xkLS07XG4gICAgICB9XG4gICAgICBmb3IgKDsgaSA8IHRocmVzaG9sZDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuYWN0aXZlQ2xhc3MpO1xuICAgICAgfVxuICAgICAgZm9yICg7IGkgPCB0aGlzLm1heDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMudm9pZENsYXNzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcbiAgICByYXRlRGlzYWJsZWQ6IGZ1bmN0aW9uIHJhdGVEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB2YWw7XG4gICAgICB0aGlzLnBvaW50ZXJBdExlZnRIYWxmID0gdGhpcy52YWx1ZSAhPT0gTWF0aC5mbG9vcih0aGlzLnZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1pZ3JhdGluZ0NvbmZpZzogZnVuY3Rpb24gZ2V0TWlncmF0aW5nQ29uZmlnKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAndGV4dC10ZW1wbGF0ZSc6ICd0ZXh0LXRlbXBsYXRlIGlzIHJlbmFtZWQgdG8gc2NvcmUtdGVtcGxhdGUuJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgZ2V0VmFsdWVGcm9tTWFwOiBmdW5jdGlvbiBnZXRWYWx1ZUZyb21NYXAodmFsdWUsIG1hcCkge1xuICAgICAgdmFyIG1hdGNoZWRLZXlzID0gT2JqZWN0LmtleXMobWFwKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsID0gbWFwW2tleV07XG4gICAgICAgIHZhciBleGNsdWRlZCA9IE9iamVjdCh0eXBlc19bXCJpc09iamVjdFwiXSkodmFsKSA/IHZhbC5leGNsdWRlZCA6IGZhbHNlO1xuICAgICAgICByZXR1cm4gZXhjbHVkZWQgPyB2YWx1ZSA8IGtleSA6IHZhbHVlIDw9IGtleTtcbiAgICAgIH0pLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEgLSBiO1xuICAgICAgfSk7XG4gICAgICB2YXIgbWF0Y2hlZFZhbHVlID0gbWFwW21hdGNoZWRLZXlzWzBdXTtcbiAgICAgIHJldHVybiBPYmplY3QodHlwZXNfW1wiaXNPYmplY3RcIl0pKG1hdGNoZWRWYWx1ZSkgPyBtYXRjaGVkVmFsdWUudmFsdWUgOiBtYXRjaGVkVmFsdWUgfHwgJyc7XG4gICAgfSxcbiAgICBzaG93RGVjaW1hbEljb246IGZ1bmN0aW9uIHNob3dEZWNpbWFsSWNvbihpdGVtKSB7XG4gICAgICB2YXIgc2hvd1doZW5EaXNhYmxlZCA9IHRoaXMucmF0ZURpc2FibGVkICYmIHRoaXMudmFsdWVEZWNpbWFsID4gMCAmJiBpdGVtIC0gMSA8IHRoaXMudmFsdWUgJiYgaXRlbSA+IHRoaXMudmFsdWU7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdmFyIHNob3dXaGVuQWxsb3dIYWxmID0gdGhpcy5hbGxvd0hhbGYgJiYgdGhpcy5wb2ludGVyQXRMZWZ0SGFsZiAmJiBpdGVtIC0gMC41IDw9IHRoaXMuY3VycmVudFZhbHVlICYmIGl0ZW0gPiB0aGlzLmN1cnJlbnRWYWx1ZTtcbiAgICAgIHJldHVybiBzaG93V2hlbkRpc2FibGVkIHx8IHNob3dXaGVuQWxsb3dIYWxmO1xuICAgIH0sXG4gICAgZ2V0SWNvblN0eWxlOiBmdW5jdGlvbiBnZXRJY29uU3R5bGUoaXRlbSkge1xuICAgICAgdmFyIHZvaWRDb2xvciA9IHRoaXMucmF0ZURpc2FibGVkID8gdGhpcy5kaXNhYmxlZFZvaWRDb2xvciA6IHRoaXMudm9pZENvbG9yO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29sb3I6IGl0ZW0gPD0gdGhpcy5jdXJyZW50VmFsdWUgPyB0aGlzLmFjdGl2ZUNvbG9yIDogdm9pZENvbG9yXG4gICAgICB9O1xuICAgIH0sXG4gICAgc2VsZWN0VmFsdWU6IGZ1bmN0aW9uIHNlbGVjdFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5yYXRlRGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWxsb3dIYWxmICYmIHRoaXMucG9pbnRlckF0TGVmdEhhbGYpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHRoaXMuY3VycmVudFZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVLZXk6IGZ1bmN0aW9uIGhhbmRsZUtleShlKSB7XG4gICAgICBpZiAodGhpcy5yYXRlRGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMuY3VycmVudFZhbHVlO1xuICAgICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGU7XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gMzggfHwga2V5Q29kZSA9PT0gMzkpIHtcbiAgICAgICAgLy8gbGVmdCAvIGRvd25cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dIYWxmKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlICs9IDAuNTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50VmFsdWUgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2UgaWYgKGtleUNvZGUgPT09IDM3IHx8IGtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgIGlmICh0aGlzLmFsbG93SGFsZikge1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSAtPSAwLjU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlIC09IDE7XG4gICAgICAgIH1cbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlIDwgMCA/IDAgOiBjdXJyZW50VmFsdWU7XG4gICAgICBjdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWUgPiB0aGlzLm1heCA/IHRoaXMubWF4IDogY3VycmVudFZhbHVlO1xuXG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGN1cnJlbnRWYWx1ZSk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCBjdXJyZW50VmFsdWUpO1xuICAgIH0sXG4gICAgc2V0Q3VycmVudFZhbHVlOiBmdW5jdGlvbiBzZXRDdXJyZW50VmFsdWUodmFsdWUsIGV2ZW50KSB7XG4gICAgICBpZiAodGhpcy5yYXRlRGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAodGhpcy5hbGxvd0hhbGYpIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKE9iamVjdChkb21fW1wiaGFzQ2xhc3NcIl0pKHRhcmdldCwgJ2VsLXJhdGVfX2l0ZW0nKSkge1xuICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCcuZWwtcmF0ZV9faWNvbicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QoZG9tX1tcImhhc0NsYXNzXCJdKSh0YXJnZXQsICdlbC1yYXRlX19kZWNpbWFsJykpIHtcbiAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBvaW50ZXJBdExlZnRIYWxmID0gZXZlbnQub2Zmc2V0WCAqIDIgPD0gdGFyZ2V0LmNsaWVudFdpZHRoO1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRoaXMucG9pbnRlckF0TGVmdEhhbGYgPyB2YWx1ZSAtIDAuNSA6IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaG92ZXJJbmRleCA9IHZhbHVlO1xuICAgIH0sXG4gICAgcmVzZXRDdXJyZW50VmFsdWU6IGZ1bmN0aW9uIHJlc2V0Q3VycmVudFZhbHVlKCkge1xuICAgICAgaWYgKHRoaXMucmF0ZURpc2FibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFsbG93SGFsZikge1xuICAgICAgICB0aGlzLnBvaW50ZXJBdExlZnRIYWxmID0gdGhpcy52YWx1ZSAhPT0gTWF0aC5mbG9vcih0aGlzLnZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHRoaXMuaG92ZXJJbmRleCA9IC0xO1xuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCAwKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYXRlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19yYXRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHJhdGVfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmF0ZS9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciByYXRlX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfcmF0ZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2FkYTU3NzgyX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2FkYTU3NzgyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcmF0ZV9zcmNfbWFpbl9hcGk7IH1cbnJhdGVfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9yYXRlL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciByYXRlX3NyY19tYWluID0gKHJhdGVfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yYXRlL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnJhdGVfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChyYXRlX3NyY19tYWluLm5hbWUsIHJhdGVfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmF0ZSA9IChyYXRlX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYzZiNmRjMCZcbnZhciBzdGVwc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjNmI2ZGMwX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXN0ZXBzXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICAhX3ZtLnNpbXBsZSAmJiBcImVsLXN0ZXBzLS1cIiArIF92bS5kaXJlY3Rpb24sXG4gICAgICAgIF92bS5zaW1wbGUgJiYgXCJlbC1zdGVwcy0tc2ltcGxlXCJcbiAgICAgIF1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGVwc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjNmI2ZGMwX3N0YXRpY1JlbmRlckZucyA9IFtdXG5zdGVwc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzNjNmI2ZGMwX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zYzZiNmRjMCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3RlcHN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTdGVwcycsXG5cbiAgbWl4aW5zOiBbbWlncmF0aW5nX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcGFjZTogW051bWJlciwgU3RyaW5nXSxcbiAgICBhY3RpdmU6IE51bWJlcixcbiAgICBkaXJlY3Rpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdob3Jpem9udGFsJ1xuICAgIH0sXG4gICAgYWxpZ25DZW50ZXI6IEJvb2xlYW4sXG4gICAgc2ltcGxlOiBCb29sZWFuLFxuICAgIGZpbmlzaFN0YXR1czoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2ZpbmlzaCdcbiAgICB9LFxuICAgIHByb2Nlc3NTdGF0dXM6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdwcm9jZXNzJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGVwczogW10sXG4gICAgICBzdGVwT2Zmc2V0OiAwXG4gICAgfTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgJ2NlbnRlcic6ICdjZW50ZXIgaXMgcmVtb3ZlZC4nXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgYWN0aXZlOiBmdW5jdGlvbiBhY3RpdmUobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIG5ld1ZhbCwgb2xkVmFsKTtcbiAgICB9LFxuICAgIHN0ZXBzOiBmdW5jdGlvbiBzdGVwcyhfc3RlcHMpIHtcbiAgICAgIF9zdGVwcy5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3N0ZXBzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHN0ZXBzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwcy52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBzdGVwc19jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19zdGVwc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc3RlcHN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zYzZiNmRjMF9yZW5kZXIsXG4gIHN0ZXBzdnVlX3R5cGVfdGVtcGxhdGVfaWRfM2M2YjZkYzBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzdGVwc19hcGk7IH1cbnN0ZXBzX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc3RlcHMvc3JjL3N0ZXBzLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzdGVwcyA9IChzdGVwc19jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3N0ZXBzL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnN0ZXBzLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3RlcHMubmFtZSwgc3RlcHMpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc3RlcHMgPSAoc3RlcHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjQxNGE4N2EmXG52YXIgc3RlcHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Y0MTRhODdhX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXN0ZXBcIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgICFfdm0uaXNTaW1wbGUgJiYgXCJpcy1cIiArIF92bS4kcGFyZW50LmRpcmVjdGlvbixcbiAgICAgICAgX3ZtLmlzU2ltcGxlICYmIFwiaXMtc2ltcGxlXCIsXG4gICAgICAgIF92bS5pc0xhc3QgJiYgIV92bS5zcGFjZSAmJiAhX3ZtLmlzQ2VudGVyICYmIFwiaXMtZmxleFwiLFxuICAgICAgICBfdm0uaXNDZW50ZXIgJiYgIV92bS5pc1ZlcnRpY2FsICYmICFfdm0uaXNTaW1wbGUgJiYgXCJpcy1jZW50ZXJcIlxuICAgICAgXSxcbiAgICAgIHN0eWxlOiBfdm0uc3R5bGVcbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXN0ZXBfX2hlYWRcIiwgY2xhc3M6IFwiaXMtXCIgKyBfdm0uY3VycmVudFN0YXR1cyB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19saW5lXCIsXG4gICAgICAgICAgICAgIHN0eWxlOiBfdm0uaXNMYXN0XG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiB7IG1hcmdpblJpZ2h0OiBfdm0uJHBhcmVudC5zdGVwT2Zmc2V0ICsgXCJweFwiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9fbGluZS1pbm5lclwiLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0ubGluZVN0eWxlXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXN0ZXBfX2ljb25cIixcbiAgICAgICAgICAgICAgY2xhc3M6IFwiaXMtXCIgKyAoX3ZtLmljb24gPyBcImljb25cIiA6IFwidGV4dFwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLmN1cnJlbnRTdGF0dXMgIT09IFwic3VjY2Vzc1wiICYmIF92bS5jdXJyZW50U3RhdHVzICE9PSBcImVycm9yXCJcbiAgICAgICAgICAgICAgICA/IF92bS5fdChcImljb25cIiwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uaWNvblxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9faWNvbi1pbm5lclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW192bS5pY29uXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAhX3ZtLmljb24gJiYgIV92bS5pc1NpbXBsZVxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19pY29uLWlubmVyXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKF92bS5pbmRleCArIDEpKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIDogX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9faWNvbi1pbm5lciBpcy1zdGF0dXNcIixcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgICBcImVsLWljb24tXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5jdXJyZW50U3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IFwiY2hlY2tcIiA6IFwiY2xvc2VcIilcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICApLFxuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1zdGVwX19tYWluXCIgfSwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZjogXCJ0aXRsZVwiLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9fdGl0bGVcIixcbiAgICAgICAgICAgIGNsYXNzOiBbXCJpcy1cIiArIF92bS5jdXJyZW50U3RhdHVzXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW192bS5fdChcInRpdGxlXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS50aXRsZSkpXSldLFxuICAgICAgICAgIDJcbiAgICAgICAgKSxcbiAgICAgICAgX3ZtLmlzU2ltcGxlXG4gICAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXN0ZXBfX2Fycm93XCIgfSlcbiAgICAgICAgICA6IF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtc3RlcF9fZGVzY3JpcHRpb25cIixcbiAgICAgICAgICAgICAgICBjbGFzczogW1wiaXMtXCIgKyBfdm0uY3VycmVudFN0YXR1c11cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW192bS5fdChcImRlc2NyaXB0aW9uXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5kZXNjcmlwdGlvbikpXSldLFxuICAgICAgICAgICAgICAyXG4gICAgICAgICAgICApXG4gICAgICBdKVxuICAgIF1cbiAgKVxufVxudmFyIHN0ZXB2dWVfdHlwZV90ZW1wbGF0ZV9pZF9mNDE0YTg3YV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc3RlcHZ1ZV90eXBlX3RlbXBsYXRlX2lkX2Y0MTRhODdhX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWY0MTRhODdhJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zdGVwcy9zcmMvc3RlcC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzdGVwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsU3RlcCcsXG5cbiAgcHJvcHM6IHtcbiAgICB0aXRsZTogU3RyaW5nLFxuICAgIGljb246IFN0cmluZyxcbiAgICBkZXNjcmlwdGlvbjogU3RyaW5nLFxuICAgIHN0YXR1czogU3RyaW5nXG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5kZXg6IC0xLFxuICAgICAgbGluZVN0eWxlOiB7fSxcbiAgICAgIGludGVybmFsU3RhdHVzOiAnJ1xuICAgIH07XG4gIH0sXG4gIGJlZm9yZUNyZWF0ZTogZnVuY3Rpb24gYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHBhcmVudC5zdGVwcy5wdXNoKHRoaXMpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHZhciBzdGVwcyA9IHRoaXMuJHBhcmVudC5zdGVwcztcbiAgICB2YXIgaW5kZXggPSBzdGVwcy5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICBzdGVwcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY3VycmVudFN0YXR1czogZnVuY3Rpb24gY3VycmVudFN0YXR1cygpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1cyB8fCB0aGlzLmludGVybmFsU3RhdHVzO1xuICAgIH0sXG4gICAgcHJldlN0YXR1czogZnVuY3Rpb24gcHJldlN0YXR1cygpIHtcbiAgICAgIHZhciBwcmV2U3RlcCA9IHRoaXMuJHBhcmVudC5zdGVwc1t0aGlzLmluZGV4IC0gMV07XG4gICAgICByZXR1cm4gcHJldlN0ZXAgPyBwcmV2U3RlcC5jdXJyZW50U3RhdHVzIDogJ3dhaXQnO1xuICAgIH0sXG4gICAgaXNDZW50ZXI6IGZ1bmN0aW9uIGlzQ2VudGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5hbGlnbkNlbnRlcjtcbiAgICB9LFxuICAgIGlzVmVydGljYWw6IGZ1bmN0aW9uIGlzVmVydGljYWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICB9LFxuICAgIGlzU2ltcGxlOiBmdW5jdGlvbiBpc1NpbXBsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQuc2ltcGxlO1xuICAgIH0sXG4gICAgaXNMYXN0OiBmdW5jdGlvbiBpc0xhc3QoKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgcmV0dXJuIHBhcmVudC5zdGVwc1twYXJlbnQuc3RlcHMubGVuZ3RoIC0gMV0gPT09IHRoaXM7XG4gICAgfSxcbiAgICBzdGVwc0NvdW50OiBmdW5jdGlvbiBzdGVwc0NvdW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC5zdGVwcy5sZW5ndGg7XG4gICAgfSxcbiAgICBzcGFjZTogZnVuY3Rpb24gc3BhY2UoKSB7XG4gICAgICB2YXIgaXNTaW1wbGUgPSB0aGlzLmlzU2ltcGxlLFxuICAgICAgICAgIHNwYWNlID0gdGhpcy4kcGFyZW50LnNwYWNlO1xuXG4gICAgICByZXR1cm4gaXNTaW1wbGUgPyAnJyA6IHNwYWNlO1xuICAgIH0sXG5cbiAgICBzdHlsZTogZnVuY3Rpb24gc3R5bGUoKSB7XG4gICAgICB2YXIgc3R5bGUgPSB7fTtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICB2YXIgbGVuID0gcGFyZW50LnN0ZXBzLmxlbmd0aDtcblxuICAgICAgdmFyIHNwYWNlID0gdHlwZW9mIHRoaXMuc3BhY2UgPT09ICdudW1iZXInID8gdGhpcy5zcGFjZSArICdweCcgOiB0aGlzLnNwYWNlID8gdGhpcy5zcGFjZSA6IDEwMCAvIChsZW4gLSAodGhpcy5pc0NlbnRlciA/IDAgOiAxKSkgKyAnJSc7XG4gICAgICBzdHlsZS5mbGV4QmFzaXMgPSBzcGFjZTtcbiAgICAgIGlmICh0aGlzLmlzVmVydGljYWwpIHJldHVybiBzdHlsZTtcbiAgICAgIGlmICh0aGlzLmlzTGFzdCkge1xuICAgICAgICBzdHlsZS5tYXhXaWR0aCA9IDEwMCAvIHRoaXMuc3RlcHNDb3VudCArICclJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLm1hcmdpblJpZ2h0ID0gLXRoaXMuJHBhcmVudC5zdGVwT2Zmc2V0ICsgJ3B4JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlU3RhdHVzOiBmdW5jdGlvbiB1cGRhdGVTdGF0dXModmFsKSB7XG4gICAgICB2YXIgcHJldkNoaWxkID0gdGhpcy4kcGFyZW50LiRjaGlsZHJlblt0aGlzLmluZGV4IC0gMV07XG5cbiAgICAgIGlmICh2YWwgPiB0aGlzLmluZGV4KSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxTdGF0dXMgPSB0aGlzLiRwYXJlbnQuZmluaXNoU3RhdHVzO1xuICAgICAgfSBlbHNlIGlmICh2YWwgPT09IHRoaXMuaW5kZXggJiYgdGhpcy5wcmV2U3RhdHVzICE9PSAnZXJyb3InKSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxTdGF0dXMgPSB0aGlzLiRwYXJlbnQucHJvY2Vzc1N0YXR1cztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxTdGF0dXMgPSAnd2FpdCc7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmV2Q2hpbGQpIHByZXZDaGlsZC5jYWxjUHJvZ3Jlc3ModGhpcy5pbnRlcm5hbFN0YXR1cyk7XG4gICAgfSxcbiAgICBjYWxjUHJvZ3Jlc3M6IGZ1bmN0aW9uIGNhbGNQcm9ncmVzcyhzdGF0dXMpIHtcbiAgICAgIHZhciBzdGVwID0gMTAwO1xuICAgICAgdmFyIHN0eWxlID0ge307XG5cbiAgICAgIHN0eWxlLnRyYW5zaXRpb25EZWxheSA9IDE1MCAqIHRoaXMuaW5kZXggKyAnbXMnO1xuICAgICAgaWYgKHN0YXR1cyA9PT0gdGhpcy4kcGFyZW50LnByb2Nlc3NTdGF0dXMpIHtcbiAgICAgICAgc3RlcCA9IHRoaXMuY3VycmVudFN0YXR1cyAhPT0gJ2Vycm9yJyA/IDAgOiAwO1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09ICd3YWl0Jykge1xuICAgICAgICBzdGVwID0gMDtcbiAgICAgICAgc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gLTE1MCAqIHRoaXMuaW5kZXggKyAnbXMnO1xuICAgICAgfVxuXG4gICAgICBzdHlsZS5ib3JkZXJXaWR0aCA9IHN0ZXAgJiYgIXRoaXMuaXNTaW1wbGUgPyAnMXB4JyA6IDA7XG4gICAgICB0aGlzLiRwYXJlbnQuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gc3R5bGUuaGVpZ2h0ID0gc3RlcCArICclJyA6IHN0eWxlLndpZHRoID0gc3RlcCArICclJztcblxuICAgICAgdGhpcy5saW5lU3R5bGUgPSBzdHlsZTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIHVud2F0Y2ggPSB0aGlzLiR3YXRjaCgnaW5kZXgnLCBmdW5jdGlvbiAodmFsKSB7XG4gICAgICBfdGhpcy4kd2F0Y2goJyRwYXJlbnQuYWN0aXZlJywgX3RoaXMudXBkYXRlU3RhdHVzLCB7IGltbWVkaWF0ZTogdHJ1ZSB9KTtcbiAgICAgIF90aGlzLiR3YXRjaCgnJHBhcmVudC5wcm9jZXNzU3RhdHVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWN0aXZlSW5kZXggPSBfdGhpcy4kcGFyZW50LmFjdGl2ZTtcbiAgICAgICAgX3RoaXMudXBkYXRlU3RhdHVzKGFjdGl2ZUluZGV4KTtcbiAgICAgIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICAgICAgdW53YXRjaCgpO1xuICAgIH0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zdGVwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHN0ZXB2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc3RlcHMvc3JjL3N0ZXAudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgc3RlcF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19zdGVwdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzdGVwdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjQxNGE4N2FfcmVuZGVyLFxuICBzdGVwdnVlX3R5cGVfdGVtcGxhdGVfaWRfZjQxNGE4N2Ffc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzdGVwX2FwaTsgfVxuc3RlcF9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3N0ZXBzL3NyYy9zdGVwLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzdGVwID0gKHN0ZXBfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zdGVwL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnN0ZXAuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChzdGVwLm5hbWUsIHN0ZXApO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfc3RlcCA9IChzdGVwKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVkNWQxNDgyJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDVkMTQ4Ml9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBjbGFzczogX3ZtLmNhcm91c2VsQ2xhc3NlcyxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlTW91c2VFbnRlcigkZXZlbnQpXG4gICAgICAgIH0sXG4gICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlTW91c2VMZWF2ZSgkZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2Fyb3VzZWxfX2NvbnRhaW5lclwiLFxuICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogX3ZtLmhlaWdodCB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfdm0uYXJyb3dEaXNwbGF5XG4gICAgICAgICAgICA/IF9jKFwidHJhbnNpdGlvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwiY2Fyb3VzZWwtYXJyb3ctbGVmdFwiIH0gfSwgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoX3ZtLmFycm93ID09PSBcImFsd2F5c1wiIHx8IF92bS5ob3ZlcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5sb29wIHx8IF92bS5hY3RpdmVJbmRleCA+IDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCIoYXJyb3cgPT09ICdhbHdheXMnIHx8IGhvdmVyKSAmJiAobG9vcCB8fCBhY3RpdmVJbmRleCA+IDApXCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcm91c2VsX19hcnJvdyBlbC1jYXJvdXNlbF9fYXJyb3ctLWxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUJ1dHRvbkVudGVyKFwibGVmdFwiKVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgbW91c2VsZWF2ZTogX3ZtLmhhbmRsZUJ1dHRvbkxlYXZlLFxuICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnRocm90dGxlZEFycm93Q2xpY2soX3ZtLmFjdGl2ZUluZGV4IC0gMSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1hcnJvdy1sZWZ0XCIgfSldXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICBfdm0uYXJyb3dEaXNwbGF5XG4gICAgICAgICAgICA/IF9jKFwidHJhbnNpdGlvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwiY2Fyb3VzZWwtYXJyb3ctcmlnaHRcIiB9IH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKF92bS5hcnJvdyA9PT0gXCJhbHdheXNcIiB8fCBfdm0uaG92ZXIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChfdm0ubG9vcCB8fCBfdm0uYWN0aXZlSW5kZXggPCBfdm0uaXRlbXMubGVuZ3RoIC0gMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIihhcnJvdyA9PT0gJ2Fsd2F5cycgfHwgaG92ZXIpICYmIChsb29wIHx8IGFjdGl2ZUluZGV4IDwgaXRlbXMubGVuZ3RoIC0gMSlcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY2Fyb3VzZWxfX2Fycm93IGVsLWNhcm91c2VsX19hcnJvdy0tcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUJ1dHRvbkVudGVyKFwicmlnaHRcIilcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIG1vdXNlbGVhdmU6IF92bS5oYW5kbGVCdXR0b25MZWF2ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS50aHJvdHRsZWRBcnJvd0NsaWNrKF92bS5hY3RpdmVJbmRleCArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tYXJyb3ctcmlnaHRcIiB9KV1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIilcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF92bS5pbmRpY2F0b3JQb3NpdGlvbiAhPT0gXCJub25lXCJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwidWxcIixcbiAgICAgICAgICAgIHsgY2xhc3M6IF92bS5pbmRpY2F0b3JzQ2xhc3NlcyB9LFxuICAgICAgICAgICAgX3ZtLl9sKF92bS5pdGVtcywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBrZXk6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1jYXJvdXNlbF9faW5kaWNhdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZWwtY2Fyb3VzZWxfX2luZGljYXRvci0tXCIgKyBfdm0uZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICB7IFwiaXMtYWN0aXZlXCI6IGluZGV4ID09PSBfdm0uYWN0aXZlSW5kZXggfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgIF92bS50aHJvdHRsZWRJbmRpY2F0b3JIb3ZlcihpbmRleClcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVJbmRpY2F0b3JDbGljayhpbmRleClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJidXR0b25cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1jYXJvdXNlbF9fYnV0dG9uXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uaGFzTGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhpdGVtLmxhYmVsKSldKVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdXG4gIClcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWQ1ZDE0ODJfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDVkMTQ4Ml9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZDVkMTQ4MiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInRocm90dGxlLWRlYm91bmNlL3Rocm90dGxlXCJcbnZhciB0aHJvdHRsZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcbnZhciB0aHJvdHRsZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih0aHJvdHRsZV8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2Fyb3VzZWxfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDYXJvdXNlbCcsXG5cbiAgcHJvcHM6IHtcbiAgICBpbml0aWFsSW5kZXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIGhlaWdodDogU3RyaW5nLFxuICAgIHRyaWdnZXI6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdob3ZlcidcbiAgICB9LFxuICAgIGF1dG9wbGF5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaW50ZXJ2YWw6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDMwMDBcbiAgICB9LFxuICAgIGluZGljYXRvclBvc2l0aW9uOiBTdHJpbmcsXG4gICAgaW5kaWNhdG9yOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdob3ZlcidcbiAgICB9LFxuICAgIHR5cGU6IFN0cmluZyxcbiAgICBsb29wOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgZGlyZWN0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaG9yaXpvbnRhbCcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCddLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIGFjdGl2ZUluZGV4OiAtMSxcbiAgICAgIGNvbnRhaW5lcldpZHRoOiAwLFxuICAgICAgdGltZXI6IG51bGwsXG4gICAgICBob3ZlcjogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhcnJvd0Rpc3BsYXk6IGZ1bmN0aW9uIGFycm93RGlzcGxheSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFycm93ICE9PSAnbmV2ZXInICYmIHRoaXMuZGlyZWN0aW9uICE9PSAndmVydGljYWwnO1xuICAgIH0sXG4gICAgaGFzTGFiZWw6IGZ1bmN0aW9uIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5sYWJlbC50b1N0cmluZygpLmxlbmd0aCA+IDA7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNhcm91c2VsQ2xhc3NlczogZnVuY3Rpb24gY2Fyb3VzZWxDbGFzc2VzKCkge1xuICAgICAgdmFyIGNsYXNzZXMgPSBbJ2VsLWNhcm91c2VsJywgJ2VsLWNhcm91c2VsLS0nICsgdGhpcy5kaXJlY3Rpb25dO1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZWwtY2Fyb3VzZWwtLWNhcmQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgIH0sXG4gICAgaW5kaWNhdG9yc0NsYXNzZXM6IGZ1bmN0aW9uIGluZGljYXRvcnNDbGFzc2VzKCkge1xuICAgICAgdmFyIGNsYXNzZXMgPSBbJ2VsLWNhcm91c2VsX19pbmRpY2F0b3JzJywgJ2VsLWNhcm91c2VsX19pbmRpY2F0b3JzLS0nICsgdGhpcy5kaXJlY3Rpb25dO1xuICAgICAgaWYgKHRoaXMuaGFzTGFiZWwpIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKCdlbC1jYXJvdXNlbF9faW5kaWNhdG9ycy0tbGFiZWxzJyk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbmRpY2F0b3JQb3NpdGlvbiA9PT0gJ291dHNpZGUnIHx8IHRoaXMudHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaCgnZWwtY2Fyb3VzZWxfX2luZGljYXRvcnMtLW91dHNpZGUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGl0ZW1zOiBmdW5jdGlvbiBpdGVtcyh2YWwpIHtcbiAgICAgIGlmICh2YWwubGVuZ3RoID4gMCkgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuaW5pdGlhbEluZGV4KTtcbiAgICB9LFxuICAgIGFjdGl2ZUluZGV4OiBmdW5jdGlvbiBhY3RpdmVJbmRleCh2YWwsIG9sZFZhbCkge1xuICAgICAgdGhpcy5yZXNldEl0ZW1Qb3NpdGlvbihvbGRWYWwpO1xuICAgICAgaWYgKG9sZFZhbCA+IC0xKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCwgb2xkVmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGF1dG9wbGF5OiBmdW5jdGlvbiBhdXRvcGxheSh2YWwpIHtcbiAgICAgIHZhbCA/IHRoaXMuc3RhcnRUaW1lcigpIDogdGhpcy5wYXVzZVRpbWVyKCk7XG4gICAgfSxcbiAgICBsb29wOiBmdW5jdGlvbiBsb29wKCkge1xuICAgICAgdGhpcy5zZXRBY3RpdmVJdGVtKHRoaXMuYWN0aXZlSW5kZXgpO1xuICAgIH0sXG4gICAgaW50ZXJ2YWw6IGZ1bmN0aW9uIGludGVydmFsKCkge1xuICAgICAgdGhpcy5wYXVzZVRpbWVyKCk7XG4gICAgICB0aGlzLnN0YXJ0VGltZXIoKTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZU1vdXNlRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZU1vdXNlRW50ZXIoKSB7XG4gICAgICB0aGlzLmhvdmVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGF1c2VUaW1lcigpO1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICAgIHRoaXMuaG92ZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgIH0sXG4gICAgaXRlbUluU3RhZ2U6IGZ1bmN0aW9uIGl0ZW1JblN0YWdlKGl0ZW0sIGluZGV4KSB7XG4gICAgICB2YXIgbGVuZ3RoID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICBpZiAoaW5kZXggPT09IGxlbmd0aCAtIDEgJiYgaXRlbS5pblN0YWdlICYmIHRoaXMuaXRlbXNbMF0uYWN0aXZlIHx8IGl0ZW0uaW5TdGFnZSAmJiB0aGlzLml0ZW1zW2luZGV4ICsgMV0gJiYgdGhpcy5pdGVtc1tpbmRleCArIDFdLmFjdGl2ZSkge1xuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gMCAmJiBpdGVtLmluU3RhZ2UgJiYgdGhpcy5pdGVtc1tsZW5ndGggLSAxXS5hY3RpdmUgfHwgaXRlbS5pblN0YWdlICYmIHRoaXMuaXRlbXNbaW5kZXggLSAxXSAmJiB0aGlzLml0ZW1zW2luZGV4IC0gMV0uYWN0aXZlKSB7XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlQnV0dG9uRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZUJ1dHRvbkVudGVyKGFycm93KSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHJldHVybjtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgaWYgKGFycm93ID09PSBfdGhpcy5pdGVtSW5TdGFnZShpdGVtLCBpbmRleCkpIHtcbiAgICAgICAgICBpdGVtLmhvdmVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVCdXR0b25MZWF2ZTogZnVuY3Rpb24gaGFuZGxlQnV0dG9uTGVhdmUoKSB7XG4gICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHJldHVybjtcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpdGVtLmhvdmVyID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHVwZGF0ZUl0ZW1zOiBmdW5jdGlvbiB1cGRhdGVJdGVtcygpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLiRjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBjaGlsZC4kb3B0aW9ucy5uYW1lID09PSAnRWxDYXJvdXNlbEl0ZW0nO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICByZXNldEl0ZW1Qb3NpdGlvbjogZnVuY3Rpb24gcmVzZXRJdGVtUG9zaXRpb24ob2xkSW5kZXgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIGl0ZW0udHJhbnNsYXRlSXRlbShpbmRleCwgX3RoaXMyLmFjdGl2ZUluZGV4LCBvbGRJbmRleCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHBsYXlTbGlkZXM6IGZ1bmN0aW9uIHBsYXlTbGlkZXMoKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA8IHRoaXMuaXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4Kys7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gMDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHBhdXNlVGltZXI6IGZ1bmN0aW9uIHBhdXNlVGltZXIoKSB7XG4gICAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXIpO1xuICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHN0YXJ0VGltZXI6IGZ1bmN0aW9uIHN0YXJ0VGltZXIoKSB7XG4gICAgICBpZiAodGhpcy5pbnRlcnZhbCA8PSAwIHx8ICF0aGlzLmF1dG9wbGF5IHx8IHRoaXMudGltZXIpIHJldHVybjtcbiAgICAgIHRoaXMudGltZXIgPSBzZXRJbnRlcnZhbCh0aGlzLnBsYXlTbGlkZXMsIHRoaXMuaW50ZXJ2YWwpO1xuICAgIH0sXG4gICAgcmVzZXRUaW1lcjogZnVuY3Rpb24gcmVzZXRUaW1lcigpIHtcbiAgICAgIHRoaXMucGF1c2VUaW1lcigpO1xuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgfSxcbiAgICBzZXRBY3RpdmVJdGVtOiBmdW5jdGlvbiBzZXRBY3RpdmVJdGVtKGluZGV4KSB7XG4gICAgICBpZiAodHlwZW9mIGluZGV4ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZmlsdGVyZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gaW5kZXg7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZmlsdGVyZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaW5kZXggPSB0aGlzLml0ZW1zLmluZGV4T2YoZmlsdGVyZWRJdGVtc1swXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGluZGV4ID0gTnVtYmVyKGluZGV4KTtcbiAgICAgIGlmIChpc05hTihpbmRleCkgfHwgaW5kZXggIT09IE1hdGguZmxvb3IoaW5kZXgpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgV2Fybl1bQ2Fyb3VzZWxdaW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyLicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbGVuZ3RoID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICB2YXIgb2xkSW5kZXggPSB0aGlzLmFjdGl2ZUluZGV4O1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5sb29wID8gbGVuZ3RoIC0gMSA6IDA7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4ID49IGxlbmd0aCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdGhpcy5sb29wID8gMCA6IGxlbmd0aCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAob2xkSW5kZXggPT09IHRoaXMuYWN0aXZlSW5kZXgpIHtcbiAgICAgICAgdGhpcy5yZXNldEl0ZW1Qb3NpdGlvbihvbGRJbmRleCk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlc2V0VGltZXIoKTtcbiAgICB9LFxuICAgIHByZXY6IGZ1bmN0aW9uIHByZXYoKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVJbmRleCAtIDEpO1xuICAgIH0sXG4gICAgbmV4dDogZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZUluZGV4ICsgMSk7XG4gICAgfSxcbiAgICBoYW5kbGVJbmRpY2F0b3JDbGljazogZnVuY3Rpb24gaGFuZGxlSW5kaWNhdG9yQ2xpY2soaW5kZXgpIHtcbiAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleDtcbiAgICB9LFxuICAgIGhhbmRsZUluZGljYXRvckhvdmVyOiBmdW5jdGlvbiBoYW5kbGVJbmRpY2F0b3JIb3ZlcihpbmRleCkge1xuICAgICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2hvdmVyJyAmJiBpbmRleCAhPT0gdGhpcy5hY3RpdmVJbmRleCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB0aGlzLnRocm90dGxlZEFycm93Q2xpY2sgPSB0aHJvdHRsZV9kZWZhdWx0KCkoMzAwLCB0cnVlLCBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgIF90aGlzMy5zZXRBY3RpdmVJdGVtKGluZGV4KTtcbiAgICB9KTtcbiAgICB0aGlzLnRocm90dGxlZEluZGljYXRvckhvdmVyID0gdGhyb3R0bGVfZGVmYXVsdCgpKDMwMCwgZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICBfdGhpczMuaGFuZGxlSW5kaWNhdG9ySG92ZXIoaW5kZXgpO1xuICAgIH0pO1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdGhpcy51cGRhdGVJdGVtcygpO1xuICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIE9iamVjdChyZXNpemVfZXZlbnRfW1wiYWRkUmVzaXplTGlzdGVuZXJcIl0pKF90aGlzNC4kZWwsIF90aGlzNC5yZXNldEl0ZW1Qb3NpdGlvbik7XG4gICAgICBpZiAoX3RoaXM0LmluaXRpYWxJbmRleCA8IF90aGlzNC5pdGVtcy5sZW5ndGggJiYgX3RoaXM0LmluaXRpYWxJbmRleCA+PSAwKSB7XG4gICAgICAgIF90aGlzNC5hY3RpdmVJbmRleCA9IF90aGlzNC5pbml0aWFsSW5kZXg7XG4gICAgICB9XG4gICAgICBfdGhpczQuc3RhcnRUaW1lcigpO1xuICAgIH0pO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLiRlbCkgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJyZW1vdmVSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMucmVzZXRJdGVtUG9zaXRpb24pO1xuICAgIHRoaXMucGF1c2VUaW1lcigpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2Nhcm91c2VsX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhcm91c2VsX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNhcm91c2VsX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfY2Fyb3VzZWxfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDVkMTQ4Ml9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZDVkMTQ4Ml9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhcm91c2VsX3NyY19tYWluX2FwaTsgfVxuY2Fyb3VzZWxfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYXJvdXNlbC9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2Fyb3VzZWxfc3JjX21haW4gPSAoY2Fyb3VzZWxfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJvdXNlbC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jYXJvdXNlbF9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNhcm91c2VsX3NyY19tYWluLm5hbWUsIGNhcm91c2VsX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhcm91c2VsID0gKGNhcm91c2VsX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2Nyb2xsYmFyL3NyYy91dGlsLmpzXG52YXIgQkFSX01BUCA9IHtcbiAgdmVydGljYWw6IHtcbiAgICBvZmZzZXQ6ICdvZmZzZXRIZWlnaHQnLFxuICAgIHNjcm9sbDogJ3Njcm9sbFRvcCcsXG4gICAgc2Nyb2xsU2l6ZTogJ3Njcm9sbEhlaWdodCcsXG4gICAgc2l6ZTogJ2hlaWdodCcsXG4gICAga2V5OiAndmVydGljYWwnLFxuICAgIGF4aXM6ICdZJyxcbiAgICBjbGllbnQ6ICdjbGllbnRZJyxcbiAgICBkaXJlY3Rpb246ICd0b3AnXG4gIH0sXG4gIGhvcml6b250YWw6IHtcbiAgICBvZmZzZXQ6ICdvZmZzZXRXaWR0aCcsXG4gICAgc2Nyb2xsOiAnc2Nyb2xsTGVmdCcsXG4gICAgc2Nyb2xsU2l6ZTogJ3Njcm9sbFdpZHRoJyxcbiAgICBzaXplOiAnd2lkdGgnLFxuICAgIGtleTogJ2hvcml6b250YWwnLFxuICAgIGF4aXM6ICdYJyxcbiAgICBjbGllbnQ6ICdjbGllbnRYJyxcbiAgICBkaXJlY3Rpb246ICdsZWZ0J1xuICB9XG59O1xuXG5mdW5jdGlvbiByZW5kZXJUaHVtYlN0eWxlKF9yZWYpIHtcbiAgdmFyIG1vdmUgPSBfcmVmLm1vdmUsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgYmFyID0gX3JlZi5iYXI7XG5cbiAgdmFyIHN0eWxlID0ge307XG4gIHZhciB0cmFuc2xhdGUgPSAndHJhbnNsYXRlJyArIGJhci5heGlzICsgJygnICsgbW92ZSArICclKSc7XG5cbiAgc3R5bGVbYmFyLnNpemVdID0gc2l6ZTtcbiAgc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICBzdHlsZS5tc1RyYW5zZm9ybSA9IHRyYW5zbGF0ZTtcbiAgc3R5bGUud2Via2l0VHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuXG4gIHJldHVybiBzdHlsZTtcbn07XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Njcm9sbGJhci9zcmMvYmFyLmpzXG5cblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2JhciA9ICh7XG4gIG5hbWU6ICdCYXInLFxuXG4gIHByb3BzOiB7XG4gICAgdmVydGljYWw6IEJvb2xlYW4sXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIG1vdmU6IE51bWJlclxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYmFyOiBmdW5jdGlvbiBiYXIoKSB7XG4gICAgICByZXR1cm4gQkFSX01BUFt0aGlzLnZlcnRpY2FsID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJ107XG4gICAgfSxcbiAgICB3cmFwOiBmdW5jdGlvbiB3cmFwKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudC53cmFwO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemUsXG4gICAgICAgIG1vdmUgPSB0aGlzLm1vdmUsXG4gICAgICAgIGJhciA9IHRoaXMuYmFyO1xuXG5cbiAgICByZXR1cm4gaChcbiAgICAgICdkaXYnLFxuICAgICAge1xuICAgICAgICAnY2xhc3MnOiBbJ2VsLXNjcm9sbGJhcl9fYmFyJywgJ2lzLScgKyBiYXIua2V5XSxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnbW91c2Vkb3duJzogdGhpcy5jbGlja1RyYWNrSGFuZGxlclxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2goJ2RpdicsIHtcbiAgICAgICAgcmVmOiAndGh1bWInLFxuICAgICAgICAnY2xhc3MnOiAnZWwtc2Nyb2xsYmFyX190aHVtYicsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgJ21vdXNlZG93bic6IHRoaXMuY2xpY2tUaHVtYkhhbmRsZXJcbiAgICAgICAgfSxcblxuICAgICAgICBzdHlsZTogcmVuZGVyVGh1bWJTdHlsZSh7IHNpemU6IHNpemUsIG1vdmU6IG1vdmUsIGJhcjogYmFyIH0pIH0pXVxuICAgICk7XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgY2xpY2tUaHVtYkhhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrVGh1bWJIYW5kbGVyKGUpIHtcbiAgICAgIC8vIHByZXZlbnQgY2xpY2sgZXZlbnQgb2YgcmlnaHQgYnV0dG9uXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUuYnV0dG9uID09PSAyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhcnREcmFnKGUpO1xuICAgICAgdGhpc1t0aGlzLmJhci5heGlzXSA9IGUuY3VycmVudFRhcmdldFt0aGlzLmJhci5vZmZzZXRdIC0gKGVbdGhpcy5iYXIuY2xpZW50XSAtIGUuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dKTtcbiAgICB9LFxuICAgIGNsaWNrVHJhY2tIYW5kbGVyOiBmdW5jdGlvbiBjbGlja1RyYWNrSGFuZGxlcihlKSB7XG4gICAgICB2YXIgb2Zmc2V0ID0gTWF0aC5hYnMoZS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbdGhpcy5iYXIuZGlyZWN0aW9uXSAtIGVbdGhpcy5iYXIuY2xpZW50XSk7XG4gICAgICB2YXIgdGh1bWJIYWxmID0gdGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdIC8gMjtcbiAgICAgIHZhciB0aHVtYlBvc2l0aW9uUGVyY2VudGFnZSA9IChvZmZzZXQgLSB0aHVtYkhhbGYpICogMTAwIC8gdGhpcy4kZWxbdGhpcy5iYXIub2Zmc2V0XTtcblxuICAgICAgdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbF0gPSB0aHVtYlBvc2l0aW9uUGVyY2VudGFnZSAqIHRoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxTaXplXSAvIDEwMDtcbiAgICB9LFxuICAgIHN0YXJ0RHJhZzogZnVuY3Rpb24gc3RhcnREcmFnKGUpIHtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmN1cnNvckRvd24gPSB0cnVlO1xuXG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMubW91c2VNb3ZlRG9jdW1lbnRIYW5kbGVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMubW91c2VVcERvY3VtZW50SGFuZGxlcik7XG4gICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9O1xuICAgIH0sXG4gICAgbW91c2VNb3ZlRG9jdW1lbnRIYW5kbGVyOiBmdW5jdGlvbiBtb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIoZSkge1xuICAgICAgaWYgKHRoaXMuY3Vyc29yRG93biA9PT0gZmFsc2UpIHJldHVybjtcbiAgICAgIHZhciBwcmV2UGFnZSA9IHRoaXNbdGhpcy5iYXIuYXhpc107XG5cbiAgICAgIGlmICghcHJldlBhZ2UpIHJldHVybjtcblxuICAgICAgdmFyIG9mZnNldCA9ICh0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dIC0gZVt0aGlzLmJhci5jbGllbnRdKSAqIC0xO1xuICAgICAgdmFyIHRodW1iQ2xpY2tQb3NpdGlvbiA9IHRoaXMuJHJlZnMudGh1bWJbdGhpcy5iYXIub2Zmc2V0XSAtIHByZXZQYWdlO1xuICAgICAgdmFyIHRodW1iUG9zaXRpb25QZXJjZW50YWdlID0gKG9mZnNldCAtIHRodW1iQ2xpY2tQb3NpdGlvbikgKiAxMDAgLyB0aGlzLiRlbFt0aGlzLmJhci5vZmZzZXRdO1xuXG4gICAgICB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsXSA9IHRodW1iUG9zaXRpb25QZXJjZW50YWdlICogdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdIC8gMTAwO1xuICAgIH0sXG4gICAgbW91c2VVcERvY3VtZW50SGFuZGxlcjogZnVuY3Rpb24gbW91c2VVcERvY3VtZW50SGFuZGxlcihlKSB7XG4gICAgICB0aGlzLmN1cnNvckRvd24gPSBmYWxzZTtcbiAgICAgIHRoaXNbdGhpcy5iYXIuYXhpc10gPSAwO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5tb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIpO1xuICAgICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IG51bGw7XG4gICAgfVxuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShkb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLm1vdXNlVXBEb2N1bWVudEhhbmRsZXIpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2Nyb2xsYmFyL3NyYy9tYWluLmpzXG4vLyByZWZlcmVuY2UgaHR0cHM6Ly9naXRodWIuY29tL25vZWxkZWxnYWRvL2dlbWluaS1zY3JvbGxiYXIvYmxvYi9tYXN0ZXIvaW5kZXguanNcblxuXG5cblxuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzY3JvbGxiYXJfc3JjX21haW4gPSAoe1xuICBuYW1lOiAnRWxTY3JvbGxiYXInLFxuXG4gIGNvbXBvbmVudHM6IHsgQmFyOiBzcmNfYmFyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBuYXRpdmU6IEJvb2xlYW4sXG4gICAgd3JhcFN0eWxlOiB7fSxcbiAgICB3cmFwQ2xhc3M6IHt9LFxuICAgIHZpZXdDbGFzczoge30sXG4gICAgdmlld1N0eWxlOiB7fSxcbiAgICBub3Jlc2l6ZTogQm9vbGVhbiwgLy8g5aaC5p6cIGNvbnRhaW5lciDlsLrlr7jkuI3kvJrlj5HnlJ/lj5jljJbvvIzmnIDlpb3orr7nva7lroPlj6/ku6XkvJjljJbmgKfog71cbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpemVXaWR0aDogJzAnLFxuICAgICAgc2l6ZUhlaWdodDogJzAnLFxuICAgICAgbW92ZVg6IDAsXG4gICAgICBtb3ZlWTogMFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHdyYXA6IGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy53cmFwO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIGd1dHRlciA9IHNjcm9sbGJhcl93aWR0aF9kZWZhdWx0KCkoKTtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLndyYXBTdHlsZTtcblxuICAgIGlmIChndXR0ZXIpIHtcbiAgICAgIHZhciBndXR0ZXJXaXRoID0gJy0nICsgZ3V0dGVyICsgJ3B4JztcbiAgICAgIHZhciBndXR0ZXJTdHlsZSA9ICdtYXJnaW4tYm90dG9tOiAnICsgZ3V0dGVyV2l0aCArICc7IG1hcmdpbi1yaWdodDogJyArIGd1dHRlcldpdGggKyAnOyc7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMud3JhcFN0eWxlKSkge1xuICAgICAgICBzdHlsZSA9IE9iamVjdCh1dGlsX1tcInRvT2JqZWN0XCJdKSh0aGlzLndyYXBTdHlsZSk7XG4gICAgICAgIHN0eWxlLm1hcmdpblJpZ2h0ID0gc3R5bGUubWFyZ2luQm90dG9tID0gZ3V0dGVyV2l0aDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMud3JhcFN0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICBzdHlsZSArPSBndXR0ZXJTdHlsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0gZ3V0dGVyU3R5bGU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciB2aWV3ID0gaCh0aGlzLnRhZywge1xuICAgICAgY2xhc3M6IFsnZWwtc2Nyb2xsYmFyX192aWV3JywgdGhpcy52aWV3Q2xhc3NdLFxuICAgICAgc3R5bGU6IHRoaXMudmlld1N0eWxlLFxuICAgICAgcmVmOiAncmVzaXplJ1xuICAgIH0sIHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICAgIHZhciB3cmFwID0gaChcbiAgICAgICdkaXYnLFxuICAgICAge1xuICAgICAgICByZWY6ICd3cmFwJyxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdzY3JvbGwnOiB0aGlzLmhhbmRsZVNjcm9sbFxuICAgICAgICB9LFxuXG4gICAgICAgICdjbGFzcyc6IFt0aGlzLndyYXBDbGFzcywgJ2VsLXNjcm9sbGJhcl9fd3JhcCcsIGd1dHRlciA/ICcnIDogJ2VsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHQnXSB9LFxuICAgICAgW1t2aWV3XV1cbiAgICApO1xuICAgIHZhciBub2RlcyA9IHZvaWQgMDtcblxuICAgIGlmICghdGhpcy5uYXRpdmUpIHtcbiAgICAgIG5vZGVzID0gW3dyYXAsIGgoc3JjX2Jhciwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIG1vdmU6IHRoaXMubW92ZVgsXG4gICAgICAgICAgc2l6ZTogdGhpcy5zaXplV2lkdGggfVxuICAgICAgfSksIGgoc3JjX2Jhciwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHZlcnRpY2FsOiB0cnVlLFxuICAgICAgICAgIG1vdmU6IHRoaXMubW92ZVksXG4gICAgICAgICAgc2l6ZTogdGhpcy5zaXplSGVpZ2h0IH1cbiAgICAgIH0pXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMgPSBbaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6ICd3cmFwJyxcbiAgICAgICAgICAnY2xhc3MnOiBbdGhpcy53cmFwQ2xhc3MsICdlbC1zY3JvbGxiYXJfX3dyYXAnXSxcbiAgICAgICAgICBzdHlsZTogc3R5bGUgfSxcbiAgICAgICAgW1t2aWV3XV1cbiAgICAgICldO1xuICAgIH1cbiAgICByZXR1cm4gaCgnZGl2JywgeyBjbGFzczogJ2VsLXNjcm9sbGJhcicgfSwgbm9kZXMpO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZVNjcm9sbDogZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuICAgICAgdmFyIHdyYXAgPSB0aGlzLndyYXA7XG5cbiAgICAgIHRoaXMubW92ZVkgPSB3cmFwLnNjcm9sbFRvcCAqIDEwMCAvIHdyYXAuY2xpZW50SGVpZ2h0O1xuICAgICAgdGhpcy5tb3ZlWCA9IHdyYXAuc2Nyb2xsTGVmdCAqIDEwMCAvIHdyYXAuY2xpZW50V2lkdGg7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHZhciBoZWlnaHRQZXJjZW50YWdlID0gdm9pZCAwLFxuICAgICAgICAgIHdpZHRoUGVyY2VudGFnZSA9IHZvaWQgMDtcbiAgICAgIHZhciB3cmFwID0gdGhpcy53cmFwO1xuICAgICAgaWYgKCF3cmFwKSByZXR1cm47XG5cbiAgICAgIGhlaWdodFBlcmNlbnRhZ2UgPSB3cmFwLmNsaWVudEhlaWdodCAqIDEwMCAvIHdyYXAuc2Nyb2xsSGVpZ2h0O1xuICAgICAgd2lkdGhQZXJjZW50YWdlID0gd3JhcC5jbGllbnRXaWR0aCAqIDEwMCAvIHdyYXAuc2Nyb2xsV2lkdGg7XG5cbiAgICAgIHRoaXMuc2l6ZUhlaWdodCA9IGhlaWdodFBlcmNlbnRhZ2UgPCAxMDAgPyBoZWlnaHRQZXJjZW50YWdlICsgJyUnIDogJyc7XG4gICAgICB0aGlzLnNpemVXaWR0aCA9IHdpZHRoUGVyY2VudGFnZSA8IDEwMCA/IHdpZHRoUGVyY2VudGFnZSArICclJyA6ICcnO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLm5hdGl2ZSkgcmV0dXJuO1xuICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlKTtcbiAgICAhdGhpcy5ub3Jlc2l6ZSAmJiBPYmplY3QocmVzaXplX2V2ZW50X1tcImFkZFJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRyZWZzLnJlc2l6ZSwgdGhpcy51cGRhdGUpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLm5hdGl2ZSkgcmV0dXJuO1xuICAgICF0aGlzLm5vcmVzaXplICYmIE9iamVjdChyZXNpemVfZXZlbnRfW1wicmVtb3ZlUmVzaXplTGlzdGVuZXJcIl0pKHRoaXMuJHJlZnMucmVzaXplLCB0aGlzLnVwZGF0ZSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc2Nyb2xsYmFyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc2Nyb2xsYmFyX3NyY19tYWluLm5hbWUsIHNjcm9sbGJhcl9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzY3JvbGxiYXIgPSAoc2Nyb2xsYmFyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2Fyb3VzZWwvc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE4MDFhZTE5JlxudmFyIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODAxYWUxOV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgIHZhbHVlOiBfdm0ucmVhZHksXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJyZWFkeVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jYXJvdXNlbF9faXRlbVwiLFxuICAgICAgY2xhc3M6IHtcbiAgICAgICAgXCJpcy1hY3RpdmVcIjogX3ZtLmFjdGl2ZSxcbiAgICAgICAgXCJlbC1jYXJvdXNlbF9faXRlbS0tY2FyZFwiOiBfdm0uJHBhcmVudC50eXBlID09PSBcImNhcmRcIixcbiAgICAgICAgXCJpcy1pbi1zdGFnZVwiOiBfdm0uaW5TdGFnZSxcbiAgICAgICAgXCJpcy1ob3ZlclwiOiBfdm0uaG92ZXIsXG4gICAgICAgIFwiaXMtYW5pbWF0aW5nXCI6IF92bS5hbmltYXRpbmdcbiAgICAgIH0sXG4gICAgICBzdHlsZTogX3ZtLml0ZW1TdHlsZSxcbiAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlSXRlbUNsaWNrIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF92bS4kcGFyZW50LnR5cGUgPT09IFwiY2FyZFwiXG4gICAgICAgID8gX2MoXCJkaXZcIiwge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5hY3RpdmUsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhYWN0aXZlXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhcm91c2VsX19tYXNrXCJcbiAgICAgICAgICB9KVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKVxuICAgIF0sXG4gICAgMlxuICApXG59XG52YXIgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MDFhZTE5X3N0YXRpY1JlbmRlckZucyA9IFtdXG5pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTgwMWFlMTlfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTgwMWFlMTkmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Nhcm91c2VsL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxudmFyIENBUkRfU0NBTEUgPSAwLjgzO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENhcm91c2VsSXRlbScsXG5cbiAgcHJvcHM6IHtcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgbGFiZWw6IHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBob3ZlcjogZmFsc2UsXG4gICAgICB0cmFuc2xhdGU6IDAsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICByZWFkeTogZmFsc2UsXG4gICAgICBpblN0YWdlOiBmYWxzZSxcbiAgICAgIGFuaW1hdGluZzogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIHByb2Nlc3NJbmRleDogZnVuY3Rpb24gcHJvY2Vzc0luZGV4KGluZGV4LCBhY3RpdmVJbmRleCwgbGVuZ3RoKSB7XG4gICAgICBpZiAoYWN0aXZlSW5kZXggPT09IDAgJiYgaW5kZXggPT09IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJbmRleCA9PT0gbGVuZ3RoIC0gMSAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgICAgfSBlbHNlIGlmIChpbmRleCA8IGFjdGl2ZUluZGV4IC0gMSAmJiBhY3RpdmVJbmRleCAtIGluZGV4ID49IGxlbmd0aCAvIDIpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCArIDE7XG4gICAgICB9IGVsc2UgaWYgKGluZGV4ID4gYWN0aXZlSW5kZXggKyAxICYmIGluZGV4IC0gYWN0aXZlSW5kZXggPj0gbGVuZ3RoIC8gMikge1xuICAgICAgICByZXR1cm4gLTI7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfSxcbiAgICBjYWxjQ2FyZFRyYW5zbGF0ZTogZnVuY3Rpb24gY2FsY0NhcmRUcmFuc2xhdGUoaW5kZXgsIGFjdGl2ZUluZGV4KSB7XG4gICAgICB2YXIgcGFyZW50V2lkdGggPSB0aGlzLiRwYXJlbnQuJGVsLm9mZnNldFdpZHRoO1xuICAgICAgaWYgKHRoaXMuaW5TdGFnZSkge1xuICAgICAgICByZXR1cm4gcGFyZW50V2lkdGggKiAoKDIgLSBDQVJEX1NDQUxFKSAqIChpbmRleCAtIGFjdGl2ZUluZGV4KSArIDEpIC8gNDtcbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCBhY3RpdmVJbmRleCkge1xuICAgICAgICByZXR1cm4gLSgxICsgQ0FSRF9TQ0FMRSkgKiBwYXJlbnRXaWR0aCAvIDQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKDMgKyBDQVJEX1NDQUxFKSAqIHBhcmVudFdpZHRoIC8gNDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbGNUcmFuc2xhdGU6IGZ1bmN0aW9uIGNhbGNUcmFuc2xhdGUoaW5kZXgsIGFjdGl2ZUluZGV4LCBpc1ZlcnRpY2FsKSB7XG4gICAgICB2YXIgZGlzdGFuY2UgPSB0aGlzLiRwYXJlbnQuJGVsW2lzVmVydGljYWwgPyAnb2Zmc2V0SGVpZ2h0JyA6ICdvZmZzZXRXaWR0aCddO1xuICAgICAgcmV0dXJuIGRpc3RhbmNlICogKGluZGV4IC0gYWN0aXZlSW5kZXgpO1xuICAgIH0sXG4gICAgdHJhbnNsYXRlSXRlbTogZnVuY3Rpb24gdHJhbnNsYXRlSXRlbShpbmRleCwgYWN0aXZlSW5kZXgsIG9sZEluZGV4KSB7XG4gICAgICB2YXIgcGFyZW50VHlwZSA9IHRoaXMuJHBhcmVudC50eXBlO1xuICAgICAgdmFyIHBhcmVudERpcmVjdGlvbiA9IHRoaXMucGFyZW50RGlyZWN0aW9uO1xuICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuJHBhcmVudC5pdGVtcy5sZW5ndGg7XG4gICAgICBpZiAocGFyZW50VHlwZSAhPT0gJ2NhcmQnICYmIG9sZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5hbmltYXRpbmcgPSBpbmRleCA9PT0gYWN0aXZlSW5kZXggfHwgaW5kZXggPT09IG9sZEluZGV4O1xuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9PSBhY3RpdmVJbmRleCAmJiBsZW5ndGggPiAyICYmIHRoaXMuJHBhcmVudC5sb29wKSB7XG4gICAgICAgIGluZGV4ID0gdGhpcy5wcm9jZXNzSW5kZXgoaW5kZXgsIGFjdGl2ZUluZGV4LCBsZW5ndGgpO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudFR5cGUgPT09ICdjYXJkJykge1xuICAgICAgICBpZiAocGFyZW50RGlyZWN0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtDYXJvdXNlbF12ZXJ0aWNhbCBkaXJlY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBjYXJkIG1vZGUnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluU3RhZ2UgPSBNYXRoLnJvdW5kKE1hdGguYWJzKGluZGV4IC0gYWN0aXZlSW5kZXgpKSA8PSAxO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGluZGV4ID09PSBhY3RpdmVJbmRleDtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUgPSB0aGlzLmNhbGNDYXJkVHJhbnNsYXRlKGluZGV4LCBhY3RpdmVJbmRleCk7XG4gICAgICAgIHRoaXMuc2NhbGUgPSB0aGlzLmFjdGl2ZSA/IDEgOiBDQVJEX1NDQUxFO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBpbmRleCA9PT0gYWN0aXZlSW5kZXg7XG4gICAgICAgIHZhciBpc1ZlcnRpY2FsID0gcGFyZW50RGlyZWN0aW9uID09PSAndmVydGljYWwnO1xuICAgICAgICB0aGlzLnRyYW5zbGF0ZSA9IHRoaXMuY2FsY1RyYW5zbGF0ZShpbmRleCwgYWN0aXZlSW5kZXgsIGlzVmVydGljYWwpO1xuICAgICAgICB0aGlzLnNjYWxlID0gMTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgIH0sXG4gICAgaGFuZGxlSXRlbUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVJdGVtQ2xpY2soKSB7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy4kcGFyZW50O1xuICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gJ2NhcmQnKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHBhcmVudC5pdGVtcy5pbmRleE9mKHRoaXMpO1xuICAgICAgICBwYXJlbnQuc2V0QWN0aXZlSXRlbShpbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFyZW50RGlyZWN0aW9uOiBmdW5jdGlvbiBwYXJlbnREaXJlY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LmRpcmVjdGlvbjtcbiAgICB9LFxuICAgIGl0ZW1TdHlsZTogZnVuY3Rpb24gaXRlbVN0eWxlKCkge1xuICAgICAgdmFyIHRyYW5zbGF0ZVR5cGUgPSB0aGlzLnBhcmVudERpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/ICd0cmFuc2xhdGVZJyA6ICd0cmFuc2xhdGVYJztcbiAgICAgIHZhciB2YWx1ZSA9IHRyYW5zbGF0ZVR5cGUgKyAnKCcgKyB0aGlzLnRyYW5zbGF0ZSArICdweCkgc2NhbGUoJyArIHRoaXMuc2NhbGUgKyAnKSc7XG4gICAgICB2YXIgc3R5bGUgPSB7XG4gICAgICAgIHRyYW5zZm9ybTogdmFsdWVcbiAgICAgIH07XG4gICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiYXV0b3ByZWZpeGVyXCJdKShzdHlsZSk7XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy4kcGFyZW50ICYmIHRoaXMuJHBhcmVudC51cGRhdGVJdGVtcygpO1xuICB9LFxuICBkZXN0cm95ZWQ6IGZ1bmN0aW9uIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLiRwYXJlbnQgJiYgdGhpcy4kcGFyZW50LnVwZGF0ZUl0ZW1zKCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvaXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJvdXNlbC9zcmMvaXRlbS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpdGVtX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODAxYWUxOV9yZW5kZXIsXG4gIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODAxYWUxOV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGl0ZW1fYXBpOyB9XG5pdGVtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2Fyb3VzZWwvc3JjL2l0ZW0udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19pdGVtID0gKGl0ZW1fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXJvdXNlbC1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNyY19pdGVtLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX2l0ZW0ubmFtZSwgc3JjX2l0ZW0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2Fyb3VzZWxfaXRlbSA9IChzcmNfaXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDYxZDU3ZjQmXG52YXIgY29sbGFwc2V2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NjFkNTdmNF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xsYXBzZVwiLFxuICAgICAgYXR0cnM6IHsgcm9sZTogXCJ0YWJsaXN0XCIsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIjogXCJ0cnVlXCIgfVxuICAgIH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIGNvbGxhcHNldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDYxZDU3ZjRfc3RhdGljUmVuZGVyRm5zID0gW11cbmNvbGxhcHNldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDYxZDU3ZjRfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ2MWQ1N2Y0JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbGxhcHNldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ29sbGFwc2UnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbENvbGxhcHNlJyxcblxuICBwcm9wczoge1xuICAgIGFjY29yZGlvbjogQm9vbGVhbixcbiAgICB2YWx1ZToge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmVOYW1lczogW10uY29uY2F0KHRoaXMudmFsdWUpXG4gICAgfTtcbiAgfSxcbiAgcHJvdmlkZTogZnVuY3Rpb24gcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29sbGFwc2U6IHRoaXNcbiAgICB9O1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUoX3ZhbHVlKSB7XG4gICAgICB0aGlzLmFjdGl2ZU5hbWVzID0gW10uY29uY2F0KF92YWx1ZSk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRBY3RpdmVOYW1lczogZnVuY3Rpb24gc2V0QWN0aXZlTmFtZXMoYWN0aXZlTmFtZXMpIHtcbiAgICAgIGFjdGl2ZU5hbWVzID0gW10uY29uY2F0KGFjdGl2ZU5hbWVzKTtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuYWNjb3JkaW9uID8gYWN0aXZlTmFtZXNbMF0gOiBhY3RpdmVOYW1lcztcbiAgICAgIHRoaXMuYWN0aXZlTmFtZXMgPSBhY3RpdmVOYW1lcztcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsdWUpO1xuICAgIH0sXG4gICAgaGFuZGxlSXRlbUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVJdGVtQ2xpY2soaXRlbSkge1xuICAgICAgaWYgKHRoaXMuYWNjb3JkaW9uKSB7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTmFtZXMoKHRoaXMuYWN0aXZlTmFtZXNbMF0gfHwgdGhpcy5hY3RpdmVOYW1lc1swXSA9PT0gMCkgJiYgdGhpcy5hY3RpdmVOYW1lc1swXSA9PT0gaXRlbS5uYW1lID8gJycgOiBpdGVtLm5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGFjdGl2ZU5hbWVzID0gdGhpcy5hY3RpdmVOYW1lcy5zbGljZSgwKTtcbiAgICAgICAgdmFyIGluZGV4ID0gYWN0aXZlTmFtZXMuaW5kZXhPZihpdGVtLm5hbWUpO1xuXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgYWN0aXZlTmFtZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3RpdmVOYW1lcy5wdXNoKGl0ZW0ubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVOYW1lcyhhY3RpdmVOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy4kb24oJ2l0ZW0tY2xpY2snLCB0aGlzLmhhbmRsZUl0ZW1DbGljayk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jb2xsYXBzZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjb2xsYXBzZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9zcmMvY29sbGFwc2UudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29sbGFwc2VfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfY29sbGFwc2V2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGNvbGxhcHNldnVlX3R5cGVfdGVtcGxhdGVfaWRfNDYxZDU3ZjRfcmVuZGVyLFxuICBjb2xsYXBzZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ2MWQ1N2Y0X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY29sbGFwc2VfYXBpOyB9XG5jb2xsYXBzZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29sbGFwc2UgPSAoY29sbGFwc2VfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jb2xsYXBzZS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNvbGxhcHNlLm5hbWUsIGNvbGxhcHNlKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NvbGxhcHNlID0gKGNvbGxhcHNlKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkMDVmYWFjJlxudmFyIGNvbGxhcHNlX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDA1ZmFhY19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xsYXBzZS1pdGVtXCIsXG4gICAgICBjbGFzczogeyBcImlzLWFjdGl2ZVwiOiBfdm0uaXNBY3RpdmUsIFwiaXMtZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHJvbGU6IFwidGFiXCIsXG4gICAgICAgICAgICBcImFyaWEtZXhwYW5kZWRcIjogX3ZtLmlzQWN0aXZlLFxuICAgICAgICAgICAgXCJhcmlhLWNvbnRyb2xzXCI6IFwiZWwtY29sbGFwc2UtY29udGVudC1cIiArIF92bS5pZCxcbiAgICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBcImVsLWNvbGxhcHNlLWNvbnRlbnQtXCIgKyBfdm0uaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbGxhcHNlLWl0ZW1fX2hlYWRlclwiLFxuICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgIGZvY3VzaW5nOiBfdm0uZm9jdXNpbmcsXG4gICAgICAgICAgICAgICAgXCJpcy1hY3RpdmVcIjogX3ZtLmlzQWN0aXZlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgcm9sZTogXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICBpZDogXCJlbC1jb2xsYXBzZS1oZWFkLVwiICsgX3ZtLmlkLFxuICAgICAgICAgICAgICAgIHRhYmluZGV4OiBfdm0uZGlzYWJsZWQgPyB1bmRlZmluZWQgOiAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IF92bS5oYW5kbGVIZWFkZXJDbGljayxcbiAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJzcGFjZVwiLCAzMiwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICAgICAgICAgICAgIFwiU3BhY2ViYXJcIlxuICAgICAgICAgICAgICAgICAgICBdKSAmJlxuICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZW50ZXJcIiwgMTMsICRldmVudC5rZXksIFwiRW50ZXJcIilcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZUVudGVyQ2xpY2soJGV2ZW50KVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5mb2N1c2luZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfdm0uX3QoXCJ0aXRsZVwiLCBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pLFxuICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbGxhcHNlLWl0ZW1fX2Fycm93IGVsLWljb24tYXJyb3ctcmlnaHRcIixcbiAgICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWFjdGl2ZVwiOiBfdm0uaXNBY3RpdmUgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgICksXG4gICAgICBfYyhcImVsLWNvbGxhcHNlLXRyYW5zaXRpb25cIiwgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5pc0FjdGl2ZSxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlzQWN0aXZlXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbGxhcHNlLWl0ZW1fX3dyYXBcIixcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIHJvbGU6IFwidGFicGFuZWxcIixcbiAgICAgICAgICAgICAgXCJhcmlhLWhpZGRlblwiOiAhX3ZtLmlzQWN0aXZlLFxuICAgICAgICAgICAgICBcImFyaWEtbGFiZWxsZWRieVwiOiBcImVsLWNvbGxhcHNlLWhlYWQtXCIgKyBfdm0uaWQsXG4gICAgICAgICAgICAgIGlkOiBcImVsLWNvbGxhcHNlLWNvbnRlbnQtXCIgKyBfdm0uaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNvbGxhcHNlLWl0ZW1fX2NvbnRlbnRcIiB9LFxuICAgICAgICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBjb2xsYXBzZV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmQwNWZhYWNfc3RhdGljUmVuZGVyRm5zID0gW11cbmNvbGxhcHNlX2l0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZDA1ZmFhY19yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS1pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZDA1ZmFhYyZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb2xsYXBzZV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ29sbGFwc2VJdGVtJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxDb2xsYXBzZUl0ZW0nLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBjb21wb25lbnRzOiB7IEVsQ29sbGFwc2VUcmFuc2l0aW9uOiBjb2xsYXBzZV90cmFuc2l0aW9uX2RlZmF1bHQuYSB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnRXcmFwU3R5bGU6IHtcbiAgICAgICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH0sXG4gICAgICBjb250ZW50SGVpZ2h0OiAwLFxuICAgICAgZm9jdXNpbmc6IGZhbHNlLFxuICAgICAgaXNDbGljazogZmFsc2UsXG4gICAgICBpZDogT2JqZWN0KHV0aWxfW1wiZ2VuZXJhdGVJZFwiXSkoKVxuICAgIH07XG4gIH0sXG5cblxuICBpbmplY3Q6IFsnY29sbGFwc2UnXSxcblxuICBwcm9wczoge1xuICAgIHRpdGxlOiBTdHJpbmcsXG4gICAgbmFtZToge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdWlkO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW5cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzQWN0aXZlOiBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNlLmFjdGl2ZU5hbWVzLmluZGV4T2YodGhpcy5uYW1lKSA+IC0xO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMuaXNDbGljaykge1xuICAgICAgICAgIF90aGlzLmZvY3VzaW5nID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfdGhpcy5pc0NsaWNrID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0sIDUwKTtcbiAgICB9LFxuICAgIGhhbmRsZUhlYWRlckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVIZWFkZXJDbGljaygpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbENvbGxhcHNlJywgJ2l0ZW0tY2xpY2snLCB0aGlzKTtcbiAgICAgIHRoaXMuZm9jdXNpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDbGljayA9IHRydWU7XG4gICAgfSxcbiAgICBoYW5kbGVFbnRlckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVFbnRlckNsaWNrKCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxDb2xsYXBzZScsICdpdGVtLWNsaWNrJywgdGhpcyk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jb2xsYXBzZV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNvbGxhcHNlX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sbGFwc2Uvc3JjL2NvbGxhcHNlLWl0ZW0udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29sbGFwc2VfaXRlbV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jb2xsYXBzZV9pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjb2xsYXBzZV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmQwNWZhYWNfcmVuZGVyLFxuICBjb2xsYXBzZV9pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmQwNWZhYWNfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjb2xsYXBzZV9pdGVtX2FwaTsgfVxuY29sbGFwc2VfaXRlbV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NvbGxhcHNlL3NyYy9jb2xsYXBzZS1pdGVtLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb2xsYXBzZV9pdGVtID0gKGNvbGxhcHNlX2l0ZW1fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xsYXBzZS1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbGxhcHNlX2l0ZW0uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChjb2xsYXBzZV9pdGVtLm5hbWUsIGNvbGxhcHNlX2l0ZW0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY29sbGFwc2VfaXRlbSA9IChjb2xsYXBzZV9pdGVtKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMzI1MzdhNiZcbnZhciBjYXNjYWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAzMjUzN2E2X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LWNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiBfdm0udG9nZ2xlRHJvcERvd25WaXNpYmxlKGZhbHNlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCIoKSA9PiB0b2dnbGVEcm9wRG93blZpc2libGUoZmFsc2UpXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHJlZjogXCJyZWZlcmVuY2VcIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIFwiZWwtY2FzY2FkZXJcIixcbiAgICAgICAgX3ZtLnJlYWxTaXplICYmIFwiZWwtY2FzY2FkZXItLVwiICsgX3ZtLnJlYWxTaXplLFxuICAgICAgICB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQgfVxuICAgICAgXSxcbiAgICAgIG9uOiB7XG4gICAgICAgIG1vdXNlZW50ZXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgIF92bS5pbnB1dEhvdmVyID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBfdm0uaW5wdXRIb3ZlciA9IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIGNsaWNrOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gX3ZtLnRvZ2dsZURyb3BEb3duVmlzaWJsZShfdm0ucmVhZG9ubHkgPyB1bmRlZmluZWQgOiB0cnVlKVxuICAgICAgICB9LFxuICAgICAgICBrZXlkb3duOiBfdm0uaGFuZGxlS2V5RG93blxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZWwtaW5wdXRcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZm9jdXNcIjogX3ZtLmRyb3BEb3duVmlzaWJsZSB9LFxuICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICBzaXplOiBfdm0ucmVhbFNpemUsXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgcmVhZG9ubHk6IF92bS5yZWFkb25seSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIFwidmFsaWRhdGUtZXZlbnRcIjogZmFsc2VcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgYmx1cjogX3ZtLmhhbmRsZUJsdXIsXG4gICAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUlucHV0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgdmFsdWU6IF92bS5tdWx0aXBsZSA/IF92bS5wcmVzZW50VGV4dCA6IF92bS5pbnB1dFZhbHVlLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICBfdm0ubXVsdGlwbGUgPyBfdm0ucHJlc2VudFRleHQgOiAoX3ZtLmlucHV0VmFsdWUgPSAkJHYpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJtdWx0aXBsZSA/IHByZXNlbnRUZXh0IDogaW5wdXRWYWx1ZVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJ0ZW1wbGF0ZVwiLCB7IHNsb3Q6IFwic3VmZml4XCIgfSwgW1xuICAgICAgICAgICAgX3ZtLmNsZWFyQnRuVmlzaWJsZVxuICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYXJcIixcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uIGVsLWljb24tY2lyY2xlLWNsb3NlXCIsXG4gICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVDbGVhcigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICBrZXk6IFwiYXJyb3ctZG93blwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1pbnB1dF9faWNvblwiLFxuICAgICAgICAgICAgICAgICAgICBcImVsLWljb24tYXJyb3ctZG93blwiLFxuICAgICAgICAgICAgICAgICAgICBfdm0uZHJvcERvd25WaXNpYmxlICYmIFwiaXMtcmV2ZXJzZVwiXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIF92bS50b2dnbGVEcm9wRG93blZpc2libGUoKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICBdKVxuICAgICAgICBdLFxuICAgICAgICAyXG4gICAgICApLFxuICAgICAgX3ZtLm11bHRpcGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jYXNjYWRlcl9fdGFnc1wiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5fbChfdm0ucHJlc2VudFRhZ3MsIGZ1bmN0aW9uKHRhZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZWwtdGFnXCIsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdGFnLmtleSxcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgICBzaXplOiBfdm0udGFnU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICBoaXQ6IHRhZy5oaXRTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICBjbG9zYWJsZTogdGFnLmNsb3NhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgIFwiZGlzYWJsZS10cmFuc2l0aW9uc1wiOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmRlbGV0ZVRhZyh0YWcpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW19jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyh0YWcudGV4dCkpXSldXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgX3ZtLmZpbHRlcmFibGUgJiYgIV92bS5pc0Rpc2FibGVkXG4gICAgICAgICAgICAgICAgPyBfYyhcImlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbC50cmltXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmlucHV0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImlucHV0VmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogeyB0cmltOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhc2NhZGVyX19zZWFyY2gtaW5wdXRcIixcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnByZXNlbnRUYWdzLmxlbmd0aCA/IFwiXCIgOiBfdm0ucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5pbnB1dFZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaW5wdXRWYWx1ZSA9ICRldmVudC50YXJnZXQudmFsdWUudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZUlucHV0KF92bS5pbnB1dFZhbHVlLCBlKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0udG9nZ2xlRHJvcERvd25WaXNpYmxlKHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXlDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWzgsIDQ2XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcIkJhY2tzcGFjZVwiLCBcIkRlbGV0ZVwiLCBcIkRlbFwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlRGVsZXRlKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGJsdXI6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRmb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXG4gICAgICAgIFwidHJhbnNpdGlvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHsgbmFtZTogXCJlbC16b29tLWluLXRvcFwiIH0sXG4gICAgICAgICAgb246IHsgXCJhZnRlci1sZWF2ZVwiOiBfdm0uaGFuZGxlRHJvcGRvd25MZWF2ZSB9XG4gICAgICAgIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmRyb3BEb3duVmlzaWJsZSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZHJvcERvd25WaXNpYmxlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlZjogXCJwb3BwZXJcIixcbiAgICAgICAgICAgICAgY2xhc3M6IFtcImVsLXBvcHBlclwiLCBcImVsLWNhc2NhZGVyX19kcm9wZG93blwiLCBfdm0ucG9wcGVyQ2xhc3NdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImVsLWNhc2NhZGVyLXBhbmVsXCIsIHtcbiAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5maWx0ZXJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiIWZpbHRlcmluZ1wiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZWY6IFwicGFuZWxcIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgb3B0aW9uczogX3ZtLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICBwcm9wczogX3ZtLmNvbmZpZyxcbiAgICAgICAgICAgICAgICAgIGJvcmRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBcInJlbmRlci1sYWJlbFwiOiBfdm0uJHNjb3BlZFNsb3RzLmRlZmF1bHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBcImV4cGFuZC1jaGFuZ2VcIjogX3ZtLmhhbmRsZUV4cGFuZENoYW5nZSxcbiAgICAgICAgICAgICAgICAgIGNsb3NlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnRvZ2dsZURyb3BEb3duVmlzaWJsZShmYWxzZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmNoZWNrZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmNoZWNrZWRWYWx1ZSA9ICQkdlxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiY2hlY2tlZFZhbHVlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfdm0uZmlsdGVyYWJsZVxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZWwtc2Nyb2xsYmFyXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmZpbHRlcmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJmaWx0ZXJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiBcInN1Z2dlc3Rpb25QYW5lbFwiLFxuICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLXBhbmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogXCJ1bFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2aWV3LWNsYXNzXCI6IFwiZWwtY2FzY2FkZXJfX3N1Z2dlc3Rpb24tbGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlU3VnZ2VzdGlvbktleURvd24oJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5zdWdnZXN0aW9ucy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLl9sKF92bS5zdWdnZXN0aW9ucywgZnVuY3Rpb24oaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogaXRlbS51aWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1jYXNjYWRlcl9fc3VnZ2VzdGlvbi1pdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGVja2VkICYmIFwiaXMtY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHRhYmluZGV4OiAtMSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVTdWdnZXN0aW9uQ2xpY2soaW5kZXgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoaXRlbS50ZXh0KSldKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5jaGVja2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWNoZWNrXCIgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX3QoXCJlbXB0eVwiLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWNhc2NhZGVyX19lbXB0eS10ZXh0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwuY2FzY2FkZXIubm9NYXRjaFwiKSkpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBjYXNjYWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAzMjUzN2E2X3N0YXRpY1JlbmRlckZucyA9IFtdXG5jYXNjYWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAzMjUzN2E2X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMzI1MzdhNiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL2Nhc2NhZGVyLXBhbmVsXCJcbnZhciBjYXNjYWRlcl9wYW5lbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcbnZhciBjYXNjYWRlcl9wYW5lbF9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjYXNjYWRlcl9wYW5lbF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS11dGlsc1wiXG52YXIgYXJpYV91dGlsc18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcbnZhciBhcmlhX3V0aWxzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGFyaWFfdXRpbHNfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxudmFyIEtleUNvZGUgPSBhcmlhX3V0aWxzX2RlZmF1bHQuYS5rZXlzO1xuXG52YXIgTWlncmF0aW5nUHJvcHMgPSB7XG4gIGV4cGFuZFRyaWdnZXI6IHtcbiAgICBuZXdQcm9wOiAnZXhwYW5kVHJpZ2dlcicsXG4gICAgdHlwZTogU3RyaW5nXG4gIH0sXG4gIGNoYW5nZU9uU2VsZWN0OiB7XG4gICAgbmV3UHJvcDogJ2NoZWNrU3RyaWN0bHknLFxuICAgIHR5cGU6IEJvb2xlYW5cbiAgfSxcbiAgaG92ZXJUaHJlc2hvbGQ6IHtcbiAgICBuZXdQcm9wOiAnaG92ZXJUaHJlc2hvbGQnLFxuICAgIHR5cGU6IE51bWJlclxuICB9XG59O1xuXG52YXIgUG9wcGVyTWl4aW4gPSB7XG4gIHByb3BzOiB7XG4gICAgcGxhY2VtZW50OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnYm90dG9tLXN0YXJ0J1xuICAgIH0sXG4gICAgYXBwZW5kVG9Cb2R5OiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5hcHBlbmRUb0JvZHksXG4gICAgdmlzaWJsZUFycm93OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgYXJyb3dPZmZzZXQ6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLnByb3BzLmFycm93T2Zmc2V0LFxuICAgIG9mZnNldDogdnVlX3BvcHBlcl9kZWZhdWx0LmEucHJvcHMub2Zmc2V0LFxuICAgIGJvdW5kYXJpZXNQYWRkaW5nOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5ib3VuZGFyaWVzUGFkZGluZyxcbiAgICBwb3BwZXJPcHRpb25zOiB2dWVfcG9wcGVyX2RlZmF1bHQuYS5wcm9wcy5wb3BwZXJPcHRpb25zXG4gIH0sXG4gIG1ldGhvZHM6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLm1ldGhvZHMsXG4gIGRhdGE6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLmRhdGEsXG4gIGJlZm9yZURlc3Ryb3k6IHZ1ZV9wb3BwZXJfZGVmYXVsdC5hLmJlZm9yZURlc3Ryb3lcbn07XG5cbnZhciBJbnB1dFNpemVNYXAgPSB7XG4gIG1lZGl1bTogMzYsXG4gIHNtYWxsOiAzMixcbiAgbWluaTogMjhcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2FzY2FkZXInLFxuXG4gIGRpcmVjdGl2ZXM6IHsgQ2xpY2tvdXRzaWRlOiBjbGlja291dHNpZGVfZGVmYXVsdC5hIH0sXG5cbiAgbWl4aW5zOiBbUG9wcGVyTWl4aW4sIGVtaXR0ZXJfZGVmYXVsdC5hLCBsb2NhbGVfZGVmYXVsdC5hLCBtaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hLFxuICAgIEVsVGFnOiB0YWdfZGVmYXVsdC5hLFxuICAgIEVsU2Nyb2xsYmFyOiBzY3JvbGxiYXJfZGVmYXVsdC5hLFxuICAgIEVsQ2FzY2FkZXJQYW5lbDogY2FzY2FkZXJfcGFuZWxfZGVmYXVsdC5hXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge30sXG4gICAgb3B0aW9uczogQXJyYXksXG4gICAgcHJvcHM6IE9iamVjdCxcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgcGxhY2Vob2xkZXI6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0KGxpYl9sb2NhbGVfW1widFwiXSkoJ2VsLmNhc2NhZGVyLnBsYWNlaG9sZGVyJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBjbGVhcmFibGU6IEJvb2xlYW4sXG4gICAgZmlsdGVyYWJsZTogQm9vbGVhbixcbiAgICBmaWx0ZXJNZXRob2Q6IEZ1bmN0aW9uLFxuICAgIHNlcGFyYXRvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyAvICdcbiAgICB9LFxuICAgIHNob3dBbGxMZXZlbHM6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xsYXBzZVRhZ3M6IEJvb2xlYW4sXG4gICAgZGVib3VuY2U6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDMwMFxuICAgIH0sXG4gICAgYmVmb3JlRmlsdGVyOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge307XG4gICAgICB9XG4gICAgfSxcbiAgICBwb3BwZXJDbGFzczogU3RyaW5nXG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJvcERvd25WaXNpYmxlOiBmYWxzZSxcbiAgICAgIGNoZWNrZWRWYWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGlucHV0SG92ZXI6IGZhbHNlLFxuICAgICAgaW5wdXRWYWx1ZTogbnVsbCxcbiAgICAgIHByZXNlbnRUZXh0OiBudWxsLFxuICAgICAgcHJlc2VudFRhZ3M6IFtdLFxuICAgICAgY2hlY2tlZE5vZGVzOiBbXSxcbiAgICAgIGZpbHRlcmluZzogZmFsc2UsXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBpbnB1dEluaXRpYWxIZWlnaHQ6IDAsXG4gICAgICBwcmVzc0RlbGV0ZUNvdW50OiAwXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcmVhbFNpemU6IGZ1bmN0aW9uIHJlYWxTaXplKCkge1xuICAgICAgdmFyIF9lbEZvcm1JdGVtU2l6ZSA9ICh0aGlzLmVsRm9ybUl0ZW0gfHwge30pLmVsRm9ybUl0ZW1TaXplO1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCBfZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICB0YWdTaXplOiBmdW5jdGlvbiB0YWdTaXplKCkge1xuICAgICAgcmV0dXJuIFsnc21hbGwnLCAnbWluaSddLmluZGV4T2YodGhpcy5yZWFsU2l6ZSkgPiAtMSA/ICdtaW5pJyA6ICdzbWFsbCc7XG4gICAgfSxcbiAgICBpc0Rpc2FibGVkOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9LFxuICAgIGNvbmZpZzogZnVuY3Rpb24gY29uZmlnKCkge1xuICAgICAgdmFyIGNvbmZpZyA9IHRoaXMucHJvcHMgfHwge307XG4gICAgICB2YXIgJGF0dHJzID0gdGhpcy4kYXR0cnM7XG5cblxuICAgICAgT2JqZWN0LmtleXMoTWlncmF0aW5nUHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKG9sZFByb3ApIHtcbiAgICAgICAgdmFyIF9NaWdyYXRpbmdQcm9wcyRvbGRQciA9IE1pZ3JhdGluZ1Byb3BzW29sZFByb3BdLFxuICAgICAgICAgICAgbmV3UHJvcCA9IF9NaWdyYXRpbmdQcm9wcyRvbGRQci5uZXdQcm9wLFxuICAgICAgICAgICAgdHlwZSA9IF9NaWdyYXRpbmdQcm9wcyRvbGRQci50eXBlO1xuXG4gICAgICAgIHZhciBvbGRWYWx1ZSA9ICRhdHRyc1tvbGRQcm9wXSB8fCAkYXR0cnNbT2JqZWN0KHV0aWxfW1wia2ViYWJDYXNlXCJdKShvbGRQcm9wKV07XG4gICAgICAgIGlmIChPYmplY3Qoc2hhcmVkX1tcImlzRGVmXCJdKShvbGRQcm9wKSAmJiAhT2JqZWN0KHNoYXJlZF9bXCJpc0RlZlwiXSkoY29uZmlnW25ld1Byb3BdKSkge1xuICAgICAgICAgIGlmICh0eXBlID09PSBCb29sZWFuICYmIG9sZFZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgb2xkVmFsdWUgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25maWdbbmV3UHJvcF0gPSBvbGRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfSxcbiAgICBtdWx0aXBsZTogZnVuY3Rpb24gbXVsdGlwbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcubXVsdGlwbGU7XG4gICAgfSxcbiAgICBsZWFmT25seTogZnVuY3Rpb24gbGVhZk9ubHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuY29uZmlnLmNoZWNrU3RyaWN0bHk7XG4gICAgfSxcbiAgICByZWFkb25seTogZnVuY3Rpb24gcmVhZG9ubHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZmlsdGVyYWJsZSB8fCB0aGlzLm11bHRpcGxlO1xuICAgIH0sXG4gICAgY2xlYXJCdG5WaXNpYmxlOiBmdW5jdGlvbiBjbGVhckJ0blZpc2libGUoKSB7XG4gICAgICBpZiAoIXRoaXMuY2xlYXJhYmxlIHx8IHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmZpbHRlcmluZyB8fCAhdGhpcy5pbnB1dEhvdmVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyAhIXRoaXMuY2hlY2tlZE5vZGVzLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gIW5vZGUuaXNEaXNhYmxlZDtcbiAgICAgIH0pLmxlbmd0aCA6ICEhdGhpcy5wcmVzZW50VGV4dDtcbiAgICB9LFxuICAgIHBhbmVsOiBmdW5jdGlvbiBwYW5lbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnBhbmVsO1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGRpc2FibGVkOiBmdW5jdGlvbiBkaXNhYmxlZCgpIHtcbiAgICAgIHRoaXMuY29tcHV0ZVByZXNlbnRDb250ZW50KCk7XG4gICAgfSxcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKHZhbCwgdGhpcy5jaGVja2VkVmFsdWUpKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZFZhbHVlID0gdmFsO1xuICAgICAgICB0aGlzLmNvbXB1dGVQcmVzZW50Q29udGVudCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2hlY2tlZFZhbHVlOiBmdW5jdGlvbiBjaGVja2VkVmFsdWUodmFsKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLFxuICAgICAgICAgIGRyb3BEb3duVmlzaWJsZSA9IHRoaXMuZHJvcERvd25WaXNpYmxlO1xuICAgICAgdmFyIF9jb25maWcgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBjaGVja1N0cmljdGx5ID0gX2NvbmZpZy5jaGVja1N0cmljdGx5LFxuICAgICAgICAgIG11bHRpcGxlID0gX2NvbmZpZy5tdWx0aXBsZTtcblxuXG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKHZhbCwgdmFsdWUpIHx8IE9iamVjdCh0eXBlc19bXCJpc1VuZGVmaW5lZFwiXSkodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuY29tcHV0ZVByZXNlbnRDb250ZW50KCk7XG4gICAgICAgIC8vIGhpZGUgZHJvcGRvd24gd2hlbiBzaW5nbGUgbW9kZVxuICAgICAgICBpZiAoIW11bHRpcGxlICYmICFjaGVja1N0cmljdGx5ICYmIGRyb3BEb3duVmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIFt2YWxdKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb3B0aW9uczoge1xuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy5jb21wdXRlUHJlc2VudENvbnRlbnQpO1xuICAgICAgfSxcbiAgICAgIGRlZXA6IHRydWVcbiAgICB9LFxuICAgIHByZXNlbnRUZXh0OiBmdW5jdGlvbiBwcmVzZW50VGV4dCh2YWwpIHtcbiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IHZhbDtcbiAgICB9LFxuICAgIHByZXNlbnRUYWdzOiBmdW5jdGlvbiBwcmVzZW50VGFncyh2YWwsIG9sZFZhbCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgKHZhbC5sZW5ndGggfHwgb2xkVmFsLmxlbmd0aCkpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVTdHlsZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBmaWx0ZXJpbmc6IGZ1bmN0aW9uIGZpbHRlcmluZyh2YWwpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlUG9wcGVyKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGlucHV0ID0gdGhpcy4kcmVmcy5pbnB1dDtcblxuICAgIGlmIChpbnB1dCAmJiBpbnB1dC4kZWwpIHtcbiAgICAgIHRoaXMuaW5wdXRJbml0aWFsSGVpZ2h0ID0gaW5wdXQuJGVsLm9mZnNldEhlaWdodCB8fCBJbnB1dFNpemVNYXBbdGhpcy5yZWFsU2l6ZV0gfHwgNDA7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzRW1wdHlWYWx1ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy5jb21wdXRlUHJlc2VudENvbnRlbnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlckhhbmRsZXIgPSBkZWJvdW5jZV9kZWZhdWx0KCkodGhpcy5kZWJvdW5jZSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGlucHV0VmFsdWUgPSBfdGhpcy5pbnB1dFZhbHVlO1xuXG5cbiAgICAgIGlmICghaW5wdXRWYWx1ZSkge1xuICAgICAgICBfdGhpcy5maWx0ZXJpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgYmVmb3JlID0gX3RoaXMuYmVmb3JlRmlsdGVyKGlucHV0VmFsdWUpO1xuICAgICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudGhlbikge1xuICAgICAgICBiZWZvcmUudGhlbihfdGhpcy5nZXRTdWdnZXN0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKGJlZm9yZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgX3RoaXMuZ2V0U3VnZ2VzdGlvbnMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIF90aGlzLmZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0KHJlc2l6ZV9ldmVudF9bXCJhZGRSZXNpemVMaXN0ZW5lclwiXSkodGhpcy4kZWwsIHRoaXMudXBkYXRlU3R5bGUpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIE9iamVjdChyZXNpemVfZXZlbnRfW1wicmVtb3ZlUmVzaXplTGlzdGVuZXJcIl0pKHRoaXMuJGVsLCB0aGlzLnVwZGF0ZVN0eWxlKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgJ2V4cGFuZC10cmlnZ2VyJzogJ2V4cGFuZC10cmlnZ2VyIGlzIHJlbW92ZWQsIHVzZSBgcHJvcHMuZXhwYW5kVHJpZ2dlcmAgaW5zdGVhZC4nLFxuICAgICAgICAgICdjaGFuZ2Utb24tc2VsZWN0JzogJ2NoYW5nZS1vbi1zZWxlY3QgaXMgcmVtb3ZlZCwgdXNlIGBwcm9wcy5jaGVja1N0cmljdGx5YCBpbnN0ZWFkLicsXG4gICAgICAgICAgJ2hvdmVyLXRocmVzaG9sZCc6ICdob3Zlci10aHJlc2hvbGQgaXMgcmVtb3ZlZCwgdXNlIGBwcm9wcy5ob3ZlclRocmVzaG9sZGAgaW5zdGVhZCdcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgJ2FjdGl2ZS1pdGVtLWNoYW5nZSc6ICdhY3RpdmUtaXRlbS1jaGFuZ2UgaXMgcmVuYW1lZCB0byBleHBhbmQtY2hhbmdlJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgdG9nZ2xlRHJvcERvd25WaXNpYmxlOiBmdW5jdGlvbiB0b2dnbGVEcm9wRG93blZpc2libGUodmlzaWJsZSkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHJldHVybjtcblxuICAgICAgdmFyIGRyb3BEb3duVmlzaWJsZSA9IHRoaXMuZHJvcERvd25WaXNpYmxlO1xuICAgICAgdmFyIGlucHV0ID0gdGhpcy4kcmVmcy5pbnB1dDtcblxuICAgICAgdmlzaWJsZSA9IE9iamVjdChzaGFyZWRfW1wiaXNEZWZcIl0pKHZpc2libGUpID8gdmlzaWJsZSA6ICFkcm9wRG93blZpc2libGU7XG4gICAgICBpZiAodmlzaWJsZSAhPT0gZHJvcERvd25WaXNpYmxlKSB7XG4gICAgICAgIHRoaXMuZHJvcERvd25WaXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpczIudXBkYXRlUG9wcGVyKCk7XG4gICAgICAgICAgICBfdGhpczIucGFuZWwuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dC4kcmVmcy5pbnB1dC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB2aXNpYmxlKTtcbiAgICAgICAgdGhpcy4kZW1pdCgndmlzaWJsZS1jaGFuZ2UnLCB2aXNpYmxlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZURyb3Bkb3duTGVhdmU6IGZ1bmN0aW9uIGhhbmRsZURyb3Bkb3duTGVhdmUoKSB7XG4gICAgICB0aGlzLmZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5wcmVzZW50VGV4dDtcbiAgICAgIHRoaXMuZG9EZXN0cm95KCk7XG4gICAgfSxcbiAgICBoYW5kbGVLZXlEb3duOiBmdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50KSB7XG4gICAgICBzd2l0Y2ggKGV2ZW50LmtleUNvZGUpIHtcbiAgICAgICAgY2FzZSBLZXlDb2RlLmVudGVyOlxuICAgICAgICAgIHRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5kb3duOlxuICAgICAgICAgIHRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKHRydWUpO1xuICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdE5vZGUoKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEtleUNvZGUuZXNjOlxuICAgICAgICBjYXNlIEtleUNvZGUudGFiOlxuICAgICAgICAgIHRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKGZhbHNlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhlKSB7XG4gICAgICB0aGlzLiRlbWl0KCdmb2N1cycsIGUpO1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihlKSB7XG4gICAgICB0aGlzLiRlbWl0KCdibHVyJywgZSk7XG4gICAgfSxcbiAgICBoYW5kbGVJbnB1dDogZnVuY3Rpb24gaGFuZGxlSW5wdXQodmFsLCBldmVudCkge1xuICAgICAgIXRoaXMuZHJvcERvd25WaXNpYmxlICYmIHRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKHRydWUpO1xuXG4gICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuaXNDb21wb3NpbmcpIHJldHVybjtcbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJIYW5kbGVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xlYXI6IGZ1bmN0aW9uIGhhbmRsZUNsZWFyKCkge1xuICAgICAgdGhpcy5wcmVzZW50VGV4dCA9ICcnO1xuICAgICAgdGhpcy5wYW5lbC5jbGVhckNoZWNrZWROb2RlcygpO1xuICAgIH0sXG4gICAgaGFuZGxlRXhwYW5kQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVFeHBhbmRDaGFuZ2UodmFsdWUpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlUG9wcGVyLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy4kZW1pdCgnZXhwYW5kLWNoYW5nZScsIHZhbHVlKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2FjdGl2ZS1pdGVtLWNoYW5nZScsIHZhbHVlKTsgLy8gRGVwcmVjYXRlZFxuICAgIH0sXG4gICAgZm9jdXNGaXJzdE5vZGU6IGZ1bmN0aW9uIGZvY3VzRmlyc3ROb2RlKCkge1xuICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGZpbHRlcmluZyA9IF90aGlzMy5maWx0ZXJpbmc7XG4gICAgICAgIHZhciBfJHJlZnMgPSBfdGhpczMuJHJlZnMsXG4gICAgICAgICAgICBwb3BwZXIgPSBfJHJlZnMucG9wcGVyLFxuICAgICAgICAgICAgc3VnZ2VzdGlvblBhbmVsID0gXyRyZWZzLnN1Z2dlc3Rpb25QYW5lbDtcblxuICAgICAgICB2YXIgZmlyc3ROb2RlID0gbnVsbDtcblxuICAgICAgICBpZiAoZmlsdGVyaW5nICYmIHN1Z2dlc3Rpb25QYW5lbCkge1xuICAgICAgICAgIGZpcnN0Tm9kZSA9IHN1Z2dlc3Rpb25QYW5lbC4kZWwucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWl0ZW0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgZmlyc3RNZW51ID0gcG9wcGVyLnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1tZW51Jyk7XG4gICAgICAgICAgZmlyc3ROb2RlID0gZmlyc3RNZW51LnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlW3RhYmluZGV4PVwiLTFcIl0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaXJzdE5vZGUpIHtcbiAgICAgICAgICBmaXJzdE5vZGUuZm9jdXMoKTtcbiAgICAgICAgICAhZmlsdGVyaW5nICYmIGZpcnN0Tm9kZS5jbGljaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNvbXB1dGVQcmVzZW50Q29udGVudDogZnVuY3Rpb24gY29tcHV0ZVByZXNlbnRDb250ZW50KCkge1xuICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgIC8vIG5leHRUaWNrIGlzIHJlcXVpcmVkLCBiZWNhdXNlIGNoZWNrZWQgbm9kZXMgbWF5IG5vdCBjaGFuZ2UgcmlnaHQgbm93XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczQuY29uZmlnLm11bHRpcGxlKSB7XG4gICAgICAgICAgX3RoaXM0LmNvbXB1dGVQcmVzZW50VGFncygpO1xuICAgICAgICAgIF90aGlzNC5wcmVzZW50VGV4dCA9IF90aGlzNC5wcmVzZW50VGFncy5sZW5ndGggPyAnICcgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzNC5jb21wdXRlUHJlc2VudFRleHQoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBpc0VtcHR5VmFsdWU6IGZ1bmN0aW9uIGlzRW1wdHlWYWx1ZSh2YWwpIHtcbiAgICAgIHZhciBtdWx0aXBsZSA9IHRoaXMubXVsdGlwbGU7XG4gICAgICB2YXIgZW1pdFBhdGggPSB0aGlzLnBhbmVsLmNvbmZpZy5lbWl0UGF0aDtcblxuICAgICAgaWYgKG11bHRpcGxlIHx8IGVtaXRQYXRoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJpc0VtcHR5XCJdKSh2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgY29tcHV0ZVByZXNlbnRUZXh0OiBmdW5jdGlvbiBjb21wdXRlUHJlc2VudFRleHQoKSB7XG4gICAgICB2YXIgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWc7XG5cbiAgICAgIGlmICghdGhpcy5pc0VtcHR5VmFsdWUoY2hlY2tlZFZhbHVlKSkge1xuICAgICAgICB2YXIgbm9kZSA9IHRoaXMucGFuZWwuZ2V0Tm9kZUJ5VmFsdWUoY2hlY2tlZFZhbHVlKTtcbiAgICAgICAgaWYgKG5vZGUgJiYgKGNvbmZpZy5jaGVja1N0cmljdGx5IHx8IG5vZGUuaXNMZWFmKSkge1xuICAgICAgICAgIHRoaXMucHJlc2VudFRleHQgPSBub2RlLmdldFRleHQodGhpcy5zaG93QWxsTGV2ZWxzLCB0aGlzLnNlcGFyYXRvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnByZXNlbnRUZXh0ID0gbnVsbDtcbiAgICB9LFxuICAgIGNvbXB1dGVQcmVzZW50VGFnczogZnVuY3Rpb24gY29tcHV0ZVByZXNlbnRUYWdzKCkge1xuICAgICAgdmFyIGlzRGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgbGVhZk9ubHkgPSB0aGlzLmxlYWZPbmx5LFxuICAgICAgICAgIHNob3dBbGxMZXZlbHMgPSB0aGlzLnNob3dBbGxMZXZlbHMsXG4gICAgICAgICAgc2VwYXJhdG9yID0gdGhpcy5zZXBhcmF0b3IsXG4gICAgICAgICAgY29sbGFwc2VUYWdzID0gdGhpcy5jb2xsYXBzZVRhZ3M7XG5cbiAgICAgIHZhciBjaGVja2VkTm9kZXMgPSB0aGlzLmdldENoZWNrZWROb2RlcyhsZWFmT25seSk7XG4gICAgICB2YXIgdGFncyA9IFtdO1xuXG4gICAgICB2YXIgZ2VuVGFnID0gZnVuY3Rpb24gZ2VuVGFnKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIGtleTogbm9kZS51aWQsXG4gICAgICAgICAgdGV4dDogbm9kZS5nZXRUZXh0KHNob3dBbGxMZXZlbHMsIHNlcGFyYXRvciksXG4gICAgICAgICAgaGl0U3RhdGU6IGZhbHNlLFxuICAgICAgICAgIGNsb3NhYmxlOiAhaXNEaXNhYmxlZCAmJiAhbm9kZS5pc0Rpc2FibGVkXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBpZiAoY2hlY2tlZE5vZGVzLmxlbmd0aCkge1xuICAgICAgICB2YXIgZmlyc3QgPSBjaGVja2VkTm9kZXNbMF0sXG4gICAgICAgICAgICByZXN0ID0gY2hlY2tlZE5vZGVzLnNsaWNlKDEpO1xuXG4gICAgICAgIHZhciByZXN0Q291bnQgPSByZXN0Lmxlbmd0aDtcbiAgICAgICAgdGFncy5wdXNoKGdlblRhZyhmaXJzdCkpO1xuXG4gICAgICAgIGlmIChyZXN0Q291bnQpIHtcbiAgICAgICAgICBpZiAoY29sbGFwc2VUYWdzKSB7XG4gICAgICAgICAgICB0YWdzLnB1c2goe1xuICAgICAgICAgICAgICBrZXk6IC0xLFxuICAgICAgICAgICAgICB0ZXh0OiAnKyAnICsgcmVzdENvdW50LFxuICAgICAgICAgICAgICBjbG9zYWJsZTogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN0LmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRhZ3MucHVzaChnZW5UYWcobm9kZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hlY2tlZE5vZGVzID0gY2hlY2tlZE5vZGVzO1xuICAgICAgdGhpcy5wcmVzZW50VGFncyA9IHRhZ3M7XG4gICAgfSxcbiAgICBnZXRTdWdnZXN0aW9uczogZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbnMoKSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIGZpbHRlck1ldGhvZCA9IHRoaXMuZmlsdGVyTWV0aG9kO1xuXG5cbiAgICAgIGlmICghT2JqZWN0KHR5cGVzX1tcImlzRnVuY3Rpb25cIl0pKGZpbHRlck1ldGhvZCkpIHtcbiAgICAgICAgZmlsdGVyTWV0aG9kID0gZnVuY3Rpb24gZmlsdGVyTWV0aG9kKG5vZGUsIGtleXdvcmQpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZS50ZXh0LmluY2x1ZGVzKGtleXdvcmQpO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgc3VnZ2VzdGlvbnMgPSB0aGlzLnBhbmVsLmdldEZsYXR0ZWROb2Rlcyh0aGlzLmxlYWZPbmx5KS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUuaXNEaXNhYmxlZCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBub2RlLnRleHQgPSBub2RlLmdldFRleHQoX3RoaXM1LnNob3dBbGxMZXZlbHMsIF90aGlzNS5zZXBhcmF0b3IpIHx8ICcnO1xuICAgICAgICByZXR1cm4gZmlsdGVyTWV0aG9kKG5vZGUsIF90aGlzNS5pbnB1dFZhbHVlKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnByZXNlbnRUYWdzLmZvckVhY2goZnVuY3Rpb24gKHRhZykge1xuICAgICAgICAgIHRhZy5oaXRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Z2dlc3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBub2RlLmNoZWNrZWQgPSBPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKShfdGhpczUuY2hlY2tlZFZhbHVlLCBub2RlLmdldFZhbHVlQnlPcHRpb24oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbHRlcmluZyA9IHRydWU7XG4gICAgICB0aGlzLnN1Z2dlc3Rpb25zID0gc3VnZ2VzdGlvbnM7XG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZVBvcHBlcik7XG4gICAgfSxcbiAgICBoYW5kbGVTdWdnZXN0aW9uS2V5RG93bjogZnVuY3Rpb24gaGFuZGxlU3VnZ2VzdGlvbktleURvd24oZXZlbnQpIHtcbiAgICAgIHZhciBrZXlDb2RlID0gZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgICBjYXNlIEtleUNvZGUuZW50ZXI6XG4gICAgICAgICAgdGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS51cDpcbiAgICAgICAgICB2YXIgcHJldiA9IHRhcmdldC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgICAgIHByZXYgJiYgcHJldi5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIEtleUNvZGUuZG93bjpcbiAgICAgICAgICB2YXIgbmV4dCA9IHRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgbmV4dCAmJiBuZXh0LmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgS2V5Q29kZS5lc2M6XG4gICAgICAgIGNhc2UgS2V5Q29kZS50YWI6XG4gICAgICAgICAgdGhpcy50b2dnbGVEcm9wRG93blZpc2libGUoZmFsc2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlRGVsZXRlOiBmdW5jdGlvbiBoYW5kbGVEZWxldGUoKSB7XG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IHRoaXMuaW5wdXRWYWx1ZSxcbiAgICAgICAgICBwcmVzc0RlbGV0ZUNvdW50ID0gdGhpcy5wcmVzc0RlbGV0ZUNvdW50LFxuICAgICAgICAgIHByZXNlbnRUYWdzID0gdGhpcy5wcmVzZW50VGFncztcblxuICAgICAgdmFyIGxhc3RJbmRleCA9IHByZXNlbnRUYWdzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdFRhZyA9IHByZXNlbnRUYWdzW2xhc3RJbmRleF07XG4gICAgICB0aGlzLnByZXNzRGVsZXRlQ291bnQgPSBpbnB1dFZhbHVlID8gMCA6IHByZXNzRGVsZXRlQ291bnQgKyAxO1xuXG4gICAgICBpZiAoIWxhc3RUYWcpIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMucHJlc3NEZWxldGVDb3VudCkge1xuICAgICAgICBpZiAobGFzdFRhZy5oaXRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuZGVsZXRlVGFnKGxhc3RUYWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RUYWcuaGl0U3RhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZVN1Z2dlc3Rpb25DbGljayhpbmRleCkge1xuICAgICAgdmFyIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcblxuICAgICAgdmFyIHRhcmdldE5vZGUgPSB0aGlzLnN1Z2dlc3Rpb25zW2luZGV4XTtcblxuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHZhciBjaGVja2VkID0gdGFyZ2V0Tm9kZS5jaGVja2VkO1xuXG4gICAgICAgIHRhcmdldE5vZGUuZG9DaGVjayghY2hlY2tlZCk7XG4gICAgICAgIHRoaXMucGFuZWwuY2FsY3VsYXRlTXVsdGlDaGVja2VkVmFsdWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZFZhbHVlID0gdGFyZ2V0Tm9kZS5nZXRWYWx1ZUJ5T3B0aW9uKCk7XG4gICAgICAgIHRoaXMudG9nZ2xlRHJvcERvd25WaXNpYmxlKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRlbGV0ZVRhZzogZnVuY3Rpb24gZGVsZXRlVGFnKHRhZykge1xuICAgICAgdmFyIGNoZWNrZWRWYWx1ZSA9IHRoaXMuY2hlY2tlZFZhbHVlO1xuXG4gICAgICB2YXIgY3VycmVudCA9IHRhZy5ub2RlLmdldFZhbHVlQnlPcHRpb24oKTtcbiAgICAgIHZhciB2YWwgPSBjaGVja2VkVmFsdWUuZmluZChmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkobiwgY3VycmVudCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hlY2tlZFZhbHVlID0gY2hlY2tlZFZhbHVlLmZpbHRlcihmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gIU9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKG4sIGN1cnJlbnQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLiRlbWl0KCdyZW1vdmUtdGFnJywgdmFsKTtcbiAgICB9LFxuICAgIHVwZGF0ZVN0eWxlOiBmdW5jdGlvbiB1cGRhdGVTdHlsZSgpIHtcbiAgICAgIHZhciAkZWwgPSB0aGlzLiRlbCxcbiAgICAgICAgICBpbnB1dEluaXRpYWxIZWlnaHQgPSB0aGlzLmlucHV0SW5pdGlhbEhlaWdodDtcblxuICAgICAgaWYgKHRoaXMuJGlzU2VydmVyIHx8ICEkZWwpIHJldHVybjtcblxuICAgICAgdmFyIHN1Z2dlc3Rpb25QYW5lbCA9IHRoaXMuJHJlZnMuc3VnZ2VzdGlvblBhbmVsO1xuXG4gICAgICB2YXIgaW5wdXRJbm5lciA9ICRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtaW5wdXRfX2lubmVyJyk7XG5cbiAgICAgIGlmICghaW5wdXRJbm5lcikgcmV0dXJuO1xuXG4gICAgICB2YXIgdGFncyA9ICRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXJfX3RhZ3MnKTtcbiAgICAgIHZhciBzdWdnZXN0aW9uUGFuZWxFbCA9IG51bGw7XG5cbiAgICAgIGlmIChzdWdnZXN0aW9uUGFuZWwgJiYgKHN1Z2dlc3Rpb25QYW5lbEVsID0gc3VnZ2VzdGlvblBhbmVsLiRlbCkpIHtcbiAgICAgICAgdmFyIHN1Z2dlc3Rpb25MaXN0ID0gc3VnZ2VzdGlvblBhbmVsRWwucXVlcnlTZWxlY3RvcignLmVsLWNhc2NhZGVyX19zdWdnZXN0aW9uLWxpc3QnKTtcbiAgICAgICAgc3VnZ2VzdGlvbkxpc3Quc3R5bGUubWluV2lkdGggPSBpbnB1dElubmVyLm9mZnNldFdpZHRoICsgJ3B4JztcbiAgICAgIH1cblxuICAgICAgaWYgKHRhZ3MpIHtcbiAgICAgICAgdmFyIG9mZnNldEhlaWdodCA9IE1hdGgucm91bmQodGFncy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgob2Zmc2V0SGVpZ2h0ICsgNiwgaW5wdXRJbml0aWFsSGVpZ2h0KSArICdweCc7XG4gICAgICAgIGlucHV0SW5uZXIuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBpZiAodGhpcy5kcm9wRG93blZpc2libGUpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVBvcHBlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogcHVibGljIG1ldGhvZHNcbiAgICAqL1xuICAgIGdldENoZWNrZWROb2RlczogZnVuY3Rpb24gZ2V0Q2hlY2tlZE5vZGVzKGxlYWZPbmx5KSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbC5nZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyL3NyYy9jYXNjYWRlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Nhc2NhZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhc2NhZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyL3NyYy9jYXNjYWRlci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjYXNjYWRlcl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jYXNjYWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY2FzY2FkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzI1MzdhNl9yZW5kZXIsXG4gIGNhc2NhZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDMyNTM3YTZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjYXNjYWRlcl9hcGk7IH1cbmNhc2NhZGVyX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2FzY2FkZXIvc3JjL2Nhc2NhZGVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlciA9IChjYXNjYWRlcl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNhc2NhZGVyLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoY2FzY2FkZXIubmFtZSwgY2FzY2FkZXIpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY2FzY2FkZXIgPSAoY2FzY2FkZXIpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTU1YzhhZGU3JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81NWM4YWRlN19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcImNsaWNrb3V0c2lkZVwiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1jbGlja291dHNpZGVcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLmhpZGUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJoaWRlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIFwiZWwtY29sb3ItcGlja2VyXCIsXG4gICAgICAgIF92bS5jb2xvckRpc2FibGVkID8gXCJpcy1kaXNhYmxlZFwiIDogXCJcIixcbiAgICAgICAgX3ZtLmNvbG9yU2l6ZSA/IFwiZWwtY29sb3ItcGlja2VyLS1cIiArIF92bS5jb2xvclNpemUgOiBcIlwiXG4gICAgICBdXG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uY29sb3JEaXNhYmxlZFxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItcGlja2VyX19tYXNrXCIgfSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItcGlja2VyX190cmlnZ2VyXCIsXG4gICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVUcmlnZ2VyIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXBpY2tlcl9fY29sb3JcIixcbiAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1hbHBoYVwiOiBfdm0uc2hvd0FscGhhIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItcGlja2VyX19jb2xvci1pbm5lclwiLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IF92bS5kaXNwbGF5ZWRDb2xvclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICFfdm0udmFsdWUgJiYgIV92bS5zaG93UGFuZWxDb2xvclxuICAgICAgICAgICAgICAgID8gX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItcGlja2VyX19lbXB0eSBlbC1pY29uLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS52YWx1ZSB8fCBfdm0uc2hvd1BhbmVsQ29sb3IsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2YWx1ZSB8fCBzaG93UGFuZWxDb2xvclwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1waWNrZXJfX2ljb24gZWwtaWNvbi1hcnJvdy1kb3duXCJcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICApLFxuICAgICAgX2MoXCJwaWNrZXItZHJvcGRvd25cIiwge1xuICAgICAgICByZWY6IFwiZHJvcGRvd25cIixcbiAgICAgICAgY2xhc3M6IFtcImVsLWNvbG9yLXBpY2tlcl9fcGFuZWxcIiwgX3ZtLnBvcHBlckNsYXNzIHx8IFwiXCJdLFxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGNvbG9yOiBfdm0uY29sb3IsXG4gICAgICAgICAgXCJzaG93LWFscGhhXCI6IF92bS5zaG93QWxwaGEsXG4gICAgICAgICAgcHJlZGVmaW5lOiBfdm0ucHJlZGVmaW5lXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7IHBpY2s6IF92bS5jb25maXJtVmFsdWUsIGNsZWFyOiBfdm0uY2xlYXJWYWx1ZSB9LFxuICAgICAgICBtb2RlbDoge1xuICAgICAgICAgIHZhbHVlOiBfdm0uc2hvd1BpY2tlcixcbiAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICBfdm0uc2hvd1BpY2tlciA9ICQkdlxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJzaG93UGlja2VyXCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81NWM4YWRlN19zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzU1YzhhZGU3X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01NWM4YWRlNyZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbG9yLmpzXG52YXIgY29sb3JfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gY29sb3JfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgaHN2MmhzbCA9IGZ1bmN0aW9uIGhzdjJoc2woaHVlLCBzYXQsIHZhbCkge1xuICByZXR1cm4gW2h1ZSwgc2F0ICogdmFsIC8gKChodWUgPSAoMiAtIHNhdCkgKiB2YWwpIDwgMSA/IGh1ZSA6IDIgLSBodWUpIHx8IDAsIGh1ZSAvIDJdO1xufTtcblxuLy8gTmVlZCB0byBoYW5kbGUgMS4wIGFzIDEwMCUsIHNpbmNlIG9uY2UgaXQgaXMgYSBudW1iZXIsIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBpdCBhbmQgMVxuLy8gPGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzQyMjA3Mi9qYXZhc2NyaXB0LWhvdy10by1kZXRlY3QtbnVtYmVyLWFzLWEtZGVjaW1hbC1pbmNsdWRpbmctMS0wPlxudmFyIGlzT25lUG9pbnRaZXJvID0gZnVuY3Rpb24gaXNPbmVQb2ludFplcm8obikge1xuICByZXR1cm4gdHlwZW9mIG4gPT09ICdzdHJpbmcnICYmIG4uaW5kZXhPZignLicpICE9PSAtMSAmJiBwYXJzZUZsb2F0KG4pID09PSAxO1xufTtcblxudmFyIGlzUGVyY2VudGFnZSA9IGZ1bmN0aW9uIGlzUGVyY2VudGFnZShuKSB7XG4gIHJldHVybiB0eXBlb2YgbiA9PT0gJ3N0cmluZycgJiYgbi5pbmRleE9mKCclJykgIT09IC0xO1xufTtcblxuLy8gVGFrZSBpbnB1dCBmcm9tIFswLCBuXSBhbmQgcmV0dXJuIGl0IGFzIFswLCAxXVxudmFyIGJvdW5kMDEgPSBmdW5jdGlvbiBib3VuZDAxKHZhbHVlLCBtYXgpIHtcbiAgaWYgKGlzT25lUG9pbnRaZXJvKHZhbHVlKSkgdmFsdWUgPSAnMTAwJSc7XG5cbiAgdmFyIHByb2Nlc3NQZXJjZW50ID0gaXNQZXJjZW50YWdlKHZhbHVlKTtcbiAgdmFsdWUgPSBNYXRoLm1pbihtYXgsIE1hdGgubWF4KDAsIHBhcnNlRmxvYXQodmFsdWUpKSk7XG5cbiAgLy8gQXV0b21hdGljYWxseSBjb252ZXJ0IHBlcmNlbnRhZ2UgaW50byBudW1iZXJcbiAgaWYgKHByb2Nlc3NQZXJjZW50KSB7XG4gICAgdmFsdWUgPSBwYXJzZUludCh2YWx1ZSAqIG1heCwgMTApIC8gMTAwO1xuICB9XG5cbiAgLy8gSGFuZGxlIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9yc1xuICBpZiAoTWF0aC5hYnModmFsdWUgLSBtYXgpIDwgMC4wMDAwMDEpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgaW50byBbMCwgMV0gcmFuZ2UgaWYgaXQgaXNuJ3QgYWxyZWFkeVxuICByZXR1cm4gdmFsdWUgJSBtYXggLyBwYXJzZUZsb2F0KG1heCk7XG59O1xuXG52YXIgSU5UX0hFWF9NQVAgPSB7IDEwOiAnQScsIDExOiAnQicsIDEyOiAnQycsIDEzOiAnRCcsIDE0OiAnRScsIDE1OiAnRicgfTtcblxudmFyIHRvSGV4ID0gZnVuY3Rpb24gdG9IZXgoX3JlZikge1xuICB2YXIgciA9IF9yZWYucixcbiAgICAgIGcgPSBfcmVmLmcsXG4gICAgICBiID0gX3JlZi5iO1xuXG4gIHZhciBoZXhPbmUgPSBmdW5jdGlvbiBoZXhPbmUodmFsdWUpIHtcbiAgICB2YWx1ZSA9IE1hdGgubWluKE1hdGgucm91bmQodmFsdWUpLCAyNTUpO1xuICAgIHZhciBoaWdoID0gTWF0aC5mbG9vcih2YWx1ZSAvIDE2KTtcbiAgICB2YXIgbG93ID0gdmFsdWUgJSAxNjtcbiAgICByZXR1cm4gJycgKyAoSU5UX0hFWF9NQVBbaGlnaF0gfHwgaGlnaCkgKyAoSU5UX0hFWF9NQVBbbG93XSB8fCBsb3cpO1xuICB9O1xuXG4gIGlmIChpc05hTihyKSB8fCBpc05hTihnKSB8fCBpc05hTihiKSkgcmV0dXJuICcnO1xuXG4gIHJldHVybiAnIycgKyBoZXhPbmUocikgKyBoZXhPbmUoZykgKyBoZXhPbmUoYik7XG59O1xuXG52YXIgSEVYX0lOVF9NQVAgPSB7IEE6IDEwLCBCOiAxMSwgQzogMTIsIEQ6IDEzLCBFOiAxNCwgRjogMTUgfTtcblxudmFyIHBhcnNlSGV4Q2hhbm5lbCA9IGZ1bmN0aW9uIHBhcnNlSGV4Q2hhbm5lbChoZXgpIHtcbiAgaWYgKGhleC5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gKEhFWF9JTlRfTUFQW2hleFswXS50b1VwcGVyQ2FzZSgpXSB8fCAraGV4WzBdKSAqIDE2ICsgKEhFWF9JTlRfTUFQW2hleFsxXS50b1VwcGVyQ2FzZSgpXSB8fCAraGV4WzFdKTtcbiAgfVxuXG4gIHJldHVybiBIRVhfSU5UX01BUFtoZXhbMV0udG9VcHBlckNhc2UoKV0gfHwgK2hleFsxXTtcbn07XG5cbnZhciBoc2wyaHN2ID0gZnVuY3Rpb24gaHNsMmhzdihodWUsIHNhdCwgbGlnaHQpIHtcbiAgc2F0ID0gc2F0IC8gMTAwO1xuICBsaWdodCA9IGxpZ2h0IC8gMTAwO1xuICB2YXIgc21pbiA9IHNhdDtcbiAgdmFyIGxtaW4gPSBNYXRoLm1heChsaWdodCwgMC4wMSk7XG4gIHZhciBzdiA9IHZvaWQgMDtcbiAgdmFyIHYgPSB2b2lkIDA7XG5cbiAgbGlnaHQgKj0gMjtcbiAgc2F0ICo9IGxpZ2h0IDw9IDEgPyBsaWdodCA6IDIgLSBsaWdodDtcbiAgc21pbiAqPSBsbWluIDw9IDEgPyBsbWluIDogMiAtIGxtaW47XG4gIHYgPSAobGlnaHQgKyBzYXQpIC8gMjtcbiAgc3YgPSBsaWdodCA9PT0gMCA/IDIgKiBzbWluIC8gKGxtaW4gKyBzbWluKSA6IDIgKiBzYXQgLyAobGlnaHQgKyBzYXQpO1xuXG4gIHJldHVybiB7XG4gICAgaDogaHVlLFxuICAgIHM6IHN2ICogMTAwLFxuICAgIHY6IHYgKiAxMDBcbiAgfTtcbn07XG5cbi8vIGByZ2JUb0hzdmBcbi8vIENvbnZlcnRzIGFuIFJHQiBjb2xvciB2YWx1ZSB0byBIU1Zcbi8vICpBc3N1bWVzOiogciwgZywgYW5kIGIgYXJlIGNvbnRhaW5lZCBpbiB0aGUgc2V0IFswLCAyNTVdIG9yIFswLCAxXVxuLy8gKlJldHVybnM6KiB7IGgsIHMsIHYgfSBpbiBbMCwxXVxudmFyIHJnYjJoc3YgPSBmdW5jdGlvbiByZ2IyaHN2KHIsIGcsIGIpIHtcbiAgciA9IGJvdW5kMDEociwgMjU1KTtcbiAgZyA9IGJvdW5kMDEoZywgMjU1KTtcbiAgYiA9IGJvdW5kMDEoYiwgMjU1KTtcblxuICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gIHZhciBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgdmFyIGggPSB2b2lkIDAsXG4gICAgICBzID0gdm9pZCAwO1xuICB2YXIgdiA9IG1heDtcblxuICB2YXIgZCA9IG1heCAtIG1pbjtcbiAgcyA9IG1heCA9PT0gMCA/IDAgOiBkIC8gbWF4O1xuXG4gIGlmIChtYXggPT09IG1pbikge1xuICAgIGggPSAwOyAvLyBhY2hyb21hdGljXG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoIChtYXgpIHtcbiAgICAgIGNhc2UgcjpcbiAgICAgICAgaCA9IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgZzpcbiAgICAgICAgaCA9IChiIC0gcikgLyBkICsgMjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGI6XG4gICAgICAgIGggPSAociAtIGcpIC8gZCArIDQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBoIC89IDY7XG4gIH1cblxuICByZXR1cm4geyBoOiBoICogMzYwLCBzOiBzICogMTAwLCB2OiB2ICogMTAwIH07XG59O1xuXG4vLyBgaHN2VG9SZ2JgXG4vLyBDb252ZXJ0cyBhbiBIU1YgY29sb3IgdmFsdWUgdG8gUkdCLlxuLy8gKkFzc3VtZXM6KiBoIGlzIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDM2MF0gYW5kIHMgYW5kIHYgYXJlIGNvbnRhaW5lZCBpbiBbMCwgMV0gb3IgWzAsIDEwMF1cbi8vICpSZXR1cm5zOiogeyByLCBnLCBiIH0gaW4gdGhlIHNldCBbMCwgMjU1XVxudmFyIGhzdjJyZ2IgPSBmdW5jdGlvbiBoc3YycmdiKGgsIHMsIHYpIHtcbiAgaCA9IGJvdW5kMDEoaCwgMzYwKSAqIDY7XG4gIHMgPSBib3VuZDAxKHMsIDEwMCk7XG4gIHYgPSBib3VuZDAxKHYsIDEwMCk7XG5cbiAgdmFyIGkgPSBNYXRoLmZsb29yKGgpO1xuICB2YXIgZiA9IGggLSBpO1xuICB2YXIgcCA9IHYgKiAoMSAtIHMpO1xuICB2YXIgcSA9IHYgKiAoMSAtIGYgKiBzKTtcbiAgdmFyIHQgPSB2ICogKDEgLSAoMSAtIGYpICogcyk7XG4gIHZhciBtb2QgPSBpICUgNjtcbiAgdmFyIHIgPSBbdiwgcSwgcCwgcCwgdCwgdl1bbW9kXTtcbiAgdmFyIGcgPSBbdCwgdiwgdiwgcSwgcCwgcF1bbW9kXTtcbiAgdmFyIGIgPSBbcCwgcCwgdCwgdiwgdiwgcV1bbW9kXTtcblxuICByZXR1cm4ge1xuICAgIHI6IE1hdGgucm91bmQociAqIDI1NSksXG4gICAgZzogTWF0aC5yb3VuZChnICogMjU1KSxcbiAgICBiOiBNYXRoLnJvdW5kKGIgKiAyNTUpXG4gIH07XG59O1xuXG52YXIgQ29sb3IgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbG9yKG9wdGlvbnMpIHtcbiAgICBjb2xvcl9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb2xvcik7XG5cbiAgICB0aGlzLl9odWUgPSAwO1xuICAgIHRoaXMuX3NhdHVyYXRpb24gPSAxMDA7XG4gICAgdGhpcy5fdmFsdWUgPSAxMDA7XG4gICAgdGhpcy5fYWxwaGEgPSAxMDA7XG5cbiAgICB0aGlzLmVuYWJsZUFscGhhID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtYXQgPSAnaGV4JztcbiAgICB0aGlzLnZhbHVlID0gJyc7XG5cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAgIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHRpb24pKSB7XG4gICAgICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmRvT25DaGFuZ2UoKTtcbiAgfVxuXG4gIENvbG9yLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiBzZXQocHJvcCwgdmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAodHlwZW9mIHByb3AgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBjb2xvcl90eXBlb2YocHJvcCkpID09PSAnb2JqZWN0Jykge1xuICAgICAgZm9yICh2YXIgcCBpbiBwcm9wKSB7XG4gICAgICAgIGlmIChwcm9wLmhhc093blByb3BlcnR5KHApKSB7XG4gICAgICAgICAgdGhpcy5zZXQocCwgcHJvcFtwXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXNbJ18nICsgcHJvcF0gPSB2YWx1ZTtcbiAgICB0aGlzLmRvT25DaGFuZ2UoKTtcbiAgfTtcblxuICBDb2xvci5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0KHByb3ApIHtcbiAgICByZXR1cm4gdGhpc1snXycgKyBwcm9wXTtcbiAgfTtcblxuICBDb2xvci5wcm90b3R5cGUudG9SZ2IgPSBmdW5jdGlvbiB0b1JnYigpIHtcbiAgICByZXR1cm4gaHN2MnJnYih0aGlzLl9odWUsIHRoaXMuX3NhdHVyYXRpb24sIHRoaXMuX3ZhbHVlKTtcbiAgfTtcblxuICBDb2xvci5wcm90b3R5cGUuZnJvbVN0cmluZyA9IGZ1bmN0aW9uIGZyb21TdHJpbmcodmFsdWUpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5faHVlID0gMDtcbiAgICAgIHRoaXMuX3NhdHVyYXRpb24gPSAxMDA7XG4gICAgICB0aGlzLl92YWx1ZSA9IDEwMDtcblxuICAgICAgdGhpcy5kb09uQ2hhbmdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGZyb21IU1YgPSBmdW5jdGlvbiBmcm9tSFNWKGgsIHMsIHYpIHtcbiAgICAgIF90aGlzLl9odWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigzNjAsIGgpKTtcbiAgICAgIF90aGlzLl9zYXR1cmF0aW9uID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMTAwLCBzKSk7XG4gICAgICBfdGhpcy5fdmFsdWUgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMDAsIHYpKTtcblxuICAgICAgX3RoaXMuZG9PbkNoYW5nZSgpO1xuICAgIH07XG5cbiAgICBpZiAodmFsdWUuaW5kZXhPZignaHNsJykgIT09IC0xKSB7XG4gICAgICB2YXIgcGFydHMgPSB2YWx1ZS5yZXBsYWNlKC9oc2xhfGhzbHxcXCh8XFwpL2dtLCAnJykuc3BsaXQoL1xcc3wsL2cpLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgIT09ICcnO1xuICAgICAgfSkubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpbmRleCA+IDIgPyBwYXJzZUZsb2F0KHZhbCkgOiBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIHRoaXMuX2FscGhhID0gTWF0aC5mbG9vcihwYXJzZUZsb2F0KHBhcnRzWzNdKSAqIDEwMCk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICB0aGlzLl9hbHBoYSA9IDEwMDtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJ0cy5sZW5ndGggPj0gMykge1xuICAgICAgICB2YXIgX2hzbDJoc3YgPSBoc2wyaHN2KHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0pLFxuICAgICAgICAgICAgaCA9IF9oc2wyaHN2LmgsXG4gICAgICAgICAgICBzID0gX2hzbDJoc3YucyxcbiAgICAgICAgICAgIHYgPSBfaHNsMmhzdi52O1xuXG4gICAgICAgIGZyb21IU1YoaCwgcywgdik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKCdoc3YnKSAhPT0gLTEpIHtcbiAgICAgIHZhciBfcGFydHMgPSB2YWx1ZS5yZXBsYWNlKC9oc3ZhfGhzdnxcXCh8XFwpL2dtLCAnJykuc3BsaXQoL1xcc3wsL2cpLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgIT09ICcnO1xuICAgICAgfSkubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpbmRleCA+IDIgPyBwYXJzZUZsb2F0KHZhbCkgOiBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoX3BhcnRzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICB0aGlzLl9hbHBoYSA9IE1hdGguZmxvb3IocGFyc2VGbG9hdChfcGFydHNbM10pICogMTAwKTtcbiAgICAgIH0gZWxzZSBpZiAoX3BhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICB0aGlzLl9hbHBoYSA9IDEwMDtcbiAgICAgIH1cbiAgICAgIGlmIChfcGFydHMubGVuZ3RoID49IDMpIHtcbiAgICAgICAgZnJvbUhTVihfcGFydHNbMF0sIF9wYXJ0c1sxXSwgX3BhcnRzWzJdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJ3JnYicpICE9PSAtMSkge1xuICAgICAgdmFyIF9wYXJ0czIgPSB2YWx1ZS5yZXBsYWNlKC9yZ2JhfHJnYnxcXCh8XFwpL2dtLCAnJykuc3BsaXQoL1xcc3wsL2cpLmZpbHRlcihmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgIT09ICcnO1xuICAgICAgfSkubWFwKGZ1bmN0aW9uICh2YWwsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpbmRleCA+IDIgPyBwYXJzZUZsb2F0KHZhbCkgOiBwYXJzZUludCh2YWwsIDEwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoX3BhcnRzMi5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgdGhpcy5fYWxwaGEgPSBNYXRoLmZsb29yKHBhcnNlRmxvYXQoX3BhcnRzMlszXSkgKiAxMDApO1xuICAgICAgfSBlbHNlIGlmIChfcGFydHMyLmxlbmd0aCA9PT0gMykge1xuICAgICAgICB0aGlzLl9hbHBoYSA9IDEwMDtcbiAgICAgIH1cbiAgICAgIGlmIChfcGFydHMyLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIHZhciBfcmdiMmhzdiA9IHJnYjJoc3YoX3BhcnRzMlswXSwgX3BhcnRzMlsxXSwgX3BhcnRzMlsyXSksXG4gICAgICAgICAgICBfaCA9IF9yZ2IyaHN2LmgsXG4gICAgICAgICAgICBfcyA9IF9yZ2IyaHN2LnMsXG4gICAgICAgICAgICBfdiA9IF9yZ2IyaHN2LnY7XG5cbiAgICAgICAgZnJvbUhTVihfaCwgX3MsIF92KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJyMnKSAhPT0gLTEpIHtcbiAgICAgIHZhciBoZXggPSB2YWx1ZS5yZXBsYWNlKCcjJywgJycpLnRyaW0oKTtcbiAgICAgIGlmICghL14oPzpbMC05YS1mQS1GXXszfSl7MSwyfXxbMC05YS1mQS1GXXs4fSQvLnRlc3QoaGV4KSkgcmV0dXJuO1xuICAgICAgdmFyIHIgPSB2b2lkIDAsXG4gICAgICAgICAgZyA9IHZvaWQgMCxcbiAgICAgICAgICBiID0gdm9pZCAwO1xuXG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICByID0gcGFyc2VIZXhDaGFubmVsKGhleFswXSArIGhleFswXSk7XG4gICAgICAgIGcgPSBwYXJzZUhleENoYW5uZWwoaGV4WzFdICsgaGV4WzFdKTtcbiAgICAgICAgYiA9IHBhcnNlSGV4Q2hhbm5lbChoZXhbMl0gKyBoZXhbMl0pO1xuICAgICAgfSBlbHNlIGlmIChoZXgubGVuZ3RoID09PSA2IHx8IGhleC5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgciA9IHBhcnNlSGV4Q2hhbm5lbChoZXguc3Vic3RyaW5nKDAsIDIpKTtcbiAgICAgICAgZyA9IHBhcnNlSGV4Q2hhbm5lbChoZXguc3Vic3RyaW5nKDIsIDQpKTtcbiAgICAgICAgYiA9IHBhcnNlSGV4Q2hhbm5lbChoZXguc3Vic3RyaW5nKDQsIDYpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhleC5sZW5ndGggPT09IDgpIHtcbiAgICAgICAgdGhpcy5fYWxwaGEgPSBNYXRoLmZsb29yKHBhcnNlSGV4Q2hhbm5lbChoZXguc3Vic3RyaW5nKDYpKSAvIDI1NSAqIDEwMCk7XG4gICAgICB9IGVsc2UgaWYgKGhleC5sZW5ndGggPT09IDMgfHwgaGV4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICB0aGlzLl9hbHBoYSA9IDEwMDtcbiAgICAgIH1cblxuICAgICAgdmFyIF9yZ2IyaHN2MiA9IHJnYjJoc3YociwgZywgYiksXG4gICAgICAgICAgX2gyID0gX3JnYjJoc3YyLmgsXG4gICAgICAgICAgX3MyID0gX3JnYjJoc3YyLnMsXG4gICAgICAgICAgX3YyID0gX3JnYjJoc3YyLnY7XG5cbiAgICAgIGZyb21IU1YoX2gyLCBfczIsIF92Mik7XG4gICAgfVxuICB9O1xuXG4gIENvbG9yLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZShjb2xvcikge1xuICAgIHJldHVybiBNYXRoLmFicyhjb2xvci5faHVlIC0gdGhpcy5faHVlKSA8IDIgJiYgTWF0aC5hYnMoY29sb3IuX3NhdHVyYXRpb24gLSB0aGlzLl9zYXR1cmF0aW9uKSA8IDEgJiYgTWF0aC5hYnMoY29sb3IuX3ZhbHVlIC0gdGhpcy5fdmFsdWUpIDwgMSAmJiBNYXRoLmFicyhjb2xvci5fYWxwaGEgLSB0aGlzLl9hbHBoYSkgPCAxO1xuICB9O1xuXG4gIENvbG9yLnByb3RvdHlwZS5kb09uQ2hhbmdlID0gZnVuY3Rpb24gZG9PbkNoYW5nZSgpIHtcbiAgICB2YXIgX2h1ZSA9IHRoaXMuX2h1ZSxcbiAgICAgICAgX3NhdHVyYXRpb24gPSB0aGlzLl9zYXR1cmF0aW9uLFxuICAgICAgICBfdmFsdWUgPSB0aGlzLl92YWx1ZSxcbiAgICAgICAgX2FscGhhID0gdGhpcy5fYWxwaGEsXG4gICAgICAgIGZvcm1hdCA9IHRoaXMuZm9ybWF0O1xuXG5cbiAgICBpZiAodGhpcy5lbmFibGVBbHBoYSkge1xuICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnaHNsJzpcbiAgICAgICAgICB2YXIgaHNsID0gaHN2MmhzbChfaHVlLCBfc2F0dXJhdGlvbiAvIDEwMCwgX3ZhbHVlIC8gMTAwKTtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gJ2hzbGEoJyArIF9odWUgKyAnLCAnICsgTWF0aC5yb3VuZChoc2xbMV0gKiAxMDApICsgJyUsICcgKyBNYXRoLnJvdW5kKGhzbFsyXSAqIDEwMCkgKyAnJSwgJyArIF9hbHBoYSAvIDEwMCArICcpJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaHN2JzpcbiAgICAgICAgICB0aGlzLnZhbHVlID0gJ2hzdmEoJyArIF9odWUgKyAnLCAnICsgTWF0aC5yb3VuZChfc2F0dXJhdGlvbikgKyAnJSwgJyArIE1hdGgucm91bmQoX3ZhbHVlKSArICclLCAnICsgX2FscGhhIC8gMTAwICsgJyknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHZhciBfaHN2MnJnYiA9IGhzdjJyZ2IoX2h1ZSwgX3NhdHVyYXRpb24sIF92YWx1ZSksXG4gICAgICAgICAgICAgIHIgPSBfaHN2MnJnYi5yLFxuICAgICAgICAgICAgICBnID0gX2hzdjJyZ2IuZyxcbiAgICAgICAgICAgICAgYiA9IF9oc3YycmdiLmI7XG5cbiAgICAgICAgICB0aGlzLnZhbHVlID0gJ3JnYmEoJyArIHIgKyAnLCAnICsgZyArICcsICcgKyBiICsgJywgJyArIF9hbHBoYSAvIDEwMCArICcpJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnaHNsJzpcbiAgICAgICAgICB2YXIgX2hzbCA9IGhzdjJoc2woX2h1ZSwgX3NhdHVyYXRpb24gLyAxMDAsIF92YWx1ZSAvIDEwMCk7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9ICdoc2woJyArIF9odWUgKyAnLCAnICsgTWF0aC5yb3VuZChfaHNsWzFdICogMTAwKSArICclLCAnICsgTWF0aC5yb3VuZChfaHNsWzJdICogMTAwKSArICclKSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hzdic6XG4gICAgICAgICAgdGhpcy52YWx1ZSA9ICdoc3YoJyArIF9odWUgKyAnLCAnICsgTWF0aC5yb3VuZChfc2F0dXJhdGlvbikgKyAnJSwgJyArIE1hdGgucm91bmQoX3ZhbHVlKSArICclKSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JnYic6XG4gICAgICAgICAgdmFyIF9oc3YycmdiMiA9IGhzdjJyZ2IoX2h1ZSwgX3NhdHVyYXRpb24sIF92YWx1ZSksXG4gICAgICAgICAgICAgIF9yID0gX2hzdjJyZ2IyLnIsXG4gICAgICAgICAgICAgIF9nID0gX2hzdjJyZ2IyLmcsXG4gICAgICAgICAgICAgIF9iID0gX2hzdjJyZ2IyLmI7XG5cbiAgICAgICAgICB0aGlzLnZhbHVlID0gJ3JnYignICsgX3IgKyAnLCAnICsgX2cgKyAnLCAnICsgX2IgKyAnKSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRvSGV4KGhzdjJyZ2IoX2h1ZSwgX3NhdHVyYXRpb24sIF92YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gQ29sb3I7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jb2xvciA9IChDb2xvcik7XG47XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9waWNrZXItZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2NjAxNjI1JlxudmFyIHBpY2tlcl9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2NjAxNjI1X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyYW5zaXRpb25cIixcbiAgICB7IGF0dHJzOiB7IG5hbWU6IFwiZWwtem9vbS1pbi10b3BcIiB9LCBvbjogeyBcImFmdGVyLWxlYXZlXCI6IF92bS5kb0Rlc3Ryb3kgfSB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7XG4gICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5zaG93UG9wcGVyLFxuICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInNob3dQb3BwZXJcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItZHJvcGRvd25cIlxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1kcm9wZG93bl9fbWFpbi13cmFwcGVyXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXCJodWUtc2xpZGVyXCIsIHtcbiAgICAgICAgICAgICAgICByZWY6IFwiaHVlXCIsXG4gICAgICAgICAgICAgICAgc3RhdGljU3R5bGU6IHsgZmxvYXQ6IFwicmlnaHRcIiB9LFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7IGNvbG9yOiBfdm0uY29sb3IsIHZlcnRpY2FsOiBcIlwiIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF9jKFwic3YtcGFuZWxcIiwgeyByZWY6IFwic2xcIiwgYXR0cnM6IHsgY29sb3I6IF92bS5jb2xvciB9IH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLnNob3dBbHBoYVxuICAgICAgICAgICAgPyBfYyhcImFscGhhLXNsaWRlclwiLCB7IHJlZjogXCJhbHBoYVwiLCBhdHRyczogeyBjb2xvcjogX3ZtLmNvbG9yIH0gfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLnByZWRlZmluZVxuICAgICAgICAgICAgPyBfYyhcInByZWRlZmluZVwiLCB7XG4gICAgICAgICAgICAgICAgYXR0cnM6IHsgY29sb3I6IF92bS5jb2xvciwgY29sb3JzOiBfdm0ucHJlZGVmaW5lIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1kcm9wZG93bl9fYnRuc1wiIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItZHJvcGRvd25fX3ZhbHVlXCIgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcImVsLWlucHV0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJ2YWxpZGF0ZS1ldmVudFwiOiBmYWxzZSwgc2l6ZTogXCJtaW5pXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgb246IHsgYmx1cjogX3ZtLmhhbmRsZUNvbmZpcm0gfSxcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICAgICAgICAgICBrZXl1cDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fayhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQua2V5Q29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMTMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZUNvbmZpcm0oJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLmN1c3RvbUlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5jdXN0b21JbnB1dCA9ICQkdlxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjdXN0b21JbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZWwtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItZHJvcGRvd25fX2xpbmstYnRuXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczogeyBzaXplOiBcIm1pbmlcIiwgdHlwZTogXCJ0ZXh0XCIgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uJGVtaXQoXCJjbGVhclwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS50KFwiZWwuY29sb3JwaWNrZXIuY2xlYXJcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWRyb3Bkb3duX19idG5cIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHBsYWluOiBcIlwiLCBzaXplOiBcIm1pbmlcIiB9LFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5jb25maXJtVmFsdWUgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmNvbG9ycGlja2VyLmNvbmZpcm1cIikpICtcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgIFwiXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHBpY2tlcl9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2NjAxNjI1X3N0YXRpY1JlbmRlckZucyA9IFtdXG5waWNrZXJfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjYwMTYyNV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9waWNrZXItZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2NjAxNjI1JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9zdi1wYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZDg1ODM1OTYmXG52YXIgc3ZfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kODU4MzU5Nl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1zdnBhbmVsXCIsXG4gICAgICBzdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IF92bS5iYWNrZ3JvdW5kXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXN2cGFuZWxfX3doaXRlXCIgfSksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXN2cGFuZWxfX2JsYWNrXCIgfSksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLXN2cGFuZWxfX2N1cnNvclwiLFxuICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICB0b3A6IF92bS5jdXJzb3JUb3AgKyBcInB4XCIsXG4gICAgICAgICAgICBsZWZ0OiBfdm0uY3Vyc29yTGVmdCArIFwicHhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW19jKFwiZGl2XCIpXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHN2X3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDg1ODM1OTZfc3RhdGljUmVuZGVyRm5zID0gW11cbnN2X3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDg1ODM1OTZfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvc3YtcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWQ4NTgzNTk2JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvZHJhZ2dhYmxlLmpzXG5cbnZhciBpc0RyYWdnaW5nID0gZmFsc2U7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRyYWdnYWJsZSA9IChmdW5jdGlvbiAoZWxlbWVudCwgb3B0aW9ucykge1xuICBpZiAoZXh0ZXJuYWxfdnVlX2RlZmF1bHQuYS5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gIHZhciBtb3ZlRm4gPSBmdW5jdGlvbiBtb3ZlRm4oZXZlbnQpIHtcbiAgICBpZiAob3B0aW9ucy5kcmFnKSB7XG4gICAgICBvcHRpb25zLmRyYWcoZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgdmFyIHVwRm4gPSBmdW5jdGlvbiB1cEZuKGV2ZW50KSB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZUZuKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdXBGbik7XG4gICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IG51bGw7XG4gICAgZG9jdW1lbnQub25kcmFnc3RhcnQgPSBudWxsO1xuXG4gICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG4gICAgaWYgKG9wdGlvbnMuZW5kKSB7XG4gICAgICBvcHRpb25zLmVuZChldmVudCk7XG4gICAgfVxuICB9O1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChpc0RyYWdnaW5nKSByZXR1cm47XG4gICAgZG9jdW1lbnQub25zZWxlY3RzdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIGRvY3VtZW50Lm9uZHJhZ3N0YXJ0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBtb3ZlRm4pO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB1cEZuKTtcbiAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcblxuICAgIGlmIChvcHRpb25zLnN0YXJ0KSB7XG4gICAgICBvcHRpb25zLnN0YXJ0KGV2ZW50KTtcbiAgICB9XG4gIH0pO1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvc3YtcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzdl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdlbC1zbC1wYW5lbCcsXG5cbiAgcHJvcHM6IHtcbiAgICBjb2xvcjoge1xuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiBmdW5jdGlvbiBjb2xvclZhbHVlKCkge1xuICAgICAgdmFyIGh1ZSA9IHRoaXMuY29sb3IuZ2V0KCdodWUnKTtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMuY29sb3IuZ2V0KCd2YWx1ZScpO1xuICAgICAgcmV0dXJuIHsgaHVlOiBodWUsIHZhbHVlOiB2YWx1ZSB9O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGNvbG9yVmFsdWU6IGZ1bmN0aW9uIGNvbG9yVmFsdWUoKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICB2YXIgc2F0dXJhdGlvbiA9IHRoaXMuY29sb3IuZ2V0KCdzYXR1cmF0aW9uJyk7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLmNvbG9yLmdldCgndmFsdWUnKTtcblxuICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG4gICAgICB2YXIgd2lkdGggPSBlbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICBoZWlnaHQgPSBlbC5jbGllbnRIZWlnaHQ7XG5cblxuICAgICAgdGhpcy5jdXJzb3JMZWZ0ID0gc2F0dXJhdGlvbiAqIHdpZHRoIC8gMTAwO1xuICAgICAgdGhpcy5jdXJzb3JUb3AgPSAoMTAwIC0gdmFsdWUpICogaGVpZ2h0IC8gMTAwO1xuXG4gICAgICB0aGlzLmJhY2tncm91bmQgPSAnaHNsKCcgKyB0aGlzLmNvbG9yLmdldCgnaHVlJykgKyAnLCAxMDAlLCA1MCUpJztcbiAgICB9LFxuICAgIGhhbmRsZURyYWc6IGZ1bmN0aW9uIGhhbmRsZURyYWcoZXZlbnQpIHtcbiAgICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgICAgdmFyIHJlY3QgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgdmFyIGxlZnQgPSBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0O1xuICAgICAgdmFyIHRvcCA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICAgIGxlZnQgPSBNYXRoLm1heCgwLCBsZWZ0KTtcbiAgICAgIGxlZnQgPSBNYXRoLm1pbihsZWZ0LCByZWN0LndpZHRoKTtcblxuICAgICAgdG9wID0gTWF0aC5tYXgoMCwgdG9wKTtcbiAgICAgIHRvcCA9IE1hdGgubWluKHRvcCwgcmVjdC5oZWlnaHQpO1xuXG4gICAgICB0aGlzLmN1cnNvckxlZnQgPSBsZWZ0O1xuICAgICAgdGhpcy5jdXJzb3JUb3AgPSB0b3A7XG4gICAgICB0aGlzLmNvbG9yLnNldCh7XG4gICAgICAgIHNhdHVyYXRpb246IGxlZnQgLyByZWN0LndpZHRoICogMTAwLFxuICAgICAgICB2YWx1ZTogMTAwIC0gdG9wIC8gcmVjdC5oZWlnaHQgKiAxMDBcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICBkcmFnZ2FibGUodGhpcy4kZWwsIHtcbiAgICAgIGRyYWc6IGZ1bmN0aW9uIGRyYWcoZXZlbnQpIHtcbiAgICAgICAgX3RoaXMuaGFuZGxlRHJhZyhldmVudCk7XG4gICAgICB9LFxuICAgICAgZW5kOiBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICAgICAgX3RoaXMuaGFuZGxlRHJhZyhldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJzb3JUb3A6IDAsXG4gICAgICBjdXJzb3JMZWZ0OiAwLFxuICAgICAgYmFja2dyb3VuZDogJ2hzbCgwLCAxMDAlLCA1MCUpJ1xuICAgIH07XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvc3YtcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbXBvbmVudHNfc3ZfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc3ZfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3N2LXBhbmVsLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHN2X3BhbmVsX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY29tcG9uZW50c19zdl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc3ZfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF9kODU4MzU5Nl9yZW5kZXIsXG4gIHN2X3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfZDg1ODM1OTZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzdl9wYW5lbF9hcGk7IH1cbnN2X3BhbmVsX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3N2LXBhbmVsLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzdl9wYW5lbCA9IChzdl9wYW5lbF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9odWUtc2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01Y2RjNDNiMSZcbnZhciBodWVfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNkYzQzYjFfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItaHVlLXNsaWRlclwiLFxuICAgICAgY2xhc3M6IHsgXCJpcy12ZXJ0aWNhbFwiOiBfdm0udmVydGljYWwgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICByZWY6IFwiYmFyXCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWNvbG9yLWh1ZS1zbGlkZXJfX2JhclwiLFxuICAgICAgICBvbjogeyBjbGljazogX3ZtLmhhbmRsZUNsaWNrIH1cbiAgICAgIH0pLFxuICAgICAgX2MoXCJkaXZcIiwge1xuICAgICAgICByZWY6IFwidGh1bWJcIixcbiAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtY29sb3ItaHVlLXNsaWRlcl9fdGh1bWJcIixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBsZWZ0OiBfdm0udGh1bWJMZWZ0ICsgXCJweFwiLFxuICAgICAgICAgIHRvcDogX3ZtLnRodW1iVG9wICsgXCJweFwiXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXVxuICApXG59XG52YXIgaHVlX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjZGM0M2IxX3N0YXRpY1JlbmRlckZucyA9IFtdXG5odWVfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNkYzQzYjFfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvaHVlLXNsaWRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWNkYzQzYjEmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9odWUtc2xpZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBodWVfc2xpZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ2VsLWNvbG9yLWh1ZS1zbGlkZXInLFxuXG4gIHByb3BzOiB7XG4gICAgY29sb3I6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcblxuICAgIHZlcnRpY2FsOiBCb29sZWFuXG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGh1bWJMZWZ0OiAwLFxuICAgICAgdGh1bWJUb3A6IDBcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBodWVWYWx1ZTogZnVuY3Rpb24gaHVlVmFsdWUoKSB7XG4gICAgICB2YXIgaHVlID0gdGhpcy5jb2xvci5nZXQoJ2h1ZScpO1xuICAgICAgcmV0dXJuIGh1ZTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBodWVWYWx1ZTogZnVuY3Rpb24gaHVlVmFsdWUoKSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGV2ZW50KSB7XG4gICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgICAgaWYgKHRhcmdldCAhPT0gdGh1bWIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVEcmFnKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZURyYWc6IGZ1bmN0aW9uIGhhbmRsZURyYWcoZXZlbnQpIHtcbiAgICAgIHZhciByZWN0ID0gdGhpcy4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuXG4gICAgICB2YXIgaHVlID0gdm9pZCAwO1xuXG4gICAgICBpZiAoIXRoaXMudmVydGljYWwpIHtcbiAgICAgICAgdmFyIGxlZnQgPSBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0O1xuICAgICAgICBsZWZ0ID0gTWF0aC5taW4obGVmdCwgcmVjdC53aWR0aCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMik7XG4gICAgICAgIGxlZnQgPSBNYXRoLm1heCh0aHVtYi5vZmZzZXRXaWR0aCAvIDIsIGxlZnQpO1xuXG4gICAgICAgIGh1ZSA9IE1hdGgucm91bmQoKGxlZnQgLSB0aHVtYi5vZmZzZXRXaWR0aCAvIDIpIC8gKHJlY3Qud2lkdGggLSB0aHVtYi5vZmZzZXRXaWR0aCkgKiAzNjApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRvcCA9IGV2ZW50LmNsaWVudFkgLSByZWN0LnRvcDtcbiAgICAgICAgdG9wID0gTWF0aC5taW4odG9wLCByZWN0LmhlaWdodCAtIHRodW1iLm9mZnNldEhlaWdodCAvIDIpO1xuICAgICAgICB0b3AgPSBNYXRoLm1heCh0aHVtYi5vZmZzZXRIZWlnaHQgLyAyLCB0b3ApO1xuXG4gICAgICAgIGh1ZSA9IE1hdGgucm91bmQoKHRvcCAtIHRodW1iLm9mZnNldEhlaWdodCAvIDIpIC8gKHJlY3QuaGVpZ2h0IC0gdGh1bWIub2Zmc2V0SGVpZ2h0KSAqIDM2MCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29sb3Iuc2V0KCdodWUnLCBodWUpO1xuICAgIH0sXG4gICAgZ2V0VGh1bWJMZWZ0OiBmdW5jdGlvbiBnZXRUaHVtYkxlZnQoKSB7XG4gICAgICBpZiAodGhpcy52ZXJ0aWNhbCkgcmV0dXJuIDA7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICAgIHZhciBodWUgPSB0aGlzLmNvbG9yLmdldCgnaHVlJyk7XG5cbiAgICAgIGlmICghZWwpIHJldHVybiAwO1xuICAgICAgdmFyIHRodW1iID0gdGhpcy4kcmVmcy50aHVtYjtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKGh1ZSAqIChlbC5vZmZzZXRXaWR0aCAtIHRodW1iLm9mZnNldFdpZHRoIC8gMikgLyAzNjApO1xuICAgIH0sXG4gICAgZ2V0VGh1bWJUb3A6IGZ1bmN0aW9uIGdldFRodW1iVG9wKCkge1xuICAgICAgaWYgKCF0aGlzLnZlcnRpY2FsKSByZXR1cm4gMDtcbiAgICAgIHZhciBlbCA9IHRoaXMuJGVsO1xuICAgICAgdmFyIGh1ZSA9IHRoaXMuY29sb3IuZ2V0KCdodWUnKTtcblxuICAgICAgaWYgKCFlbCkgcmV0dXJuIDA7XG4gICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoaHVlICogKGVsLm9mZnNldEhlaWdodCAtIHRodW1iLm9mZnNldEhlaWdodCAvIDIpIC8gMzYwKTtcbiAgICB9LFxuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgdGhpcy50aHVtYkxlZnQgPSB0aGlzLmdldFRodW1iTGVmdCgpO1xuICAgICAgdGhpcy50aHVtYlRvcCA9IHRoaXMuZ2V0VGh1bWJUb3AoKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIF8kcmVmcyA9IHRoaXMuJHJlZnMsXG4gICAgICAgIGJhciA9IF8kcmVmcy5iYXIsXG4gICAgICAgIHRodW1iID0gXyRyZWZzLnRodW1iO1xuXG5cbiAgICB2YXIgZHJhZ0NvbmZpZyA9IHtcbiAgICAgIGRyYWc6IGZ1bmN0aW9uIGRyYWcoZXZlbnQpIHtcbiAgICAgICAgX3RoaXMuaGFuZGxlRHJhZyhldmVudCk7XG4gICAgICB9LFxuICAgICAgZW5kOiBmdW5jdGlvbiBlbmQoZXZlbnQpIHtcbiAgICAgICAgX3RoaXMuaGFuZGxlRHJhZyhldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRyYWdnYWJsZShiYXIsIGRyYWdDb25maWcpO1xuICAgIGRyYWdnYWJsZSh0aHVtYiwgZHJhZ0NvbmZpZyk7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9odWUtc2xpZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb21wb25lbnRzX2h1ZV9zbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoaHVlX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvaHVlLXNsaWRlci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBodWVfc2xpZGVyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY29tcG9uZW50c19odWVfc2xpZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBodWVfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNkYzQzYjFfcmVuZGVyLFxuICBodWVfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWNkYzQzYjFfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBodWVfc2xpZGVyX2FwaTsgfVxuaHVlX3NsaWRlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9odWUtc2xpZGVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBodWVfc2xpZGVyID0gKGh1ZV9zbGlkZXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvYWxwaGEtc2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNjhjNjZjYiZcbnZhciBhbHBoYV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjhjNjZjYl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJkaXZcIixcbiAgICB7XG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1hbHBoYS1zbGlkZXJcIixcbiAgICAgIGNsYXNzOiB7IFwiaXMtdmVydGljYWxcIjogX3ZtLnZlcnRpY2FsIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgcmVmOiBcImJhclwiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1hbHBoYS1zbGlkZXJfX2JhclwiLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGJhY2tncm91bmQ6IF92bS5iYWNrZ3JvdW5kXG4gICAgICAgIH0sXG4gICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uaGFuZGxlQ2xpY2sgfVxuICAgICAgfSksXG4gICAgICBfYyhcImRpdlwiLCB7XG4gICAgICAgIHJlZjogXCJ0aHVtYlwiLFxuICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1hbHBoYS1zbGlkZXJfX3RodW1iXCIsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgbGVmdDogX3ZtLnRodW1iTGVmdCArIFwicHhcIixcbiAgICAgICAgICB0b3A6IF92bS50aHVtYlRvcCArIFwicHhcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF1cbiAgKVxufVxudmFyIGFscGhhX3NsaWRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2OGM2NmNiX3N0YXRpY1JlbmRlckZucyA9IFtdXG5hbHBoYV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjhjNjZjYl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9hbHBoYS1zbGlkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2OGM2NmNiJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvYWxwaGEtc2xpZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhbHBoYV9zbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnZWwtY29sb3ItYWxwaGEtc2xpZGVyJyxcblxuICBwcm9wczoge1xuICAgIGNvbG9yOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdmVydGljYWw6IEJvb2xlYW5cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdjb2xvci5fYWxwaGEnOiBmdW5jdGlvbiBjb2xvcl9hbHBoYSgpIHtcbiAgICAgIHRoaXMudXBkYXRlKCk7XG4gICAgfSxcbiAgICAnY29sb3IudmFsdWUnOiBmdW5jdGlvbiBjb2xvclZhbHVlKCkge1xuICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgdmFyIHRodW1iID0gdGhpcy4kcmVmcy50aHVtYjtcbiAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgIGlmICh0YXJnZXQgIT09IHRodW1iKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRHJhZyhldmVudCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVEcmFnOiBmdW5jdGlvbiBoYW5kbGVEcmFnKGV2ZW50KSB7XG4gICAgICB2YXIgcmVjdCA9IHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgdmFyIHRodW1iID0gdGhpcy4kcmVmcy50aHVtYjtcblxuXG4gICAgICBpZiAoIXRoaXMudmVydGljYWwpIHtcbiAgICAgICAgdmFyIGxlZnQgPSBldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0O1xuICAgICAgICBsZWZ0ID0gTWF0aC5tYXgodGh1bWIub2Zmc2V0V2lkdGggLyAyLCBsZWZ0KTtcbiAgICAgICAgbGVmdCA9IE1hdGgubWluKGxlZnQsIHJlY3Qud2lkdGggLSB0aHVtYi5vZmZzZXRXaWR0aCAvIDIpO1xuXG4gICAgICAgIHRoaXMuY29sb3Iuc2V0KCdhbHBoYScsIE1hdGgucm91bmQoKGxlZnQgLSB0aHVtYi5vZmZzZXRXaWR0aCAvIDIpIC8gKHJlY3Qud2lkdGggLSB0aHVtYi5vZmZzZXRXaWR0aCkgKiAxMDApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0b3AgPSBldmVudC5jbGllbnRZIC0gcmVjdC50b3A7XG4gICAgICAgIHRvcCA9IE1hdGgubWF4KHRodW1iLm9mZnNldEhlaWdodCAvIDIsIHRvcCk7XG4gICAgICAgIHRvcCA9IE1hdGgubWluKHRvcCwgcmVjdC5oZWlnaHQgLSB0aHVtYi5vZmZzZXRIZWlnaHQgLyAyKTtcblxuICAgICAgICB0aGlzLmNvbG9yLnNldCgnYWxwaGEnLCBNYXRoLnJvdW5kKCh0b3AgLSB0aHVtYi5vZmZzZXRIZWlnaHQgLyAyKSAvIChyZWN0LmhlaWdodCAtIHRodW1iLm9mZnNldEhlaWdodCkgKiAxMDApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFRodW1iTGVmdDogZnVuY3Rpb24gZ2V0VGh1bWJMZWZ0KCkge1xuICAgICAgaWYgKHRoaXMudmVydGljYWwpIHJldHVybiAwO1xuICAgICAgdmFyIGVsID0gdGhpcy4kZWw7XG4gICAgICB2YXIgYWxwaGEgPSB0aGlzLmNvbG9yLl9hbHBoYTtcblxuICAgICAgaWYgKCFlbCkgcmV0dXJuIDA7XG4gICAgICB2YXIgdGh1bWIgPSB0aGlzLiRyZWZzLnRodW1iO1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQoYWxwaGEgKiAoZWwub2Zmc2V0V2lkdGggLSB0aHVtYi5vZmZzZXRXaWR0aCAvIDIpIC8gMTAwKTtcbiAgICB9LFxuICAgIGdldFRodW1iVG9wOiBmdW5jdGlvbiBnZXRUaHVtYlRvcCgpIHtcbiAgICAgIGlmICghdGhpcy52ZXJ0aWNhbCkgcmV0dXJuIDA7XG4gICAgICB2YXIgZWwgPSB0aGlzLiRlbDtcbiAgICAgIHZhciBhbHBoYSA9IHRoaXMuY29sb3IuX2FscGhhO1xuXG4gICAgICBpZiAoIWVsKSByZXR1cm4gMDtcbiAgICAgIHZhciB0aHVtYiA9IHRoaXMuJHJlZnMudGh1bWI7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChhbHBoYSAqIChlbC5vZmZzZXRIZWlnaHQgLSB0aHVtYi5vZmZzZXRIZWlnaHQgLyAyKSAvIDEwMCk7XG4gICAgfSxcbiAgICBnZXRCYWNrZ3JvdW5kOiBmdW5jdGlvbiBnZXRCYWNrZ3JvdW5kKCkge1xuICAgICAgaWYgKHRoaXMuY29sb3IgJiYgdGhpcy5jb2xvci52YWx1ZSkge1xuICAgICAgICB2YXIgX2NvbG9yJHRvUmdiID0gdGhpcy5jb2xvci50b1JnYigpLFxuICAgICAgICAgICAgciA9IF9jb2xvciR0b1JnYi5yLFxuICAgICAgICAgICAgZyA9IF9jb2xvciR0b1JnYi5nLFxuICAgICAgICAgICAgYiA9IF9jb2xvciR0b1JnYi5iO1xuXG4gICAgICAgIHJldHVybiAnbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKCcgKyByICsgJywgJyArIGcgKyAnLCAnICsgYiArICcsIDApIDAlLCByZ2JhKCcgKyByICsgJywgJyArIGcgKyAnLCAnICsgYiArICcsIDEpIDEwMCUpJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICB0aGlzLnRodW1iTGVmdCA9IHRoaXMuZ2V0VGh1bWJMZWZ0KCk7XG4gICAgICB0aGlzLnRodW1iVG9wID0gdGhpcy5nZXRUaHVtYlRvcCgpO1xuICAgICAgdGhpcy5iYWNrZ3JvdW5kID0gdGhpcy5nZXRCYWNrZ3JvdW5kKCk7XG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRodW1iTGVmdDogMCxcbiAgICAgIHRodW1iVG9wOiAwLFxuICAgICAgYmFja2dyb3VuZDogbnVsbFxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciBfJHJlZnMgPSB0aGlzLiRyZWZzLFxuICAgICAgICBiYXIgPSBfJHJlZnMuYmFyLFxuICAgICAgICB0aHVtYiA9IF8kcmVmcy50aHVtYjtcblxuXG4gICAgdmFyIGRyYWdDb25maWcgPSB7XG4gICAgICBkcmFnOiBmdW5jdGlvbiBkcmFnKGV2ZW50KSB7XG4gICAgICAgIF90aGlzLmhhbmRsZURyYWcoZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIGVuZDogZnVuY3Rpb24gZW5kKGV2ZW50KSB7XG4gICAgICAgIF90aGlzLmhhbmRsZURyYWcoZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBkcmFnZ2FibGUoYmFyLCBkcmFnQ29uZmlnKTtcbiAgICBkcmFnZ2FibGUodGh1bWIsIGRyYWdDb25maWcpO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvYWxwaGEtc2xpZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb21wb25lbnRzX2FscGhhX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChhbHBoYV9zbGlkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL2FscGhhLXNsaWRlci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBhbHBoYV9zbGlkZXJfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBjb21wb25lbnRzX2FscGhhX3NsaWRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgYWxwaGFfc2xpZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4YzY2Y2JfcmVuZGVyLFxuICBhbHBoYV9zbGlkZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjhjNjZjYl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFscGhhX3NsaWRlcl9hcGk7IH1cbmFscGhhX3NsaWRlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9hbHBoYS1zbGlkZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGFscGhhX3NsaWRlciA9IChhbHBoYV9zbGlkZXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcHJlZGVmaW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNmUwMzA5MyZcbnZhciBwcmVkZWZpbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNmUwMzA5M19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1wcmVkZWZpbmVcIiB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9yc1wiIH0sXG4gICAgICBfdm0uX2woX3ZtLnJnYmFDb2xvcnMsIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGtleTogX3ZtLmNvbG9yc1tpbmRleF0sXG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1jb2xvci1wcmVkZWZpbmVfX2NvbG9yLXNlbGVjdG9yXCIsXG4gICAgICAgICAgICBjbGFzczogeyBzZWxlY3RlZDogaXRlbS5zZWxlY3RlZCwgXCJpcy1hbHBoYVwiOiBpdGVtLl9hbHBoYSA8IDEwMCB9LFxuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIF92bS5oYW5kbGVTZWxlY3QoaW5kZXgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfYyhcImRpdlwiLCB7IHN0eWxlOiB7IFwiYmFja2dyb3VuZC1jb2xvclwiOiBpdGVtLnZhbHVlIH0gfSldXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgMFxuICAgIClcbiAgXSlcbn1cbnZhciBwcmVkZWZpbmV2dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNmUwMzA5M19zdGF0aWNSZW5kZXJGbnMgPSBbXVxucHJlZGVmaW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfMDZlMDMwOTNfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcHJlZGVmaW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wNmUwMzA5MyZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3ByZWRlZmluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwcmVkZWZpbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBwcm9wczoge1xuICAgIGNvbG9yczogeyB0eXBlOiBBcnJheSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xvcjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJnYmFDb2xvcnM6IHRoaXMucGFyc2VDb2xvcnModGhpcy5jb2xvcnMsIHRoaXMuY29sb3IpXG4gICAgfTtcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlU2VsZWN0OiBmdW5jdGlvbiBoYW5kbGVTZWxlY3QoaW5kZXgpIHtcbiAgICAgIHRoaXMuY29sb3IuZnJvbVN0cmluZyh0aGlzLmNvbG9yc1tpbmRleF0pO1xuICAgIH0sXG4gICAgcGFyc2VDb2xvcnM6IGZ1bmN0aW9uIHBhcnNlQ29sb3JzKGNvbG9ycywgY29sb3IpIHtcbiAgICAgIHJldHVybiBjb2xvcnMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgYyA9IG5ldyBzcmNfY29sb3IoKTtcbiAgICAgICAgYy5lbmFibGVBbHBoYSA9IHRydWU7XG4gICAgICAgIGMuZm9ybWF0ID0gJ3JnYmEnO1xuICAgICAgICBjLmZyb21TdHJpbmcodmFsdWUpO1xuICAgICAgICBjLnNlbGVjdGVkID0gYy52YWx1ZSA9PT0gY29sb3IudmFsdWU7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgICckcGFyZW50LmN1cnJlbnRDb2xvcic6IGZ1bmN0aW9uICRwYXJlbnRDdXJyZW50Q29sb3IodmFsKSB7XG4gICAgICB2YXIgY29sb3IgPSBuZXcgc3JjX2NvbG9yKCk7XG4gICAgICBjb2xvci5mcm9tU3RyaW5nKHZhbCk7XG5cbiAgICAgIHRoaXMucmdiYUNvbG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBjb2xvci5jb21wYXJlKGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBjb2xvcnM6IGZ1bmN0aW9uIGNvbG9ycyhuZXdWYWwpIHtcbiAgICAgIHRoaXMucmdiYUNvbG9ycyA9IHRoaXMucGFyc2VDb2xvcnMobmV3VmFsLCB0aGlzLmNvbG9yKTtcbiAgICB9LFxuICAgIGNvbG9yOiBmdW5jdGlvbiBjb2xvcihuZXdWYWwpIHtcbiAgICAgIHRoaXMucmdiYUNvbG9ycyA9IHRoaXMucGFyc2VDb2xvcnModGhpcy5jb2xvcnMsIG5ld1ZhbCk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3ByZWRlZmluZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29tcG9uZW50c19wcmVkZWZpbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocHJlZGVmaW5ldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9wcmVkZWZpbmUudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcHJlZGVmaW5lX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY29tcG9uZW50c19wcmVkZWZpbmV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHByZWRlZmluZXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ZTAzMDkzX3JlbmRlcixcbiAgcHJlZGVmaW5ldnVlX3R5cGVfdGVtcGxhdGVfaWRfMDZlMDMwOTNfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBwcmVkZWZpbmVfYXBpOyB9XG5wcmVkZWZpbmVfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcHJlZGVmaW5lLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwcmVkZWZpbmUgPSAocHJlZGVmaW5lX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9waWNrZXItZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ2VsLWNvbG9yLXBpY2tlci1kcm9wZG93bicsXG5cbiAgbWl4aW5zOiBbdnVlX3BvcHBlcl9kZWZhdWx0LmEsIGxvY2FsZV9kZWZhdWx0LmFdLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTdlBhbmVsOiBzdl9wYW5lbCxcbiAgICBIdWVTbGlkZXI6IGh1ZV9zbGlkZXIsXG4gICAgQWxwaGFTbGlkZXI6IGFscGhhX3NsaWRlcixcbiAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEsXG4gICAgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmEsXG4gICAgUHJlZGVmaW5lOiBwcmVkZWZpbmVcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbG9yOiB7XG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd0FscGhhOiBCb29sZWFuLFxuICAgIHByZWRlZmluZTogQXJyYXlcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXN0b21JbnB1dDogJydcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjdXJyZW50Q29sb3I6IGZ1bmN0aW9uIGN1cnJlbnRDb2xvcigpIHtcbiAgICAgIHZhciBwYXJlbnQgPSB0aGlzLiRwYXJlbnQ7XG4gICAgICByZXR1cm4gIXBhcmVudC52YWx1ZSAmJiAhcGFyZW50LnNob3dQYW5lbENvbG9yID8gJycgOiBwYXJlbnQuY29sb3IudmFsdWU7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBjb25maXJtVmFsdWU6IGZ1bmN0aW9uIGNvbmZpcm1WYWx1ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3BpY2snKTtcbiAgICB9LFxuICAgIGhhbmRsZUNvbmZpcm06IGZ1bmN0aW9uIGhhbmRsZUNvbmZpcm0oKSB7XG4gICAgICB0aGlzLmNvbG9yLmZyb21TdHJpbmcodGhpcy5jdXN0b21JbnB1dCk7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy4kcGFyZW50LnBvcHBlckVsbSA9IHRoaXMucG9wcGVyRWxtID0gdGhpcy4kZWw7XG4gICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRwYXJlbnQuJGVsO1xuICB9LFxuXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93UG9wcGVyOiBmdW5jdGlvbiBzaG93UG9wcGVyKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHZhbCA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIF8kcmVmcyA9IF90aGlzLiRyZWZzLFxuICAgICAgICAgICAgICBzbCA9IF8kcmVmcy5zbCxcbiAgICAgICAgICAgICAgaHVlID0gXyRyZWZzLmh1ZSxcbiAgICAgICAgICAgICAgYWxwaGEgPSBfJHJlZnMuYWxwaGE7XG5cbiAgICAgICAgICBzbCAmJiBzbC51cGRhdGUoKTtcbiAgICAgICAgICBodWUgJiYgaHVlLnVwZGF0ZSgpO1xuICAgICAgICAgIGFscGhhICYmIGFscGhhLnVwZGF0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG5cbiAgICBjdXJyZW50Q29sb3I6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIodmFsKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tSW5wdXQgPSB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9jb21wb25lbnRzL3BpY2tlci1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29tcG9uZW50c19waWNrZXJfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvY29tcG9uZW50cy9waWNrZXItZHJvcGRvd24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcGlja2VyX2Ryb3Bkb3duX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY29tcG9uZW50c19waWNrZXJfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHBpY2tlcl9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2NjAxNjI1X3JlbmRlcixcbiAgcGlja2VyX2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY2MDE2MjVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBwaWNrZXJfZHJvcGRvd25fYXBpOyB9XG5waWNrZXJfZHJvcGRvd25fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jb2xvci1waWNrZXIvc3JjL2NvbXBvbmVudHMvcGlja2VyLWRyb3Bkb3duLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwaWNrZXJfZHJvcGRvd24gPSAocGlja2VyX2Ryb3Bkb3duX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbG9yX3BpY2tlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENvbG9yUGlja2VyJyxcblxuICBtaXhpbnM6IFtlbWl0dGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZTogU3RyaW5nLFxuICAgIHNob3dBbHBoYTogQm9vbGVhbixcbiAgICBjb2xvckZvcm1hdDogU3RyaW5nLFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBwb3BwZXJDbGFzczogU3RyaW5nLFxuICAgIHByZWRlZmluZTogQXJyYXlcbiAgfSxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcblxuICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogY2xpY2tvdXRzaWRlX2RlZmF1bHQuYSB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGlzcGxheWVkQ29sb3I6IGZ1bmN0aW9uIGRpc3BsYXllZENvbG9yKCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlICYmICF0aGlzLnNob3dQYW5lbENvbG9yKSB7XG4gICAgICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5kaXNwbGF5ZWRSZ2IodGhpcy5jb2xvciwgdGhpcy5zaG93QWxwaGEpO1xuICAgIH0sXG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICBjb2xvclNpemU6IGZ1bmN0aW9uIGNvbG9yU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBjb2xvckRpc2FibGVkOiBmdW5jdGlvbiBjb2xvckRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgKHRoaXMuZWxGb3JtIHx8IHt9KS5kaXNhYmxlZDtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2YWx1ZTogZnVuY3Rpb24gdmFsdWUodmFsKSB7XG4gICAgICBpZiAoIXZhbCkge1xuICAgICAgICB0aGlzLnNob3dQYW5lbENvbG9yID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHZhbCAmJiB2YWwgIT09IHRoaXMuY29sb3IudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb2xvci5mcm9tU3RyaW5nKHZhbCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbG9yOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcigpIHtcbiAgICAgICAgdGhpcy5zaG93UGFuZWxDb2xvciA9IHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICBkaXNwbGF5ZWRDb2xvcjogZnVuY3Rpb24gZGlzcGxheWVkQ29sb3IodmFsKSB7XG4gICAgICBpZiAoIXRoaXMuc2hvd1BpY2tlcikgcmV0dXJuO1xuICAgICAgdmFyIGN1cnJlbnRWYWx1ZUNvbG9yID0gbmV3IHNyY19jb2xvcih7XG4gICAgICAgIGVuYWJsZUFscGhhOiB0aGlzLnNob3dBbHBoYSxcbiAgICAgICAgZm9ybWF0OiB0aGlzLmNvbG9yRm9ybWF0XG4gICAgICB9KTtcbiAgICAgIGN1cnJlbnRWYWx1ZUNvbG9yLmZyb21TdHJpbmcodGhpcy52YWx1ZSk7XG5cbiAgICAgIHZhciBjdXJyZW50VmFsdWVDb2xvclJnYiA9IHRoaXMuZGlzcGxheWVkUmdiKGN1cnJlbnRWYWx1ZUNvbG9yLCB0aGlzLnNob3dBbHBoYSk7XG4gICAgICBpZiAodmFsICE9PSBjdXJyZW50VmFsdWVDb2xvclJnYikge1xuICAgICAgICB0aGlzLiRlbWl0KCdhY3RpdmUtY2hhbmdlJywgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZVRyaWdnZXI6IGZ1bmN0aW9uIGhhbmRsZVRyaWdnZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2xvckRpc2FibGVkKSByZXR1cm47XG4gICAgICB0aGlzLnNob3dQaWNrZXIgPSAhdGhpcy5zaG93UGlja2VyO1xuICAgIH0sXG4gICAgY29uZmlybVZhbHVlOiBmdW5jdGlvbiBjb25maXJtVmFsdWUoKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLmNvbG9yLnZhbHVlO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSk7XG4gICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgdmFsdWUpO1xuICAgICAgdGhpcy5zaG93UGlja2VyID0gZmFsc2U7XG4gICAgfSxcbiAgICBjbGVhclZhbHVlOiBmdW5jdGlvbiBjbGVhclZhbHVlKCkge1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBudWxsKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIG51bGwpO1xuICAgICAgaWYgKHRoaXMudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5zaG93UGFuZWxDb2xvciA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93UGlja2VyID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc2V0Q29sb3IoKTtcbiAgICB9LFxuICAgIGhpZGU6IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICB0aGlzLnNob3dQaWNrZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzZXRDb2xvcigpO1xuICAgIH0sXG4gICAgcmVzZXRDb2xvcjogZnVuY3Rpb24gcmVzZXRDb2xvcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7XG4gICAgICAgIGlmIChfdGhpcy52YWx1ZSkge1xuICAgICAgICAgIF90aGlzLmNvbG9yLmZyb21TdHJpbmcoX3RoaXMudmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzLnNob3dQYW5lbENvbG9yID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZGlzcGxheWVkUmdiOiBmdW5jdGlvbiBkaXNwbGF5ZWRSZ2IoY29sb3IsIHNob3dBbHBoYSkge1xuICAgICAgaWYgKCEoY29sb3IgaW5zdGFuY2VvZiBzcmNfY29sb3IpKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdjb2xvciBzaG91bGQgYmUgaW5zdGFuY2Ugb2YgQ29sb3IgQ2xhc3MnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9jb2xvciR0b1JnYiA9IGNvbG9yLnRvUmdiKCksXG4gICAgICAgICAgciA9IF9jb2xvciR0b1JnYi5yLFxuICAgICAgICAgIGcgPSBfY29sb3IkdG9SZ2IuZyxcbiAgICAgICAgICBiID0gX2NvbG9yJHRvUmdiLmI7XG5cbiAgICAgIHJldHVybiBzaG93QWxwaGEgPyAncmdiYSgnICsgciArICcsICcgKyBnICsgJywgJyArIGIgKyAnLCAnICsgY29sb3IuZ2V0KCdhbHBoYScpIC8gMTAwICsgJyknIDogJ3JnYignICsgciArICcsICcgKyBnICsgJywgJyArIGIgKyAnKSc7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuY29sb3IuZnJvbVN0cmluZyh2YWx1ZSk7XG4gICAgfVxuICAgIHRoaXMucG9wcGVyRWxtID0gdGhpcy4kcmVmcy5kcm9wZG93bi4kZWw7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgdmFyIGNvbG9yID0gbmV3IHNyY19jb2xvcih7XG4gICAgICBlbmFibGVBbHBoYTogdGhpcy5zaG93QWxwaGEsXG4gICAgICBmb3JtYXQ6IHRoaXMuY29sb3JGb3JtYXRcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjogY29sb3IsXG4gICAgICBzaG93UGlja2VyOiBmYWxzZSxcbiAgICAgIHNob3dQYW5lbENvbG9yOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wb25lbnRzOiB7XG4gICAgUGlja2VyRHJvcGRvd246IHBpY2tlcl9kcm9wZG93blxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29sb3ItcGlja2VyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19jb2xvcl9waWNrZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY29sb3JfcGlja2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb2xvcl9waWNrZXJfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19jb2xvcl9waWNrZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81NWM4YWRlN19yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81NWM4YWRlN19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNvbG9yX3BpY2tlcl9zcmNfbWFpbl9hcGk7IH1cbmNvbG9yX3BpY2tlcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NvbG9yLXBpY2tlci9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29sb3JfcGlja2VyX3NyY19tYWluID0gKGNvbG9yX3BpY2tlcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NvbG9yLXBpY2tlci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jb2xvcl9waWNrZXJfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChjb2xvcl9waWNrZXJfc3JjX21haW4ubmFtZSwgY29sb3JfcGlja2VyX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNvbG9yX3BpY2tlciA9IChjb2xvcl9waWNrZXJfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWM2NTRkZDgmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjNjU0ZGQ4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXJcIiB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInRyYW5zZmVyLXBhbmVsXCIsXG4gICAgICAgIF92bS5fYihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWY6IFwibGVmdFBhbmVsXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICBkYXRhOiBfdm0uc291cmNlRGF0YSxcbiAgICAgICAgICAgICAgdGl0bGU6IF92bS50aXRsZXNbMF0gfHwgX3ZtLnQoXCJlbC50cmFuc2Zlci50aXRsZXMuMFwiKSxcbiAgICAgICAgICAgICAgXCJkZWZhdWx0LWNoZWNrZWRcIjogX3ZtLmxlZnREZWZhdWx0Q2hlY2tlZCxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6XG4gICAgICAgICAgICAgICAgX3ZtLmZpbHRlclBsYWNlaG9sZGVyIHx8IF92bS50KFwiZWwudHJhbnNmZXIuZmlsdGVyUGxhY2Vob2xkZXJcIilcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjogeyBcImNoZWNrZWQtY2hhbmdlXCI6IF92bS5vblNvdXJjZUNoZWNrZWRDaGFuZ2UgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCJ0cmFuc2Zlci1wYW5lbFwiLFxuICAgICAgICAgIF92bS4kcHJvcHMsXG4gICAgICAgICAgZmFsc2VcbiAgICAgICAgKSxcbiAgICAgICAgW192bS5fdChcImxlZnQtZm9vdGVyXCIpXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXRyYW5zZmVyX19idXR0b25zXCIgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICBcImVsLXRyYW5zZmVyX19idXR0b25cIixcbiAgICAgICAgICAgICAgICBfdm0uaGFzQnV0dG9uVGV4dHMgPyBcImlzLXdpdGgtdGV4dHNcIiA6IFwiXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInByaW1hcnlcIixcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLnJpZ2h0Q2hlY2tlZC5sZW5ndGggPT09IDBcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmFkZFRvTGVmdCgkZXZlbnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWFycm93LWxlZnRcIiB9KSxcbiAgICAgICAgICAgICAgX3ZtLmJ1dHRvblRleHRzWzBdICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uYnV0dG9uVGV4dHNbMF0pKV0pXG4gICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzczogW1xuICAgICAgICAgICAgICAgIFwiZWwtdHJhbnNmZXJfX2J1dHRvblwiLFxuICAgICAgICAgICAgICAgIF92bS5oYXNCdXR0b25UZXh0cyA/IFwiaXMtd2l0aC10ZXh0c1wiIDogXCJcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwicHJpbWFyeVwiLFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0ubGVmdENoZWNrZWQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5hdGl2ZU9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5hZGRUb1JpZ2h0KCRldmVudClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5idXR0b25UZXh0c1sxXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLmJ1dHRvblRleHRzWzFdKSldKVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tYXJyb3ctcmlnaHRcIiB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcInRyYW5zZmVyLXBhbmVsXCIsXG4gICAgICAgIF92bS5fYihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZWY6IFwicmlnaHRQYW5lbFwiLFxuICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgZGF0YTogX3ZtLnRhcmdldERhdGEsXG4gICAgICAgICAgICAgIHRpdGxlOiBfdm0udGl0bGVzWzFdIHx8IF92bS50KFwiZWwudHJhbnNmZXIudGl0bGVzLjFcIiksXG4gICAgICAgICAgICAgIFwiZGVmYXVsdC1jaGVja2VkXCI6IF92bS5yaWdodERlZmF1bHRDaGVja2VkLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpcbiAgICAgICAgICAgICAgICBfdm0uZmlsdGVyUGxhY2Vob2xkZXIgfHwgX3ZtLnQoXCJlbC50cmFuc2Zlci5maWx0ZXJQbGFjZWhvbGRlclwiKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uOiB7IFwiY2hlY2tlZC1jaGFuZ2VcIjogX3ZtLm9uVGFyZ2V0Q2hlY2tlZENoYW5nZSB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBcInRyYW5zZmVyLXBhbmVsXCIsXG4gICAgICAgICAgX3ZtLiRwcm9wcyxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApLFxuICAgICAgICBbX3ZtLl90KFwicmlnaHQtZm9vdGVyXCIpXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjNjU0ZGQ4X3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNWM2NTRkZDhfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWM2NTRkZDgmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdHJhbnNmZXIvc3JjL3RyYW5zZmVyLXBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZGRhYjhiZCZcbnZhciB0cmFuc2Zlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkZGFiOGJkX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRyYW5zZmVyLXBhbmVsXCIgfSwgW1xuICAgIF9jKFxuICAgICAgXCJwXCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXRyYW5zZmVyLXBhbmVsX19oZWFkZXJcIiB9LFxuICAgICAgW1xuICAgICAgICBfYyhcbiAgICAgICAgICBcImVsLWNoZWNrYm94XCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYXR0cnM6IHsgaW5kZXRlcm1pbmF0ZTogX3ZtLmlzSW5kZXRlcm1pbmF0ZSB9LFxuICAgICAgICAgICAgb246IHsgY2hhbmdlOiBfdm0uaGFuZGxlQWxsQ2hlY2tlZENoYW5nZSB9LFxuICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5hbGxDaGVja2VkLFxuICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmFsbENoZWNrZWQgPSAkJHZcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJhbGxDaGVja2VkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS50aXRsZSkgKyBcIlxcbiAgICAgIFwiKSxcbiAgICAgICAgICAgIF9jKFwic3BhblwiLCBbX3ZtLl92KF92bS5fcyhfdm0uY2hlY2tlZFN1bW1hcnkpKV0pXG4gICAgICAgICAgXVxuICAgICAgICApXG4gICAgICBdLFxuICAgICAgMVxuICAgICksXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzczogW1xuICAgICAgICAgIFwiZWwtdHJhbnNmZXItcGFuZWxfX2JvZHlcIixcbiAgICAgICAgICBfdm0uaGFzRm9vdGVyID8gXCJpcy13aXRoLWZvb3RlclwiIDogXCJcIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgW1xuICAgICAgICBfdm0uZmlsdGVyYWJsZVxuICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgIFwiZWwtaW5wdXRcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRyYW5zZmVyLXBhbmVsX19maWx0ZXJcIixcbiAgICAgICAgICAgICAgICBhdHRyczogeyBzaXplOiBcInNtYWxsXCIsIHBsYWNlaG9sZGVyOiBfdm0ucGxhY2Vob2xkZXIgfSxcbiAgICAgICAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5pbnB1dEhvdmVyID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBfdm0uaW5wdXRIb3ZlciA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5xdWVyeSxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbigkJHYpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXJ5ID0gJCR2XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJxdWVyeVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBbXCJlbC1pbnB1dF9faWNvblwiLCBcImVsLWljb24tXCIgKyBfdm0uaW5wdXRJY29uXSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNsb3Q6IFwicHJlZml4XCIgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xlYXJRdWVyeSB9LFxuICAgICAgICAgICAgICAgICAgc2xvdDogXCJwcmVmaXhcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImVsLWNoZWNrYm94LWdyb3VwXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5oYXNOb01hdGNoICYmIF92bS5kYXRhLmxlbmd0aCA+IDAsXG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCIhaGFzTm9NYXRjaCAmJiBkYXRhLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2xpc3RcIixcbiAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZmlsdGVyYWJsZVwiOiBfdm0uZmlsdGVyYWJsZSB9LFxuICAgICAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICAgICAgdmFsdWU6IF92bS5jaGVja2VkLFxuICAgICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oJCR2KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmNoZWNrZWQgPSAkJHZcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJjaGVja2VkXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIF92bS5fbChfdm0uZmlsdGVyZWREYXRhLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgIFwiZWwtY2hlY2tib3hcIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGtleTogaXRlbVtfdm0ua2V5UHJvcF0sXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2l0ZW1cIixcbiAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgbGFiZWw6IGl0ZW1bX3ZtLmtleVByb3BdLFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW1bX3ZtLmRpc2FibGVkUHJvcF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtfYyhcIm9wdGlvbi1jb250ZW50XCIsIHsgYXR0cnM6IHsgb3B0aW9uOiBpdGVtIH0gfSldLFxuICAgICAgICAgICAgICAxXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSksXG4gICAgICAgICAgMVxuICAgICAgICApLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInBcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaGFzTm9NYXRjaCxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImhhc05vTWF0Y2hcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2VtcHR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwudHJhbnNmZXIubm9NYXRjaFwiKSkpXVxuICAgICAgICApLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInBcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGF0YS5sZW5ndGggPT09IDAgJiYgIV92bS5oYXNOb01hdGNoLFxuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiZGF0YS5sZW5ndGggPT09IDAgJiYgIWhhc05vTWF0Y2hcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2VtcHR5XCJcbiAgICAgICAgICB9LFxuICAgICAgICAgIFtfdm0uX3YoX3ZtLl9zKF92bS50KFwiZWwudHJhbnNmZXIubm9EYXRhXCIpKSldXG4gICAgICAgIClcbiAgICAgIF0sXG4gICAgICAxXG4gICAgKSxcbiAgICBfdm0uaGFzRm9vdGVyXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwicFwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtdHJhbnNmZXItcGFuZWxfX2Zvb3RlclwiIH0sXG4gICAgICAgICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgICAgICAgIDJcbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKVxuICBdKVxufVxudmFyIHRyYW5zZmVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRkYWI4YmRfc3RhdGljUmVuZGVyRm5zID0gW11cbnRyYW5zZmVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMmRkYWI4YmRfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJkZGFiOGJkJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0cmFuc2Zlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2xvY2FsZV9kZWZhdWx0LmFdLFxuXG4gIG5hbWU6ICdFbFRyYW5zZmVyUGFuZWwnLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbFRyYW5zZmVyUGFuZWwnLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbENoZWNrYm94R3JvdXA6IGNoZWNrYm94X2dyb3VwX2RlZmF1bHQuYSxcbiAgICBFbENoZWNrYm94OiBjaGVja2JveF9kZWZhdWx0LmEsXG4gICAgRWxJbnB1dDogaW5wdXRfZGVmYXVsdC5hLFxuICAgIE9wdGlvbkNvbnRlbnQ6IHtcbiAgICAgIHByb3BzOiB7XG4gICAgICAgIG9wdGlvbjogT2JqZWN0XG4gICAgICB9LFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgICAgICB2YXIgZ2V0UGFyZW50ID0gZnVuY3Rpb24gZ2V0UGFyZW50KHZtKSB7XG4gICAgICAgICAgaWYgKHZtLiRvcHRpb25zLmNvbXBvbmVudE5hbWUgPT09ICdFbFRyYW5zZmVyUGFuZWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gdm07XG4gICAgICAgICAgfSBlbHNlIGlmICh2bS4kcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UGFyZW50KHZtLiRwYXJlbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdm07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2YXIgcGFuZWwgPSBnZXRQYXJlbnQodGhpcyk7XG4gICAgICAgIHZhciB0cmFuc2ZlciA9IHBhbmVsLiRwYXJlbnQgfHwgcGFuZWw7XG4gICAgICAgIHJldHVybiBwYW5lbC5yZW5kZXJDb250ZW50ID8gcGFuZWwucmVuZGVyQ29udGVudChoLCB0aGlzLm9wdGlvbikgOiB0cmFuc2Zlci4kc2NvcGVkU2xvdHMuZGVmYXVsdCA/IHRyYW5zZmVyLiRzY29wZWRTbG90cy5kZWZhdWx0KHsgb3B0aW9uOiB0aGlzLm9wdGlvbiB9KSA6IGgoJ3NwYW4nLCBbdGhpcy5vcHRpb25bcGFuZWwubGFiZWxQcm9wXSB8fCB0aGlzLm9wdGlvbltwYW5lbC5rZXlQcm9wXV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbmRlckNvbnRlbnQ6IEZ1bmN0aW9uLFxuICAgIHBsYWNlaG9sZGVyOiBTdHJpbmcsXG4gICAgdGl0bGU6IFN0cmluZyxcbiAgICBmaWx0ZXJhYmxlOiBCb29sZWFuLFxuICAgIGZvcm1hdDogT2JqZWN0LFxuICAgIGZpbHRlck1ldGhvZDogRnVuY3Rpb24sXG4gICAgZGVmYXVsdENoZWNrZWQ6IEFycmF5LFxuICAgIHByb3BzOiBPYmplY3RcbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiBbXSxcbiAgICAgIGFsbENoZWNrZWQ6IGZhbHNlLFxuICAgICAgcXVlcnk6ICcnLFxuICAgICAgaW5wdXRIb3ZlcjogZmFsc2UsXG4gICAgICBjaGVja0NoYW5nZUJ5VXNlcjogdHJ1ZVxuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIGNoZWNrZWQ6IGZ1bmN0aW9uIGNoZWNrZWQodmFsLCBvbGRWYWwpIHtcbiAgICAgIHRoaXMudXBkYXRlQWxsQ2hlY2tlZCgpO1xuICAgICAgaWYgKHRoaXMuY2hlY2tDaGFuZ2VCeVVzZXIpIHtcbiAgICAgICAgdmFyIG1vdmVkS2V5cyA9IHZhbC5jb25jYXQob2xkVmFsKS5maWx0ZXIoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICByZXR1cm4gdmFsLmluZGV4T2YodikgPT09IC0xIHx8IG9sZFZhbC5pbmRleE9mKHYpID09PSAtMTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoZWNrZWQtY2hhbmdlJywgdmFsLCBtb3ZlZEtleXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hlY2tlZC1jaGFuZ2UnLCB2YWwpO1xuICAgICAgICB0aGlzLmNoZWNrQ2hhbmdlQnlVc2VyID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgY2hlY2tlZCA9IFtdO1xuICAgICAgdmFyIGZpbHRlcmVkRGF0YUtleXMgPSB0aGlzLmZpbHRlcmVkRGF0YS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1bX3RoaXMua2V5UHJvcF07XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2hlY2tlZC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChmaWx0ZXJlZERhdGFLZXlzLmluZGV4T2YoaXRlbSkgPiAtMSkge1xuICAgICAgICAgIGNoZWNrZWQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNoZWNrQ2hhbmdlQnlVc2VyID0gZmFsc2U7XG4gICAgICB0aGlzLmNoZWNrZWQgPSBjaGVja2VkO1xuICAgIH0sXG4gICAgY2hlY2thYmxlRGF0YTogZnVuY3Rpb24gY2hlY2thYmxlRGF0YSgpIHtcbiAgICAgIHRoaXMudXBkYXRlQWxsQ2hlY2tlZCgpO1xuICAgIH0sXG5cblxuICAgIGRlZmF1bHRDaGVja2VkOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCwgb2xkVmFsKSB7XG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgIGlmIChvbGRWYWwgJiYgdmFsLmxlbmd0aCA9PT0gb2xkVmFsLmxlbmd0aCAmJiB2YWwuZXZlcnkoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gb2xkVmFsLmluZGV4T2YoaXRlbSkgPiAtMTtcbiAgICAgICAgfSkpIHJldHVybjtcbiAgICAgICAgdmFyIGNoZWNrZWQgPSBbXTtcbiAgICAgICAgdmFyIGNoZWNrYWJsZURhdGFLZXlzID0gdGhpcy5jaGVja2FibGVEYXRhLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBpdGVtW190aGlzMi5rZXlQcm9wXTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhbC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgaWYgKGNoZWNrYWJsZURhdGFLZXlzLmluZGV4T2YoaXRlbSkgPiAtMSkge1xuICAgICAgICAgICAgY2hlY2tlZC5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2hlY2tDaGFuZ2VCeVVzZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaWx0ZXJlZERhdGE6IGZ1bmN0aW9uIGZpbHRlcmVkRGF0YSgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAodHlwZW9mIF90aGlzMy5maWx0ZXJNZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gX3RoaXMzLmZpbHRlck1ldGhvZChfdGhpczMucXVlcnksIGl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBsYWJlbCA9IGl0ZW1bX3RoaXMzLmxhYmVsUHJvcF0gfHwgaXRlbVtfdGhpczMua2V5UHJvcF0udG9TdHJpbmcoKTtcbiAgICAgICAgICByZXR1cm4gbGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKF90aGlzMy5xdWVyeS50b0xvd2VyQ2FzZSgpKSA+IC0xO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNoZWNrYWJsZURhdGE6IGZ1bmN0aW9uIGNoZWNrYWJsZURhdGEoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyZWREYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gIWl0ZW1bX3RoaXM0LmRpc2FibGVkUHJvcF07XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNoZWNrZWRTdW1tYXJ5OiBmdW5jdGlvbiBjaGVja2VkU3VtbWFyeSgpIHtcbiAgICAgIHZhciBjaGVja2VkTGVuZ3RoID0gdGhpcy5jaGVja2VkLmxlbmd0aDtcbiAgICAgIHZhciBkYXRhTGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aDtcbiAgICAgIHZhciBfZm9ybWF0ID0gdGhpcy5mb3JtYXQsXG4gICAgICAgICAgbm9DaGVja2VkID0gX2Zvcm1hdC5ub0NoZWNrZWQsXG4gICAgICAgICAgaGFzQ2hlY2tlZCA9IF9mb3JtYXQuaGFzQ2hlY2tlZDtcblxuICAgICAgaWYgKG5vQ2hlY2tlZCAmJiBoYXNDaGVja2VkKSB7XG4gICAgICAgIHJldHVybiBjaGVja2VkTGVuZ3RoID4gMCA/IGhhc0NoZWNrZWQucmVwbGFjZSgvXFwke2NoZWNrZWR9L2csIGNoZWNrZWRMZW5ndGgpLnJlcGxhY2UoL1xcJHt0b3RhbH0vZywgZGF0YUxlbmd0aCkgOiBub0NoZWNrZWQucmVwbGFjZSgvXFwke3RvdGFsfS9nLCBkYXRhTGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGVja2VkTGVuZ3RoICsgJy8nICsgZGF0YUxlbmd0aDtcbiAgICAgIH1cbiAgICB9LFxuICAgIGlzSW5kZXRlcm1pbmF0ZTogZnVuY3Rpb24gaXNJbmRldGVybWluYXRlKCkge1xuICAgICAgdmFyIGNoZWNrZWRMZW5ndGggPSB0aGlzLmNoZWNrZWQubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNoZWNrZWRMZW5ndGggPiAwICYmIGNoZWNrZWRMZW5ndGggPCB0aGlzLmNoZWNrYWJsZURhdGEubGVuZ3RoO1xuICAgIH0sXG4gICAgaGFzTm9NYXRjaDogZnVuY3Rpb24gaGFzTm9NYXRjaCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnF1ZXJ5Lmxlbmd0aCA+IDAgJiYgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoID09PSAwO1xuICAgIH0sXG4gICAgaW5wdXRJY29uOiBmdW5jdGlvbiBpbnB1dEljb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5xdWVyeS5sZW5ndGggPiAwICYmIHRoaXMuaW5wdXRIb3ZlciA/ICdjaXJjbGUtY2xvc2UnIDogJ3NlYXJjaCc7XG4gICAgfSxcbiAgICBsYWJlbFByb3A6IGZ1bmN0aW9uIGxhYmVsUHJvcCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxhYmVsIHx8ICdsYWJlbCc7XG4gICAgfSxcbiAgICBrZXlQcm9wOiBmdW5jdGlvbiBrZXlQcm9wKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMua2V5IHx8ICdrZXknO1xuICAgIH0sXG4gICAgZGlzYWJsZWRQcm9wOiBmdW5jdGlvbiBkaXNhYmxlZFByb3AoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCAnZGlzYWJsZWQnO1xuICAgIH0sXG4gICAgaGFzRm9vdGVyOiBmdW5jdGlvbiBoYXNGb290ZXIoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlQWxsQ2hlY2tlZDogZnVuY3Rpb24gdXBkYXRlQWxsQ2hlY2tlZCgpIHtcbiAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICB2YXIgY2hlY2thYmxlRGF0YUtleXMgPSB0aGlzLmNoZWNrYWJsZURhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtW190aGlzNS5rZXlQcm9wXTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbGxDaGVja2VkID0gY2hlY2thYmxlRGF0YUtleXMubGVuZ3RoID4gMCAmJiBjaGVja2FibGVEYXRhS2V5cy5ldmVyeShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gX3RoaXM1LmNoZWNrZWQuaW5kZXhPZihpdGVtKSA+IC0xO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVBbGxDaGVja2VkQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVBbGxDaGVja2VkQ2hhbmdlKHZhbHVlKSB7XG4gICAgICB2YXIgX3RoaXM2ID0gdGhpcztcblxuICAgICAgdGhpcy5jaGVja2VkID0gdmFsdWUgPyB0aGlzLmNoZWNrYWJsZURhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtW190aGlzNi5rZXlQcm9wXTtcbiAgICAgIH0pIDogW107XG4gICAgfSxcbiAgICBjbGVhclF1ZXJ5OiBmdW5jdGlvbiBjbGVhclF1ZXJ5KCkge1xuICAgICAgaWYgKHRoaXMuaW5wdXRJY29uID09PSAnY2lyY2xlLWNsb3NlJykge1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJhbnNmZXIvc3JjL3RyYW5zZmVyLXBhbmVsLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAodHJhbnNmZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJhbnNmZXIvc3JjL3RyYW5zZmVyLXBhbmVsLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHRyYW5zZmVyX3BhbmVsX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX3RyYW5zZmVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICB0cmFuc2Zlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJkZGFiOGJkX3JlbmRlcixcbiAgdHJhbnNmZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yZGRhYjhiZF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHRyYW5zZmVyX3BhbmVsX2FwaTsgfVxudHJhbnNmZXJfcGFuZWxfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy90cmFuc2Zlci9zcmMvdHJhbnNmZXItcGFuZWwudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRyYW5zZmVyX3BhbmVsID0gKHRyYW5zZmVyX3BhbmVsX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RyYW5zZmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRyYW5zZmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsVHJhbnNmZXInLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hLCBsb2NhbGVfZGVmYXVsdC5hLCBtaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgVHJhbnNmZXJQYW5lbDogdHJhbnNmZXJfcGFuZWwsXG4gICAgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmFcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGRhdGE6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRpdGxlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0sXG4gICAgYnV0dG9uVGV4dHM6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZpbHRlclBsYWNlaG9sZGVyOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZmlsdGVyTWV0aG9kOiBGdW5jdGlvbixcbiAgICBsZWZ0RGVmYXVsdENoZWNrZWQ6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJpZ2h0RGVmYXVsdENoZWNrZWQ6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlbmRlckNvbnRlbnQ6IEZ1bmN0aW9uLFxuICAgIHZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfSxcbiAgICBmaWx0ZXJhYmxlOiBCb29sZWFuLFxuICAgIHByb3BzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbDogJ2xhYmVsJyxcbiAgICAgICAgICBrZXk6ICdrZXknLFxuICAgICAgICAgIGRpc2FibGVkOiAnZGlzYWJsZWQnXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcbiAgICB0YXJnZXRPcmRlcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ29yaWdpbmFsJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsZWZ0Q2hlY2tlZDogW10sXG4gICAgICByaWdodENoZWNrZWQ6IFtdXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGF0YU9iajogZnVuY3Rpb24gZGF0YU9iaigpIHtcbiAgICAgIHZhciBrZXkgPSB0aGlzLnByb3BzLmtleTtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEucmVkdWNlKGZ1bmN0aW9uIChvLCBjdXIpIHtcbiAgICAgICAgcmV0dXJuIChvW2N1cltrZXldXSA9IGN1cikgJiYgbztcbiAgICAgIH0sIHt9KTtcbiAgICB9LFxuICAgIHNvdXJjZURhdGE6IGZ1bmN0aW9uIHNvdXJjZURhdGEoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gX3RoaXMudmFsdWUuaW5kZXhPZihpdGVtW190aGlzLnByb3BzLmtleV0pID09PSAtMTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdGFyZ2V0RGF0YTogZnVuY3Rpb24gdGFyZ2V0RGF0YSgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy50YXJnZXRPcmRlciA9PT0gJ29yaWdpbmFsJykge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIudmFsdWUuaW5kZXhPZihpdGVtW190aGlzMi5wcm9wcy5rZXldKSA+IC0xO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLnJlZHVjZShmdW5jdGlvbiAoYXJyLCBjdXIpIHtcbiAgICAgICAgICB2YXIgdmFsID0gX3RoaXMyLmRhdGFPYmpbY3VyXTtcbiAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICBhcnIucHVzaCh2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9LCBbXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYXNCdXR0b25UZXh0czogZnVuY3Rpb24gaGFzQnV0dG9uVGV4dHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5idXR0b25UZXh0cy5sZW5ndGggPT09IDI7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCkge1xuICAgICAgdGhpcy5kaXNwYXRjaCgnRWxGb3JtSXRlbScsICdlbC5mb3JtLmNoYW5nZScsIHZhbCk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgJ2Zvb3Rlci1mb3JtYXQnOiAnZm9vdGVyLWZvcm1hdCBpcyByZW5hbWVkIHRvIGZvcm1hdC4nXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSxcbiAgICBvblNvdXJjZUNoZWNrZWRDaGFuZ2U6IGZ1bmN0aW9uIG9uU291cmNlQ2hlY2tlZENoYW5nZSh2YWwsIG1vdmVkS2V5cykge1xuICAgICAgdGhpcy5sZWZ0Q2hlY2tlZCA9IHZhbDtcbiAgICAgIGlmIChtb3ZlZEtleXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgdGhpcy4kZW1pdCgnbGVmdC1jaGVjay1jaGFuZ2UnLCB2YWwsIG1vdmVkS2V5cyk7XG4gICAgfSxcbiAgICBvblRhcmdldENoZWNrZWRDaGFuZ2U6IGZ1bmN0aW9uIG9uVGFyZ2V0Q2hlY2tlZENoYW5nZSh2YWwsIG1vdmVkS2V5cykge1xuICAgICAgdGhpcy5yaWdodENoZWNrZWQgPSB2YWw7XG4gICAgICBpZiAobW92ZWRLZXlzID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgIHRoaXMuJGVtaXQoJ3JpZ2h0LWNoZWNrLWNoYW5nZScsIHZhbCwgbW92ZWRLZXlzKTtcbiAgICB9LFxuICAgIGFkZFRvTGVmdDogZnVuY3Rpb24gYWRkVG9MZWZ0KCkge1xuICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcbiAgICAgIHRoaXMucmlnaHRDaGVja2VkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIGluZGV4ID0gY3VycmVudFZhbHVlLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBjdXJyZW50VmFsdWUpO1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY3VycmVudFZhbHVlLCAnbGVmdCcsIHRoaXMucmlnaHRDaGVja2VkKTtcbiAgICB9LFxuICAgIGFkZFRvUmlnaHQ6IGZ1bmN0aW9uIGFkZFRvUmlnaHQoKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcbiAgICAgIHZhciBpdGVtc1RvQmVNb3ZlZCA9IFtdO1xuICAgICAgdmFyIGtleSA9IHRoaXMucHJvcHMua2V5O1xuICAgICAgdGhpcy5kYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgdmFyIGl0ZW1LZXkgPSBpdGVtW2tleV07XG4gICAgICAgIGlmIChfdGhpczMubGVmdENoZWNrZWQuaW5kZXhPZihpdGVtS2V5KSA+IC0xICYmIF90aGlzMy52YWx1ZS5pbmRleE9mKGl0ZW1LZXkpID09PSAtMSkge1xuICAgICAgICAgIGl0ZW1zVG9CZU1vdmVkLnB1c2goaXRlbUtleSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY3VycmVudFZhbHVlID0gdGhpcy50YXJnZXRPcmRlciA9PT0gJ3Vuc2hpZnQnID8gaXRlbXNUb0JlTW92ZWQuY29uY2F0KGN1cnJlbnRWYWx1ZSkgOiBjdXJyZW50VmFsdWUuY29uY2F0KGl0ZW1zVG9CZU1vdmVkKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgY3VycmVudFZhbHVlKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGN1cnJlbnRWYWx1ZSwgJ3JpZ2h0JywgdGhpcy5sZWZ0Q2hlY2tlZCk7XG4gICAgfSxcbiAgICBjbGVhclF1ZXJ5OiBmdW5jdGlvbiBjbGVhclF1ZXJ5KHdoaWNoKSB7XG4gICAgICBpZiAod2hpY2ggPT09ICdsZWZ0Jykge1xuICAgICAgICB0aGlzLiRyZWZzLmxlZnRQYW5lbC5xdWVyeSA9ICcnO1xuICAgICAgfSBlbHNlIGlmICh3aGljaCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICB0aGlzLiRyZWZzLnJpZ2h0UGFuZWwucXVlcnkgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90cmFuc2Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfdHJhbnNmZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAodHJhbnNmZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdHJhbnNmZXIvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdHJhbnNmZXJfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc190cmFuc2Zlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjNjU0ZGQ4X3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVjNjU0ZGQ4X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgdHJhbnNmZXJfc3JjX21haW5fYXBpOyB9XG50cmFuc2Zlcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3RyYW5zZmVyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0cmFuc2Zlcl9zcmNfbWFpbiA9ICh0cmFuc2Zlcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RyYW5zZmVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnRyYW5zZmVyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodHJhbnNmZXJfc3JjX21haW4ubmFtZSwgdHJhbnNmZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgdHJhbnNmZXIgPSAodHJhbnNmZXJfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jb250YWluZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTViZjE4MWQ0JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmYxODFkNF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJzZWN0aW9uXCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbC1jb250YWluZXJcIiwgY2xhc3M6IHsgXCJpcy12ZXJ0aWNhbFwiOiBfdm0uaXNWZXJ0aWNhbCB9IH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81YmYxODFkNF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzViZjE4MWQ0X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29udGFpbmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmYxODFkNCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY29udGFpbmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY29udGFpbmVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ29udGFpbmVyJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxDb250YWluZXInLFxuXG4gIHByb3BzOiB7XG4gICAgZGlyZWN0aW9uOiBTdHJpbmdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzVmVydGljYWw6IGZ1bmN0aW9uIGlzVmVydGljYWwoKSB7XG4gICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuJHNsb3RzICYmIHRoaXMuJHNsb3RzLmRlZmF1bHQgPyB0aGlzLiRzbG90cy5kZWZhdWx0LnNvbWUoZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICAgIHZhciB0YWcgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMudGFnO1xuICAgICAgICByZXR1cm4gdGFnID09PSAnZWwtaGVhZGVyJyB8fCB0YWcgPT09ICdlbC1mb290ZXInO1xuICAgICAgfSkgOiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jb250YWluZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NvbnRhaW5lcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChjb250YWluZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29udGFpbmVyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbnRhaW5lcl9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2NvbnRhaW5lcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzViZjE4MWQ0X3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzViZjE4MWQ0X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgY29udGFpbmVyX3NyY19tYWluX2FwaTsgfVxuY29udGFpbmVyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY29udGFpbmVyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjb250YWluZXJfc3JjX21haW4gPSAoY29udGFpbmVyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY29udGFpbmVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnRhaW5lcl9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNvbnRhaW5lcl9zcmNfbWFpbi5uYW1lLCBjb250YWluZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY29udGFpbmVyID0gKGNvbnRhaW5lcl9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2hlYWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmIyOTZhYjImXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJiMjk2YWIyX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImhlYWRlclwiLFxuICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaGVhZGVyXCIsIHN0eWxlOiB7IGhlaWdodDogX3ZtLmhlaWdodCB9IH0sXG4gICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgIDJcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYjI5NmFiMl9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJiMjk2YWIyX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yYjI5NmFiMiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsSGVhZGVyJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxIZWFkZXInLFxuXG4gIHByb3BzOiB7XG4gICAgaGVpZ2h0OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnNjBweCdcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9oZWFkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2hlYWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChoZWFkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGhlYWRlcl9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2hlYWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJiMjk2YWIyX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzJiMjk2YWIyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaGVhZGVyX3NyY19tYWluX2FwaTsgfVxuaGVhZGVyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvaGVhZGVyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBoZWFkZXJfc3JjX21haW4gPSAoaGVhZGVyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaGVhZGVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmhlYWRlcl9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGhlYWRlcl9zcmNfbWFpbi5uYW1lLCBoZWFkZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaGVhZGVyID0gKGhlYWRlcl9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2FzaWRlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMzQxMWRiZiZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDM0MTFkYmZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYXNpZGVcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWFzaWRlXCIsIHN0eWxlOiB7IHdpZHRoOiBfdm0ud2lkdGggfSB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDM0MTFkYmZfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMzQxMWRiZl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2FzaWRlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMzQxMWRiZiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYXNpZGUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhc2lkZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEFzaWRlJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxBc2lkZScsXG5cbiAgcHJvcHM6IHtcbiAgICB3aWR0aDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzMwMHB4J1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2FzaWRlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19hc2lkZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChhc2lkZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hc2lkZS9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBhc2lkZV9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2FzaWRlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDM0MTFkYmZfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDM0MTFkYmZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhc2lkZV9zcmNfbWFpbl9hcGk7IH1cbmFzaWRlX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvYXNpZGUvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGFzaWRlX3NyY19tYWluID0gKGFzaWRlX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXNpZGUvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYXNpZGVfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChhc2lkZV9zcmNfbWFpbi5uYW1lLCBhc2lkZV9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhc2lkZSA9IChhc2lkZV9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL21haW4vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhM2E3NDA2JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTNhNzQwNl9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJtYWluXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtbWFpblwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmEzYTc0MDZfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yYTNhNzQwNl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21haW4vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJhM2E3NDA2JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9tYWluL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWFpbl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbE1haW4nLFxuICBjb21wb25lbnROYW1lOiAnRWxNYWluJ1xufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21haW4vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX21haW5fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAobWFpbl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9tYWluL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIG1haW5fc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19tYWluX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmEzYTc0MDZfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMmEzYTc0MDZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBtYWluX3NyY19tYWluX2FwaTsgfVxubWFpbl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL21haW4vc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1haW5fc3JjX21haW4gPSAobWFpbl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL21haW4vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xubWFpbl9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KG1haW5fc3JjX21haW4ubmFtZSwgbWFpbl9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19tYWluID0gKG1haW5fc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9mb290ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTgwMjEwMzM4JlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF84MDIxMDMzOF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJmb290ZXJcIixcbiAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWZvb3RlclwiLCBzdHlsZTogeyBoZWlnaHQ6IF92bS5oZWlnaHQgfSB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfODAyMTAzMzhfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF84MDIxMDMzOF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvb3Rlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ODAyMTAzMzgmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2Zvb3Rlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGZvb3Rlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbEZvb3RlcicsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsRm9vdGVyJyxcblxuICBwcm9wczoge1xuICAgIGhlaWdodDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJzYwcHgnXG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZm9vdGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19mb290ZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoZm9vdGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvb3Rlci9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBmb290ZXJfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19mb290ZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF84MDIxMDMzOF9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF84MDIxMDMzOF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGZvb3Rlcl9zcmNfbWFpbl9hcGk7IH1cbmZvb3Rlcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2Zvb3Rlci9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZm9vdGVyX3NyY19tYWluID0gKGZvb3Rlcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Zvb3Rlci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mb290ZXJfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChmb290ZXJfc3JjX21haW4ubmFtZSwgZm9vdGVyX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGZvb3RlciA9IChmb290ZXJfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvdGltZWxpbmUvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0aW1lbGluZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFRpbWVsaW5lJyxcblxuICBwcm9wczoge1xuICAgIHJldmVyc2U6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aW1lbGluZTogdGhpc1xuICAgIH07XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBoID0gYXJndW1lbnRzWzBdO1xuXG4gICAgdmFyIHJldmVyc2UgPSB0aGlzLnJldmVyc2U7XG4gICAgdmFyIGNsYXNzZXMgPSB7XG4gICAgICAnZWwtdGltZWxpbmUnOiB0cnVlLFxuICAgICAgJ2lzLXJldmVyc2UnOiByZXZlcnNlXG4gICAgfTtcbiAgICB2YXIgc2xvdHMgPSB0aGlzLiRzbG90cy5kZWZhdWx0IHx8IFtdO1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICBzbG90cyA9IHNsb3RzLnJldmVyc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIGgoXG4gICAgICAndWwnLFxuICAgICAgeyAnY2xhc3MnOiBjbGFzc2VzIH0sXG4gICAgICBbc2xvdHNdXG4gICAgKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RpbWVsaW5lL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190aW1lbGluZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0aW1lbGluZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lbGluZS9zcmMvbWFpbi52dWVcbnZhciBtYWluX3JlbmRlciwgbWFpbl9zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgdGltZWxpbmVfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc190aW1lbGluZV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbl9yZW5kZXIsXG4gIG1haW5fc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciB0aW1lbGluZV9zcmNfbWFpbl9hcGk7IH1cbnRpbWVsaW5lX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGltZWxpbmUvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVsaW5lX3NyY19tYWluID0gKHRpbWVsaW5lX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudGltZWxpbmVfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudCh0aW1lbGluZV9zcmNfbWFpbi5uYW1lLCB0aW1lbGluZV9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0aW1lbGluZSA9ICh0aW1lbGluZV9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RpbWVsaW5lL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD02MWE2OWU1MCZcbnZhciBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjFhNjllNTBfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC10aW1lbGluZS1pdGVtXCIgfSwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGltZWxpbmUtaXRlbV9fdGFpbFwiIH0pLFxuICAgICFfdm0uJHNsb3RzLmRvdFxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXRpbWVsaW5lLWl0ZW1fX25vZGVcIixcbiAgICAgICAgICAgIGNsYXNzOiBbXG4gICAgICAgICAgICAgIFwiZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tXCIgKyAoX3ZtLnNpemUgfHwgXCJcIiksXG4gICAgICAgICAgICAgIFwiZWwtdGltZWxpbmUtaXRlbV9fbm9kZS0tXCIgKyAoX3ZtLnR5cGUgfHwgXCJcIilcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IF92bS5jb2xvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX3ZtLmljb25cbiAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGltZWxpbmUtaXRlbV9faWNvblwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5pY29uXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgIF1cbiAgICAgICAgKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfdm0uJHNsb3RzLmRvdFxuICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRpbWVsaW5lLWl0ZW1fX2RvdFwiIH0sIFtfdm0uX3QoXCJkb3RcIildLCAyKVxuICAgICAgOiBfdm0uX2UoKSxcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXRpbWVsaW5lLWl0ZW1fX3dyYXBwZXJcIiB9LCBbXG4gICAgICAhX3ZtLmhpZGVUaW1lc3RhbXAgJiYgX3ZtLnBsYWNlbWVudCA9PT0gXCJ0b3BcIlxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGltZWxpbmUtaXRlbV9fdGltZXN0YW1wIGlzLXRvcFwiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS50aW1lc3RhbXApICsgXCJcXG4gICAgXCIpXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXRpbWVsaW5lLWl0ZW1fX2NvbnRlbnRcIiB9LFxuICAgICAgICBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sXG4gICAgICAgIDJcbiAgICAgICksXG4gICAgICAhX3ZtLmhpZGVUaW1lc3RhbXAgJiYgX3ZtLnBsYWNlbWVudCA9PT0gXCJib3R0b21cIlxuICAgICAgICA/IF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtdGltZWxpbmUtaXRlbV9fdGltZXN0YW1wIGlzLWJvdHRvbVwiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgIFwiICsgX3ZtLl9zKF92bS50aW1lc3RhbXApICsgXCJcXG4gICAgXCIpXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF0pXG4gIF0pXG59XG52YXIgaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzYxYTY5ZTUwX3N0YXRpY1JlbmRlckZucyA9IFtdXG5pdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjFhNjllNTBfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lbGluZS9zcmMvaXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjFhNjllNTAmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3RpbWVsaW5lL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0aW1lbGluZV9zcmNfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFRpbWVsaW5lSXRlbScsXG5cbiAgaW5qZWN0OiBbJ3RpbWVsaW5lJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0aW1lc3RhbXA6IFN0cmluZyxcblxuICAgIGhpZGVUaW1lc3RhbXA6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG5cbiAgICBwbGFjZW1lbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdib3R0b20nXG4gICAgfSxcblxuICAgIHR5cGU6IFN0cmluZyxcblxuICAgIGNvbG9yOiBTdHJpbmcsXG5cbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnbm9ybWFsJ1xuICAgIH0sXG5cbiAgICBpY29uOiBTdHJpbmdcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3RpbWVsaW5lL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190aW1lbGluZV9zcmNfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0aW1lbGluZV9zcmNfaXRlbXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90aW1lbGluZS9zcmMvaXRlbS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBzcmNfaXRlbV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX3RpbWVsaW5lX3NyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjFhNjllNTBfcmVuZGVyLFxuICBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNjFhNjllNTBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzcmNfaXRlbV9hcGk7IH1cbnNyY19pdGVtX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvdGltZWxpbmUvc3JjL2l0ZW0udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVsaW5lX3NyY19pdGVtID0gKHNyY19pdGVtX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGltZWxpbmUtaXRlbS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG50aW1lbGluZV9zcmNfaXRlbS5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHRpbWVsaW5lX3NyY19pdGVtLm5hbWUsIHRpbWVsaW5lX3NyY19pdGVtKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRpbWVsaW5lX2l0ZW0gPSAodGltZWxpbmVfc3JjX2l0ZW0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0wMWNmM2I2NSZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMDFjZjNiNjVfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiYVwiLFxuICAgIF92bS5fYihcbiAgICAgIHtcbiAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICBcImVsLWxpbmtcIixcbiAgICAgICAgICBfdm0udHlwZSA/IFwiZWwtbGluay0tXCIgKyBfdm0udHlwZSA6IFwiXCIsXG4gICAgICAgICAgX3ZtLmRpc2FibGVkICYmIFwiaXMtZGlzYWJsZWRcIixcbiAgICAgICAgICBfdm0udW5kZXJsaW5lICYmICFfdm0uZGlzYWJsZWQgJiYgXCJpcy11bmRlcmxpbmVcIlxuICAgICAgICBdLFxuICAgICAgICBhdHRyczogeyBocmVmOiBfdm0uZGlzYWJsZWQgPyBudWxsIDogX3ZtLmhyZWYgfSxcbiAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDbGljayB9XG4gICAgICB9LFxuICAgICAgXCJhXCIsXG4gICAgICBfdm0uJGF0dHJzLFxuICAgICAgZmFsc2VcbiAgICApLFxuICAgIFtcbiAgICAgIF92bS5pY29uID8gX2MoXCJpXCIsIHsgY2xhc3M6IF92bS5pY29uIH0pIDogX3ZtLl9lKCksXG4gICAgICBfdm0uJHNsb3RzLmRlZmF1bHRcbiAgICAgICAgPyBfYyhcInNwYW5cIiwgeyBzdGF0aWNDbGFzczogXCJlbC1saW5rLS1pbm5lclwiIH0sIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSwgMilcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF92bS4kc2xvdHMuaWNvbiA/IFtfdm0uJHNsb3RzLmljb24gPyBfdm0uX3QoXCJpY29uXCIpIDogX3ZtLl9lKCldIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wMWNmM2I2NV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAxY2YzYjY1X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbGluay9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDFjZjNiNjUmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2xpbmsvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbGlua19zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbExpbmsnLFxuXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RlZmF1bHQnXG4gICAgfSxcbiAgICB1bmRlcmxpbmU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBocmVmOiBTdHJpbmcsXG4gICAgaWNvbjogU3RyaW5nXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhldmVudCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIGlmICghdGhpcy5ocmVmKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnY2xpY2snLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19saW5rX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGxpbmtfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvbGluay9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBsaW5rX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfbGlua19zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAxY2YzYjY1X3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzAxY2YzYjY1X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgbGlua19zcmNfbWFpbl9hcGk7IH1cbmxpbmtfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9saW5rL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBsaW5rX3NyY19tYWluID0gKGxpbmtfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9saW5rL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmxpbmtfc3JjX21haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChsaW5rX3NyY19tYWluLm5hbWUsIGxpbmtfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfbGluayA9IChsaW5rX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZGl2aWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2ZhMDJhN2UmZnVuY3Rpb25hbD10cnVlJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEwMmE3ZV9mdW5jdGlvbmFsX3RydWVfcmVuZGVyID0gZnVuY3Rpb24oX2gsIF92bSkge1xuICB2YXIgX2MgPSBfdm0uX2NcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgX3ZtLl9nKFxuICAgICAgX3ZtLl9iKFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgIF92bS5kYXRhLnN0YXRpY0NsYXNzLFxuICAgICAgICAgICAgXCJlbC1kaXZpZGVyXCIsXG4gICAgICAgICAgICBcImVsLWRpdmlkZXItLVwiICsgX3ZtLnByb3BzLmRpcmVjdGlvblxuICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgX3ZtLmRhdGEuYXR0cnMsXG4gICAgICAgIGZhbHNlXG4gICAgICApLFxuICAgICAgX3ZtLmxpc3RlbmVyc1xuICAgICksXG4gICAgW1xuICAgICAgX3ZtLnNsb3RzKCkuZGVmYXVsdCAmJiBfdm0ucHJvcHMuZGlyZWN0aW9uICE9PSBcInZlcnRpY2FsXCJcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzOiBbXCJlbC1kaXZpZGVyX190ZXh0XCIsIFwiaXMtXCIgKyBfdm0ucHJvcHMuY29udGVudFBvc2l0aW9uXSB9LFxuICAgICAgICAgICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKVxuICAgIF1cbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEwMmE3ZV9mdW5jdGlvbmFsX3RydWVfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEwMmE3ZV9mdW5jdGlvbmFsX3RydWVfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kaXZpZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03ZmEwMmE3ZSZmdW5jdGlvbmFsPXRydWUmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2RpdmlkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkaXZpZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsRGl2aWRlcicsXG4gIHByb3BzOiB7XG4gICAgZGlyZWN0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaG9yaXpvbnRhbCcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCddLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICB9XG4gICAgfSxcbiAgICBjb250ZW50UG9zaXRpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjZW50ZXInLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0J10uaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kaXZpZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19kaXZpZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGRpdmlkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGl2aWRlci9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBkaXZpZGVyX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfZGl2aWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzdmYTAyYTdlX2Z1bmN0aW9uYWxfdHJ1ZV9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZmEwMmE3ZV9mdW5jdGlvbmFsX3RydWVfc3RhdGljUmVuZGVyRm5zLFxuICB0cnVlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGRpdmlkZXJfc3JjX21haW5fYXBpOyB9XG5kaXZpZGVyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZGl2aWRlci9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGl2aWRlcl9zcmNfbWFpbiA9IChkaXZpZGVyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGl2aWRlci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5kaXZpZGVyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoZGl2aWRlcl9zcmNfbWFpbi5uYW1lLCBkaXZpZGVyX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRpdmlkZXIgPSAoZGl2aWRlcl9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2ltYWdlL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00NGQ4NGE3YyZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNDRkODRhN2NfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbWFnZVwiIH0sXG4gICAgW1xuICAgICAgX3ZtLmxvYWRpbmdcbiAgICAgICAgPyBfdm0uX3QoXCJwbGFjZWhvbGRlclwiLCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWltYWdlX19wbGFjZWhvbGRlclwiIH0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfdm0uZXJyb3JcbiAgICAgICAgPyBfdm0uX3QoXCJlcnJvclwiLCBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWltYWdlX19lcnJvclwiIH0sIFtcbiAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0udChcImVsLmltYWdlLmVycm9yXCIpKSlcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfYyhcbiAgICAgICAgICAgIFwiaW1nXCIsXG4gICAgICAgICAgICBfdm0uX2coXG4gICAgICAgICAgICAgIF92bS5fYihcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbWFnZV9faW5uZXJcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiZWwtaW1hZ2VfX2lubmVyLS1jZW50ZXJcIjogX3ZtLmFsaWduQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICBcImVsLWltYWdlX19wcmV2aWV3XCI6IF92bS5wcmV2aWV3XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5pbWFnZVN0eWxlLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgc3JjOiBfdm0uc3JjIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmNsaWNrSGFuZGxlciB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImltZ1wiLFxuICAgICAgICAgICAgICAgIF92bS4kYXR0cnMsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLiRsaXN0ZW5lcnNcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgX3ZtLnByZXZpZXdcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBfdm0uc2hvd1ZpZXdlclxuICAgICAgICAgICAgICA/IF9jKFwiaW1hZ2Utdmlld2VyXCIsIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiei1pbmRleFwiOiBfdm0uekluZGV4LFxuICAgICAgICAgICAgICAgICAgICBcImluaXRpYWwtaW5kZXhcIjogX3ZtLmltYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIFwib24tY2xvc2VcIjogX3ZtLmNsb3NlVmlld2VyLFxuICAgICAgICAgICAgICAgICAgICBcInVybC1saXN0XCI6IF92bS5wcmV2aWV3U3JjTGlzdFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICBdXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NGQ4NGE3Y19zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQ0ZDg0YTdjX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW1hZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQ0ZDg0YTdjJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2ltYWdlL3NyYy9pbWFnZS12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTVlNzNiMzA3JlxudmFyIGltYWdlX3ZpZXdlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzVlNzNiMzA3X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRyYW5zaXRpb25cIiwgeyBhdHRyczogeyBuYW1lOiBcInZpZXdlci1mYWRlXCIgfSB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICByZWY6IFwiZWwtaW1hZ2Utdmlld2VyX193cmFwcGVyXCIsXG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9fd3JhcHBlclwiLFxuICAgICAgICBzdHlsZTogeyBcInotaW5kZXhcIjogX3ZtLnZpZXdlclpJbmRleCB9LFxuICAgICAgICBhdHRyczogeyB0YWJpbmRleDogXCItMVwiIH1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIF9jKFwiZGl2XCIsIHtcbiAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbWFnZS12aWV3ZXJfX21hc2tcIixcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldCAhPT0gJGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBfdm0uaGFuZGxlTWFza0NsaWNrKCRldmVudClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbWFnZS12aWV3ZXJfX2J0biBlbC1pbWFnZS12aWV3ZXJfX2Nsb3NlXCIsXG4gICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmhpZGUgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWljb24tY2xvc2VcIiB9KV1cbiAgICAgICAgKSxcbiAgICAgICAgIV92bS5pc1NpbmdsZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbWFnZS12aWV3ZXJfX2J0biBlbC1pbWFnZS12aWV3ZXJfX3ByZXZcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7IFwiaXMtZGlzYWJsZWRcIjogIV92bS5pbmZpbml0ZSAmJiBfdm0uaXNGaXJzdCB9LFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5wcmV2IH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWFycm93LWxlZnRcIiB9KV1cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW1hZ2Utdmlld2VyX19idG4gZWwtaW1hZ2Utdmlld2VyX19uZXh0XCIsXG4gICAgICAgICAgICAgICAgICBjbGFzczogeyBcImlzLWRpc2FibGVkXCI6ICFfdm0uaW5maW5pdGUgJiYgX3ZtLmlzTGFzdCB9LFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5uZXh0IH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pY29uLWFycm93LXJpZ2h0XCIgfSldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW1hZ2Utdmlld2VyX19idG4gZWwtaW1hZ2Utdmlld2VyX19hY3Rpb25zXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9fYWN0aW9uc19faW5uZXJcIiB9LCBbXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi16b29tLW91dFwiLFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVBY3Rpb25zKFwiem9vbU91dFwiKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi16b29tLWluXCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbnMoXCJ6b29tSW5cIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pbWFnZS12aWV3ZXJfX2FjdGlvbnNfX2RpdmlkZXJcIiB9KSxcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHsgY2xhc3M6IF92bS5tb2RlLmljb24sIG9uOiB7IGNsaWNrOiBfdm0udG9nZ2xlTW9kZSB9IH0pLFxuICAgICAgICAgICAgICBfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1pbWFnZS12aWV3ZXJfX2FjdGlvbnNfX2RpdmlkZXJcIiB9KSxcbiAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pY29uLXJlZnJlc2gtbGVmdFwiLFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVBY3Rpb25zKFwiYW50aWNsb2NlbGlzZVwiKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1yZWZyZXNoLXJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUFjdGlvbnMoXCJjbG9jZWxpc2VcIilcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKVxuICAgICAgICAgIF1cbiAgICAgICAgKSxcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWltYWdlLXZpZXdlcl9fY2FudmFzXCIgfSxcbiAgICAgICAgICBfdm0uX2woX3ZtLnVybExpc3QsIGZ1bmN0aW9uKHVybCwgaSkge1xuICAgICAgICAgICAgcmV0dXJuIGkgPT09IF92bS5pbmRleFxuICAgICAgICAgICAgICA/IF9jKFwiaW1nXCIsIHtcbiAgICAgICAgICAgICAgICAgIGtleTogdXJsLFxuICAgICAgICAgICAgICAgICAgcmVmOiBcImltZ1wiLFxuICAgICAgICAgICAgICAgICAgcmVmSW5Gb3I6IHRydWUsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1pbWFnZS12aWV3ZXJfX2ltZ1wiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5pbWdTdHlsZSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNyYzogX3ZtLmN1cnJlbnRJbWcgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWQ6IF92bS5oYW5kbGVJbWdMb2FkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogX3ZtLmhhbmRsZUltZ0Vycm9yLFxuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IF92bS5oYW5kbGVNb3VzZURvd25cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgMFxuICAgICAgICApXG4gICAgICBdLFxuICAgICAgMlxuICAgIClcbiAgXSlcbn1cbnZhciBpbWFnZV92aWV3ZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZTczYjMwN19zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaW1hZ2Vfdmlld2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWU3M2IzMDdfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbWFnZS9zcmMvaW1hZ2Utdmlld2VyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01ZTczYjMwNyZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW1hZ2Uvc3JjL2ltYWdlLXZpZXdlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG52YXIgaW1hZ2Vfdmlld2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cbnZhciBNb2RlID0ge1xuICBDT05UQUlOOiB7XG4gICAgbmFtZTogJ2NvbnRhaW4nLFxuICAgIGljb246ICdlbC1pY29uLWZ1bGwtc2NyZWVuJ1xuICB9LFxuICBPUklHSU5BTDoge1xuICAgIG5hbWU6ICdvcmlnaW5hbCcsXG4gICAgaWNvbjogJ2VsLWljb24tYy1zY2FsZS10by1vcmlnaW5hbCdcbiAgfVxufTtcblxudmFyIG1vdXNld2hlZWxFdmVudE5hbWUgPSBPYmplY3QodXRpbF9bXCJpc0ZpcmVmb3hcIl0pKCkgPyAnRE9NTW91c2VTY3JvbGwnIDogJ21vdXNld2hlZWwnO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbWFnZV92aWV3ZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnZWxJbWFnZVZpZXdlcicsXG5cbiAgcHJvcHM6IHtcbiAgICB1cmxMaXN0OiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgICB6SW5kZXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDIwMDBcbiAgICB9LFxuICAgIG9uU3dpdGNoOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge31cbiAgICB9LFxuICAgIG9uQ2xvc2U6IHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7fVxuICAgIH0sXG4gICAgaW5pdGlhbEluZGV4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICBhcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBtYXNrQ2xvc2FibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluZGV4OiB0aGlzLmluaXRpYWxJbmRleCxcbiAgICAgIGlzU2hvdzogZmFsc2UsXG4gICAgICBpbmZpbml0ZTogdHJ1ZSxcbiAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgbW9kZTogTW9kZS5DT05UQUlOLFxuICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgIHNjYWxlOiAxLFxuICAgICAgICBkZWc6IDAsXG4gICAgICAgIG9mZnNldFg6IDAsXG4gICAgICAgIG9mZnNldFk6IDAsXG4gICAgICAgIGVuYWJsZVRyYW5zaXRpb246IGZhbHNlXG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzU2luZ2xlOiBmdW5jdGlvbiBpc1NpbmdsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVybExpc3QubGVuZ3RoIDw9IDE7XG4gICAgfSxcbiAgICBpc0ZpcnN0OiBmdW5jdGlvbiBpc0ZpcnN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5kZXggPT09IDA7XG4gICAgfSxcbiAgICBpc0xhc3Q6IGZ1bmN0aW9uIGlzTGFzdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmluZGV4ID09PSB0aGlzLnVybExpc3QubGVuZ3RoIC0gMTtcbiAgICB9LFxuICAgIGN1cnJlbnRJbWc6IGZ1bmN0aW9uIGN1cnJlbnRJbWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cmxMaXN0W3RoaXMuaW5kZXhdO1xuICAgIH0sXG4gICAgaW1nU3R5bGU6IGZ1bmN0aW9uIGltZ1N0eWxlKCkge1xuICAgICAgdmFyIF90cmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybSxcbiAgICAgICAgICBzY2FsZSA9IF90cmFuc2Zvcm0uc2NhbGUsXG4gICAgICAgICAgZGVnID0gX3RyYW5zZm9ybS5kZWcsXG4gICAgICAgICAgb2Zmc2V0WCA9IF90cmFuc2Zvcm0ub2Zmc2V0WCxcbiAgICAgICAgICBvZmZzZXRZID0gX3RyYW5zZm9ybS5vZmZzZXRZLFxuICAgICAgICAgIGVuYWJsZVRyYW5zaXRpb24gPSBfdHJhbnNmb3JtLmVuYWJsZVRyYW5zaXRpb247XG5cbiAgICAgIHZhciBzdHlsZSA9IHtcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoJyArIHNjYWxlICsgJykgcm90YXRlKCcgKyBkZWcgKyAnZGVnKScsXG4gICAgICAgIHRyYW5zaXRpb246IGVuYWJsZVRyYW5zaXRpb24gPyAndHJhbnNmb3JtIC4zcycgOiAnJyxcbiAgICAgICAgJ21hcmdpbi1sZWZ0Jzogb2Zmc2V0WCArICdweCcsXG4gICAgICAgICdtYXJnaW4tdG9wJzogb2Zmc2V0WSArICdweCdcbiAgICAgIH07XG4gICAgICBpZiAodGhpcy5tb2RlID09PSBNb2RlLkNPTlRBSU4pIHtcbiAgICAgICAgc3R5bGUubWF4V2lkdGggPSBzdHlsZS5tYXhIZWlnaHQgPSAnMTAwJSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcbiAgICB2aWV3ZXJaSW5kZXg6IGZ1bmN0aW9uIHZpZXdlclpJbmRleCgpIHtcbiAgICAgIHZhciBuZXh0WkluZGV4ID0gcG9wdXBfW1wiUG9wdXBNYW5hZ2VyXCJdLm5leHRaSW5kZXgoKTtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA+IG5leHRaSW5kZXggPyB0aGlzLnpJbmRleCA6IG5leHRaSW5kZXg7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIGluZGV4OiB7XG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMub25Td2l0Y2godmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGN1cnJlbnRJbWc6IGZ1bmN0aW9uIGN1cnJlbnRJbWcodmFsKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICB2YXIgJGltZyA9IF90aGlzLiRyZWZzLmltZ1swXTtcbiAgICAgICAgaWYgKCEkaW1nLmNvbXBsZXRlKSB7XG4gICAgICAgICAgX3RoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGhpZGU6IGZ1bmN0aW9uIGhpZGUoKSB7XG4gICAgICB0aGlzLmRldmljZVN1cHBvcnRVbmluc3RhbGwoKTtcbiAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgIH0sXG4gICAgZGV2aWNlU3VwcG9ydEluc3RhbGw6IGZ1bmN0aW9uIGRldmljZVN1cHBvcnRJbnN0YWxsKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuX2tleURvd25IYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGU7XG4gICAgICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgICAgIC8vIEVTQ1xuICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICBfdGhpczIuaGlkZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgLy8gU1BBQ0VcbiAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgX3RoaXMyLnRvZ2dsZU1vZGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIC8vIExFRlRfQVJST1dcbiAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgX3RoaXMyLnByZXYoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIC8vIFVQX0FSUk9XXG4gICAgICAgICAgY2FzZSAzODpcbiAgICAgICAgICAgIF90aGlzMi5oYW5kbGVBY3Rpb25zKCd6b29tSW4nKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIC8vIFJJR0hUX0FSUk9XXG4gICAgICAgICAgY2FzZSAzOTpcbiAgICAgICAgICAgIF90aGlzMi5uZXh0KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAvLyBET1dOX0FSUk9XXG4gICAgICAgICAgY2FzZSA0MDpcbiAgICAgICAgICAgIF90aGlzMi5oYW5kbGVBY3Rpb25zKCd6b29tT3V0Jyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyID0gT2JqZWN0KHV0aWxfW1wicmFmVGhyb3R0bGVcIl0pKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHZhciBkZWx0YSA9IGUud2hlZWxEZWx0YSA/IGUud2hlZWxEZWx0YSA6IC1lLmRldGFpbDtcbiAgICAgICAgaWYgKGRlbHRhID4gMCkge1xuICAgICAgICAgIF90aGlzMi5oYW5kbGVBY3Rpb25zKCd6b29tSW4nLCB7XG4gICAgICAgICAgICB6b29tUmF0ZTogMC4wMTUsXG4gICAgICAgICAgICBlbmFibGVUcmFuc2l0aW9uOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzMi5oYW5kbGVBY3Rpb25zKCd6b29tT3V0Jywge1xuICAgICAgICAgICAgem9vbVJhdGU6IDAuMDE1LFxuICAgICAgICAgICAgZW5hYmxlVHJhbnNpdGlvbjogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duSGFuZGxlcik7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShkb2N1bWVudCwgbW91c2V3aGVlbEV2ZW50TmFtZSwgdGhpcy5fbW91c2VXaGVlbEhhbmRsZXIpO1xuICAgIH0sXG4gICAgZGV2aWNlU3VwcG9ydFVuaW5zdGFsbDogZnVuY3Rpb24gZGV2aWNlU3VwcG9ydFVuaW5zdGFsbCgpIHtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9rZXlEb3duSGFuZGxlcik7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkoZG9jdW1lbnQsIG1vdXNld2hlZWxFdmVudE5hbWUsIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2tleURvd25IYW5kbGVyID0gbnVsbDtcbiAgICAgIHRoaXMuX21vdXNlV2hlZWxIYW5kbGVyID0gbnVsbDtcbiAgICB9LFxuICAgIGhhbmRsZUltZ0xvYWQ6IGZ1bmN0aW9uIGhhbmRsZUltZ0xvYWQoZSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVJbWdFcnJvcjogZnVuY3Rpb24gaGFuZGxlSW1nRXJyb3IoZSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICBlLnRhcmdldC5hbHQgPSAn5Yqg6L295aSx6LSlJztcbiAgICB9LFxuICAgIGhhbmRsZU1vdXNlRG93bjogZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duKGUpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IGUuYnV0dG9uICE9PSAwKSByZXR1cm47XG5cbiAgICAgIHZhciBfdHJhbnNmb3JtMiA9IHRoaXMudHJhbnNmb3JtLFxuICAgICAgICAgIG9mZnNldFggPSBfdHJhbnNmb3JtMi5vZmZzZXRYLFxuICAgICAgICAgIG9mZnNldFkgPSBfdHJhbnNmb3JtMi5vZmZzZXRZO1xuXG4gICAgICB2YXIgc3RhcnRYID0gZS5wYWdlWDtcbiAgICAgIHZhciBzdGFydFkgPSBlLnBhZ2VZO1xuICAgICAgdGhpcy5fZHJhZ0hhbmRsZXIgPSBPYmplY3QodXRpbF9bXCJyYWZUaHJvdHRsZVwiXSkoZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIF90aGlzMy50cmFuc2Zvcm0ub2Zmc2V0WCA9IG9mZnNldFggKyBldi5wYWdlWCAtIHN0YXJ0WDtcbiAgICAgICAgX3RoaXMzLnRyYW5zZm9ybS5vZmZzZXRZID0gb2Zmc2V0WSArIGV2LnBhZ2VZIC0gc3RhcnRZO1xuICAgICAgfSk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShkb2N1bWVudCwgJ21vdXNlbW92ZScsIHRoaXMuX2RyYWdIYW5kbGVyKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCAnbW91c2V1cCcsIGZ1bmN0aW9uIChldikge1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCBfdGhpczMuX2RyYWdIYW5kbGVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfSxcbiAgICBoYW5kbGVNYXNrQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZU1hc2tDbGljaygpIHtcbiAgICAgIGlmICh0aGlzLm1hc2tDbG9zYWJsZSkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgIHRoaXMudHJhbnNmb3JtID0ge1xuICAgICAgICBzY2FsZTogMSxcbiAgICAgICAgZGVnOiAwLFxuICAgICAgICBvZmZzZXRYOiAwLFxuICAgICAgICBvZmZzZXRZOiAwLFxuICAgICAgICBlbmFibGVUcmFuc2l0aW9uOiBmYWxzZVxuICAgICAgfTtcbiAgICB9LFxuICAgIHRvZ2dsZU1vZGU6IGZ1bmN0aW9uIHRvZ2dsZU1vZGUoKSB7XG4gICAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG5cbiAgICAgIHZhciBtb2RlTmFtZXMgPSBPYmplY3Qua2V5cyhNb2RlKTtcbiAgICAgIHZhciBtb2RlVmFsdWVzID0gT2JqZWN0LnZhbHVlcyhNb2RlKTtcbiAgICAgIHZhciBpbmRleCA9IG1vZGVWYWx1ZXMuaW5kZXhPZih0aGlzLm1vZGUpO1xuICAgICAgdmFyIG5leHRJbmRleCA9IChpbmRleCArIDEpICUgbW9kZU5hbWVzLmxlbmd0aDtcbiAgICAgIHRoaXMubW9kZSA9IE1vZGVbbW9kZU5hbWVzW25leHRJbmRleF1dO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0sXG4gICAgcHJldjogZnVuY3Rpb24gcHJldigpIHtcbiAgICAgIGlmICh0aGlzLmlzRmlyc3QgJiYgIXRoaXMuaW5maW5pdGUpIHJldHVybjtcbiAgICAgIHZhciBsZW4gPSB0aGlzLnVybExpc3QubGVuZ3RoO1xuICAgICAgdGhpcy5pbmRleCA9ICh0aGlzLmluZGV4IC0gMSArIGxlbikgJSBsZW47XG4gICAgfSxcbiAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgaWYgKHRoaXMuaXNMYXN0ICYmICF0aGlzLmluZmluaXRlKSByZXR1cm47XG4gICAgICB2YXIgbGVuID0gdGhpcy51cmxMaXN0Lmxlbmd0aDtcbiAgICAgIHRoaXMuaW5kZXggPSAodGhpcy5pbmRleCArIDEpICUgbGVuO1xuICAgIH0sXG4gICAgaGFuZGxlQWN0aW9uczogZnVuY3Rpb24gaGFuZGxlQWN0aW9ucyhhY3Rpb24pIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuXG4gICAgICB2YXIgX3pvb21SYXRlJHJvdGF0ZURlZyRlID0gaW1hZ2Vfdmlld2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZXh0ZW5kcyh7XG4gICAgICAgIHpvb21SYXRlOiAwLjIsXG4gICAgICAgIHJvdGF0ZURlZzogOTAsXG4gICAgICAgIGVuYWJsZVRyYW5zaXRpb246IHRydWVcbiAgICAgIH0sIG9wdGlvbnMpLFxuICAgICAgICAgIHpvb21SYXRlID0gX3pvb21SYXRlJHJvdGF0ZURlZyRlLnpvb21SYXRlLFxuICAgICAgICAgIHJvdGF0ZURlZyA9IF96b29tUmF0ZSRyb3RhdGVEZWckZS5yb3RhdGVEZWcsXG4gICAgICAgICAgZW5hYmxlVHJhbnNpdGlvbiA9IF96b29tUmF0ZSRyb3RhdGVEZWckZS5lbmFibGVUcmFuc2l0aW9uO1xuXG4gICAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy50cmFuc2Zvcm07XG5cbiAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgIGNhc2UgJ3pvb21PdXQnOlxuICAgICAgICAgIGlmICh0cmFuc2Zvcm0uc2NhbGUgPiAwLjIpIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybS5zY2FsZSA9IHBhcnNlRmxvYXQoKHRyYW5zZm9ybS5zY2FsZSAtIHpvb21SYXRlKS50b0ZpeGVkKDMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3pvb21Jbic6XG4gICAgICAgICAgdHJhbnNmb3JtLnNjYWxlID0gcGFyc2VGbG9hdCgodHJhbnNmb3JtLnNjYWxlICsgem9vbVJhdGUpLnRvRml4ZWQoMykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjbG9jZWxpc2UnOlxuICAgICAgICAgIHRyYW5zZm9ybS5kZWcgKz0gcm90YXRlRGVnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhbnRpY2xvY2VsaXNlJzpcbiAgICAgICAgICB0cmFuc2Zvcm0uZGVnIC09IHJvdGF0ZURlZztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHRyYW5zZm9ybS5lbmFibGVUcmFuc2l0aW9uID0gZW5hYmxlVHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5kZXZpY2VTdXBwb3J0SW5zdGFsbCgpO1xuICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSkge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLiRlbCk7XG4gICAgfVxuICAgIC8vIGFkZCB0YWJpbmRleCB0aGVuIHdyYXBwZXIgY2FuIGJlIGZvY3VzYWJsZSB2aWEgSmF2YXNjcmlwdFxuICAgIC8vIGZvY3VzIHdyYXBwZXIgc28gYXJyb3cga2V5IGNhbid0IGNhdXNlIGlubmVyIHNjcm9sbCBiZWhhdmlvciB1bmRlcm5lYXRoXG4gICAgdGhpcy4kcmVmc1snZWwtaW1hZ2Utdmlld2VyX193cmFwcGVyJ10uZm9jdXMoKTtcbiAgfSxcbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgLy8gaWYgYXBwZW5kVG9Cb2R5IGlzIHRydWUsIHJlbW92ZSBET00gbm9kZSBhZnRlciBkZXN0cm95XG4gICAgaWYgKHRoaXMuYXBwZW5kVG9Cb2R5ICYmIHRoaXMuJGVsICYmIHRoaXMuJGVsLnBhcmVudE5vZGUpIHtcbiAgICAgIHRoaXMuJGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy4kZWwpO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ltYWdlL3NyYy9pbWFnZS12aWV3ZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19pbWFnZV92aWV3ZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoaW1hZ2Vfdmlld2VydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ltYWdlL3NyYy9pbWFnZS12aWV3ZXIudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgaW1hZ2Vfdmlld2VyX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2ltYWdlX3ZpZXdlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaW1hZ2Vfdmlld2VydnVlX3R5cGVfdGVtcGxhdGVfaWRfNWU3M2IzMDdfcmVuZGVyLFxuICBpbWFnZV92aWV3ZXJ2dWVfdHlwZV90ZW1wbGF0ZV9pZF81ZTczYjMwN19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGltYWdlX3ZpZXdlcl9hcGk7IH1cbmltYWdlX3ZpZXdlcl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2ltYWdlL3NyYy9pbWFnZS12aWV3ZXIudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGltYWdlX3ZpZXdlciA9IChpbWFnZV92aWV3ZXJfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW1hZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cbnZhciBpc1N1cHBvcnRPYmplY3RGaXQgPSBmdW5jdGlvbiBpc1N1cHBvcnRPYmplY3RGaXQoKSB7XG4gIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub2JqZWN0Rml0ICE9PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgT2JqZWN0Rml0ID0ge1xuICBOT05FOiAnbm9uZScsXG4gIENPTlRBSU46ICdjb250YWluJyxcbiAgQ09WRVI6ICdjb3ZlcicsXG4gIEZJTEw6ICdmaWxsJyxcbiAgU0NBTEVfRE9XTjogJ3NjYWxlLWRvd24nXG59O1xuXG52YXIgcHJldk92ZXJmbG93ID0gJyc7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGltYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsSW1hZ2UnLFxuXG4gIG1peGluczogW2xvY2FsZV9kZWZhdWx0LmFdLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBJbWFnZVZpZXdlcjogaW1hZ2Vfdmlld2VyXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcmM6IFN0cmluZyxcbiAgICBmaXQ6IFN0cmluZyxcbiAgICBsYXp5OiBCb29sZWFuLFxuICAgIHNjcm9sbENvbnRhaW5lcjoge30sXG4gICAgcHJldmlld1NyY0xpc3Q6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHpJbmRleDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMjAwMFxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgc2hvdzogIXRoaXMubGF6eSxcbiAgICAgIGltYWdlV2lkdGg6IDAsXG4gICAgICBpbWFnZUhlaWdodDogMCxcbiAgICAgIHNob3dWaWV3ZXI6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW1hZ2VTdHlsZTogZnVuY3Rpb24gaW1hZ2VTdHlsZSgpIHtcbiAgICAgIHZhciBmaXQgPSB0aGlzLmZpdDtcblxuICAgICAgaWYgKCF0aGlzLiRpc1NlcnZlciAmJiBmaXQpIHtcbiAgICAgICAgcmV0dXJuIGlzU3VwcG9ydE9iamVjdEZpdCgpID8geyAnb2JqZWN0LWZpdCc6IGZpdCB9IDogdGhpcy5nZXRJbWFnZVN0eWxlKGZpdCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICBhbGlnbkNlbnRlcjogZnVuY3Rpb24gYWxpZ25DZW50ZXIoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuJGlzU2VydmVyICYmICFpc1N1cHBvcnRPYmplY3RGaXQoKSAmJiB0aGlzLmZpdCAhPT0gT2JqZWN0Rml0LkZJTEw7XG4gICAgfSxcbiAgICBwcmV2aWV3OiBmdW5jdGlvbiBwcmV2aWV3KCkge1xuICAgICAgdmFyIHByZXZpZXdTcmNMaXN0ID0gdGhpcy5wcmV2aWV3U3JjTGlzdDtcblxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocHJldmlld1NyY0xpc3QpICYmIHByZXZpZXdTcmNMaXN0Lmxlbmd0aCA+IDA7XG4gICAgfSxcbiAgICBpbWFnZUluZGV4OiBmdW5jdGlvbiBpbWFnZUluZGV4KCkge1xuICAgICAgdmFyIHByZXZpZXdJbmRleCA9IDA7XG4gICAgICB2YXIgc3JjSW5kZXggPSB0aGlzLnByZXZpZXdTcmNMaXN0LmluZGV4T2YodGhpcy5zcmMpO1xuICAgICAgaWYgKHNyY0luZGV4ID49IDApIHtcbiAgICAgICAgcHJldmlld0luZGV4ID0gc3JjSW5kZXg7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJldmlld0luZGV4O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNyYzogZnVuY3Rpb24gc3JjKHZhbCkge1xuICAgICAgdGhpcy5zaG93ICYmIHRoaXMubG9hZEltYWdlKCk7XG4gICAgfSxcbiAgICBzaG93OiBmdW5jdGlvbiBzaG93KHZhbCkge1xuICAgICAgdmFsICYmIHRoaXMubG9hZEltYWdlKCk7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMubGF6eSkge1xuICAgICAgdGhpcy5hZGRMYXp5TG9hZExpc3RlbmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZEltYWdlKCk7XG4gICAgfVxuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMubGF6eSAmJiB0aGlzLnJlbW92ZUxhenlMb2FkTGlzdGVuZXIoKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBsb2FkSW1hZ2U6IGZ1bmN0aW9uIGxvYWRJbWFnZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgICAvLyByZXNldCBzdGF0dXNcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmVycm9yID0gZmFsc2U7XG5cbiAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTG9hZChlLCBpbWcpO1xuICAgICAgfTtcbiAgICAgIGltZy5vbmVycm9yID0gdGhpcy5oYW5kbGVFcnJvci5iaW5kKHRoaXMpO1xuXG4gICAgICAvLyBiaW5kIGh0bWwgYXR0cnNcbiAgICAgIC8vIHNvIGl0IGNhbiBiZWhhdmUgY29uc2lzdGVudGx5XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLiRhdHRycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IF90aGlzLiRhdHRyc1trZXldO1xuICAgICAgICBpbWcuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBpbWcuc3JjID0gdGhpcy5zcmM7XG4gICAgfSxcbiAgICBoYW5kbGVMb2FkOiBmdW5jdGlvbiBoYW5kbGVMb2FkKGUsIGltZykge1xuICAgICAgdGhpcy5pbWFnZVdpZHRoID0gaW1nLndpZHRoO1xuICAgICAgdGhpcy5pbWFnZUhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB9LFxuICAgIGhhbmRsZUVycm9yOiBmdW5jdGlvbiBoYW5kbGVFcnJvcihlKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuZXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy4kZW1pdCgnZXJyb3InLCBlKTtcbiAgICB9LFxuICAgIGhhbmRsZUxhenlMb2FkOiBmdW5jdGlvbiBoYW5kbGVMYXp5TG9hZCgpIHtcbiAgICAgIGlmIChPYmplY3QoZG9tX1tcImlzSW5Db250YWluZXJcIl0pKHRoaXMuJGVsLCB0aGlzLl9zY3JvbGxDb250YWluZXIpKSB7XG4gICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgIHRoaXMucmVtb3ZlTGF6eUxvYWRMaXN0ZW5lcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYWRkTGF6eUxvYWRMaXN0ZW5lcjogZnVuY3Rpb24gYWRkTGF6eUxvYWRMaXN0ZW5lcigpIHtcbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgICB2YXIgc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5zY3JvbGxDb250YWluZXI7XG5cbiAgICAgIHZhciBfc2Nyb2xsQ29udGFpbmVyID0gbnVsbDtcblxuICAgICAgaWYgKE9iamVjdCh0eXBlc19bXCJpc0h0bWxFbGVtZW50XCJdKShzY3JvbGxDb250YWluZXIpKSB7XG4gICAgICAgIF9zY3JvbGxDb250YWluZXIgPSBzY3JvbGxDb250YWluZXI7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdCh0eXBlc19bXCJpc1N0cmluZ1wiXSkoc2Nyb2xsQ29udGFpbmVyKSkge1xuICAgICAgICBfc2Nyb2xsQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzY3JvbGxDb250YWluZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3Njcm9sbENvbnRhaW5lciA9IE9iamVjdChkb21fW1wiZ2V0U2Nyb2xsQ29udGFpbmVyXCJdKSh0aGlzLiRlbCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICAgIHRoaXMuX3Njcm9sbENvbnRhaW5lciA9IF9zY3JvbGxDb250YWluZXI7XG4gICAgICAgIHRoaXMuX2xhenlMb2FkSGFuZGxlciA9IHRocm90dGxlX2RlZmF1bHQoKSgyMDAsIHRoaXMuaGFuZGxlTGF6eUxvYWQpO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShfc2Nyb2xsQ29udGFpbmVyLCAnc2Nyb2xsJywgdGhpcy5fbGF6eUxvYWRIYW5kbGVyKTtcbiAgICAgICAgdGhpcy5oYW5kbGVMYXp5TG9hZCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVtb3ZlTGF6eUxvYWRMaXN0ZW5lcjogZnVuY3Rpb24gcmVtb3ZlTGF6eUxvYWRMaXN0ZW5lcigpIHtcbiAgICAgIHZhciBfc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5fc2Nyb2xsQ29udGFpbmVyLFxuICAgICAgICAgIF9sYXp5TG9hZEhhbmRsZXIgPSB0aGlzLl9sYXp5TG9hZEhhbmRsZXI7XG5cblxuICAgICAgaWYgKHRoaXMuJGlzU2VydmVyIHx8ICFfc2Nyb2xsQ29udGFpbmVyIHx8ICFfbGF6eUxvYWRIYW5kbGVyKSByZXR1cm47XG5cbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShfc2Nyb2xsQ29udGFpbmVyLCAnc2Nyb2xsJywgX2xhenlMb2FkSGFuZGxlcik7XG4gICAgICB0aGlzLl9zY3JvbGxDb250YWluZXIgPSBudWxsO1xuICAgICAgdGhpcy5fbGF6eUxvYWRIYW5kbGVyID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogc2ltdWxhdGUgb2JqZWN0LWZpdCBiZWhhdmlvciB0byBjb21wYXRpYmxlIHdpdGggSUUxMSBhbmQgb3RoZXIgYnJvd3NlcnMgd2hpY2ggbm90IHN1cHBvcnQgb2JqZWN0LWZpdFxuICAgICAqL1xuICAgIGdldEltYWdlU3R5bGU6IGZ1bmN0aW9uIGdldEltYWdlU3R5bGUoZml0KSB7XG4gICAgICB2YXIgaW1hZ2VXaWR0aCA9IHRoaXMuaW1hZ2VXaWR0aCxcbiAgICAgICAgICBpbWFnZUhlaWdodCA9IHRoaXMuaW1hZ2VIZWlnaHQ7XG4gICAgICB2YXIgXyRlbCA9IHRoaXMuJGVsLFxuICAgICAgICAgIGNvbnRhaW5lcldpZHRoID0gXyRlbC5jbGllbnRXaWR0aCxcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQgPSBfJGVsLmNsaWVudEhlaWdodDtcblxuXG4gICAgICBpZiAoIWltYWdlV2lkdGggfHwgIWltYWdlSGVpZ2h0IHx8ICFjb250YWluZXJXaWR0aCB8fCAhY29udGFpbmVySGVpZ2h0KSByZXR1cm4ge307XG5cbiAgICAgIHZhciBpbWFnZUFzcGVjdFJhdGlvID0gaW1hZ2VXaWR0aCAvIGltYWdlSGVpZ2h0O1xuICAgICAgdmFyIGNvbnRhaW5lckFzcGVjdFJhdGlvID0gY29udGFpbmVyV2lkdGggLyBjb250YWluZXJIZWlnaHQ7XG5cbiAgICAgIGlmIChmaXQgPT09IE9iamVjdEZpdC5TQ0FMRV9ET1dOKSB7XG4gICAgICAgIHZhciBpc1NtYWxsZXIgPSBpbWFnZVdpZHRoIDwgY29udGFpbmVyV2lkdGggJiYgaW1hZ2VIZWlnaHQgPCBjb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGZpdCA9IGlzU21hbGxlciA/IE9iamVjdEZpdC5OT05FIDogT2JqZWN0Rml0LkNPTlRBSU47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZml0KSB7XG4gICAgICAgIGNhc2UgT2JqZWN0Rml0Lk5PTkU6XG4gICAgICAgICAgcmV0dXJuIHsgd2lkdGg6ICdhdXRvJywgaGVpZ2h0OiAnYXV0bycgfTtcbiAgICAgICAgY2FzZSBPYmplY3RGaXQuQ09OVEFJTjpcbiAgICAgICAgICByZXR1cm4gaW1hZ2VBc3BlY3RSYXRpbyA8IGNvbnRhaW5lckFzcGVjdFJhdGlvID8geyB3aWR0aDogJ2F1dG8nIH0gOiB7IGhlaWdodDogJ2F1dG8nIH07XG4gICAgICAgIGNhc2UgT2JqZWN0Rml0LkNPVkVSOlxuICAgICAgICAgIHJldHVybiBpbWFnZUFzcGVjdFJhdGlvIDwgY29udGFpbmVyQXNwZWN0UmF0aW8gPyB7IGhlaWdodDogJ2F1dG8nIH0gOiB7IHdpZHRoOiAnYXV0bycgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGlja0hhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrSGFuZGxlcigpIHtcbiAgICAgIC8vIGRvbid0IHNob3cgdmlld2VyIHdoZW4gcHJldmlldyBpcyBmYWxzZVxuICAgICAgaWYgKCF0aGlzLnByZXZpZXcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gcHJldmVudCBib2R5IHNjcm9sbFxuICAgICAgcHJldk92ZXJmbG93ID0gZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdztcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHRoaXMuc2hvd1ZpZXdlciA9IHRydWU7XG4gICAgfSxcbiAgICBjbG9zZVZpZXdlcjogZnVuY3Rpb24gY2xvc2VWaWV3ZXIoKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gcHJldk92ZXJmbG93O1xuICAgICAgdGhpcy5zaG93Vmlld2VyID0gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW1hZ2Uvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2ltYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGltYWdlX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2ltYWdlL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGltYWdlX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfaW1hZ2Vfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NGQ4NGE3Y19yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF80NGQ4NGE3Y19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGltYWdlX3NyY19tYWluX2FwaTsgfVxuaW1hZ2Vfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9pbWFnZS9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW1hZ2Vfc3JjX21haW4gPSAoaW1hZ2Vfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbWFnZS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pbWFnZV9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGltYWdlX3NyY19tYWluLm5hbWUsIGltYWdlX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2ltYWdlID0gKGltYWdlX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZkOTc1NmJlJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1jYWxlbmRhclwiIH0sIFtcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNhbGVuZGFyX19oZWFkZXJcIiB9LCBbXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWNhbGVuZGFyX190aXRsZVwiIH0sIFtcbiAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgXCIgKyBfdm0uX3MoX3ZtLmkxOG5EYXRlKSArIFwiXFxuICAgIFwiKVxuICAgICAgXSksXG4gICAgICBfdm0udmFsaWRhdGVkUmFuZ2UubGVuZ3RoID09PSAwXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1jYWxlbmRhcl9fYnV0dG9uLWdyb3VwXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJlbC1idXR0b24tZ3JvdXBcIixcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHR5cGU6IFwicGxhaW5cIiwgc2l6ZTogXCJtaW5pXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2VsZWN0RGF0ZShcInByZXYtbW9udGhcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIucHJldk1vbnRoXCIpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImVsLWJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdHlwZTogXCJwbGFpblwiLCBzaXplOiBcIm1pbmlcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWxlY3REYXRlKFwidG9kYXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udChcImVsLmRhdGVwaWNrZXIudG9kYXlcIikpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZWwtYnV0dG9uXCIsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB0eXBlOiBcInBsYWluXCIsIHNpemU6IFwibWluaVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnNlbGVjdERhdGUoXCJuZXh0LW1vbnRoXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnQoXCJlbC5kYXRlcGlja2VyLm5leHRNb250aFwiKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDFcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdKSxcbiAgICBfdm0udmFsaWRhdGVkUmFuZ2UubGVuZ3RoID09PSAwXG4gICAgICA/IF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBrZXk6IFwibm8tcmFuZ2VcIiwgc3RhdGljQ2xhc3M6IFwiZWwtY2FsZW5kYXJfX2JvZHlcIiB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF9jKFwiZGF0ZS10YWJsZVwiLCB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogX3ZtLmRhdGUsXG4gICAgICAgICAgICAgICAgXCJzZWxlY3RlZC1kYXlcIjogX3ZtLnJlYWxTZWxlY3RlZERheSxcbiAgICAgICAgICAgICAgICBcImZpcnN0LWRheS1vZi13ZWVrXCI6IF92bS5yZWFsRmlyc3REYXlPZldlZWtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgb246IHsgcGljazogX3ZtLnBpY2tEYXkgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICAgICAgOiBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsga2V5OiBcImhhcy1yYW5nZVwiLCBzdGF0aWNDbGFzczogXCJlbC1jYWxlbmRhcl9fYm9keVwiIH0sXG4gICAgICAgICAgX3ZtLl9sKF92bS52YWxpZGF0ZWRSYW5nZSwgZnVuY3Rpb24ocmFuZ2UsIGluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gX2MoXCJkYXRlLXRhYmxlXCIsIHtcbiAgICAgICAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBkYXRlOiByYW5nZVswXSxcbiAgICAgICAgICAgICAgICBcInNlbGVjdGVkLWRheVwiOiBfdm0ucmVhbFNlbGVjdGVkRGF5LFxuICAgICAgICAgICAgICAgIHJhbmdlOiByYW5nZSxcbiAgICAgICAgICAgICAgICBcImhpZGUtaGVhZGVyXCI6IGluZGV4ICE9PSAwLFxuICAgICAgICAgICAgICAgIFwiZmlyc3QtZGF5LW9mLXdlZWtcIjogX3ZtLnJlYWxGaXJzdERheU9mV2Vla1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbjogeyBwaWNrOiBfdm0ucGlja0RheSB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIDFcbiAgICAgICAgKVxuICBdKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzZkOTc1NmJlX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTZkOTc1NmJlJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZVwiXG52YXIgZGF0ZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcbnZhciBkYXRlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGRhdGVfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL2RhdGUtdGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZGF0ZV90YWJsZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIHByb3BzOiB7XG4gICAgc2VsZWN0ZWREYXk6IFN0cmluZywgLy8gZm9ybWF0ZWQgZGF0ZSB5eXl5LU1NLWRkXG4gICAgcmFuZ2U6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIGlmICghKHZhbCAmJiB2YWwubGVuZ3RoKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHZhciBzdGFydCA9IHZhbFswXSxcbiAgICAgICAgICAgIGVuZCA9IHZhbFsxXTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aFwiXSkoc3RhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkYXRlOiBEYXRlLFxuICAgIGhpZGVIZWFkZXI6IEJvb2xlYW4sXG4gICAgZmlyc3REYXlPZldlZWs6IE51bWJlclxuICB9LFxuXG4gIGluamVjdDogWydlbENhbGVuZGFyJ10sXG5cbiAgbWV0aG9kczoge1xuICAgIHRvTmVzdGVkQXJyOiBmdW5jdGlvbiB0b05lc3RlZEFycihkYXlzKSB7XG4gICAgICByZXR1cm4gT2JqZWN0KGRhdGVfdXRpbF9bXCJyYW5nZVwiXSkoZGF5cy5sZW5ndGggLyA3KS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgICAgIHZhciBzdGFydCA9IGluZGV4ICogNztcbiAgICAgICAgcmV0dXJuIGRheXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgNyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGdldEZvcm1hdGVEYXRlOiBmdW5jdGlvbiBnZXRGb3JtYXRlRGF0ZShkYXksIHR5cGUpIHtcbiAgICAgIGlmICghZGF5IHx8IFsncHJldicsICdjdXJyZW50JywgJ25leHQnXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZGF5IG9yIHR5cGUnKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcmVmaXggPSB0aGlzLmN1ck1vbnRoRGF0ZVByZWZpeDtcbiAgICAgIGlmICh0eXBlID09PSAncHJldicpIHtcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmV2TW9udGhEYXRlUHJlZml4O1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbmV4dCcpIHtcbiAgICAgICAgcHJlZml4ID0gdGhpcy5uZXh0TW9udGhEYXRlUHJlZml4O1xuICAgICAgfVxuICAgICAgZGF5ID0gKCcwMCcgKyBkYXkpLnNsaWNlKC0yKTtcbiAgICAgIHJldHVybiBwcmVmaXggKyAnLScgKyBkYXk7XG4gICAgfSxcbiAgICBnZXRDZWxsQ2xhc3M6IGZ1bmN0aW9uIGdldENlbGxDbGFzcyhfcmVmKSB7XG4gICAgICB2YXIgdGV4dCA9IF9yZWYudGV4dCxcbiAgICAgICAgICB0eXBlID0gX3JlZi50eXBlO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IFt0eXBlXTtcbiAgICAgIGlmICh0eXBlID09PSAnY3VycmVudCcpIHtcbiAgICAgICAgdmFyIGRhdGUgPSB0aGlzLmdldEZvcm1hdGVEYXRlKHRleHQsIHR5cGUpO1xuICAgICAgICBpZiAoZGF0ZSA9PT0gdGhpcy5zZWxlY3RlZERheSkge1xuICAgICAgICAgIGNsYXNzZXMucHVzaCgnaXMtc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0ZSA9PT0gdGhpcy5mb3JtYXRlZFRvZGF5KSB7XG4gICAgICAgICAgY2xhc3Nlcy5wdXNoKCdpcy10b2RheScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9LFxuICAgIHBpY2tEYXk6IGZ1bmN0aW9uIHBpY2tEYXkoX3JlZjIpIHtcbiAgICAgIHZhciB0ZXh0ID0gX3JlZjIudGV4dCxcbiAgICAgICAgICB0eXBlID0gX3JlZjIudHlwZTtcblxuICAgICAgdmFyIGRhdGUgPSB0aGlzLmdldEZvcm1hdGVEYXRlKHRleHQsIHR5cGUpO1xuICAgICAgdGhpcy4kZW1pdCgncGljaycsIGRhdGUpO1xuICAgIH0sXG4gICAgY2VsbFJlbmRlclByb3h5OiBmdW5jdGlvbiBjZWxsUmVuZGVyUHJveHkoX3JlZjMpIHtcbiAgICAgIHZhciB0ZXh0ID0gX3JlZjMudGV4dCxcbiAgICAgICAgICB0eXBlID0gX3JlZjMudHlwZTtcbiAgICAgIHZhciBoID0gdGhpcy4kY3JlYXRlRWxlbWVudDtcblxuICAgICAgdmFyIHJlbmRlciA9IHRoaXMuZWxDYWxlbmRhci4kc2NvcGVkU2xvdHMuZGF0ZUNlbGw7XG4gICAgICBpZiAoIXJlbmRlcikgcmV0dXJuIGgoJ3NwYW4nLCBbdGV4dF0pO1xuXG4gICAgICB2YXIgZGF5ID0gdGhpcy5nZXRGb3JtYXRlRGF0ZSh0ZXh0LCB0eXBlKTtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoZGF5KTtcbiAgICAgIHZhciBkYXRhID0ge1xuICAgICAgICBpc1NlbGVjdGVkOiB0aGlzLnNlbGVjdGVkRGF5ID09PSBkYXksXG4gICAgICAgIHR5cGU6IHR5cGUgKyAnLW1vbnRoJyxcbiAgICAgICAgZGF5OiBkYXlcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVuZGVyKHsgZGF0ZTogZGF0ZSwgZGF0YTogZGF0YSB9KTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBXRUVLX0RBWVM6IGZ1bmN0aW9uIFdFRUtfREFZUygpIHtcbiAgICAgIHJldHVybiBPYmplY3QoZGF0ZV91dGlsX1tcImdldEkxOG5TZXR0aW5nc1wiXSkoKS5kYXlOYW1lcztcbiAgICB9LFxuICAgIHByZXZNb250aERhdGVQcmVmaXg6IGZ1bmN0aW9uIHByZXZNb250aERhdGVQcmVmaXgoKSB7XG4gICAgICB2YXIgdGVtcCA9IG5ldyBEYXRlKHRoaXMuZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgdGVtcC5zZXREYXRlKDApO1xuICAgICAgcmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0ZW1wLCAneXl5eS1NTScpO1xuICAgIH0sXG4gICAgY3VyTW9udGhEYXRlUHJlZml4OiBmdW5jdGlvbiBjdXJNb250aERhdGVQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gZGF0ZV9kZWZhdWx0LmEuZm9ybWF0KHRoaXMuZGF0ZSwgJ3l5eXktTU0nKTtcbiAgICB9LFxuICAgIG5leHRNb250aERhdGVQcmVmaXg6IGZ1bmN0aW9uIG5leHRNb250aERhdGVQcmVmaXgoKSB7XG4gICAgICB2YXIgdGVtcCA9IG5ldyBEYXRlKHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEsIDEpO1xuICAgICAgcmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0ZW1wLCAneXl5eS1NTScpO1xuICAgIH0sXG4gICAgZm9ybWF0ZWRUb2RheTogZnVuY3Rpb24gZm9ybWF0ZWRUb2RheSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsQ2FsZW5kYXIuZm9ybWF0ZWRUb2RheTtcbiAgICB9LFxuICAgIGlzSW5SYW5nZTogZnVuY3Rpb24gaXNJblJhbmdlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucmFuZ2UgJiYgdGhpcy5yYW5nZS5sZW5ndGg7XG4gICAgfSxcbiAgICByb3dzOiBmdW5jdGlvbiByb3dzKCkge1xuICAgICAgdmFyIGRheXMgPSBbXTtcbiAgICAgIC8vIGlmIHJhbmdlIGV4aXN0cywgc2hvdWxkIHJlbmRlciBkYXlzIGluIHJhbmdlLlxuICAgICAgaWYgKHRoaXMuaXNJblJhbmdlKSB7XG4gICAgICAgIHZhciBfcmFuZ2UgPSB0aGlzLnJhbmdlLFxuICAgICAgICAgICAgc3RhcnQgPSBfcmFuZ2VbMF0sXG4gICAgICAgICAgICBlbmQgPSBfcmFuZ2VbMV07XG5cbiAgICAgICAgdmFyIGN1cnJlbnRNb250aFJhbmdlID0gT2JqZWN0KGRhdGVfdXRpbF9bXCJyYW5nZVwiXSkoZW5kLmdldERhdGUoKSAtIHN0YXJ0LmdldERhdGUoKSArIDEpLm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogc3RhcnQuZ2V0RGF0ZSgpICsgaW5kZXgsXG4gICAgICAgICAgICB0eXBlOiAnY3VycmVudCdcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IGN1cnJlbnRNb250aFJhbmdlLmxlbmd0aCAlIDc7XG4gICAgICAgIHJlbWFpbmluZyA9IHJlbWFpbmluZyA9PT0gMCA/IDAgOiA3IC0gcmVtYWluaW5nO1xuICAgICAgICB2YXIgbmV4dE1vbnRoUmFuZ2UgPSBPYmplY3QoZGF0ZV91dGlsX1tcInJhbmdlXCJdKShyZW1haW5pbmcpLm1hcChmdW5jdGlvbiAoXywgaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogaW5kZXggKyAxLFxuICAgICAgICAgICAgdHlwZTogJ25leHQnXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRheXMgPSBjdXJyZW50TW9udGhSYW5nZS5jb25jYXQobmV4dE1vbnRoUmFuZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGRhdGUgPSB0aGlzLmRhdGU7XG4gICAgICAgIHZhciBmaXJzdERheSA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0Rmlyc3REYXlPZk1vbnRoXCJdKShkYXRlKTtcbiAgICAgICAgZmlyc3REYXkgPSBmaXJzdERheSA9PT0gMCA/IDcgOiBmaXJzdERheTtcbiAgICAgICAgdmFyIGZpcnN0RGF5T2ZXZWVrID0gdHlwZW9mIHRoaXMuZmlyc3REYXlPZldlZWsgPT09ICdudW1iZXInID8gdGhpcy5maXJzdERheU9mV2VlayA6IDE7XG4gICAgICAgIHZhciBvZmZzZXQgPSAoNyArIGZpcnN0RGF5IC0gZmlyc3REYXlPZldlZWspICUgNztcbiAgICAgICAgdmFyIHByZXZNb250aERheXMgPSBPYmplY3QoZGF0ZV91dGlsX1tcImdldFByZXZNb250aExhc3REYXlzXCJdKShkYXRlLCBvZmZzZXQpLm1hcChmdW5jdGlvbiAoZGF5KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IGRheSxcbiAgICAgICAgICAgIHR5cGU6ICdwcmV2J1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgY3VycmVudE1vbnRoRGF5cyA9IE9iamVjdChkYXRlX3V0aWxfW1wiZ2V0TW9udGhEYXlzXCJdKShkYXRlKS5tYXAoZnVuY3Rpb24gKGRheSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiBkYXksXG4gICAgICAgICAgICB0eXBlOiAnY3VycmVudCdcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgZGF5cyA9IFtdLmNvbmNhdChwcmV2TW9udGhEYXlzLCBjdXJyZW50TW9udGhEYXlzKTtcbiAgICAgICAgdmFyIG5leHRNb250aERheXMgPSBPYmplY3QoZGF0ZV91dGlsX1tcInJhbmdlXCJdKSg0MiAtIGRheXMubGVuZ3RoKS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRleHQ6IGluZGV4ICsgMSxcbiAgICAgICAgICAgIHR5cGU6ICduZXh0J1xuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBkYXlzID0gZGF5cy5jb25jYXQobmV4dE1vbnRoRGF5cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy50b05lc3RlZEFycihkYXlzKTtcbiAgICB9LFxuICAgIHdlZWtEYXlzOiBmdW5jdGlvbiB3ZWVrRGF5cygpIHtcbiAgICAgIHZhciBzdGFydCA9IHRoaXMuZmlyc3REYXlPZldlZWs7XG4gICAgICB2YXIgV0VFS19EQVlTID0gdGhpcy5XRUVLX0RBWVM7XG5cblxuICAgICAgaWYgKHR5cGVvZiBzdGFydCAhPT0gJ251bWJlcicgfHwgc3RhcnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFdFRUtfREFZUy5zbGljZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFdFRUtfREFZUy5zbGljZShzdGFydCkuY29uY2F0KFdFRUtfREFZUy5zbGljZSgwLCBzdGFydCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG5cbiAgICB2YXIgdGhlYWQgPSB0aGlzLmhpZGVIZWFkZXIgPyBudWxsIDogaCgndGhlYWQnLCBbdGhpcy53ZWVrRGF5cy5tYXAoZnVuY3Rpb24gKGRheSkge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICd0aCcsXG4gICAgICAgIHsga2V5OiBkYXkgfSxcbiAgICAgICAgW2RheV1cbiAgICAgICk7XG4gICAgfSldKTtcbiAgICByZXR1cm4gaChcbiAgICAgICd0YWJsZScsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6IHtcbiAgICAgICAgICAnZWwtY2FsZW5kYXItdGFibGUnOiB0cnVlLFxuICAgICAgICAgICdpcy1yYW5nZSc6IHRoaXMuaXNJblJhbmdlXG4gICAgICAgIH0sXG4gICAgICAgIGF0dHJzOiB7IGNlbGxzcGFjaW5nOiAnMCcsXG4gICAgICAgICAgY2VsbHBhZGRpbmc6ICcwJyB9XG4gICAgICB9LFxuICAgICAgW3RoZWFkLCBoKCd0Ym9keScsIFt0aGlzLnJvd3MubWFwKGZ1bmN0aW9uIChyb3csIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICd0cicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgJ2NsYXNzJzoge1xuICAgICAgICAgICAgICAnZWwtY2FsZW5kYXItdGFibGVfX3Jvdyc6IHRydWUsXG4gICAgICAgICAgICAgICdlbC1jYWxlbmRhci10YWJsZV9fcm93LS1oaWRlLWJvcmRlcic6IGluZGV4ID09PSAwICYmIF90aGlzLmhpZGVIZWFkZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgW3Jvdy5tYXAoZnVuY3Rpb24gKGNlbGwsIGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICAgIHsga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgJ2NsYXNzJzogX3RoaXMuZ2V0Q2VsbENsYXNzKGNlbGwpLFxuICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAnY2xpY2snOiBfdGhpcy5waWNrRGF5LmJpbmQoX3RoaXMsIGNlbGwpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbaChcbiAgICAgICAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1jYWxlbmRhci1kYXknIH0sXG4gICAgICAgICAgICAgICAgW190aGlzLmNlbGxSZW5kZXJQcm94eShjZWxsKV1cbiAgICAgICAgICAgICAgKV1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSldXG4gICAgICAgICk7XG4gICAgICB9KV0pXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYWxlbmRhci9zcmMvZGF0ZS10YWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FsZW5kYXJfc3JjX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc3JjX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL2RhdGUtdGFibGUudnVlXG52YXIgZGF0ZV90YWJsZV9yZW5kZXIsIGRhdGVfdGFibGVfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNyY19kYXRlX3RhYmxlX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgY2FsZW5kYXJfc3JjX2RhdGVfdGFibGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGRhdGVfdGFibGVfcmVuZGVyLFxuICBkYXRlX3RhYmxlX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgc3JjX2RhdGVfdGFibGVfYXBpOyB9XG5zcmNfZGF0ZV90YWJsZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2NhbGVuZGFyL3NyYy9kYXRlLXRhYmxlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfZGF0ZV90YWJsZSA9IChzcmNfZGF0ZV90YWJsZV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYWxlbmRhci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxuXG5cbnZhciB2YWxpZFR5cGVzID0gWydwcmV2LW1vbnRoJywgJ3RvZGF5JywgJ25leHQtbW9udGgnXTtcbnZhciB3ZWVrRGF5cyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcbnZhciBvbmVEYXkgPSA4NjQwMDAwMDtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FsZW5kYXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxDYWxlbmRhcicsXG5cbiAgbWl4aW5zOiBbbG9jYWxlX2RlZmF1bHQuYV0sXG5cbiAgY29tcG9uZW50czoge1xuICAgIERhdGVUYWJsZTogc3JjX2RhdGVfdGFibGUsXG4gICAgRWxCdXR0b246IGJ1dHRvbl9kZWZhdWx0LmEsXG4gICAgRWxCdXR0b25Hcm91cDogYnV0dG9uX2dyb3VwX2RlZmF1bHQuYVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IFtEYXRlLCBTdHJpbmcsIE51bWJlcl0sXG4gICAgcmFuZ2U6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IocmFuZ2UpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgcmV0dXJuIHJhbmdlLmxlbmd0aCA9PT0gMiAmJiByYW5nZS5ldmVyeShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgfHwgaXRlbSBpbnN0YW5jZW9mIERhdGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGZpcnN0RGF5T2ZXZWVrOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfVxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVsQ2FsZW5kYXI6IHRoaXNcbiAgICB9O1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIHBpY2tEYXk6IGZ1bmN0aW9uIHBpY2tEYXkoZGF5KSB7XG4gICAgICB0aGlzLnJlYWxTZWxlY3RlZERheSA9IGRheTtcbiAgICB9LFxuICAgIHNlbGVjdERhdGU6IGZ1bmN0aW9uIHNlbGVjdERhdGUodHlwZSkge1xuICAgICAgaWYgKHZhbGlkVHlwZXMuaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHR5cGUgJyArIHR5cGUpO1xuICAgICAgfVxuICAgICAgdmFyIGRheSA9ICcnO1xuICAgICAgaWYgKHR5cGUgPT09ICdwcmV2LW1vbnRoJykge1xuICAgICAgICBkYXkgPSB0aGlzLnByZXZNb250aERhdGVQcmVmaXggKyAnLTAxJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ25leHQtbW9udGgnKSB7XG4gICAgICAgIGRheSA9IHRoaXMubmV4dE1vbnRoRGF0ZVByZWZpeCArICctMDEnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF5ID0gdGhpcy5mb3JtYXRlZFRvZGF5O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF5ID09PSB0aGlzLmZvcm1hdGVkRGF0ZSkgcmV0dXJuO1xuICAgICAgdGhpcy5waWNrRGF5KGRheSk7XG4gICAgfSxcbiAgICB0b0RhdGU6IGZ1bmN0aW9uIHRvRGF0ZSh2YWwpIHtcbiAgICAgIGlmICghdmFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB2YWwnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBEYXRlID8gdmFsIDogbmV3IERhdGUodmFsKTtcbiAgICB9LFxuICAgIHJhbmdlVmFsaWRhdG9yOiBmdW5jdGlvbiByYW5nZVZhbGlkYXRvcihkYXRlLCBpc1N0YXJ0KSB7XG4gICAgICB2YXIgZmlyc3REYXlPZldlZWsgPSB0aGlzLnJlYWxGaXJzdERheU9mV2VlaztcbiAgICAgIHZhciBleHBlY3RlZCA9IGlzU3RhcnQgPyBmaXJzdERheU9mV2VlayA6IGZpcnN0RGF5T2ZXZWVrID09PSAwID8gNiA6IGZpcnN0RGF5T2ZXZWVrIC0gMTtcbiAgICAgIHZhciBtZXNzYWdlID0gKGlzU3RhcnQgPyAnc3RhcnQnIDogJ2VuZCcpICsgJyBvZiByYW5nZSBzaG91bGQgYmUgJyArIHdlZWtEYXlzW2V4cGVjdGVkXSArICcuJztcbiAgICAgIGlmIChkYXRlLmdldERheSgpICE9PSBleHBlY3RlZCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50Q2FsZW5kYXJdJywgbWVzc2FnZSwgJ0ludmFsaWQgcmFuZ2Ugd2lsbCBiZSBpZ25vcmVkLicpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwcmV2TW9udGhEYXRlUHJlZml4OiBmdW5jdGlvbiBwcmV2TW9udGhEYXRlUHJlZml4KCkge1xuICAgICAgdmFyIHRlbXAgPSBuZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0VGltZSgpKTtcbiAgICAgIHRlbXAuc2V0RGF0ZSgwKTtcbiAgICAgIHJldHVybiBkYXRlX2RlZmF1bHQuYS5mb3JtYXQodGVtcCwgJ3l5eXktTU0nKTtcbiAgICB9LFxuICAgIGN1ck1vbnRoRGF0ZVByZWZpeDogZnVuY3Rpb24gY3VyTW9udGhEYXRlUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0aGlzLmRhdGUsICd5eXl5LU1NJyk7XG4gICAgfSxcbiAgICBuZXh0TW9udGhEYXRlUHJlZml4OiBmdW5jdGlvbiBuZXh0TW9udGhEYXRlUHJlZml4KCkge1xuICAgICAgdmFyIHRlbXAgPSBuZXcgRGF0ZSh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSwgdGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxLCAxKTtcbiAgICAgIHJldHVybiBkYXRlX2RlZmF1bHQuYS5mb3JtYXQodGVtcCwgJ3l5eXktTU0nKTtcbiAgICB9LFxuICAgIGZvcm1hdGVkRGF0ZTogZnVuY3Rpb24gZm9ybWF0ZWREYXRlKCkge1xuICAgICAgcmV0dXJuIGRhdGVfZGVmYXVsdC5hLmZvcm1hdCh0aGlzLmRhdGUsICd5eXl5LU1NLWRkJyk7XG4gICAgfSxcbiAgICBpMThuRGF0ZTogZnVuY3Rpb24gaTE4bkRhdGUoKSB7XG4gICAgICB2YXIgeWVhciA9IHRoaXMuZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgdmFyIG1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgcmV0dXJuIHllYXIgKyAnICcgKyB0aGlzLnQoJ2VsLmRhdGVwaWNrZXIueWVhcicpICsgJyAnICsgdGhpcy50KCdlbC5kYXRlcGlja2VyLm1vbnRoJyArIG1vbnRoKTtcbiAgICB9LFxuICAgIGZvcm1hdGVkVG9kYXk6IGZ1bmN0aW9uIGZvcm1hdGVkVG9kYXkoKSB7XG4gICAgICByZXR1cm4gZGF0ZV9kZWZhdWx0LmEuZm9ybWF0KHRoaXMubm93LCAneXl5eS1NTS1kZCcpO1xuICAgIH0sXG5cblxuICAgIHJlYWxTZWxlY3RlZERheToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIHRoaXMuc2VsZWN0ZWREYXk7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdGVkRGF0ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZERheSA9IHZhbDtcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIGRhdGUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBkYXRlOiBmdW5jdGlvbiBkYXRlKCkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWxTZWxlY3RlZERheSkge1xuICAgICAgICAgIHZhciBkID0gdGhpcy5zZWxlY3RlZERheS5zcGxpdCgnLScpO1xuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShkWzBdLCBkWzFdIC0gMSwgZFsyXSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy52YWxpZGF0ZWRSYW5nZS5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZWRSYW5nZVswXVswXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ub3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcblxuXG4gICAgLy8gaWYgcmFuZ2UgaXMgdmFsaWQsIHdlIGdldCBhIHR3by1kaWdpdCBhcnJheVxuICAgIHZhbGlkYXRlZFJhbmdlOiBmdW5jdGlvbiB2YWxpZGF0ZWRSYW5nZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHZhciByYW5nZSA9IHRoaXMucmFuZ2U7XG4gICAgICBpZiAoIXJhbmdlKSByZXR1cm4gW107XG4gICAgICByYW5nZSA9IHJhbmdlLnJlZHVjZShmdW5jdGlvbiAocHJldiwgdmFsLCBpbmRleCkge1xuICAgICAgICB2YXIgZGF0ZSA9IF90aGlzLnRvRGF0ZSh2YWwpO1xuICAgICAgICBpZiAoX3RoaXMucmFuZ2VWYWxpZGF0b3IoZGF0ZSwgaW5kZXggPT09IDApKSB7XG4gICAgICAgICAgcHJldiA9IHByZXYuY29uY2F0KGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgfSwgW10pO1xuICAgICAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICB2YXIgX3JhbmdlID0gcmFuZ2UsXG4gICAgICAgICAgICBzdGFydCA9IF9yYW5nZVswXSxcbiAgICAgICAgICAgIGVuZCA9IF9yYW5nZVsxXTtcblxuICAgICAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50Q2FsZW5kYXJdZW5kIHRpbWUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiBzdGFydCB0aW1lJyk7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN0YXJ0IHRpbWUgYW5kIGVuZCB0aW1lIGluIG9uZSBtb250aFxuICAgICAgICBpZiAoT2JqZWN0KGRhdGVfdXRpbF9bXCJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aFwiXSkoc3RhcnQsIGVuZCkpIHtcbiAgICAgICAgICByZXR1cm4gW1tzdGFydCwgZW5kXV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRhdGEgPSBbXTtcbiAgICAgICAgdmFyIHN0YXJ0RGF5ID0gbmV3IERhdGUoc3RhcnQuZ2V0RnVsbFllYXIoKSwgc3RhcnQuZ2V0TW9udGgoKSArIDEsIDEpO1xuICAgICAgICB2YXIgbGFzdERheSA9IHRoaXMudG9EYXRlKHN0YXJ0RGF5LmdldFRpbWUoKSAtIG9uZURheSk7XG4gICAgICAgIGlmICghT2JqZWN0KGRhdGVfdXRpbF9bXCJ2YWxpZGF0ZVJhbmdlSW5PbmVNb250aFwiXSkoc3RhcnREYXksIGVuZCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50Q2FsZW5kYXJdc3RhcnQgdGltZSBhbmQgZW5kIHRpbWUgaW50ZXJ2YWwgbXVzdCBub3QgZXhjZWVkIHR3byBtb250aHMnKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgLy8g56ys5LiA5Liq5pyI55qE5pe26Ze06IyD5Zu0XG4gICAgICAgIGRhdGEucHVzaChbc3RhcnQsIGxhc3REYXldKTtcbiAgICAgICAgLy8g5LiL5LiA5pyI55qE5pe26Ze06IyD5Zu077yM6ZyA6KaB6K6h566X5LiA5LiL6K+l5pyI55qE56ys5LiA5Liq5ZGo6LW35aeL5pelXG4gICAgICAgIHZhciBmaXJzdERheU9mV2VlayA9IHRoaXMucmVhbEZpcnN0RGF5T2ZXZWVrO1xuICAgICAgICB2YXIgbmV4dE1vbnRGaXJzdERheSA9IHN0YXJ0RGF5LmdldERheSgpO1xuICAgICAgICB2YXIgaW50ZXJ2YWwgPSAwO1xuICAgICAgICBpZiAobmV4dE1vbnRGaXJzdERheSAhPT0gZmlyc3REYXlPZldlZWspIHtcbiAgICAgICAgICBpZiAoZmlyc3REYXlPZldlZWsgPT09IDApIHtcbiAgICAgICAgICAgIGludGVydmFsID0gNyAtIG5leHRNb250Rmlyc3REYXk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGludGVydmFsID0gZmlyc3REYXlPZldlZWsgLSBuZXh0TW9udEZpcnN0RGF5O1xuICAgICAgICAgICAgaW50ZXJ2YWwgPSBpbnRlcnZhbCA+IDAgPyBpbnRlcnZhbCA6IDcgKyBpbnRlcnZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnREYXkgPSB0aGlzLnRvRGF0ZShzdGFydERheS5nZXRUaW1lKCkgKyBpbnRlcnZhbCAqIG9uZURheSk7XG4gICAgICAgIGlmIChzdGFydERheS5nZXREYXRlKCkgPCBlbmQuZ2V0RGF0ZSgpKSB7XG4gICAgICAgICAgZGF0YS5wdXNoKFtzdGFydERheSwgZW5kXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICByZWFsRmlyc3REYXlPZldlZWs6IGZ1bmN0aW9uIHJlYWxGaXJzdERheU9mV2VlaygpIHtcbiAgICAgIGlmICh0aGlzLmZpcnN0RGF5T2ZXZWVrIDwgMSB8fCB0aGlzLmZpcnN0RGF5T2ZXZWVrID4gNikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMuZmlyc3REYXlPZldlZWspO1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWxlY3RlZERheTogJycsXG4gICAgICBub3c6IG5ldyBEYXRlKClcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FsZW5kYXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2NhbGVuZGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhbGVuZGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2NhbGVuZGFyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNhbGVuZGFyX3NyY19tYWluX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfY2FsZW5kYXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF82ZDk3NTZiZV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhbGVuZGFyX3NyY19tYWluX2FwaTsgfVxuY2FsZW5kYXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9jYWxlbmRhci9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgY2FsZW5kYXJfc3JjX21haW4gPSAoY2FsZW5kYXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYWxlbmRhci9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5jYWxlbmRhcl9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGNhbGVuZGFyX3NyY19tYWluLm5hbWUsIGNhbGVuZGFyX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhbGVuZGFyID0gKGNhbGVuZGFyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYmFja3RvcC9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjU3ZGQ0YTkmXG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzI1N2RkNGE5X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcInRyYW5zaXRpb25cIiwgeyBhdHRyczogeyBuYW1lOiBcImVsLWZhZGUtaW5cIiB9IH0sIFtcbiAgICBfdm0udmlzaWJsZVxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWJhY2t0b3BcIixcbiAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgIHJpZ2h0OiBfdm0uc3R5bGVSaWdodCxcbiAgICAgICAgICAgICAgYm90dG9tOiBfdm0uc3R5bGVCb3R0b21cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5oYW5kbGVDbGljaygkZXZlbnQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiwgW19jKFwiZWwtaWNvblwiLCB7IGF0dHJzOiB7IG5hbWU6IFwiY2FyZXQtdG9wXCIgfSB9KV0pXG4gICAgICAgICAgXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfc3RhdGljUmVuZGVyRm5zID0gW11cbm1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8yNTdkZDRhOV9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTI1N2RkNGE5JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9iYWNrdG9wL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxudmFyIGN1YmljID0gZnVuY3Rpb24gY3ViaWModmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucG93KHZhbHVlLCAzKTtcbn07XG52YXIgZWFzZUluT3V0Q3ViaWMgPSBmdW5jdGlvbiBlYXNlSW5PdXRDdWJpYyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPCAwLjUgPyBjdWJpYyh2YWx1ZSAqIDIpIC8gMiA6IDEgLSBjdWJpYygoMSAtIHZhbHVlKSAqIDIpIC8gMjtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhY2t0b3Bfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxCYWNrdG9wJyxcblxuICBwcm9wczoge1xuICAgIHZpc2liaWxpdHlIZWlnaHQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDIwMFxuICAgIH0sXG4gICAgdGFyZ2V0OiBbU3RyaW5nXSxcbiAgICByaWdodDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNDBcbiAgICB9LFxuICAgIGJvdHRvbToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogNDBcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWw6IG51bGwsXG4gICAgICBjb250YWluZXI6IG51bGwsXG4gICAgICB2aXNpYmxlOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHN0eWxlQm90dG9tOiBmdW5jdGlvbiBzdHlsZUJvdHRvbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmJvdHRvbSArICdweCc7XG4gICAgfSxcbiAgICBzdHlsZVJpZ2h0OiBmdW5jdGlvbiBzdHlsZVJpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMucmlnaHQgKyAncHgnO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMudGhyb3R0bGVkU2Nyb2xsSGFuZGxlciA9IHRocm90dGxlX2RlZmF1bHQoKSgzMDAsIHRoaXMub25TY3JvbGwpO1xuICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMudGhyb3R0bGVkU2Nyb2xsSGFuZGxlcik7XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgaW5pdDogZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQ7XG4gICAgICB0aGlzLmVsID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMudGFyZ2V0KTtcbiAgICAgICAgaWYgKCF0aGlzLmVsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0YXJnZXQgaXMgbm90IGV4aXN0ZWQ6ICcgKyB0aGlzLnRhcmdldCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250YWluZXIgPSB0aGlzLmVsO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25TY3JvbGw6IGZ1bmN0aW9uIG9uU2Nyb2xsKCkge1xuICAgICAgdmFyIHNjcm9sbFRvcCA9IHRoaXMuZWwuc2Nyb2xsVG9wO1xuICAgICAgdGhpcy52aXNpYmxlID0gc2Nyb2xsVG9wID49IHRoaXMudmlzaWJpbGl0eUhlaWdodDtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrOiBmdW5jdGlvbiBoYW5kbGVDbGljayhlKSB7XG4gICAgICB0aGlzLnNjcm9sbFRvVG9wKCk7XG4gICAgICB0aGlzLiRlbWl0KCdjbGljaycsIGUpO1xuICAgIH0sXG4gICAgc2Nyb2xsVG9Ub3A6IGZ1bmN0aW9uIHNjcm9sbFRvVG9wKCkge1xuICAgICAgdmFyIGVsID0gdGhpcy5lbDtcbiAgICAgIHZhciBiZWdpblRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgdmFyIGJlZ2luVmFsdWUgPSBlbC5zY3JvbGxUb3A7XG4gICAgICB2YXIgckFGID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBmdW5jdGlvbiAoZnVuYykge1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW5jLCAxNik7XG4gICAgICB9O1xuICAgICAgdmFyIGZyYW1lRnVuYyA9IGZ1bmN0aW9uIGZyYW1lRnVuYygpIHtcbiAgICAgICAgdmFyIHByb2dyZXNzID0gKERhdGUubm93KCkgLSBiZWdpblRpbWUpIC8gNTAwO1xuICAgICAgICBpZiAocHJvZ3Jlc3MgPCAxKSB7XG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gYmVnaW5WYWx1ZSAqICgxIC0gZWFzZUluT3V0Q3ViaWMocHJvZ3Jlc3MpKTtcbiAgICAgICAgICByQUYoZnJhbWVGdW5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgckFGKGZyYW1lRnVuYyk7XG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5jb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy50aHJvdHRsZWRTY3JvbGxIYW5kbGVyKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2JhY2t0b3Bfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoYmFja3RvcF9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9iYWNrdG9wL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGJhY2t0b3Bfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19iYWNrdG9wX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfcmVuZGVyLFxuICBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfMjU3ZGQ0YTlfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBiYWNrdG9wX3NyY19tYWluX2FwaTsgfVxuYmFja3RvcF9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2JhY2t0b3Avc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGJhY2t0b3Bfc3JjX21haW4gPSAoYmFja3RvcF9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2JhY2t0b3AvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYmFja3RvcF9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGJhY2t0b3Bfc3JjX21haW4ubmFtZSwgYmFja3RvcF9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBiYWNrdG9wID0gKGJhY2t0b3Bfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbmZpbml0ZS1zY3JvbGwvc3JjL21haW4uanNcblxuXG5cblxudmFyIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBpZiAoZWxlbWVudCA9PT0gd2luZG93KSB7XG4gICAgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuXG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAxKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBjc3MgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgcmV0dXJuIHByb3BlcnR5ID8gY3NzW3Byb3BlcnR5XSA6IGNzcztcbn07XG5cbnZhciBlbnRyaWVzID0gZnVuY3Rpb24gZW50cmllcyhvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaiB8fCB7fSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gW2tleSwgb2JqW2tleV1dO1xuICB9KTtcbn07XG5cbnZhciBnZXRQb3NpdGlvblNpemUgPSBmdW5jdGlvbiBnZXRQb3NpdGlvblNpemUoZWwsIHByb3ApIHtcbiAgcmV0dXJuIGVsID09PSB3aW5kb3cgfHwgZWwgPT09IGRvY3VtZW50ID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W3Byb3BdIDogZWxbcHJvcF07XG59O1xuXG52YXIgZ2V0T2Zmc2V0SGVpZ2h0ID0gZnVuY3Rpb24gZ2V0T2Zmc2V0SGVpZ2h0KGVsKSB7XG4gIHJldHVybiBnZXRQb3NpdGlvblNpemUoZWwsICdvZmZzZXRIZWlnaHQnKTtcbn07XG5cbnZhciBnZXRDbGllbnRIZWlnaHQgPSBmdW5jdGlvbiBnZXRDbGllbnRIZWlnaHQoZWwpIHtcbiAgcmV0dXJuIGdldFBvc2l0aW9uU2l6ZShlbCwgJ2NsaWVudEhlaWdodCcpO1xufTtcblxudmFyIHNjb3BlID0gJ0VsSW5maW5pdGVTY3JvbGwnO1xudmFyIGF0dHJpYnV0ZXMgPSB7XG4gIGRlbGF5OiB7XG4gICAgdHlwZTogTnVtYmVyLFxuICAgIGRlZmF1bHQ6IDIwMFxuICB9LFxuICBkaXN0YW5jZToge1xuICAgIHR5cGU6IE51bWJlcixcbiAgICBkZWZhdWx0OiAwXG4gIH0sXG4gIGRpc2FibGVkOiB7XG4gICAgdHlwZTogQm9vbGVhbixcbiAgICBkZWZhdWx0OiBmYWxzZVxuICB9LFxuICBpbW1lZGlhdGU6IHtcbiAgICB0eXBlOiBCb29sZWFuLFxuICAgIGRlZmF1bHQ6IHRydWVcbiAgfVxufTtcblxudmFyIG1haW5fZ2V0U2Nyb2xsT3B0aW9ucyA9IGZ1bmN0aW9uIGdldFNjcm9sbE9wdGlvbnMoZWwsIHZtKSB7XG4gIGlmICghT2JqZWN0KHR5cGVzX1tcImlzSHRtbEVsZW1lbnRcIl0pKGVsKSkgcmV0dXJuIHt9O1xuXG4gIHJldHVybiBlbnRyaWVzKGF0dHJpYnV0ZXMpLnJlZHVjZShmdW5jdGlvbiAobWFwLCBfcmVmKSB7XG4gICAgdmFyIGtleSA9IF9yZWZbMF0sXG4gICAgICAgIG9wdGlvbiA9IF9yZWZbMV07XG4gICAgdmFyIHR5cGUgPSBvcHRpb24udHlwZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlID0gb3B0aW9uLmRlZmF1bHQ7XG5cbiAgICB2YXIgdmFsdWUgPSBlbC5nZXRBdHRyaWJ1dGUoJ2luZmluaXRlLXNjcm9sbC0nICsga2V5KTtcbiAgICB2YWx1ZSA9IE9iamVjdCh0eXBlc19bXCJpc1VuZGVmaW5lZFwiXSkodm1bdmFsdWVdKSA/IHZhbHVlIDogdm1bdmFsdWVdO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBOdW1iZXI6XG4gICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgdmFsdWUgPSBOdW1iZXIuaXNOYU4odmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBCb29sZWFuOlxuICAgICAgICB2YWx1ZSA9IE9iamVjdCh0eXBlc19bXCJpc0RlZmluZWRcIl0pKHZhbHVlKSA/IHZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiBCb29sZWFuKHZhbHVlKSA6IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YWx1ZSA9IHR5cGUodmFsdWUpO1xuICAgIH1cbiAgICBtYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbn07XG5cbnZhciBnZXRFbGVtZW50VG9wID0gZnVuY3Rpb24gZ2V0RWxlbWVudFRvcChlbCkge1xuICByZXR1cm4gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xufTtcblxudmFyIG1haW5faGFuZGxlU2Nyb2xsID0gZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKGNiKSB7XG4gIHZhciBfc2NvcGUgPSB0aGlzW3Njb3BlXSxcbiAgICAgIGVsID0gX3Njb3BlLmVsLFxuICAgICAgdm0gPSBfc2NvcGUudm0sXG4gICAgICBjb250YWluZXIgPSBfc2NvcGUuY29udGFpbmVyLFxuICAgICAgb2JzZXJ2ZXIgPSBfc2NvcGUub2JzZXJ2ZXI7XG5cbiAgdmFyIF9nZXRTY3JvbGxPcHRpb25zID0gbWFpbl9nZXRTY3JvbGxPcHRpb25zKGVsLCB2bSksXG4gICAgICBkaXN0YW5jZSA9IF9nZXRTY3JvbGxPcHRpb25zLmRpc3RhbmNlLFxuICAgICAgZGlzYWJsZWQgPSBfZ2V0U2Nyb2xsT3B0aW9ucy5kaXNhYmxlZDtcblxuICBpZiAoZGlzYWJsZWQpIHJldHVybjtcblxuICB2YXIgY29udGFpbmVySW5mbyA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgaWYgKCFjb250YWluZXJJbmZvLndpZHRoICYmICFjb250YWluZXJJbmZvLmhlaWdodCkgcmV0dXJuO1xuXG4gIHZhciBzaG91bGRUcmlnZ2VyID0gZmFsc2U7XG5cbiAgaWYgKGNvbnRhaW5lciA9PT0gZWwpIHtcbiAgICAvLyBiZSBhd2FyZSBvZiBkaWZmZXJlbmNlIGJldHdlZW4gY2xpZW50SGVpZ2h0ICYgb2Zmc2V0SGVpZ2h0ICYgd2luZG93LmdldENvbXB1dGVkU3R5bGUoKS5oZWlnaHRcbiAgICB2YXIgc2Nyb2xsQm90dG9tID0gY29udGFpbmVyLnNjcm9sbFRvcCArIGdldENsaWVudEhlaWdodChjb250YWluZXIpO1xuICAgIHNob3VsZFRyaWdnZXIgPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsQm90dG9tIDw9IGRpc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHZhciBoZWlnaHRCZWxvd1RvcCA9IGdldE9mZnNldEhlaWdodChlbCkgKyBnZXRFbGVtZW50VG9wKGVsKSAtIGdldEVsZW1lbnRUb3AoY29udGFpbmVyKTtcbiAgICB2YXIgb2Zmc2V0SGVpZ2h0ID0gZ2V0T2Zmc2V0SGVpZ2h0KGNvbnRhaW5lcik7XG4gICAgdmFyIGJvcmRlckJvdHRvbSA9IE51bWJlci5wYXJzZUZsb2F0KGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShjb250YWluZXIsICdib3JkZXJCb3R0b21XaWR0aCcpKTtcbiAgICBzaG91bGRUcmlnZ2VyID0gaGVpZ2h0QmVsb3dUb3AgLSBvZmZzZXRIZWlnaHQgKyBib3JkZXJCb3R0b20gPD0gZGlzdGFuY2U7XG4gIH1cblxuICBpZiAoc2hvdWxkVHJpZ2dlciAmJiBPYmplY3QodHlwZXNfW1wiaXNGdW5jdGlvblwiXSkoY2IpKSB7XG4gICAgY2IuY2FsbCh2bSk7XG4gIH0gZWxzZSBpZiAob2JzZXJ2ZXIpIHtcbiAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpc1tzY29wZV0ub2JzZXJ2ZXIgPSBudWxsO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbmZpbml0ZV9zY3JvbGxfc3JjX21haW4gPSAoe1xuICBuYW1lOiAnSW5maW5pdGVTY3JvbGwnLFxuICBpbnNlcnRlZDogZnVuY3Rpb24gaW5zZXJ0ZWQoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gICAgdmFyIGNiID0gYmluZGluZy52YWx1ZTtcblxuICAgIHZhciB2bSA9IHZub2RlLmNvbnRleHQ7XG4gICAgLy8gb25seSBpbmNsdWRlIHZlcnRpY2FsIHNjcm9sbFxuICAgIHZhciBjb250YWluZXIgPSBPYmplY3QoZG9tX1tcImdldFNjcm9sbENvbnRhaW5lclwiXSkoZWwsIHRydWUpO1xuXG4gICAgdmFyIF9nZXRTY3JvbGxPcHRpb25zMiA9IG1haW5fZ2V0U2Nyb2xsT3B0aW9ucyhlbCwgdm0pLFxuICAgICAgICBkZWxheSA9IF9nZXRTY3JvbGxPcHRpb25zMi5kZWxheSxcbiAgICAgICAgaW1tZWRpYXRlID0gX2dldFNjcm9sbE9wdGlvbnMyLmltbWVkaWF0ZTtcblxuICAgIHZhciBvblNjcm9sbCA9IGRlYm91bmNlX2RlZmF1bHQoKShkZWxheSwgbWFpbl9oYW5kbGVTY3JvbGwuYmluZChlbCwgY2IpKTtcblxuICAgIGVsW3Njb3BlXSA9IHsgZWw6IGVsLCB2bTogdm0sIGNvbnRhaW5lcjogY29udGFpbmVyLCBvblNjcm9sbDogb25TY3JvbGwgfTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbCk7XG5cbiAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgdmFyIG9ic2VydmVyID0gZWxbc2NvcGVdLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob25TY3JvbGwpO1xuICAgICAgICBvYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lciwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgICAgIG9uU2Nyb2xsKCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICB1bmJpbmQ6IGZ1bmN0aW9uIHVuYmluZChlbCkge1xuICAgIHZhciBfZWwkc2NvcGUgPSBlbFtzY29wZV0sXG4gICAgICAgIGNvbnRhaW5lciA9IF9lbCRzY29wZS5jb250YWluZXIsXG4gICAgICAgIG9uU2Nyb2xsID0gX2VsJHNjb3BlLm9uU2Nyb2xsO1xuXG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbmZpbml0ZS1zY3JvbGwvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaW5maW5pdGVfc2Nyb2xsX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5kaXJlY3RpdmUoaW5maW5pdGVfc2Nyb2xsX3NyY19tYWluLm5hbWUsIGluZmluaXRlX3Njcm9sbF9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbmZpbml0ZV9zY3JvbGwgPSAoaW5maW5pdGVfc2Nyb2xsX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcGFnZS1oZWFkZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTUwNzA5NTRjJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF81MDcwOTU0Y19yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1wYWdlLWhlYWRlclwiIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBhZ2UtaGVhZGVyX19sZWZ0XCIsXG4gICAgICAgIG9uOiB7XG4gICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgX3ZtLiRlbWl0KFwiYmFja1wiKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtaWNvbi1iYWNrXCIgfSksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1wYWdlLWhlYWRlcl9fdGl0bGVcIiB9LFxuICAgICAgICAgIFtfdm0uX3QoXCJ0aXRsZVwiLCBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV0pXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIF1cbiAgICApLFxuICAgIF9jKFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcGFnZS1oZWFkZXJfX2NvbnRlbnRcIiB9LFxuICAgICAgW192bS5fdChcImNvbnRlbnRcIiwgW192bS5fdihfdm0uX3MoX3ZtLmNvbnRlbnQpKV0pXSxcbiAgICAgIDJcbiAgICApXG4gIF0pXG59XG52YXIgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUwNzA5NTRjX3N0YXRpY1JlbmRlckZucyA9IFtdXG5tYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfNTA3MDk1NGNfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdlLWhlYWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTA3MDk1NGMmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3BhZ2UtaGVhZGVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhZ2VfaGVhZGVyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsUGFnZUhlYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QobGliX2xvY2FsZV9bXCJ0XCJdKSgnZWwucGFnZUhlYWRlci50aXRsZScpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29udGVudDogU3RyaW5nXG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wYWdlLWhlYWRlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfcGFnZV9oZWFkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocGFnZV9oZWFkZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcGFnZS1oZWFkZXIvc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcGFnZV9oZWFkZXJfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19wYWdlX2hlYWRlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUwNzA5NTRjX3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzUwNzA5NTRjX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgcGFnZV9oZWFkZXJfc3JjX21haW5fYXBpOyB9XG5wYWdlX2hlYWRlcl9zcmNfbWFpbl9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3BhZ2UtaGVhZGVyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWdlX2hlYWRlcl9zcmNfbWFpbiA9IChwYWdlX2hlYWRlcl9zcmNfbWFpbl9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BhZ2UtaGVhZGVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnBhZ2VfaGVhZGVyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQocGFnZV9oZWFkZXJfc3JjX21haW4ubmFtZSwgcGFnZV9oZWFkZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFnZV9oZWFkZXIgPSAocGFnZV9oZWFkZXJfc3JjX21haW4pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0OTMyMzQ2JlxudmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ5MzIzNDZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IFtcImVsLWNhc2NhZGVyLXBhbmVsXCIsIF92bS5ib3JkZXIgJiYgXCJpcy1ib3JkZXJlZFwiXSxcbiAgICAgIG9uOiB7IGtleWRvd246IF92bS5oYW5kbGVLZXlEb3duIH1cbiAgICB9LFxuICAgIF92bS5fbChfdm0ubWVudXMsIGZ1bmN0aW9uKG1lbnUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gX2MoXCJjYXNjYWRlci1tZW51XCIsIHtcbiAgICAgICAga2V5OiBpbmRleCxcbiAgICAgICAgcmVmOiBcIm1lbnVcIixcbiAgICAgICAgcmVmSW5Gb3I6IHRydWUsXG4gICAgICAgIGF0dHJzOiB7IGluZGV4OiBpbmRleCwgbm9kZXM6IG1lbnUgfVxuICAgICAgfSlcbiAgICB9KSxcbiAgICAxXG4gIClcbn1cbnZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0OTMyMzQ2X3N0YXRpY1JlbmRlckZucyA9IFtdXG5jYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3RlbXBsYXRlX2lkXzM0OTMyMzQ2X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLXBhbmVsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDkzMjM0NiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3JhZGlvXCJcbnZhciByYWRpb18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcbnZhciByYWRpb19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihyYWRpb18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbm9kZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cblxuXG5cblxuXG52YXIgc3RvcFByb3BhZ2F0aW9uID0gZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGUpIHtcbiAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgaW5qZWN0OiBbJ3BhbmVsJ10sXG5cbiAgY29tcG9uZW50czoge1xuICAgIEVsQ2hlY2tib3g6IGNoZWNrYm94X2RlZmF1bHQuYSxcbiAgICBFbFJhZGlvOiByYWRpb19kZWZhdWx0LmFcbiAgfSxcblxuICBwcm9wczoge1xuICAgIG5vZGU6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBub2RlSWQ6IFN0cmluZ1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29uZmlnOiBmdW5jdGlvbiBjb25maWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbC5jb25maWc7XG4gICAgfSxcbiAgICBpc0xlYWY6IGZ1bmN0aW9uIGlzTGVhZigpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUuaXNMZWFmO1xuICAgIH0sXG4gICAgaXNEaXNhYmxlZDogZnVuY3Rpb24gaXNEaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUuaXNEaXNhYmxlZDtcbiAgICB9LFxuICAgIGNoZWNrZWRWYWx1ZTogZnVuY3Rpb24gY2hlY2tlZFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFuZWwuY2hlY2tlZFZhbHVlO1xuICAgIH0sXG4gICAgaXNDaGVja2VkOiBmdW5jdGlvbiBpc0NoZWNrZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlLmlzU2FtZU5vZGUodGhpcy5jaGVja2VkVmFsdWUpO1xuICAgIH0sXG4gICAgaW5BY3RpdmVQYXRoOiBmdW5jdGlvbiBpbkFjdGl2ZVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0luUGF0aCh0aGlzLnBhbmVsLmFjdGl2ZVBhdGgpO1xuICAgIH0sXG4gICAgaW5DaGVja2VkUGF0aDogZnVuY3Rpb24gaW5DaGVja2VkUGF0aCgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5jb25maWcuY2hlY2tTdHJpY3RseSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4gdGhpcy5wYW5lbC5jaGVja2VkTm9kZVBhdGhzLnNvbWUoZnVuY3Rpb24gKGNoZWNrZWRQYXRoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5pc0luUGF0aChjaGVja2VkUGF0aCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUuZ2V0VmFsdWVCeU9wdGlvbigpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRXhwYW5kOiBmdW5jdGlvbiBoYW5kbGVFeHBhbmQoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIHBhbmVsID0gdGhpcy5wYW5lbCxcbiAgICAgICAgICBub2RlID0gdGhpcy5ub2RlLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQsXG4gICAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICB2YXIgbXVsdGlwbGUgPSBjb25maWcubXVsdGlwbGUsXG4gICAgICAgICAgY2hlY2tTdHJpY3RseSA9IGNvbmZpZy5jaGVja1N0cmljdGx5O1xuXG5cbiAgICAgIGlmICghY2hlY2tTdHJpY3RseSAmJiBpc0Rpc2FibGVkIHx8IG5vZGUubG9hZGluZykgcmV0dXJuO1xuXG4gICAgICBpZiAoY29uZmlnLmxhenkgJiYgIW5vZGUubG9hZGVkKSB7XG4gICAgICAgIHBhbmVsLmxhenlMb2FkKG5vZGUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBkbyBub3QgdXNlIGNhY2hlZCBsZWFmIHZhbHVlIGhlcmUsIGludm9rZSB0aGlzLmlzTGVhZiB0byBnZXQgbmV3IHZhbHVlLlxuICAgICAgICAgIHZhciBpc0xlYWYgPSBfdGhpczIuaXNMZWFmO1xuXG5cbiAgICAgICAgICBpZiAoIWlzTGVhZikgX3RoaXMyLmhhbmRsZUV4cGFuZCgpO1xuICAgICAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICAgICAgLy8gaWYgbGVhZiBzeW5jIGNoZWNrZWQgc3RhdGUsIGVsc2UgY2xlYXIgY2hlY2tlZCBzdGF0ZVxuICAgICAgICAgICAgdmFyIGNoZWNrZWQgPSBpc0xlYWYgPyBub2RlLmNoZWNrZWQgOiBmYWxzZTtcbiAgICAgICAgICAgIF90aGlzMi5oYW5kbGVNdWx0aUNoZWNrQ2hhbmdlKGNoZWNrZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYW5lbC5oYW5kbGVFeHBhbmQobm9kZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDaGVja0NoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hlY2tDaGFuZ2UoKSB7XG4gICAgICB2YXIgcGFuZWwgPSB0aGlzLnBhbmVsLFxuICAgICAgICAgIHZhbHVlID0gdGhpcy52YWx1ZSxcbiAgICAgICAgICBub2RlID0gdGhpcy5ub2RlO1xuXG4gICAgICBwYW5lbC5oYW5kbGVDaGVja0NoYW5nZSh2YWx1ZSk7XG4gICAgICBwYW5lbC5oYW5kbGVFeHBhbmQobm9kZSk7XG4gICAgfSxcbiAgICBoYW5kbGVNdWx0aUNoZWNrQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVNdWx0aUNoZWNrQ2hhbmdlKGNoZWNrZWQpIHtcbiAgICAgIHRoaXMubm9kZS5kb0NoZWNrKGNoZWNrZWQpO1xuICAgICAgdGhpcy5wYW5lbC5jYWxjdWxhdGVNdWx0aUNoZWNrZWRWYWx1ZSgpO1xuICAgIH0sXG4gICAgaXNJblBhdGg6IGZ1bmN0aW9uIGlzSW5QYXRoKHBhdGhOb2Rlcykge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLm5vZGU7XG5cbiAgICAgIHZhciBzZWxlY3RlZFBhdGhOb2RlID0gcGF0aE5vZGVzW25vZGUubGV2ZWwgLSAxXSB8fCB7fTtcbiAgICAgIHJldHVybiBzZWxlY3RlZFBhdGhOb2RlLnVpZCA9PT0gbm9kZS51aWQ7XG4gICAgfSxcbiAgICByZW5kZXJQcmVmaXg6IGZ1bmN0aW9uIHJlbmRlclByZWZpeChoKSB7XG4gICAgICB2YXIgaXNMZWFmID0gdGhpcy5pc0xlYWYsXG4gICAgICAgICAgaXNDaGVja2VkID0gdGhpcy5pc0NoZWNrZWQsXG4gICAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWc7XG4gICAgICB2YXIgY2hlY2tTdHJpY3RseSA9IGNvbmZpZy5jaGVja1N0cmljdGx5LFxuICAgICAgICAgIG11bHRpcGxlID0gY29uZmlnLm11bHRpcGxlO1xuXG5cbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja2JveChoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hlY2tTdHJpY3RseSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJSYWRpbyhoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNMZWFmICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDaGVja0ljb24oaCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVuZGVyUG9zdGZpeDogZnVuY3Rpb24gcmVuZGVyUG9zdGZpeChoKSB7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSxcbiAgICAgICAgICBpc0xlYWYgPSB0aGlzLmlzTGVhZjtcblxuXG4gICAgICBpZiAobm9kZS5sb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckxvYWRpbmdJY29uKGgpO1xuICAgICAgfSBlbHNlIGlmICghaXNMZWFmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckV4cGFuZEljb24oaCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVuZGVyQ2hlY2tib3g6IGZ1bmN0aW9uIHJlbmRlckNoZWNrYm94KGgpIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlLFxuICAgICAgICAgIGNvbmZpZyA9IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQ7XG5cbiAgICAgIHZhciBldmVudHMgPSB7XG4gICAgICAgIG9uOiB7IGNoYW5nZTogdGhpcy5oYW5kbGVNdWx0aUNoZWNrQ2hhbmdlIH0sXG4gICAgICAgIG5hdGl2ZU9uOiB7fVxuICAgICAgfTtcblxuICAgICAgaWYgKGNvbmZpZy5jaGVja1N0cmljdGx5KSB7XG4gICAgICAgIC8vIHdoZW4gZXZlcnkgbm9kZSBpcyBzZWxlY3RhYmxlLCBjbGljayBldmVudCBzaG91bGQgbm90IHRyaWdnZXIgZXhwYW5kIGV2ZW50LlxuICAgICAgICBldmVudHMubmF0aXZlT24uY2xpY2sgPSBzdG9wUHJvcGFnYXRpb247XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoKCdlbC1jaGVja2JveCcsIGV4dGVybmFsX2JhYmVsX2hlbHBlcl92dWVfanN4X21lcmdlX3Byb3BzX2RlZmF1bHQoKShbe1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHZhbHVlOiBub2RlLmNoZWNrZWQsXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZTogbm9kZS5pbmRldGVybWluYXRlLFxuICAgICAgICAgIGRpc2FibGVkOiBpc0Rpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIH0sIGV2ZW50c10pKTtcbiAgICB9LFxuICAgIHJlbmRlclJhZGlvOiBmdW5jdGlvbiByZW5kZXJSYWRpbyhoKSB7XG4gICAgICB2YXIgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlLFxuICAgICAgICAgIGlzRGlzYWJsZWQgPSB0aGlzLmlzRGlzYWJsZWQ7XG5cbiAgICAgIC8vIHRvIGtlZXAgc2FtZSByZWZlcmVuY2UgaWYgdmFsdWUgY2F1c2UgcmFkaW8ncyBjaGVja2VkIHN0YXRlIGlzIGNhbGN1bGF0ZWQgYnkgcmVmZXJlbmNlIGNvbXBhcmlzaW9uO1xuXG4gICAgICBpZiAoT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkodmFsdWUsIGNoZWNrZWRWYWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBjaGVja2VkVmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoKFxuICAgICAgICAnZWwtcmFkaW8nLFxuICAgICAgICB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHZhbHVlOiBjaGVja2VkVmFsdWUsXG4gICAgICAgICAgICBsYWJlbDogdmFsdWUsXG4gICAgICAgICAgICBkaXNhYmxlZDogaXNEaXNhYmxlZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgICdjaGFuZ2UnOiB0aGlzLmhhbmRsZUNoZWNrQ2hhbmdlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgICAgJ2NsaWNrJzogc3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbaCgnc3BhbicpXVxuICAgICAgKTtcbiAgICB9LFxuICAgIHJlbmRlckNoZWNrSWNvbjogZnVuY3Rpb24gcmVuZGVyQ2hlY2tJY29uKGgpIHtcbiAgICAgIHJldHVybiBoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1jaGVjayBlbC1jYXNjYWRlci1ub2RlX19wcmVmaXgnIH0pO1xuICAgIH0sXG4gICAgcmVuZGVyTG9hZGluZ0ljb246IGZ1bmN0aW9uIHJlbmRlckxvYWRpbmdJY29uKGgpIHtcbiAgICAgIHJldHVybiBoKCdpJywgeyAnY2xhc3MnOiAnZWwtaWNvbi1sb2FkaW5nIGVsLWNhc2NhZGVyLW5vZGVfX3Bvc3RmaXgnIH0pO1xuICAgIH0sXG4gICAgcmVuZGVyRXhwYW5kSWNvbjogZnVuY3Rpb24gcmVuZGVyRXhwYW5kSWNvbihoKSB7XG4gICAgICByZXR1cm4gaCgnaScsIHsgJ2NsYXNzJzogJ2VsLWljb24tYXJyb3ctcmlnaHQgZWwtY2FzY2FkZXItbm9kZV9fcG9zdGZpeCcgfSk7XG4gICAgfSxcbiAgICByZW5kZXJDb250ZW50OiBmdW5jdGlvbiByZW5kZXJDb250ZW50KGgpIHtcbiAgICAgIHZhciBwYW5lbCA9IHRoaXMucGFuZWwsXG4gICAgICAgICAgbm9kZSA9IHRoaXMubm9kZTtcblxuICAgICAgdmFyIHJlbmRlciA9IHBhbmVsLnJlbmRlckxhYmVsRm47XG4gICAgICB2YXIgdm5vZGUgPSByZW5kZXIgPyByZW5kZXIoeyBub2RlOiBub2RlLCBkYXRhOiBub2RlLmRhdGEgfSkgOiBudWxsO1xuXG4gICAgICByZXR1cm4gaChcbiAgICAgICAgJ3NwYW4nLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1jYXNjYWRlci1ub2RlX19sYWJlbCcgfSxcbiAgICAgICAgW3Zub2RlIHx8IG5vZGUubGFiZWxdXG4gICAgICApO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgaW5BY3RpdmVQYXRoID0gdGhpcy5pbkFjdGl2ZVBhdGgsXG4gICAgICAgIGluQ2hlY2tlZFBhdGggPSB0aGlzLmluQ2hlY2tlZFBhdGgsXG4gICAgICAgIGlzQ2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkLFxuICAgICAgICBpc0xlYWYgPSB0aGlzLmlzTGVhZixcbiAgICAgICAgaXNEaXNhYmxlZCA9IHRoaXMuaXNEaXNhYmxlZCxcbiAgICAgICAgY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgIG5vZGVJZCA9IHRoaXMubm9kZUlkO1xuICAgIHZhciBleHBhbmRUcmlnZ2VyID0gY29uZmlnLmV4cGFuZFRyaWdnZXIsXG4gICAgICAgIGNoZWNrU3RyaWN0bHkgPSBjb25maWcuY2hlY2tTdHJpY3RseSxcbiAgICAgICAgbXVsdGlwbGUgPSBjb25maWcubXVsdGlwbGU7XG5cbiAgICB2YXIgZGlzYWJsZWQgPSAhY2hlY2tTdHJpY3RseSAmJiBpc0Rpc2FibGVkO1xuICAgIHZhciBldmVudHMgPSB7IG9uOiB7fSB9O1xuXG4gICAgaWYgKGV4cGFuZFRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgIGV2ZW50cy5vbi5jbGljayA9IHRoaXMuaGFuZGxlRXhwYW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICBldmVudHMub24ubW91c2VlbnRlciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIF90aGlzMy5oYW5kbGVFeHBhbmQoKTtcbiAgICAgICAgX3RoaXMzLiRlbWl0KCdleHBhbmQnLCBlKTtcbiAgICAgIH07XG4gICAgICBldmVudHMub24uZm9jdXMgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBfdGhpczMuaGFuZGxlRXhwYW5kKCk7XG4gICAgICAgIF90aGlzMy4kZW1pdCgnZXhwYW5kJywgZSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoaXNMZWFmICYmICFpc0Rpc2FibGVkICYmICFjaGVja1N0cmljdGx5ICYmICFtdWx0aXBsZSkge1xuICAgICAgZXZlbnRzLm9uLmNsaWNrID0gdGhpcy5oYW5kbGVDaGVja0NoYW5nZTtcbiAgICB9XG5cbiAgICByZXR1cm4gaChcbiAgICAgICdsaScsXG4gICAgICBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3tcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICByb2xlOiAnbWVudWl0ZW0nLFxuICAgICAgICAgIGlkOiBub2RlSWQsXG4gICAgICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBpbkFjdGl2ZVBhdGgsXG4gICAgICAgICAgdGFiaW5kZXg6IGRpc2FibGVkID8gbnVsbCA6IC0xXG4gICAgICAgIH0sXG4gICAgICAgICdjbGFzcyc6IHtcbiAgICAgICAgICAnZWwtY2FzY2FkZXItbm9kZSc6IHRydWUsXG4gICAgICAgICAgJ2lzLXNlbGVjdGFibGUnOiBjaGVja1N0cmljdGx5LFxuICAgICAgICAgICdpbi1hY3RpdmUtcGF0aCc6IGluQWN0aXZlUGF0aCxcbiAgICAgICAgICAnaW4tY2hlY2tlZC1wYXRoJzogaW5DaGVja2VkUGF0aCxcbiAgICAgICAgICAnaXMtYWN0aXZlJzogaXNDaGVja2VkLFxuICAgICAgICAgICdpcy1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICAgIH1cbiAgICAgIH0sIGV2ZW50c10pLFxuICAgICAgW3RoaXMucmVuZGVyUHJlZml4KGgpLCB0aGlzLnJlbmRlckNvbnRlbnQoaCksIHRoaXMucmVuZGVyUG9zdGZpeChoKV1cbiAgICApO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW5vZGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19jYXNjYWRlcl9ub2RldnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhc2NhZGVyX25vZGV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW5vZGUudnVlXG52YXIgY2FzY2FkZXJfbm9kZV9yZW5kZXIsIGNhc2NhZGVyX25vZGVfc3RhdGljUmVuZGVyRm5zXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNhc2NhZGVyX25vZGVfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfY2FzY2FkZXJfbm9kZXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY2FzY2FkZXJfbm9kZV9yZW5kZXIsXG4gIGNhc2NhZGVyX25vZGVfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjYXNjYWRlcl9ub2RlX2FwaTsgfVxuY2FzY2FkZXJfbm9kZV9jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1ub2RlLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9ub2RlID0gKGNhc2NhZGVyX25vZGVfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW1lbnUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQ2FzY2FkZXJNZW51JyxcblxuICBtaXhpbnM6IFtsb2NhbGVfZGVmYXVsdC5hXSxcblxuICBpbmplY3Q6IFsncGFuZWwnXSxcblxuICBjb21wb25lbnRzOiB7XG4gICAgRWxTY3JvbGxiYXI6IHNjcm9sbGJhcl9kZWZhdWx0LmEsXG4gICAgQ2FzY2FkZXJOb2RlOiBjYXNjYWRlcl9ub2RlXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBub2Rlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgaW5kZXg6IE51bWJlclxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGl2ZU5vZGU6IG51bGwsXG4gICAgICBob3ZlclRpbWVyOiBudWxsLFxuICAgICAgaWQ6IE9iamVjdCh1dGlsX1tcImdlbmVyYXRlSWRcIl0pKClcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0VtcHR5OiBmdW5jdGlvbiBpc0VtcHR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLm5vZGVzLmxlbmd0aDtcbiAgICB9LFxuICAgIG1lbnVJZDogZnVuY3Rpb24gbWVudUlkKCkge1xuICAgICAgcmV0dXJuICdjYXNjYWRlci1tZW51LScgKyB0aGlzLmlkICsgJy0nICsgdGhpcy5pbmRleDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlRXhwYW5kKGUpIHtcbiAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IGUudGFyZ2V0O1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VNb3ZlOiBmdW5jdGlvbiBoYW5kbGVNb3VzZU1vdmUoZSkge1xuICAgICAgdmFyIGFjdGl2ZU5vZGUgPSB0aGlzLmFjdGl2ZU5vZGUsXG4gICAgICAgICAgaG92ZXJUaW1lciA9IHRoaXMuaG92ZXJUaW1lcjtcbiAgICAgIHZhciBob3ZlclpvbmUgPSB0aGlzLiRyZWZzLmhvdmVyWm9uZTtcblxuXG4gICAgICBpZiAoIWFjdGl2ZU5vZGUgfHwgIWhvdmVyWm9uZSkgcmV0dXJuO1xuXG4gICAgICBpZiAoYWN0aXZlTm9kZS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGhvdmVyVGltZXIpO1xuXG4gICAgICAgIHZhciBfJGVsJGdldEJvdW5kaW5nQ2xpZW4gPSB0aGlzLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcbiAgICAgICAgICAgIGxlZnQgPSBfJGVsJGdldEJvdW5kaW5nQ2xpZW4ubGVmdDtcblxuICAgICAgICB2YXIgc3RhcnRYID0gZS5jbGllbnRYIC0gbGVmdDtcbiAgICAgICAgdmFyIF8kZWwgPSB0aGlzLiRlbCxcbiAgICAgICAgICAgIG9mZnNldFdpZHRoID0gXyRlbC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIG9mZnNldEhlaWdodCA9IF8kZWwub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIHZhciB0b3AgPSBhY3RpdmVOb2RlLm9mZnNldFRvcDtcbiAgICAgICAgdmFyIGJvdHRvbSA9IHRvcCArIGFjdGl2ZU5vZGUub2Zmc2V0SGVpZ2h0O1xuXG4gICAgICAgIGhvdmVyWm9uZS5pbm5lckhUTUwgPSAnXFxuICAgICAgICAgIDxwYXRoIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IGF1dG87XCIgZmlsbD1cInRyYW5zcGFyZW50XCIgZD1cIk0nICsgc3RhcnRYICsgJyAnICsgdG9wICsgJyBMJyArIG9mZnNldFdpZHRoICsgJyAwIFYnICsgdG9wICsgJyBaXCIgLz5cXG4gICAgICAgICAgPHBhdGggc3R5bGU9XCJwb2ludGVyLWV2ZW50czogYXV0bztcIiBmaWxsPVwidHJhbnNwYXJlbnRcIiBkPVwiTScgKyBzdGFydFggKyAnICcgKyBib3R0b20gKyAnIEwnICsgb2Zmc2V0V2lkdGggKyAnICcgKyBvZmZzZXRIZWlnaHQgKyAnIFYnICsgYm90dG9tICsgJyBaXCIgLz5cXG4gICAgICAgICc7XG4gICAgICB9IGVsc2UgaWYgKCFob3ZlclRpbWVyKSB7XG4gICAgICAgIHRoaXMuaG92ZXJUaW1lciA9IHNldFRpbWVvdXQodGhpcy5jbGVhckhvdmVyWm9uZSwgdGhpcy5wYW5lbC5jb25maWcuaG92ZXJUaHJlc2hvbGQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJIb3ZlclpvbmU6IGZ1bmN0aW9uIGNsZWFySG92ZXJab25lKCkge1xuICAgICAgdmFyIGhvdmVyWm9uZSA9IHRoaXMuJHJlZnMuaG92ZXJab25lO1xuXG4gICAgICBpZiAoIWhvdmVyWm9uZSkgcmV0dXJuO1xuICAgICAgaG92ZXJab25lLmlubmVySFRNTCA9ICcnO1xuICAgIH0sXG4gICAgcmVuZGVyRW1wdHlUZXh0OiBmdW5jdGlvbiByZW5kZXJFbXB0eVRleHQoaCkge1xuICAgICAgcmV0dXJuIGgoXG4gICAgICAgICdkaXYnLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51X19lbXB0eS10ZXh0JyB9LFxuICAgICAgICBbdGhpcy50KCdlbC5jYXNjYWRlci5ub0RhdGEnKV1cbiAgICAgICk7XG4gICAgfSxcbiAgICByZW5kZXJOb2RlTGlzdDogZnVuY3Rpb24gcmVuZGVyTm9kZUxpc3QoaCkge1xuICAgICAgdmFyIG1lbnVJZCA9IHRoaXMubWVudUlkO1xuICAgICAgdmFyIGlzSG92ZXJNZW51ID0gdGhpcy5wYW5lbC5pc0hvdmVyTWVudTtcblxuICAgICAgdmFyIGV2ZW50cyA9IHsgb246IHt9IH07XG5cbiAgICAgIGlmIChpc0hvdmVyTWVudSkge1xuICAgICAgICBldmVudHMub24uZXhwYW5kID0gdGhpcy5oYW5kbGVFeHBhbmQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBub2RlcyA9IHRoaXMubm9kZXMubWFwKGZ1bmN0aW9uIChub2RlLCBpbmRleCkge1xuICAgICAgICB2YXIgaGFzQ2hpbGRyZW4gPSBub2RlLmhhc0NoaWxkcmVuO1xuXG4gICAgICAgIHJldHVybiBoKCdjYXNjYWRlci1ub2RlJywgZXh0ZXJuYWxfYmFiZWxfaGVscGVyX3Z1ZV9qc3hfbWVyZ2VfcHJvcHNfZGVmYXVsdCgpKFt7XG4gICAgICAgICAga2V5OiBub2RlLnVpZCxcbiAgICAgICAgICBhdHRyczogeyBub2RlOiBub2RlLFxuICAgICAgICAgICAgJ25vZGUtaWQnOiBtZW51SWQgKyAnLScgKyBpbmRleCxcbiAgICAgICAgICAgICdhcmlhLWhhc3BvcHVwJzogaGFzQ2hpbGRyZW4sXG4gICAgICAgICAgICAnYXJpYS1vd25zJzogaGFzQ2hpbGRyZW4gPyBtZW51SWQgOiBudWxsXG4gICAgICAgICAgfVxuICAgICAgICB9LCBldmVudHNdKSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFtdLmNvbmNhdChub2RlcywgW2lzSG92ZXJNZW51ID8gaCgnc3ZnJywgeyByZWY6ICdob3ZlclpvbmUnLCAnY2xhc3MnOiAnZWwtY2FzY2FkZXItbWVudV9faG92ZXItem9uZScgfSkgOiBudWxsXSk7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgaXNFbXB0eSA9IHRoaXMuaXNFbXB0eSxcbiAgICAgICAgbWVudUlkID0gdGhpcy5tZW51SWQ7XG5cbiAgICB2YXIgZXZlbnRzID0geyBuYXRpdmVPbjoge30gfTtcblxuICAgIC8vIG9wdGltaXplIGhvdmVyIHRvIGV4cGFuZCBleHBlcmllbmNlICgjODAxMClcbiAgICBpZiAodGhpcy5wYW5lbC5pc0hvdmVyTWVudSkge1xuICAgICAgZXZlbnRzLm5hdGl2ZU9uLm1vdXNlbW92ZSA9IHRoaXMuaGFuZGxlTW91c2VNb3ZlO1xuICAgICAgLy8gZXZlbnRzLm5hdGl2ZU9uLm1vdXNlbGVhdmUgPSB0aGlzLmNsZWFySG92ZXJab25lO1xuICAgIH1cblxuICAgIHJldHVybiBoKFxuICAgICAgJ2VsLXNjcm9sbGJhcicsXG4gICAgICBleHRlcm5hbF9iYWJlbF9oZWxwZXJfdnVlX2pzeF9tZXJnZV9wcm9wc19kZWZhdWx0KCkoW3tcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB0YWc6ICd1bCcsXG4gICAgICAgICAgcm9sZTogJ21lbnUnLFxuICAgICAgICAgIGlkOiBtZW51SWQsXG5cbiAgICAgICAgICAnd3JhcC1jbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51X193cmFwJyxcbiAgICAgICAgICAndmlldy1jbGFzcyc6IHtcbiAgICAgICAgICAgICdlbC1jYXNjYWRlci1tZW51X19saXN0JzogdHJ1ZSxcbiAgICAgICAgICAgICdpcy1lbXB0eSc6IGlzRW1wdHlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICdjbGFzcyc6ICdlbC1jYXNjYWRlci1tZW51JyB9LCBldmVudHNdKSxcbiAgICAgIFtpc0VtcHR5ID8gdGhpcy5yZW5kZXJFbXB0eVRleHQoaCkgOiB0aGlzLnJlbmRlck5vZGVMaXN0KGgpXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Nhc2NhZGVyX21lbnV2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoY2FzY2FkZXJfbWVudXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItbWVudS52dWVcbnZhciBjYXNjYWRlcl9tZW51X3JlbmRlciwgY2FzY2FkZXJfbWVudV9zdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY2FzY2FkZXJfbWVudV9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jYXNjYWRlcl9tZW51dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBjYXNjYWRlcl9tZW51X3JlbmRlcixcbiAgY2FzY2FkZXJfbWVudV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGNhc2NhZGVyX21lbnVfYXBpOyB9XG5jYXNjYWRlcl9tZW51X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLW1lbnUudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX21lbnUgPSAoY2FzY2FkZXJfbWVudV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9ub2RlLmpzXG52YXIgbm9kZV9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gc3JjX25vZGVfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5cblxuXG52YXIgdWlkID0gMDtcblxudmFyIHNyY19ub2RlX05vZGUgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIE5vZGUoZGF0YSwgY29uZmlnLCBwYXJlbnROb2RlKSB7XG4gICAgc3JjX25vZGVfY2xhc3NDYWxsQ2hlY2sodGhpcywgTm9kZSk7XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50Tm9kZSB8fCBudWxsO1xuICAgIHRoaXMubGV2ZWwgPSAhdGhpcy5wYXJlbnQgPyAxIDogdGhpcy5wYXJlbnQubGV2ZWwgKyAxO1xuICAgIHRoaXMudWlkID0gdWlkKys7XG5cbiAgICB0aGlzLmluaXRTdGF0ZSgpO1xuICAgIHRoaXMuaW5pdENoaWxkcmVuKCk7XG4gIH1cblxuICBOb2RlLnByb3RvdHlwZS5pbml0U3RhdGUgPSBmdW5jdGlvbiBpbml0U3RhdGUoKSB7XG4gICAgdmFyIF9jb25maWcgPSB0aGlzLmNvbmZpZyxcbiAgICAgICAgdmFsdWVLZXkgPSBfY29uZmlnLnZhbHVlLFxuICAgICAgICBsYWJlbEtleSA9IF9jb25maWcubGFiZWw7XG5cblxuICAgIHRoaXMudmFsdWUgPSB0aGlzLmRhdGFbdmFsdWVLZXldO1xuICAgIHRoaXMubGFiZWwgPSB0aGlzLmRhdGFbbGFiZWxLZXldO1xuICAgIHRoaXMucGF0aE5vZGVzID0gdGhpcy5jYWxjdWxhdGVQYXRoTm9kZXMoKTtcbiAgICB0aGlzLnBhdGggPSB0aGlzLnBhdGhOb2Rlcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH0pO1xuICAgIHRoaXMucGF0aExhYmVscyA9IHRoaXMucGF0aE5vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUubGFiZWw7XG4gICAgfSk7XG5cbiAgICAvLyBsYXp5IGxvYWRcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmluaXRDaGlsZHJlbiA9IGZ1bmN0aW9uIGluaXRDaGlsZHJlbigpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgdmFyIGNvbmZpZyA9IHRoaXMuY29uZmlnO1xuXG4gICAgdmFyIGNoaWxkcmVuS2V5ID0gY29uZmlnLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZHJlbkRhdGEgPSB0aGlzLmRhdGFbY2hpbGRyZW5LZXldO1xuICAgIHRoaXMuaGFzQ2hpbGRyZW4gPSBBcnJheS5pc0FycmF5KGNoaWxkcmVuRGF0YSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IChjaGlsZHJlbkRhdGEgfHwgW10pLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBuZXcgTm9kZShjaGlsZCwgY29uZmlnLCBfdGhpcyk7XG4gICAgfSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuY2FsY3VsYXRlUGF0aE5vZGVzID0gZnVuY3Rpb24gY2FsY3VsYXRlUGF0aE5vZGVzKCkge1xuICAgIHZhciBub2RlcyA9IFt0aGlzXTtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG5cbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICBub2Rlcy51bnNoaWZ0KHBhcmVudCk7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIHJldHVybiBub2RlcztcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5nZXRQYXRoID0gZnVuY3Rpb24gZ2V0UGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZ2V0VmFsdWVCeU9wdGlvbiA9IGZ1bmN0aW9uIGdldFZhbHVlQnlPcHRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmVtaXRQYXRoID8gdGhpcy5nZXRQYXRoKCkgOiB0aGlzLmdldFZhbHVlKCk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uIGdldFRleHQoYWxsTGV2ZWxzLCBzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gYWxsTGV2ZWxzID8gdGhpcy5wYXRoTGFiZWxzLmpvaW4oc2VwYXJhdG9yKSA6IHRoaXMubGFiZWw7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuaXNTYW1lTm9kZSA9IGZ1bmN0aW9uIGlzU2FtZU5vZGUoY2hlY2tlZFZhbHVlKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUJ5T3B0aW9uKCk7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkoY2hlY2tlZFZhbHVlKSA/IGNoZWNrZWRWYWx1ZS5zb21lKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKSh2YWwsIHZhbHVlKTtcbiAgICB9KSA6IE9iamVjdCh1dGlsX1tcImlzRXF1YWxcIl0pKGNoZWNrZWRWYWx1ZSwgdmFsdWUpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmJyb2FkY2FzdCA9IGZ1bmN0aW9uIGJyb2FkY2FzdChldmVudCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGhhbmRsZXJOYW1lID0gJ29uUGFyZW50JyArIE9iamVjdCh1dGlsX1tcImNhcGl0YWxpemVcIl0pKGV2ZW50KTtcblxuICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAvLyBib3R0b20gdXBcbiAgICAgICAgY2hpbGQuYnJvYWRjYXN0LmFwcGx5KGNoaWxkLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIGNoaWxkW2hhbmRsZXJOYW1lXSAmJiBjaGlsZFtoYW5kbGVyTmFtZV0uYXBwbHkoY2hpbGQsIGFyZ3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50O1xuXG4gICAgdmFyIGhhbmRsZXJOYW1lID0gJ29uQ2hpbGQnICsgT2JqZWN0KHV0aWxfW1wiY2FwaXRhbGl6ZVwiXSkoZXZlbnQpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgIH1cblxuICAgICAgcGFyZW50W2hhbmRsZXJOYW1lXSAmJiBwYXJlbnRbaGFuZGxlck5hbWVdLmFwcGx5KHBhcmVudCwgYXJncyk7XG4gICAgICBwYXJlbnQuZW1pdC5hcHBseShwYXJlbnQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUub25QYXJlbnRDaGVjayA9IGZ1bmN0aW9uIG9uUGFyZW50Q2hlY2soY2hlY2tlZCkge1xuICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnNldENoZWNrU3RhdGUoY2hlY2tlZCk7XG4gICAgfVxuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLm9uQ2hpbGRDaGVjayA9IGZ1bmN0aW9uIG9uQ2hpbGRDaGVjaygpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuO1xuXG4gICAgdmFyIHZhbGlkQ2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gIWNoaWxkLmlzRGlzYWJsZWQ7XG4gICAgfSk7XG4gICAgdmFyIGNoZWNrZWQgPSB2YWxpZENoaWxkcmVuLmxlbmd0aCA/IHZhbGlkQ2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gY2hpbGQuY2hlY2tlZDtcbiAgICB9KSA6IGZhbHNlO1xuXG4gICAgdGhpcy5zZXRDaGVja1N0YXRlKGNoZWNrZWQpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnNldENoZWNrU3RhdGUgPSBmdW5jdGlvbiBzZXRDaGVja1N0YXRlKGNoZWNrZWQpIHtcbiAgICB2YXIgdG90YWxOdW0gPSB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB2YXIgY2hlY2tlZE51bSA9IHRoaXMuY2hpbGRyZW4ucmVkdWNlKGZ1bmN0aW9uIChjLCBwKSB7XG4gICAgICB2YXIgbnVtID0gcC5jaGVja2VkID8gMSA6IHAuaW5kZXRlcm1pbmF0ZSA/IDAuNSA6IDA7XG4gICAgICByZXR1cm4gYyArIG51bTtcbiAgICB9LCAwKTtcblxuICAgIHRoaXMuY2hlY2tlZCA9IGNoZWNrZWQ7XG4gICAgdGhpcy5pbmRldGVybWluYXRlID0gY2hlY2tlZE51bSAhPT0gdG90YWxOdW0gJiYgY2hlY2tlZE51bSA+IDA7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuc3luY0NoZWNrU3RhdGUgPSBmdW5jdGlvbiBzeW5jQ2hlY2tTdGF0ZShjaGVja2VkVmFsdWUpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLmdldFZhbHVlQnlPcHRpb24oKTtcbiAgICB2YXIgY2hlY2tlZCA9IHRoaXMuaXNTYW1lTm9kZShjaGVja2VkVmFsdWUsIHZhbHVlKTtcblxuICAgIHRoaXMuZG9DaGVjayhjaGVja2VkKTtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5kb0NoZWNrID0gZnVuY3Rpb24gZG9DaGVjayhjaGVja2VkKSB7XG4gICAgaWYgKHRoaXMuY2hlY2tlZCAhPT0gY2hlY2tlZCkge1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmNoZWNrU3RyaWN0bHkpIHtcbiAgICAgICAgdGhpcy5jaGVja2VkID0gY2hlY2tlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJvdHRvbSB1cCB0byB1bmlmeSB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGluZGV0ZXJtaW5hdGUgc3RhdGVcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ2NoZWNrJywgY2hlY2tlZCk7XG4gICAgICAgIHRoaXMuc2V0Q2hlY2tTdGF0ZShjaGVja2VkKTtcbiAgICAgICAgdGhpcy5lbWl0KCdjaGVjaycpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBub2RlX2NyZWF0ZUNsYXNzKE5vZGUsIFt7XG4gICAga2V5OiAnaXNEaXNhYmxlZCcsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSxcbiAgICAgICAgICBwYXJlbnQgPSB0aGlzLnBhcmVudCxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgICAgdmFyIGRpc2FibGVkS2V5ID0gY29uZmlnLmRpc2FibGVkO1xuICAgICAgdmFyIGNoZWNrU3RyaWN0bHkgPSBjb25maWcuY2hlY2tTdHJpY3RseTtcblxuICAgICAgcmV0dXJuIGRhdGFbZGlzYWJsZWRLZXldIHx8ICFjaGVja1N0cmljdGx5ICYmIHBhcmVudCAmJiBwYXJlbnQuaXNEaXNhYmxlZDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdpc0xlYWYnLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgbG9hZGVkID0gdGhpcy5sb2FkZWQsXG4gICAgICAgICAgaGFzQ2hpbGRyZW4gPSB0aGlzLmhhc0NoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgIHZhciBfY29uZmlnMiA9IHRoaXMuY29uZmlnLFxuICAgICAgICAgIGxhenkgPSBfY29uZmlnMi5sYXp5LFxuICAgICAgICAgIGxlYWZLZXkgPSBfY29uZmlnMi5sZWFmO1xuXG4gICAgICBpZiAobGF6eSkge1xuICAgICAgICB2YXIgaXNMZWFmID0gT2JqZWN0KHNoYXJlZF9bXCJpc0RlZlwiXSkoZGF0YVtsZWFmS2V5XSkgPyBkYXRhW2xlYWZLZXldIDogbG9hZGVkID8gIWNoaWxkcmVuLmxlbmd0aCA6IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0NoaWxkcmVuID0gIWlzTGVhZjtcbiAgICAgICAgcmV0dXJuIGlzTGVhZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhaGFzQ2hpbGRyZW47XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE5vZGU7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19ub2RlID0gKHNyY19ub2RlX05vZGUpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvc3RvcmUuanNcbmZ1bmN0aW9uIHN0b3JlX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuXG5cblxudmFyIGZsYXROb2RlcyA9IGZ1bmN0aW9uIGZsYXROb2RlcyhkYXRhLCBsZWFmT25seSkge1xuICByZXR1cm4gZGF0YS5yZWR1Y2UoZnVuY3Rpb24gKHJlcywgbm9kZSkge1xuICAgIGlmIChub2RlLmlzTGVhZikge1xuICAgICAgcmVzLnB1c2gobm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICFsZWFmT25seSAmJiByZXMucHVzaChub2RlKTtcbiAgICAgIHJlcyA9IHJlcy5jb25jYXQoZmxhdE5vZGVzKG5vZGUuY2hpbGRyZW4sIGxlYWZPbmx5KSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH0sIFtdKTtcbn07XG5cbnZhciBzdG9yZV9TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3RvcmUoZGF0YSwgY29uZmlnKSB7XG4gICAgc3RvcmVfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RvcmUpO1xuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5pbml0Tm9kZXMoZGF0YSk7XG4gIH1cblxuICBTdG9yZS5wcm90b3R5cGUuaW5pdE5vZGVzID0gZnVuY3Rpb24gaW5pdE5vZGVzKGRhdGEpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZGF0YSA9IE9iamVjdCh1dGlsX1tcImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheVwiXSkoZGF0YSk7XG4gICAgdGhpcy5ub2RlcyA9IGRhdGEubWFwKGZ1bmN0aW9uIChub2RlRGF0YSkge1xuICAgICAgcmV0dXJuIG5ldyBzcmNfbm9kZShub2RlRGF0YSwgX3RoaXMuY29uZmlnKTtcbiAgICB9KTtcbiAgICB0aGlzLmZsYXR0ZWROb2RlcyA9IHRoaXMuZ2V0RmxhdHRlZE5vZGVzKGZhbHNlLCBmYWxzZSk7XG4gICAgdGhpcy5sZWFmTm9kZXMgPSB0aGlzLmdldEZsYXR0ZWROb2Rlcyh0cnVlLCBmYWxzZSk7XG4gIH07XG5cbiAgU3RvcmUucHJvdG90eXBlLmFwcGVuZE5vZGUgPSBmdW5jdGlvbiBhcHBlbmROb2RlKG5vZGVEYXRhLCBwYXJlbnROb2RlKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgc3JjX25vZGUobm9kZURhdGEsIHRoaXMuY29uZmlnLCBwYXJlbnROb2RlKTtcbiAgICB2YXIgY2hpbGRyZW4gPSBwYXJlbnROb2RlID8gcGFyZW50Tm9kZS5jaGlsZHJlbiA6IHRoaXMubm9kZXM7XG5cbiAgICBjaGlsZHJlbi5wdXNoKG5vZGUpO1xuICB9O1xuXG4gIFN0b3JlLnByb3RvdHlwZS5hcHBlbmROb2RlcyA9IGZ1bmN0aW9uIGFwcGVuZE5vZGVzKG5vZGVEYXRhTGlzdCwgcGFyZW50Tm9kZSkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgbm9kZURhdGFMaXN0ID0gT2JqZWN0KHV0aWxfW1wiY29lcmNlVHJ1dGh5VmFsdWVUb0FycmF5XCJdKShub2RlRGF0YUxpc3QpO1xuICAgIG5vZGVEYXRhTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlRGF0YSkge1xuICAgICAgcmV0dXJuIF90aGlzMi5hcHBlbmROb2RlKG5vZGVEYXRhLCBwYXJlbnROb2RlKTtcbiAgICB9KTtcbiAgfTtcblxuICBTdG9yZS5wcm90b3R5cGUuZ2V0Tm9kZXMgPSBmdW5jdGlvbiBnZXROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlcztcbiAgfTtcblxuICBTdG9yZS5wcm90b3R5cGUuZ2V0RmxhdHRlZE5vZGVzID0gZnVuY3Rpb24gZ2V0RmxhdHRlZE5vZGVzKGxlYWZPbmx5KSB7XG4gICAgdmFyIGNhY2hlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogdHJ1ZTtcblxuICAgIHZhciBjYWNoZWROb2RlcyA9IGxlYWZPbmx5ID8gdGhpcy5sZWFmTm9kZXMgOiB0aGlzLmZsYXR0ZWROb2RlcztcbiAgICByZXR1cm4gY2FjaGVkID8gY2FjaGVkTm9kZXMgOiBmbGF0Tm9kZXModGhpcy5ub2RlcywgbGVhZk9ubHkpO1xuICB9O1xuXG4gIFN0b3JlLnByb3RvdHlwZS5nZXROb2RlQnlWYWx1ZSA9IGZ1bmN0aW9uIGdldE5vZGVCeVZhbHVlKHZhbHVlKSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5nZXRGbGF0dGVkTm9kZXMoZmFsc2UsICF0aGlzLmNvbmZpZy5sYXp5KS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJ2YWx1ZUVxdWFsc1wiXSkobm9kZS5wYXRoLCB2YWx1ZSkgfHwgbm9kZS52YWx1ZSA9PT0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzICYmIG5vZGVzLmxlbmd0aCA/IG5vZGVzWzBdIDogbnVsbDtcbiAgfTtcblxuICByZXR1cm4gU3RvcmU7XG59KCk7XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGNhc2NhZGVyX3BhbmVsX3NyY19zdG9yZSA9IChzdG9yZV9TdG9yZSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9jYXNjYWRlci1wYW5lbC9zcmMvY2FzY2FkZXItcGFuZWwudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxudmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cblxudmFyIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfS2V5Q29kZSA9IGFyaWFfdXRpbHNfZGVmYXVsdC5hLmtleXM7XG5cbnZhciBEZWZhdWx0UHJvcHMgPSB7XG4gIGV4cGFuZFRyaWdnZXI6ICdjbGljaycsIC8vIG9yIGhvdmVyXG4gIG11bHRpcGxlOiBmYWxzZSxcbiAgY2hlY2tTdHJpY3RseTogZmFsc2UsIC8vIHdoZXRoZXIgYWxsIG5vZGVzIGNhbiBiZSBzZWxlY3RlZFxuICBlbWl0UGF0aDogdHJ1ZSwgLy8gd2V0aGVyIHRvIGVtaXQgYW4gYXJyYXkgb2YgYWxsIGxldmVscyB2YWx1ZSBpbiB3aGljaCBub2RlIGlzIGxvY2F0ZWRcbiAgbGF6eTogZmFsc2UsXG4gIGxhenlMb2FkOiB1dGlsX1tcIm5vb3BcIl0sXG4gIHZhbHVlOiAndmFsdWUnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGxlYWY6ICdsZWFmJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGhvdmVyVGhyZXNob2xkOiA1MDBcbn07XG5cbnZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2lzTGVhZiA9IGZ1bmN0aW9uIGlzTGVhZihlbCkge1xuICByZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSgnYXJpYS1vd25zJyk7XG59O1xuXG52YXIgZ2V0U2libGluZyA9IGZ1bmN0aW9uIGdldFNpYmxpbmcoZWwsIGRpc3RhbmNlKSB7XG4gIHZhciBwYXJlbnROb2RlID0gZWwucGFyZW50Tm9kZTtcblxuICBpZiAocGFyZW50Tm9kZSkge1xuICAgIHZhciBzaWJsaW5ncyA9IHBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmVsLWNhc2NhZGVyLW5vZGVbdGFiaW5kZXg9XCItMVwiXScpO1xuICAgIHZhciBpbmRleCA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoc2libGluZ3MsIGVsKTtcbiAgICByZXR1cm4gc2libGluZ3NbaW5kZXggKyBkaXN0YW5jZV0gfHwgbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbnZhciBnZXRNZW51SW5kZXggPSBmdW5jdGlvbiBnZXRNZW51SW5kZXgoZWwsIGRpc3RhbmNlKSB7XG4gIGlmICghZWwpIHJldHVybjtcbiAgdmFyIHBpZWNlcyA9IGVsLmlkLnNwbGl0KCctJyk7XG4gIHJldHVybiBOdW1iZXIocGllY2VzW3BpZWNlcy5sZW5ndGggLSAyXSk7XG59O1xuXG52YXIgZm9jdXNOb2RlID0gZnVuY3Rpb24gZm9jdXNOb2RlKGVsKSB7XG4gIGlmICghZWwpIHJldHVybjtcbiAgZWwuZm9jdXMoKTtcbiAgIWNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaXNMZWFmKGVsKSAmJiBlbC5jbGljaygpO1xufTtcblxudmFyIGNoZWNrTm9kZSA9IGZ1bmN0aW9uIGNoZWNrTm9kZShlbCkge1xuICBpZiAoIWVsKSByZXR1cm47XG5cbiAgdmFyIGlucHV0ID0gZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgaWYgKGlucHV0KSB7XG4gICAgaW5wdXQuY2xpY2soKTtcbiAgfSBlbHNlIGlmIChjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2lzTGVhZihlbCkpIHtcbiAgICBlbC5jbGljaygpO1xuICB9XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbENhc2NhZGVyUGFuZWwnLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBDYXNjYWRlck1lbnU6IGNhc2NhZGVyX21lbnVcbiAgfSxcblxuICBwcm9wczoge1xuICAgIHZhbHVlOiB7fSxcbiAgICBvcHRpb25zOiBBcnJheSxcbiAgICBwcm9wczogT2JqZWN0LFxuICAgIGJvcmRlcjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHJlbmRlckxhYmVsOiBGdW5jdGlvblxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhbmVsOiB0aGlzXG4gICAgfTtcbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZFZhbHVlOiBudWxsLFxuICAgICAgY2hlY2tlZE5vZGVQYXRoczogW10sXG4gICAgICBzdG9yZTogW10sXG4gICAgICBtZW51czogW10sXG4gICAgICBhY3RpdmVQYXRoOiBbXSxcbiAgICAgIGxvYWRDb3VudDogMFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIGNvbmZpZzogZnVuY3Rpb24gY29uZmlnKCkge1xuICAgICAgcmV0dXJuIG1lcmdlX2RlZmF1bHQoKShjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2V4dGVuZHMoe30sIERlZmF1bHRQcm9wcyksIHRoaXMucHJvcHMgfHwge30pO1xuICAgIH0sXG4gICAgbXVsdGlwbGU6IGZ1bmN0aW9uIG11bHRpcGxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLm11bHRpcGxlO1xuICAgIH0sXG4gICAgY2hlY2tTdHJpY3RseTogZnVuY3Rpb24gY2hlY2tTdHJpY3RseSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja1N0cmljdGx5O1xuICAgIH0sXG4gICAgbGVhZk9ubHk6IGZ1bmN0aW9uIGxlYWZPbmx5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmNoZWNrU3RyaWN0bHk7XG4gICAgfSxcbiAgICBpc0hvdmVyTWVudTogZnVuY3Rpb24gaXNIb3Zlck1lbnUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb25maWcuZXhwYW5kVHJpZ2dlciA9PT0gJ2hvdmVyJztcbiAgICB9LFxuICAgIHJlbmRlckxhYmVsRm46IGZ1bmN0aW9uIHJlbmRlckxhYmVsRm4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXJMYWJlbCB8fCB0aGlzLiRzY29wZWRTbG90cy5kZWZhdWx0O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuaW5pdFN0b3JlKCk7XG4gICAgICB9LFxuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgZGVlcDogdHJ1ZVxuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKCkge1xuICAgICAgdGhpcy5zeW5jQ2hlY2tlZFZhbHVlKCk7XG4gICAgICB0aGlzLmNoZWNrU3RyaWN0bHkgJiYgdGhpcy5jYWxjdWxhdGVDaGVja2VkTm9kZVBhdGhzKCk7XG4gICAgfSxcbiAgICBjaGVja2VkVmFsdWU6IGZ1bmN0aW9uIGNoZWNrZWRWYWx1ZSh2YWwpIHtcbiAgICAgIGlmICghT2JqZWN0KHV0aWxfW1wiaXNFcXVhbFwiXSkodmFsLCB0aGlzLnZhbHVlKSkge1xuICAgICAgICB0aGlzLmNoZWNrU3RyaWN0bHkgJiYgdGhpcy5jYWxjdWxhdGVDaGVja2VkTm9kZVBhdGhzKCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgdmFsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICBpZiAoIXRoaXMuaXNFbXB0eVZhbHVlKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aGlzLnN5bmNDaGVja2VkVmFsdWUoKTtcbiAgICB9XG4gIH0sXG5cblxuICBtZXRob2RzOiB7XG4gICAgaW5pdFN0b3JlOiBmdW5jdGlvbiBpbml0U3RvcmUoKSB7XG4gICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAgaWYgKGNvbmZpZy5sYXp5ICYmIE9iamVjdCh1dGlsX1tcImlzRW1wdHlcIl0pKG9wdGlvbnMpKSB7XG4gICAgICAgIHRoaXMubGF6eUxvYWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmUgPSBuZXcgY2FzY2FkZXJfcGFuZWxfc3JjX3N0b3JlKG9wdGlvbnMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMubWVudXMgPSBbdGhpcy5zdG9yZS5nZXROb2RlcygpXTtcbiAgICAgICAgdGhpcy5zeW5jTWVudVN0YXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzeW5jQ2hlY2tlZFZhbHVlOiBmdW5jdGlvbiBzeW5jQ2hlY2tlZFZhbHVlKCkge1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSxcbiAgICAgICAgICBjaGVja2VkVmFsdWUgPSB0aGlzLmNoZWNrZWRWYWx1ZTtcblxuICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJpc0VxdWFsXCJdKSh2YWx1ZSwgY2hlY2tlZFZhbHVlKSkge1xuICAgICAgICB0aGlzLmFjdGl2ZVBhdGggPSBbXTtcbiAgICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zeW5jTWVudVN0YXRlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzeW5jTWVudVN0YXRlOiBmdW5jdGlvbiBzeW5jTWVudVN0YXRlKCkge1xuICAgICAgdmFyIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgICBjaGVja1N0cmljdGx5ID0gdGhpcy5jaGVja1N0cmljdGx5O1xuXG4gICAgICB0aGlzLnN5bmNBY3RpdmVQYXRoKCk7XG4gICAgICBtdWx0aXBsZSAmJiB0aGlzLnN5bmNNdWx0aUNoZWNrU3RhdGUoKTtcbiAgICAgIGNoZWNrU3RyaWN0bHkgJiYgdGhpcy5jYWxjdWxhdGVDaGVja2VkTm9kZVBhdGhzKCk7XG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnNjcm9sbEludG9WaWV3KTtcbiAgICB9LFxuICAgIHN5bmNNdWx0aUNoZWNrU3RhdGU6IGZ1bmN0aW9uIHN5bmNNdWx0aUNoZWNrU3RhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICB2YXIgbm9kZXMgPSB0aGlzLmdldEZsYXR0ZWROb2Rlcyh0aGlzLmxlYWZPbmx5KTtcblxuICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBub2RlLnN5bmNDaGVja1N0YXRlKF90aGlzLmNoZWNrZWRWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGlzRW1wdHlWYWx1ZTogZnVuY3Rpb24gaXNFbXB0eVZhbHVlKHZhbCkge1xuICAgICAgdmFyIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZSxcbiAgICAgICAgICBjb25maWcgPSB0aGlzLmNvbmZpZztcbiAgICAgIHZhciBlbWl0UGF0aCA9IGNvbmZpZy5lbWl0UGF0aDtcblxuICAgICAgaWYgKG11bHRpcGxlIHx8IGVtaXRQYXRoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJpc0VtcHR5XCJdKSh2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgc3luY0FjdGl2ZVBhdGg6IGZ1bmN0aW9uIHN5bmNBY3RpdmVQYXRoKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmUsXG4gICAgICAgICAgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlLFxuICAgICAgICAgIGFjdGl2ZVBhdGggPSB0aGlzLmFjdGl2ZVBhdGgsXG4gICAgICAgICAgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWU7XG5cblxuICAgICAgaWYgKCFPYmplY3QodXRpbF9bXCJpc0VtcHR5XCJdKShhY3RpdmVQYXRoKSkge1xuICAgICAgICB2YXIgbm9kZXMgPSBhY3RpdmVQYXRoLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuZ2V0Tm9kZUJ5VmFsdWUobm9kZS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZXhwYW5kTm9kZXMobm9kZXMpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0VtcHR5VmFsdWUoY2hlY2tlZFZhbHVlKSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBtdWx0aXBsZSA/IGNoZWNrZWRWYWx1ZVswXSA6IGNoZWNrZWRWYWx1ZTtcbiAgICAgICAgdmFyIGNoZWNrZWROb2RlID0gdGhpcy5nZXROb2RlQnlWYWx1ZSh2YWx1ZSkgfHwge307XG4gICAgICAgIHZhciBfbm9kZXMgPSAoY2hlY2tlZE5vZGUucGF0aE5vZGVzIHx8IFtdKS5zbGljZSgwLCAtMSk7XG4gICAgICAgIHRoaXMuZXhwYW5kTm9kZXMoX25vZGVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUGF0aCA9IFtdO1xuICAgICAgICB0aGlzLm1lbnVzID0gW3N0b3JlLmdldE5vZGVzKCldO1xuICAgICAgfVxuICAgIH0sXG4gICAgZXhwYW5kTm9kZXM6IGZ1bmN0aW9uIGV4cGFuZE5vZGVzKG5vZGVzKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgbm9kZXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICByZXR1cm4gX3RoaXMzLmhhbmRsZUV4cGFuZChub2RlLCB0cnVlIC8qIHNpbGVudCAqLyk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHM6IGZ1bmN0aW9uIGNhbGN1bGF0ZUNoZWNrZWROb2RlUGF0aHMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgdmFyIGNoZWNrZWRWYWx1ZSA9IHRoaXMuY2hlY2tlZFZhbHVlLFxuICAgICAgICAgIG11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcblxuICAgICAgdmFyIGNoZWNrZWRWYWx1ZXMgPSBtdWx0aXBsZSA/IE9iamVjdCh1dGlsX1tcImNvZXJjZVRydXRoeVZhbHVlVG9BcnJheVwiXSkoY2hlY2tlZFZhbHVlKSA6IFtjaGVja2VkVmFsdWVdO1xuICAgICAgdGhpcy5jaGVja2VkTm9kZVBhdGhzID0gY2hlY2tlZFZhbHVlcy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgdmFyIGNoZWNrZWROb2RlID0gX3RoaXM0LmdldE5vZGVCeVZhbHVlKHYpO1xuICAgICAgICByZXR1cm4gY2hlY2tlZE5vZGUgPyBjaGVja2VkTm9kZS5wYXRoTm9kZXMgOiBbXTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaGFuZGxlS2V5RG93bjogZnVuY3Rpb24gaGFuZGxlS2V5RG93bihlKSB7XG4gICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQsXG4gICAgICAgICAga2V5Q29kZSA9IGUua2V5Q29kZTtcblxuXG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgICAgY2FzZSBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0tleUNvZGUudXA6XG4gICAgICAgICAgdmFyIHByZXYgPSBnZXRTaWJsaW5nKHRhcmdldCwgLTEpO1xuICAgICAgICAgIGZvY3VzTm9kZShwcmV2KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX0tleUNvZGUuZG93bjpcbiAgICAgICAgICB2YXIgbmV4dCA9IGdldFNpYmxpbmcodGFyZ2V0LCAxKTtcbiAgICAgICAgICBmb2N1c05vZGUobmV4dCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLmxlZnQ6XG4gICAgICAgICAgdmFyIHByZU1lbnUgPSB0aGlzLiRyZWZzLm1lbnVbZ2V0TWVudUluZGV4KHRhcmdldCkgLSAxXTtcbiAgICAgICAgICBpZiAocHJlTWVudSkge1xuICAgICAgICAgICAgdmFyIGV4cGFuZGVkTm9kZSA9IHByZU1lbnUuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlW2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdJyk7XG4gICAgICAgICAgICBmb2N1c05vZGUoZXhwYW5kZWROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLnJpZ2h0OlxuICAgICAgICAgIHZhciBuZXh0TWVudSA9IHRoaXMuJHJlZnMubWVudVtnZXRNZW51SW5kZXgodGFyZ2V0KSArIDFdO1xuICAgICAgICAgIGlmIChuZXh0TWVudSkge1xuICAgICAgICAgICAgdmFyIGZpcnN0Tm9kZSA9IG5leHRNZW51LiRlbC5xdWVyeVNlbGVjdG9yKCcuZWwtY2FzY2FkZXItbm9kZVt0YWJpbmRleD1cIi0xXCJdJyk7XG4gICAgICAgICAgICBmb2N1c05vZGUoZmlyc3ROb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLmVudGVyOlxuICAgICAgICAgIGNoZWNrTm9kZSh0YXJnZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfS2V5Q29kZS5lc2M6XG4gICAgICAgIGNhc2UgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19LZXlDb2RlLnRhYjpcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjbG9zZScpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUV4cGFuZDogZnVuY3Rpb24gaGFuZGxlRXhwYW5kKG5vZGUsIHNpbGVudCkge1xuICAgICAgdmFyIGFjdGl2ZVBhdGggPSB0aGlzLmFjdGl2ZVBhdGg7XG4gICAgICB2YXIgbGV2ZWwgPSBub2RlLmxldmVsO1xuXG4gICAgICB2YXIgcGF0aCA9IGFjdGl2ZVBhdGguc2xpY2UoMCwgbGV2ZWwgLSAxKTtcbiAgICAgIHZhciBtZW51cyA9IHRoaXMubWVudXMuc2xpY2UoMCwgbGV2ZWwpO1xuXG4gICAgICBpZiAoIW5vZGUuaXNMZWFmKSB7XG4gICAgICAgIHBhdGgucHVzaChub2RlKTtcbiAgICAgICAgbWVudXMucHVzaChub2RlLmNoaWxkcmVuKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hY3RpdmVQYXRoID0gcGF0aDtcbiAgICAgIHRoaXMubWVudXMgPSBtZW51cztcblxuICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgdmFyIHBhdGhWYWx1ZXMgPSBwYXRoLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiBub2RlLmdldFZhbHVlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgYWN0aXZlUGF0aFZhbHVlcyA9IGFjdGl2ZVBhdGgubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuZ2V0VmFsdWUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghT2JqZWN0KHV0aWxfW1widmFsdWVFcXVhbHNcIl0pKHBhdGhWYWx1ZXMsIGFjdGl2ZVBhdGhWYWx1ZXMpKSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnYWN0aXZlLWl0ZW0tY2hhbmdlJywgcGF0aFZhbHVlcyk7IC8vIERlcHJlY2F0ZWRcbiAgICAgICAgICB0aGlzLiRlbWl0KCdleHBhbmQtY2hhbmdlJywgcGF0aFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUNoZWNrQ2hhbmdlOiBmdW5jdGlvbiBoYW5kbGVDaGVja0NoYW5nZSh2YWx1ZSkge1xuICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSB2YWx1ZTtcbiAgICB9LFxuICAgIGxhenlMb2FkOiBmdW5jdGlvbiBsYXp5TG9hZChub2RlLCBvbkZ1bGxmaWxlZCkge1xuICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XG5cbiAgICAgIHZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIG5vZGUgPSBub2RlIHx8IHsgcm9vdDogdHJ1ZSwgbGV2ZWw6IDAgfTtcbiAgICAgICAgdGhpcy5zdG9yZSA9IG5ldyBjYXNjYWRlcl9wYW5lbF9zcmNfc3RvcmUoW10sIGNvbmZpZyk7XG4gICAgICAgIHRoaXMubWVudXMgPSBbdGhpcy5zdG9yZS5nZXROb2RlcygpXTtcbiAgICAgIH1cbiAgICAgIG5vZGUubG9hZGluZyA9IHRydWU7XG4gICAgICB2YXIgcmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUoZGF0YUxpc3QpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucm9vdCA/IG51bGwgOiBub2RlO1xuICAgICAgICBkYXRhTGlzdCAmJiBkYXRhTGlzdC5sZW5ndGggJiYgX3RoaXM1LnN0b3JlLmFwcGVuZE5vZGVzKGRhdGFMaXN0LCBwYXJlbnQpO1xuICAgICAgICBub2RlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgbm9kZS5sb2FkZWQgPSB0cnVlO1xuXG4gICAgICAgIC8vIGRpc3Bvc2UgZGVmYXVsdCB2YWx1ZSBvbiBsYXp5IGxvYWQgbW9kZVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfdGhpczUuY2hlY2tlZFZhbHVlKSkge1xuICAgICAgICAgIHZhciBub2RlVmFsdWUgPSBfdGhpczUuY2hlY2tlZFZhbHVlW190aGlzNS5sb2FkQ291bnQrK107XG4gICAgICAgICAgdmFyIHZhbHVlS2V5ID0gX3RoaXM1LmNvbmZpZy52YWx1ZTtcbiAgICAgICAgICB2YXIgbGVhZktleSA9IF90aGlzNS5jb25maWcubGVhZjtcblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGFMaXN0KSAmJiBkYXRhTGlzdC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtW3ZhbHVlS2V5XSA9PT0gbm9kZVZhbHVlO1xuICAgICAgICAgIH0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciBjaGVja2VkTm9kZSA9IF90aGlzNS5zdG9yZS5nZXROb2RlQnlWYWx1ZShub2RlVmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoIWNoZWNrZWROb2RlLmRhdGFbbGVhZktleV0pIHtcbiAgICAgICAgICAgICAgX3RoaXM1LmxhenlMb2FkKGNoZWNrZWROb2RlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXM1LmhhbmRsZUV4cGFuZChjaGVja2VkTm9kZSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX3RoaXM1LmxvYWRDb3VudCA9PT0gX3RoaXM1LmNoZWNrZWRWYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgX3RoaXM1LiRwYXJlbnQuY29tcHV0ZVByZXNlbnRUZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb25GdWxsZmlsZWQgJiYgb25GdWxsZmlsZWQoZGF0YUxpc3QpO1xuICAgICAgfTtcbiAgICAgIGNvbmZpZy5sYXp5TG9hZChub2RlLCByZXNvbHZlKTtcbiAgICB9LFxuXG5cbiAgICAvKipcbiAgICAgKiBwdWJsaWMgbWV0aG9kc1xuICAgICovXG4gICAgY2FsY3VsYXRlTXVsdGlDaGVja2VkVmFsdWU6IGZ1bmN0aW9uIGNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlKCkge1xuICAgICAgdGhpcy5jaGVja2VkVmFsdWUgPSB0aGlzLmdldENoZWNrZWROb2Rlcyh0aGlzLmxlYWZPbmx5KS5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuZ2V0VmFsdWVCeU9wdGlvbigpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBzY3JvbGxJbnRvVmlldzogZnVuY3Rpb24gc2Nyb2xsSW50b1ZpZXcoKSB7XG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcblxuICAgICAgdmFyIG1lbnVzID0gdGhpcy4kcmVmcy5tZW51IHx8IFtdO1xuICAgICAgbWVudXMuZm9yRWFjaChmdW5jdGlvbiAobWVudSkge1xuICAgICAgICB2YXIgbWVudUVsZW1lbnQgPSBtZW51LiRlbDtcbiAgICAgICAgaWYgKG1lbnVFbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGNvbnRhaW5lciA9IG1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbC1zY3JvbGxiYXJfX3dyYXAnKTtcbiAgICAgICAgICB2YXIgYWN0aXZlTm9kZSA9IG1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlLmlzLWFjdGl2ZScpIHx8IG1lbnVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lbC1jYXNjYWRlci1ub2RlLmluLWFjdGl2ZS1wYXRoJyk7XG4gICAgICAgICAgc2Nyb2xsX2ludG9fdmlld19kZWZhdWx0KCkoY29udGFpbmVyLCBhY3RpdmVOb2RlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXROb2RlQnlWYWx1ZTogZnVuY3Rpb24gZ2V0Tm9kZUJ5VmFsdWUodmFsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXROb2RlQnlWYWx1ZSh2YWwpO1xuICAgIH0sXG4gICAgZ2V0RmxhdHRlZE5vZGVzOiBmdW5jdGlvbiBnZXRGbGF0dGVkTm9kZXMobGVhZk9ubHkpIHtcbiAgICAgIHZhciBjYWNoZWQgPSAhdGhpcy5jb25maWcubGF6eTtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlLmdldEZsYXR0ZWROb2RlcyhsZWFmT25seSwgY2FjaGVkKTtcbiAgICB9LFxuICAgIGdldENoZWNrZWROb2RlczogZnVuY3Rpb24gZ2V0Q2hlY2tlZE5vZGVzKGxlYWZPbmx5KSB7XG4gICAgICB2YXIgY2hlY2tlZFZhbHVlID0gdGhpcy5jaGVja2VkVmFsdWUsXG4gICAgICAgICAgbXVsdGlwbGUgPSB0aGlzLm11bHRpcGxlO1xuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgdmFyIG5vZGVzID0gdGhpcy5nZXRGbGF0dGVkTm9kZXMobGVhZk9ubHkpO1xuICAgICAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuY2hlY2tlZDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0VtcHR5VmFsdWUoY2hlY2tlZFZhbHVlKSA/IFtdIDogW3RoaXMuZ2V0Tm9kZUJ5VmFsdWUoY2hlY2tlZFZhbHVlKV07XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhckNoZWNrZWROb2RlczogZnVuY3Rpb24gY2xlYXJDaGVja2VkTm9kZXMoKSB7XG4gICAgICB2YXIgY29uZmlnID0gdGhpcy5jb25maWcsXG4gICAgICAgICAgbGVhZk9ubHkgPSB0aGlzLmxlYWZPbmx5O1xuICAgICAgdmFyIG11bHRpcGxlID0gY29uZmlnLm11bHRpcGxlLFxuICAgICAgICAgIGVtaXRQYXRoID0gY29uZmlnLmVtaXRQYXRoO1xuXG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5nZXRDaGVja2VkTm9kZXMobGVhZk9ubHkpLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgIHJldHVybiAhbm9kZS5pc0Rpc2FibGVkO1xuICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUuZG9DaGVjayhmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZU11bHRpQ2hlY2tlZFZhbHVlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrZWRWYWx1ZSA9IGVtaXRQYXRoID8gW10gOiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2Nhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL3NyYy9jYXNjYWRlci1wYW5lbC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjYXNjYWRlcl9wYW5lbF9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19jYXNjYWRlcl9wYW5lbHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgY2FzY2FkZXJfcGFuZWx2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDkzMjM0Nl9yZW5kZXIsXG4gIGNhc2NhZGVyX3BhbmVsdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ5MzIzNDZfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBjYXNjYWRlcl9wYW5lbF9hcGk7IH1cbmNhc2NhZGVyX3BhbmVsX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvY2FzY2FkZXItcGFuZWwvc3JjL2Nhc2NhZGVyLXBhbmVsLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjYXNjYWRlcl9wYW5lbCA9IChjYXNjYWRlcl9wYW5lbF9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Nhc2NhZGVyLXBhbmVsL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNhc2NhZGVyX3BhbmVsLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoY2FzY2FkZXJfcGFuZWwubmFtZSwgY2FzY2FkZXJfcGFuZWwpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfY2FzY2FkZXJfcGFuZWwgPSAoY2FzY2FkZXJfcGFuZWwpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvYXZhdGFyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYXZhdGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsQXZhdGFyJyxcblxuICBwcm9wczoge1xuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIFsnbGFyZ2UnLCAnbWVkaXVtJywgJ3NtYWxsJ10uaW5jbHVkZXModmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG4gICAgICB9XG4gICAgfSxcbiAgICBzaGFwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NpcmNsZScsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnY2lyY2xlJywgJ3NxdWFyZSddLmluY2x1ZGVzKHZhbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBpY29uOiBTdHJpbmcsXG4gICAgc3JjOiBTdHJpbmcsXG4gICAgYWx0OiBTdHJpbmcsXG4gICAgc3JjU2V0OiBTdHJpbmcsXG4gICAgZXJyb3I6IEZ1bmN0aW9uLFxuICAgIGZpdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvdmVyJ1xuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0ltYWdlRXhpc3Q6IHRydWVcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBhdmF0YXJDbGFzczogZnVuY3Rpb24gYXZhdGFyQ2xhc3MoKSB7XG4gICAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSxcbiAgICAgICAgICBpY29uID0gdGhpcy5pY29uLFxuICAgICAgICAgIHNoYXBlID0gdGhpcy5zaGFwZTtcblxuICAgICAgdmFyIGNsYXNzTGlzdCA9IFsnZWwtYXZhdGFyJ107XG5cbiAgICAgIGlmIChzaXplICYmIHR5cGVvZiBzaXplID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbGFzc0xpc3QucHVzaCgnZWwtYXZhdGFyLS0nICsgc2l6ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpY29uKSB7XG4gICAgICAgIGNsYXNzTGlzdC5wdXNoKCdlbC1hdmF0YXItLWljb24nKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNoYXBlKSB7XG4gICAgICAgIGNsYXNzTGlzdC5wdXNoKCdlbC1hdmF0YXItLScgKyBzaGFwZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbGFzc0xpc3Quam9pbignICcpO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRXJyb3I6IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgdmFyIGVycm9yID0gdGhpcy5lcnJvcjtcblxuICAgICAgdmFyIGVycm9yRmxhZyA9IGVycm9yID8gZXJyb3IoKSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmIChlcnJvckZsYWcgIT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaXNJbWFnZUV4aXN0ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICByZW5kZXJBdmF0YXI6IGZ1bmN0aW9uIHJlbmRlckF2YXRhcigpIHtcbiAgICAgIHZhciBoID0gdGhpcy4kY3JlYXRlRWxlbWVudDtcbiAgICAgIHZhciBpY29uID0gdGhpcy5pY29uLFxuICAgICAgICAgIHNyYyA9IHRoaXMuc3JjLFxuICAgICAgICAgIGFsdCA9IHRoaXMuYWx0LFxuICAgICAgICAgIGlzSW1hZ2VFeGlzdCA9IHRoaXMuaXNJbWFnZUV4aXN0LFxuICAgICAgICAgIHNyY1NldCA9IHRoaXMuc3JjU2V0LFxuICAgICAgICAgIGZpdCA9IHRoaXMuZml0O1xuXG5cbiAgICAgIGlmIChpc0ltYWdlRXhpc3QgJiYgc3JjKSB7XG4gICAgICAgIHJldHVybiBoKCdpbWcnLCB7XG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHNyYzogc3JjLFxuXG4gICAgICAgICAgICBhbHQ6IGFsdCxcbiAgICAgICAgICAgIHNyY1NldDogc3JjU2V0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2Vycm9yJzogdGhpcy5oYW5kbGVFcnJvclxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3R5bGU6IHsgJ29iamVjdC1maXQnOiBmaXQgfSB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGljb24pIHtcbiAgICAgICAgcmV0dXJuIGgoJ2knLCB7ICdjbGFzcyc6IGljb24gfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgaCA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgYXZhdGFyQ2xhc3MgPSB0aGlzLmF2YXRhckNsYXNzLFxuICAgICAgICBzaXplID0gdGhpcy5zaXplO1xuXG5cbiAgICB2YXIgc2l6ZVN0eWxlID0gdHlwZW9mIHNpemUgPT09ICdudW1iZXInID8ge1xuICAgICAgaGVpZ2h0OiBzaXplICsgJ3B4JyxcbiAgICAgIHdpZHRoOiBzaXplICsgJ3B4JyxcbiAgICAgIGxpbmVIZWlnaHQ6IHNpemUgKyAncHgnXG4gICAgfSA6IHt9O1xuXG4gICAgcmV0dXJuIGgoXG4gICAgICAnc3BhbicsXG4gICAgICB7ICdjbGFzcyc6IGF2YXRhckNsYXNzLCBzdHlsZTogc2l6ZVN0eWxlIH0sXG4gICAgICBbdGhpcy5yZW5kZXJBdmF0YXIoKV1cbiAgICApO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvYXZhdGFyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19hdmF0YXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoYXZhdGFyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2F2YXRhci9zcmMvbWFpbi52dWVcbnZhciBzcmNfbWFpbl9yZW5kZXIsIHNyY19tYWluX3N0YXRpY1JlbmRlckZuc1xuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBhdmF0YXJfc3JjX21haW5fY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19hdmF0YXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHNyY19tYWluX3JlbmRlcixcbiAgc3JjX21haW5fc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhdmF0YXJfc3JjX21haW5fYXBpOyB9XG5hdmF0YXJfc3JjX21haW5fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9hdmF0YXIvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGF2YXRhcl9zcmNfbWFpbiA9IChhdmF0YXJfc3JjX21haW5fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9hdmF0YXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuYXZhdGFyX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoYXZhdGFyX3NyY19tYWluLm5hbWUsIGF2YXRhcl9zcmNfbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhdmF0YXIgPSAoYXZhdGFyX3NyY19tYWluKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZHJhd2VyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hNDg4NTI2NCZcbnZhciBtYWludnVlX3R5cGVfdGVtcGxhdGVfaWRfYTQ4ODUyNjRfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwidHJhbnNpdGlvblwiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZWwtZHJhd2VyLWZhZGVcIiB9LFxuICAgICAgb246IHsgXCJhZnRlci1lbnRlclwiOiBfdm0uYWZ0ZXJFbnRlciwgXCJhZnRlci1sZWF2ZVwiOiBfdm0uYWZ0ZXJMZWF2ZSB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlzaWJsZSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdLFxuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRyYXdlcl9fd3JhcHBlclwiLFxuICAgICAgICAgIGF0dHJzOiB7IHRhYmluZGV4OiBcIi0xXCIgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1kcmF3ZXJfX2NvbnRhaW5lclwiLFxuICAgICAgICAgICAgICBjbGFzczogX3ZtLnZpc2libGUgJiYgXCJlbC1kcmF3ZXJfX29wZW5cIixcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJkb2N1bWVudFwiLCB0YWJpbmRleDogXCItMVwiIH0sXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQgIT09ICRldmVudC5jdXJyZW50VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmhhbmRsZVdyYXBwZXJDbGljaygkZXZlbnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlZjogXCJkcmF3ZXJcIixcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRyYXdlclwiLFxuICAgICAgICAgICAgICAgICAgY2xhc3M6IFtfdm0uZGlyZWN0aW9uLCBfdm0uY3VzdG9tQ2xhc3NdLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS5pc0hvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgPyBcIndpZHRoOiBcIiArIF92bS5kcmF3ZXJTaXplXG4gICAgICAgICAgICAgICAgICAgIDogXCJoZWlnaHQ6IFwiICsgX3ZtLmRyYXdlclNpemUsXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBcImFyaWEtbW9kYWxcIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IFwiZWwtZHJhd2VyX190aXRsZVwiLFxuICAgICAgICAgICAgICAgICAgICBcImFyaWEtbGFiZWxcIjogX3ZtLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICByb2xlOiBcImRpYWxvZ1wiLFxuICAgICAgICAgICAgICAgICAgICB0YWJpbmRleDogXCItMVwiXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfdm0ud2l0aEhlYWRlclxuICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtZHJhd2VyX19oZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgaWQ6IFwiZWwtZHJhd2VyX190aXRsZVwiIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdChcInRpdGxlXCIsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhdHRyczogeyByb2xlOiBcImhlYWRpbmdcIiwgdGl0bGU6IF92bS50aXRsZSB9IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KF92bS5fcyhfdm0udGl0bGUpKV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd0Nsb3NlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWRyYXdlcl9fY2xvc2UtYnRuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiYXJpYS1sYWJlbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNsb3NlIFwiICsgKF92bS50aXRsZSB8fCBcImRyYXdlclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0uY2xvc2VEcmF3ZXIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLWRpYWxvZ19fY2xvc2UgZWwtaWNvbiBlbC1pY29uLWNsb3NlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDJcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgICAgICBfdm0ucmVuZGVyZWRcbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2VjdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1kcmF3ZXJfX2JvZHlcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdChcImRlZmF1bHRcIildLFxuICAgICAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF9hNDg4NTI2NF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2E0ODg1MjY0X3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJhd2VyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1hNDg4NTI2NCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZHJhd2VyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZHJhd2VyX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsRHJhd2VyJyxcbiAgbWl4aW5zOiBbcG9wdXBfZGVmYXVsdC5hLCBlbWl0dGVyX2RlZmF1bHQuYV0sXG4gIHByb3BzOiB7XG4gICAgYXBwZW5kVG9Cb2R5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGJlZm9yZUNsb3NlOiB7XG4gICAgICB0eXBlOiBGdW5jdGlvblxuICAgIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBjbG9zZU9uUHJlc3NFc2NhcGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBkZXN0cm95T25DbG9zZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBtb2RhbDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGRpcmVjdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3J0bCcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnbHRyJywgJ3J0bCcsICd0dGInLCAnYnR0J10uaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG1vZGFsQXBwZW5kVG9Cb2R5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgc2hvd0Nsb3NlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgc2l6ZToge1xuICAgICAgdHlwZTogW051bWJlciwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6ICczMCUnXG4gICAgfSxcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIHZpc2libGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW5cbiAgICB9LFxuICAgIHdyYXBwZXJDbG9zYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHdpdGhIZWFkZXI6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGlzSG9yaXpvbnRhbDogZnVuY3Rpb24gaXNIb3Jpem9udGFsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uID09PSAncnRsJyB8fCB0aGlzLmRpcmVjdGlvbiA9PT0gJ2x0cic7XG4gICAgfSxcbiAgICBkcmF3ZXJTaXplOiBmdW5jdGlvbiBkcmF3ZXJTaXplKCkge1xuICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnNpemUgPT09ICdudW1iZXInID8gdGhpcy5zaXplICsgJ3B4JyA6IHRoaXMuc2l6ZTtcbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICBwcmV2QWN0aXZlRWxlbWVudDogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB2aXNpYmxlOiBmdW5jdGlvbiB2aXNpYmxlKHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHZhbCkge1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRlbWl0KCdvcGVuJyk7XG4gICAgICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSkge1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy4kZWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJldkFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgIHRoaXMuJGVtaXQoJ2Nsb3NlJyk7XG4gICAgICAgICAgaWYgKHRoaXMuZGVzdHJveU9uQ2xvc2UgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpcy5wcmV2QWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgX3RoaXMucHJldkFjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGFmdGVyRW50ZXI6IGZ1bmN0aW9uIGFmdGVyRW50ZXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdvcGVuZWQnKTtcbiAgICB9LFxuICAgIGFmdGVyTGVhdmU6IGZ1bmN0aW9uIGFmdGVyTGVhdmUoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdjbG9zZWQnKTtcbiAgICB9LFxuICAgIGhpZGU6IGZ1bmN0aW9uIGhpZGUoY2FuY2VsKSB7XG4gICAgICBpZiAoY2FuY2VsICE9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6dmlzaWJsZScsIGZhbHNlKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnKTtcbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveU9uQ2xvc2UgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnJlbmRlcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlV3JhcHBlckNsaWNrOiBmdW5jdGlvbiBoYW5kbGVXcmFwcGVyQ2xpY2soKSB7XG4gICAgICBpZiAodGhpcy53cmFwcGVyQ2xvc2FibGUpIHtcbiAgICAgICAgdGhpcy5jbG9zZURyYXdlcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xvc2VEcmF3ZXI6IGZ1bmN0aW9uIGNsb3NlRHJhd2VyKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmJlZm9yZUNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuYmVmb3JlQ2xvc2UodGhpcy5oaWRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIGhhbmRsZUNsb3NlKCkge1xuICAgICAgLy8gVGhpcyBtZXRob2QgaGVyZSB3aWxsIGJlIGNhbGxlZCBieSBQb3B1cE1hbmdlciwgd2hlbiB0aGUgYGNsb3NlT25QcmVzc0VzY2FwZWAgd2FzIHNldCB0byB0cnVlXG4gICAgICAvLyBwcmVzc2luZyBgRVNDYCB3aWxsIGNhbGwgdGhpcyBtZXRob2QsIGFuZCBhbHNvIGNsb3NlIHRoZSBkcmF3ZXIuXG4gICAgICAvLyBUaGlzIG1ldGhvZCBhbHNvIGNhbGxzIGBiZWZvcmVDbG9zZWAgaWYgdGhlcmUgd2FzIG9uZS5cbiAgICAgIHRoaXMuY2xvc2VEcmF3ZXIoKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRydWU7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuJGVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkKCkge1xuICAgIC8vIGlmIGFwcGVuZFRvQm9keSBpcyB0cnVlLCByZW1vdmUgRE9NIG5vZGUgYWZ0ZXIgZGVzdHJveVxuICAgIGlmICh0aGlzLmFwcGVuZFRvQm9keSAmJiB0aGlzLiRlbCAmJiB0aGlzLiRlbC5wYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLiRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGVsKTtcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kcmF3ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX2RyYXdlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChkcmF3ZXJfc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJhd2VyL3NyYy9tYWluLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGRyYXdlcl9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX2RyYXdlcl9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2E0ODg1MjY0X3JlbmRlcixcbiAgbWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkX2E0ODg1MjY0X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZHJhd2VyX3NyY19tYWluX2FwaTsgfVxuZHJhd2VyX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZHJhd2VyL3NyYy9tYWluLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkcmF3ZXJfc3JjX21haW4gPSAoZHJhd2VyX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZHJhd2VyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmRyYXdlcl9zcmNfbWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGRyYXdlcl9zcmNfbWFpbi5uYW1lLCBkcmF3ZXJfc3JjX21haW4pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZHJhd2VyID0gKGRyYXdlcl9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3BvcGNvbmZpcm0vc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA0OGRlNzMwJlxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDhkZTczMF9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJlbC1wb3BvdmVyXCIsXG4gICAgX3ZtLl9iKFxuICAgICAge1xuICAgICAgICBhdHRyczogeyB0cmlnZ2VyOiBcImNsaWNrXCIgfSxcbiAgICAgICAgbW9kZWw6IHtcbiAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgX3ZtLnZpc2libGUgPSAkJHZcbiAgICAgICAgICB9LFxuICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBcImVsLXBvcG92ZXJcIixcbiAgICAgIF92bS4kYXR0cnMsXG4gICAgICBmYWxzZVxuICAgICksXG4gICAgW1xuICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1wb3Bjb25maXJtXCIgfSwgW1xuICAgICAgICBfYyhcInBcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1wb3Bjb25maXJtX19tYWluXCIgfSwgW1xuICAgICAgICAgICFfdm0uaGlkZUljb25cbiAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wb3Bjb25maXJtX19pY29uXCIsXG4gICAgICAgICAgICAgICAgY2xhc3M6IF92bS5pY29uLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IGNvbG9yOiBfdm0uaWNvbkNvbG9yIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgXCIgKyBfdm0uX3MoX3ZtLnRpdGxlKSArIFwiXFxuICAgIFwiKVxuICAgICAgICBdKSxcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXBvcGNvbmZpcm1fX2FjdGlvblwiIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgIFwiZWwtYnV0dG9uXCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhdHRyczogeyBzaXplOiBcIm1pbmlcIiwgdHlwZTogX3ZtLmNhbmNlbEJ1dHRvblR5cGUgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmNhbmNlbCB9XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLmRpc3BsYXlDYW5jZWxCdXR0b25UZXh0KSArXG4gICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgXCJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgXCJlbC1idXR0b25cIixcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGF0dHJzOiB7IHNpemU6IFwibWluaVwiLCB0eXBlOiBfdm0uY29uZmlybUJ1dHRvblR5cGUgfSxcbiAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLmNvbmZpcm0gfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgX3ZtLl92KFxuICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgIFwiICtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5kaXNwbGF5Q29uZmlybUJ1dHRvblRleHQpICtcbiAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICBcIlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMVxuICAgICAgICApXG4gICAgICBdKSxcbiAgICAgIF92bS5fdChcInJlZmVyZW5jZVwiLCBudWxsLCB7IHNsb3Q6IFwicmVmZXJlbmNlXCIgfSlcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDhkZTczMF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxubWFpbnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA0OGRlNzMwX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wY29uZmlybS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDQ4ZGU3MzAmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9wb3BvdmVyXCJcbnZhciBwb3BvdmVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xudmFyIHBvcG92ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4ocG9wb3Zlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wb3Bjb25maXJtL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcG9wY29uZmlybV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFBvcGNvbmZpcm0nLFxuICBwcm9wczoge1xuICAgIHRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9LFxuICAgIGNvbmZpcm1CdXR0b25UZXh0OiB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9LFxuICAgIGNhbmNlbEJ1dHRvblRleHQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0sXG4gICAgY29uZmlybUJ1dHRvblR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdwcmltYXJ5J1xuICAgIH0sXG4gICAgY2FuY2VsQnV0dG9uVHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3RleHQnXG4gICAgfSxcbiAgICBpY29uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZWwtaWNvbi1xdWVzdGlvbidcbiAgICB9LFxuICAgIGljb25Db2xvcjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJyNmOTAnXG4gICAgfSxcbiAgICBoaWRlSWNvbjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICBjb21wb25lbnRzOiB7XG4gICAgRWxQb3BvdmVyOiBwb3BvdmVyX2RlZmF1bHQuYSxcbiAgICBFbEJ1dHRvbjogYnV0dG9uX2RlZmF1bHQuYVxuICB9LFxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaXNwbGF5Q29uZmlybUJ1dHRvblRleHQ6IGZ1bmN0aW9uIGRpc3BsYXlDb25maXJtQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1CdXR0b25UZXh0IHx8IE9iamVjdChsaWJfbG9jYWxlX1tcInRcIl0pKCdlbC5wb3Bjb25maXJtLmNvbmZpcm1CdXR0b25UZXh0Jyk7XG4gICAgfSxcbiAgICBkaXNwbGF5Q2FuY2VsQnV0dG9uVGV4dDogZnVuY3Rpb24gZGlzcGxheUNhbmNlbEJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW5jZWxCdXR0b25UZXh0IHx8IE9iamVjdChsaWJfbG9jYWxlX1tcInRcIl0pKCdlbC5wb3Bjb25maXJtLmNhbmNlbEJ1dHRvblRleHQnKTtcbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBjb25maXJtOiBmdW5jdGlvbiBjb25maXJtKCkge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLiRlbWl0KCdjb25maXJtJyk7XG4gICAgfSxcbiAgICBjYW5jZWw6IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy4kZW1pdCgnY2FuY2VsJyk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wY29uZmlybS9zcmMvbWFpbi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfcG9wY29uZmlybV9zcmNfbWFpbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChwb3Bjb25maXJtX3NyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcGNvbmZpcm0vc3JjL21haW4udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgcG9wY29uZmlybV9zcmNfbWFpbl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHBhY2thZ2VzX3BvcGNvbmZpcm1fc3JjX21haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDhkZTczMF9yZW5kZXIsXG4gIG1haW52dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNDhkZTczMF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHBvcGNvbmZpcm1fc3JjX21haW5fYXBpOyB9XG5wb3Bjb25maXJtX3NyY19tYWluX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcG9wY29uZmlybS9zcmMvbWFpbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcG9wY29uZmlybV9zcmNfbWFpbiA9IChwb3Bjb25maXJtX3NyY19tYWluX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wY29uZmlybS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5wb3Bjb25maXJtX3NyY19tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQocG9wY29uZmlybV9zcmNfbWFpbi5uYW1lLCBwb3Bjb25maXJtX3NyY19tYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBvcGNvbmZpcm0gPSAocG9wY29uZmlybV9zcmNfbWFpbik7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9N2Y2NTkyNjkmXG52YXIgc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2Y2NTkyNjlfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX3ZtLnVpTG9hZGluZ1xuICAgICAgICA/IFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICBfdm0uX2IoXG4gICAgICAgICAgICAgICAgeyBjbGFzczogW1wiZWwtc2tlbGV0b25cIiwgX3ZtLmFuaW1hdGVkID8gXCJpcy1hbmltYXRlZFwiIDogXCJcIl0gfSxcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIF92bS4kYXR0cnMsXG4gICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF92bS5fbChfdm0uY291bnQsIGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5sb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgPyBfdm0uX3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidGVtcGxhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9sKF92bS5yb3dzLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFwiZWwtc2tlbGV0b24taXRlbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGkgKyBcIi1cIiArIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLXNrZWxldG9uX19wYXJhZ3JhcGhcIjogaXRlbSAhPT0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpcy1maXJzdFwiOiBpdGVtID09PSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlzLWxhc3RcIjogaXRlbSA9PT0gX3ZtLnJvd3MgJiYgX3ZtLnJvd3MgPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgdmFyaWFudDogXCJwXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIDJcbiAgICAgICAgICAgIClcbiAgICAgICAgICBdXG4gICAgICAgIDogW192bS5fdChcImRlZmF1bHRcIiwgbnVsbCwgbnVsbCwgX3ZtLiRhdHRycyldXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF83ZjY1OTI2OV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2Y2NTkyNjlfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdmNjU5MjY5JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9za2VsZXRvbi9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2tlbGV0b25fc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsU2tlbGV0b24nLFxuICBwcm9wczoge1xuICAgIGFuaW1hdGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGNvdW50OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAxXG4gICAgfSxcbiAgICByb3dzOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiA0XG4gICAgfSxcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgdGhyb3R0bGU6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihsb2FkaW5nKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgaWYgKHRoaXMudGhyb3R0bGUgPD0gMCkge1xuICAgICAgICAgIHRoaXMudWlMb2FkaW5nID0gbG9hZGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0SGFuZGxlKTtcbiAgICAgICAgICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLnVpTG9hZGluZyA9IF90aGlzLmxvYWRpbmc7XG4gICAgICAgICAgfSwgdGhpcy50aHJvdHRsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51aUxvYWRpbmcgPSBsb2FkaW5nO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBpbW1lZGlhdGU6IHRydWVcbiAgICB9XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVpTG9hZGluZzogdGhpcy50aHJvdHRsZSA8PSAwID8gdGhpcy5sb2FkaW5nIDogZmFsc2VcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19za2VsZXRvbl9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc2tlbGV0b25fc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pbmRleC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBza2VsZXRvbl9zcmNfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBwYWNrYWdlc19za2VsZXRvbl9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHNyY3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzdmNjU5MjY5X3JlbmRlcixcbiAgc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfN2Y2NTkyNjlfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBza2VsZXRvbl9zcmNfYXBpOyB9XG5za2VsZXRvbl9zcmNfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9za2VsZXRvbi9zcmMvaW5kZXgudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNrZWxldG9uX3NyYyA9IChza2VsZXRvbl9zcmNfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5za2VsZXRvbl9zcmMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChza2VsZXRvbl9zcmMubmFtZSwgc2tlbGV0b25fc3JjKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNrZWxldG9uID0gKHNrZWxldG9uX3NyYyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00YmM4ODA0YyZcbnZhciBpdGVtdnVlX3R5cGVfdGVtcGxhdGVfaWRfNGJjODgwNGNfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgeyBjbGFzczogW1wiZWwtc2tlbGV0b25fX2l0ZW1cIiwgXCJlbC1za2VsZXRvbl9fXCIgKyBfdm0udmFyaWFudF0gfSxcbiAgICBbX3ZtLnZhcmlhbnQgPT09IFwiaW1hZ2VcIiA/IF9jKFwiaW1nLXBsYWNlaG9sZGVyXCIpIDogX3ZtLl9lKCldLFxuICAgIDFcbiAgKVxufVxudmFyIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF80YmM4ODA0Y19zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaXRlbXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzRiYzg4MDRjX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRiYzg4MDRjJlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pbWctcGxhY2Vob2xkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiMmNiNWMwJlxudmFyIGltZ19wbGFjZWhvbGRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFiMmNiNWMwX3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInN2Z1wiLFxuICAgIHtcbiAgICAgIGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwMjQgMTAyNFwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgZDpcbiAgICAgICAgICAgIFwiTTY0IDg5NlYxMjhoODk2djc2OEg2NHogbTY0LTEyOGwxOTItMTkyIDExNi4zNTIgMTE2LjM1Mkw2NDAgNDQ4bDI1NiAzMDcuMlYxOTJIMTI4djU3NnogbTIyNC00ODBhOTYgOTYgMCAxIDEtMC4wNjQgMTkyLjA2NEE5NiA5NiAwIDAgMSAzNTIgMjg4elwiXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXVxuICApXG59XG52YXIgaW1nX3BsYWNlaG9sZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWIyY2I1YzBfc3RhdGljUmVuZGVyRm5zID0gW11cbmltZ19wbGFjZWhvbGRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFiMmNiNWMwX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2ltZy1wbGFjZWhvbGRlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWIyY2I1YzAmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pbWctcGxhY2Vob2xkZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGltZ19wbGFjZWhvbGRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdJbWdQbGFjZWhvbGRlcidcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi9zcmMvaW1nLXBsYWNlaG9sZGVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaW1nX3BsYWNlaG9sZGVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGltZ19wbGFjZWhvbGRlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi9zcmMvaW1nLXBsYWNlaG9sZGVyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGltZ19wbGFjZWhvbGRlcl9jb21wb25lbnQgPSBub3JtYWxpemVDb21wb25lbnQoXG4gIHNyY19pbWdfcGxhY2Vob2xkZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGltZ19wbGFjZWhvbGRlcnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzFiMmNiNWMwX3JlbmRlcixcbiAgaW1nX3BsYWNlaG9sZGVydnVlX3R5cGVfdGVtcGxhdGVfaWRfMWIyY2I1YzBfc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBpbWdfcGxhY2Vob2xkZXJfYXBpOyB9XG5pbWdfcGxhY2Vob2xkZXJfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9za2VsZXRvbi9zcmMvaW1nLXBsYWNlaG9sZGVyLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpbWdfcGxhY2Vob2xkZXIgPSAoaW1nX3BsYWNlaG9sZGVyX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pdGVtLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbnZhciBfY29tcG9uZW50cztcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2tlbGV0b25fc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxTa2VsZXRvbkl0ZW0nLFxuICBwcm9wczoge1xuICAgIHZhcmlhbnQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICd0ZXh0J1xuICAgIH1cbiAgfSxcbiAgY29tcG9uZW50czogKF9jb21wb25lbnRzID0ge30sIF9jb21wb25lbnRzW2ltZ19wbGFjZWhvbGRlci5uYW1lXSA9IGltZ19wbGFjZWhvbGRlciwgX2NvbXBvbmVudHMpXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2tlbGV0b24vc3JjL2l0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHBhY2thZ2VzX3NrZWxldG9uX3NyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHNrZWxldG9uX3NyY19pdGVtdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NrZWxldG9uL3NyYy9pdGVtLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNrZWxldG9uX3NyY19pdGVtX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfc2tlbGV0b25fc3JjX2l0ZW12dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF80YmM4ODA0Y19yZW5kZXIsXG4gIGl0ZW12dWVfdHlwZV90ZW1wbGF0ZV9pZF80YmM4ODA0Y19zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHNrZWxldG9uX3NyY19pdGVtX2FwaTsgfVxuc2tlbGV0b25fc3JjX2l0ZW1fY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9za2VsZXRvbi9zcmMvaXRlbS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2tlbGV0b25fc3JjX2l0ZW0gPSAoc2tlbGV0b25fc3JjX2l0ZW1fY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9za2VsZXRvbi1pdGVtL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnNrZWxldG9uX3NyY19pdGVtLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc2tlbGV0b25fc3JjX2l0ZW0ubmFtZSwgc2tlbGV0b25fc3JjX2l0ZW0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2tlbGV0b25faXRlbSA9IChza2VsZXRvbl9zcmNfaXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL2VtcHR5L3NyYy9pbmRleC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzQ3Y2VkOTEmXG52YXIgc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ3Y2VkOTFfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtZW1wdHlcIiB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1lbXB0eV9faW1hZ2VcIiwgc3R5bGU6IF92bS5pbWFnZVN0eWxlIH0sXG4gICAgICBbXG4gICAgICAgIF92bS5pbWFnZVxuICAgICAgICAgID8gX2MoXCJpbWdcIiwge1xuICAgICAgICAgICAgICBhdHRyczogeyBzcmM6IF92bS5pbWFnZSwgb25kcmFnc3RhcnQ6IFwicmV0dXJuIGZhbHNlXCIgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IF92bS5fdChcImltYWdlXCIsIFtfYyhcImltZy1lbXB0eVwiKV0pXG4gICAgICBdLFxuICAgICAgMlxuICAgICksXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1lbXB0eV9fZGVzY3JpcHRpb25cIiB9LFxuICAgICAgW1xuICAgICAgICBfdm0uJHNsb3RzLmRlc2NyaXB0aW9uXG4gICAgICAgICAgPyBfdm0uX3QoXCJkZXNjcmlwdGlvblwiKVxuICAgICAgICAgIDogX2MoXCJwXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5lbXB0eURlc2NyaXB0aW9uKSldKVxuICAgICAgXSxcbiAgICAgIDJcbiAgICApLFxuICAgIF92bS4kc2xvdHMuZGVmYXVsdFxuICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWVtcHR5X19ib3R0b21cIiB9LCBbX3ZtLl90KFwiZGVmYXVsdFwiKV0sIDIpXG4gICAgICA6IF92bS5fZSgpXG4gIF0pXG59XG52YXIgc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQ3Y2VkOTFfc3RhdGljUmVuZGVyRm5zID0gW11cbnNyY3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM0N2NlZDkxX3JlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZW1wdHkvc3JjL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDdjZWQ5MSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9lbXB0eS9zcmMvaW1nLWVtcHR5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MjkxOGI4MiZcbnZhciBpbWdfZW1wdHl2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MjkxOGI4Ml9yZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJzdmdcIixcbiAgICB7XG4gICAgICBhdHRyczoge1xuICAgICAgICB2aWV3Qm94OiBcIjAgMCA3OSA4NlwiLFxuICAgICAgICB2ZXJzaW9uOiBcIjEuMVwiLFxuICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgICAgICBcInhtbG5zOnhsaW5rXCI6IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfYyhcbiAgICAgICAgXCJkZWZzXCIsXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwibGluZWFyR3JhZGllbnRcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICBpZDogXCJsaW5lYXJHcmFkaWVudC0xLVwiICsgX3ZtLmlkLFxuICAgICAgICAgICAgICAgIHgxOiBcIjM4Ljg1MDMwODYlXCIsXG4gICAgICAgICAgICAgICAgeTE6IFwiMCVcIixcbiAgICAgICAgICAgICAgICB4MjogXCI2MS4xNDk2OTE0JVwiLFxuICAgICAgICAgICAgICAgIHkyOiBcIjEwMCVcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN0b3BcIiwgeyBhdHRyczogeyBcInN0b3AtY29sb3JcIjogXCIjRkNGQ0ZEXCIsIG9mZnNldDogXCIwJVwiIH0gfSksXG4gICAgICAgICAgICAgIF9jKFwic3RvcFwiLCB7IGF0dHJzOiB7IFwic3RvcC1jb2xvclwiOiBcIiNFRUVGRjNcIiwgb2Zmc2V0OiBcIjEwMCVcIiB9IH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgaWQ6IFwibGluZWFyR3JhZGllbnQtMi1cIiArIF92bS5pZCxcbiAgICAgICAgICAgICAgICB4MTogXCIwJVwiLFxuICAgICAgICAgICAgICAgIHkxOiBcIjkuNSVcIixcbiAgICAgICAgICAgICAgICB4MjogXCIxMDAlXCIsXG4gICAgICAgICAgICAgICAgeTI6IFwiOTAuNSVcIlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN0b3BcIiwgeyBhdHRyczogeyBcInN0b3AtY29sb3JcIjogXCIjRkNGQ0ZEXCIsIG9mZnNldDogXCIwJVwiIH0gfSksXG4gICAgICAgICAgICAgIF9jKFwic3RvcFwiLCB7IGF0dHJzOiB7IFwic3RvcC1jb2xvclwiOiBcIiNFOUVCRUZcIiwgb2Zmc2V0OiBcIjEwMCVcIiB9IH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICksXG4gICAgICAgICAgX2MoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgIGlkOiBcInBhdGgtMy1cIiArIF92bS5pZCxcbiAgICAgICAgICAgICAgeDogXCIwXCIsXG4gICAgICAgICAgICAgIHk6IFwiMFwiLFxuICAgICAgICAgICAgICB3aWR0aDogXCIxN1wiLFxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiMzZcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIDFcbiAgICAgICksXG4gICAgICBfYyhcbiAgICAgICAgXCJnXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgaWQ6IFwiSWxsdXN0cmF0aW9uc1wiLFxuICAgICAgICAgICAgc3Ryb2tlOiBcIm5vbmVcIixcbiAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IFwiMVwiLFxuICAgICAgICAgICAgZmlsbDogXCJub25lXCIsXG4gICAgICAgICAgICBcImZpbGwtcnVsZVwiOiBcImV2ZW5vZGRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJnXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiQi10eXBlXCIsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgtMTI2OC4wMDAwMDAsIC01MzUuMDAwMDAwKVwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiZ1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIkdyb3VwLTJcIixcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBcInRyYW5zbGF0ZSgxMjY4LjAwMDAwMCwgNTM1LjAwMDAwMClcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogXCJPdmFsLUNvcHktMlwiLFxuICAgICAgICAgICAgICAgICAgICAgIGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBcIk0zOS41LDg2IEM2MS4zMTUyNDc2LDg2IDc5LDgzLjkxMDY2MjIgNzksODEuMzMzMzMzMyBDNzksNzguNzU2MDA0NSA1Ny4zMTUyNDc2LDc4IDM1LjUsNzggQzEzLjY4NDc1MjQsNzggMCw3OC43NTYwMDQ1IDAsODEuMzMzMzMzMyBDMCw4My45MTA2NjIyIDE3LjY4NDc1MjQsODYgMzkuNSw4NiBaXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCIjRjdGOEZDXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICBfYyhcInBvbHlnb25cIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIlJlY3RhbmdsZS1Db3B5LTE0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCIjRTVFN0U5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoMjcuNTAwMDAwLCA1MS41MDAwMDApIHNjYWxlKDEsIC0xKSB0cmFuc2xhdGUoLTI3LjUwMDAwMCwgLTUxLjUwMDAwMCkgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBcIjEzIDU4IDUzIDU4IDQyIDQ1IDIgNDVcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcImdcIixcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJHcm91cC1Db3B5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKDM0LjUwMDAwMCwgMzEuNTAwMDAwKSBzY2FsZSgtMSwgMSkgcm90YXRlKC0yNS4wMDAwMDApIHRyYW5zbGF0ZSgtMzQuNTAwMDAwLCAtMzEuNTAwMDAwKSB0cmFuc2xhdGUoNy4wMDAwMDAsIDEwLjAwMDAwMClcIlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgIF9jKFwicG9seWdvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJSZWN0YW5nbGUtQ29weS0xMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIiNFNUU3RTlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKDExLjUwMDAwMCwgNS4wMDAwMDApIHNjYWxlKDEsIC0xKSB0cmFuc2xhdGUoLTExLjUwMDAwMCwgLTUuMDAwMDAwKSBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBcIjIuODQwNzgzMTZlLTE0IDMgMTggMyAyMyA3IDUgN1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJwb2x5Z29uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIlJlY3RhbmdsZS1Db3B5LTExXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiI0VERUVGMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCItMy42OTE0OTE1NmUtMTUgNyAzOCA3IDM4IDQzIC0zLjY5MTQ5MTU2ZS0xNSA0M1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIlJlY3RhbmdsZS1Db3B5LTEyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwidXJsKCNsaW5lYXJHcmFkaWVudC0xLVwiICsgX3ZtLmlkICsgXCIpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZSg0Ni41MDAwMDAsIDI1LjAwMDAwMCkgc2NhbGUoLTEsIDEpIHRyYW5zbGF0ZSgtNDYuNTAwMDAwLCAtMjUuMDAwMDAwKSBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeDogXCIzOFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBcIjdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiMTdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjM2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInBvbHlnb25cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiUmVjdGFuZ2xlLUNvcHktMTNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCIjRjhGOUZCXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZSgzOS41MDAwMDAsIDMuNTAwMDAwKSBzY2FsZSgtMSwgMSkgdHJhbnNsYXRlKC0zOS41MDAwMDAsIC0zLjUwMDAwMCkgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIjI0IDcgNDEgNyA1NSAtMy42MzgwNjIwN2UtMTIgMzggLTMuNjM4MDYyMDdlLTEyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgX2MoXCJyZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogXCJSZWN0YW5nbGUtQ29weS0xNVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwidXJsKCNsaW5lYXJHcmFkaWVudC0yLVwiICsgX3ZtLmlkICsgXCIpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgeDogXCIxM1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHk6IFwiNDVcIixcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogXCI0MFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXCIzNlwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgIFwiZ1wiLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIlJlY3RhbmdsZS1Db3B5LTE3XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IFwidHJhbnNsYXRlKDUzLjAwMDAwMCwgNDUuMDAwMDAwKVwiXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm1hc2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYXR0cnM6IHsgaWQ6IFwibWFzay00LVwiICsgX3ZtLmlkLCBmaWxsOiBcIndoaXRlXCIgfSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcInVzZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgXCJ4bGluazpocmVmXCI6IFwiI3BhdGgtMy1cIiArIF92bS5pZCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICBfYyhcInVzZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJNYXNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiI0UwRTNFOVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoOC41MDAwMDAsIDE4LjAwMDAwMCkgc2NhbGUoLTEsIDEpIHRyYW5zbGF0ZSgtOC41MDAwMDAsIC0xOC4wMDAwMDApIFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcInhsaW5rOmhyZWZcIjogXCIjcGF0aC0zLVwiICsgX3ZtLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJwb2x5Z29uXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIlJlY3RhbmdsZS1Db3B5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IFwiI0Q1RDdERVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBcInVybCgjbWFzay00LVwiICsgX3ZtLmlkICsgXCIpXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZSgxMi4wMDAwMDAsIDkuMDAwMDAwKSBzY2FsZSgtMSwgMSkgdHJhbnNsYXRlKC0xMi4wMDAwMDAsIC05LjAwMDAwMCkgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50czogXCI3IDAgMjQgMCAyMCAxOCAtMS43MDUzMDI1N2UtMTMgMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICBfYyhcInBvbHlnb25cIiwge1xuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIlJlY3RhbmdsZS1Db3B5LTE4XCIsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbDogXCIjRjhGOUZCXCIsXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoNjYuMDAwMDAwLCA1MS41MDAwMDApIHNjYWxlKC0xLCAxKSB0cmFuc2xhdGUoLTY2LjAwMDAwMCwgLTUxLjUwMDAwMCkgXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBcIjYyIDQ1IDc5IDQ1IDcwIDU4IDUzIDU4XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIClcbiAgICBdXG4gIClcbn1cbnZhciBpbWdfZW1wdHl2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MjkxOGI4Ml9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaW1nX2VtcHR5dnVlX3R5cGVfdGVtcGxhdGVfaWRfNDI5MThiODJfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9lbXB0eS9zcmMvaW1nLWVtcHR5LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00MjkxOGI4MiZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvZW1wdHkvc3JjL2ltZy1lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG52YXIgaW1nX2VtcHR5dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaWQgPSAwO1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW1nX2VtcHR5dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0ltZ0VtcHR5JyxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICsraW1nX2VtcHR5dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfaWRcbiAgICB9O1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZW1wdHkvc3JjL2ltZy1lbXB0eS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2ltZ19lbXB0eXZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChpbWdfZW1wdHl2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZW1wdHkvc3JjL2ltZy1lbXB0eS52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpbWdfZW1wdHlfY29tcG9uZW50ID0gbm9ybWFsaXplQ29tcG9uZW50KFxuICBzcmNfaW1nX2VtcHR5dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBpbWdfZW1wdHl2dWVfdHlwZV90ZW1wbGF0ZV9pZF80MjkxOGI4Ml9yZW5kZXIsXG4gIGltZ19lbXB0eXZ1ZV90eXBlX3RlbXBsYXRlX2lkXzQyOTE4YjgyX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgaW1nX2VtcHR5X2FwaTsgfVxuaW1nX2VtcHR5X2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZW1wdHkvc3JjL2ltZy1lbXB0eS52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW1nX2VtcHR5ID0gKGltZ19lbXB0eV9jb21wb25lbnQuZXhwb3J0cyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9lbXB0eS9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxudmFyIHNyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NvbXBvbmVudHM7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZW1wdHlfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsRW1wdHknLFxuICBjb21wb25lbnRzOiAoc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY29tcG9uZW50cyA9IHt9LCBzcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jb21wb25lbnRzW2ltZ19lbXB0eS5uYW1lXSA9IGltZ19lbXB0eSwgc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY29tcG9uZW50cyksXG4gIHByb3BzOiB7XG4gICAgaW1hZ2U6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBpbWFnZVNpemU6IE51bWJlcixcbiAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZW1wdHlEZXNjcmlwdGlvbjogZnVuY3Rpb24gZW1wdHlEZXNjcmlwdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc2NyaXB0aW9uIHx8IE9iamVjdChsaWJfbG9jYWxlX1tcInRcIl0pKCdlbC5lbXB0eS5kZXNjcmlwdGlvbicpO1xuICAgIH0sXG4gICAgaW1hZ2VTdHlsZTogZnVuY3Rpb24gaW1hZ2VTdHlsZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0aGlzLmltYWdlU2l6ZSA/IHRoaXMuaW1hZ2VTaXplICsgJ3B4JyA6ICcnXG4gICAgICB9O1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2VtcHR5L3NyYy9pbmRleC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfZW1wdHlfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGVtcHR5X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9lbXB0eS9zcmMvaW5kZXgudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgZW1wdHlfc3JjX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfZW1wdHlfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDdjZWQ5MV9yZW5kZXIsXG4gIHNyY3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM0N2NlZDkxX3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgZW1wdHlfc3JjX2FwaTsgfVxuZW1wdHlfc3JjX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvZW1wdHkvc3JjL2luZGV4LnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBlbXB0eV9zcmMgPSAoZW1wdHlfc3JjX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZW1wdHkvaW5kZXguanNcblxuXG5lbXB0eV9zcmMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChlbXB0eV9zcmMubmFtZSwgZW1wdHlfc3JjKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGVtcHR5ID0gKGVtcHR5X3NyYyk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2Rlc2NyaXB0aW9ucy9zcmMvZGVzY3JpcHRpb25zLXJvdy5qc1xudmFyIGRlc2NyaXB0aW9uc19yb3dfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGRlc2NyaXB0aW9uc19yb3cgPSAoe1xuICBuYW1lOiAnRWxEZXNjcmlwdGlvbnNSb3cnLFxuICBwcm9wczoge1xuICAgIHJvdzoge1xuICAgICAgdHlwZTogQXJyYXlcbiAgICB9XG4gIH0sXG4gIGluamVjdDogWydlbERlc2NyaXB0aW9ucyddLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIGVsRGVzY3JpcHRpb25zID0gdGhpcy5lbERlc2NyaXB0aW9ucztcblxuICAgIHZhciByb3cgPSAodGhpcy5yb3cgfHwgW10pLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGRlc2NyaXB0aW9uc19yb3dfZXh0ZW5kcyh7fSwgaXRlbSwge1xuICAgICAgICBsYWJlbDogaXRlbS5zbG90cy5sYWJlbCB8fCBpdGVtLnByb3BzLmxhYmVsXG4gICAgICB9LCBbJ2xhYmVsQ2xhc3NOYW1lJywgJ2NvbnRlbnRDbGFzc05hbWUnLCAnbGFiZWxTdHlsZScsICdjb250ZW50U3R5bGUnXS5yZWR1Y2UoZnVuY3Rpb24gKHJlcywga2V5KSB7XG4gICAgICAgIHJlc1trZXldID0gaXRlbS5wcm9wc1trZXldIHx8IGVsRGVzY3JpcHRpb25zW2tleV07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9LCB7fSkpO1xuICAgIH0pO1xuICAgIGlmIChlbERlc2NyaXB0aW9ucy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgIHJldHVybiBoKCd0Ym9keScsIFtoKFxuICAgICAgICAndHInLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1kZXNjcmlwdGlvbnMtcm93JyB9LFxuICAgICAgICBbcm93Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHZhciBfcmVmO1xuXG4gICAgICAgICAgcmV0dXJuIGgoXG4gICAgICAgICAgICAndGgnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnY2xhc3MnOiAoX3JlZiA9IHtcbiAgICAgICAgICAgICAgICAnZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdlbC1kZXNjcmlwdGlvbnMtaXRlbV9fbGFiZWwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdoYXMtY29sb24nOiBlbERlc2NyaXB0aW9ucy5ib3JkZXIgPyBmYWxzZSA6IGVsRGVzY3JpcHRpb25zLmNvbG9uLFxuICAgICAgICAgICAgICAgICdpcy1ib3JkZXJlZC1sYWJlbCc6IGVsRGVzY3JpcHRpb25zLmJvcmRlclxuICAgICAgICAgICAgICB9LCBfcmVmW2l0ZW0ubGFiZWxDbGFzc05hbWVdID0gdHJ1ZSwgX3JlZiksXG4gICAgICAgICAgICAgIHN0eWxlOiBpdGVtLmxhYmVsU3R5bGUsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IGNvbFNwYW46IGl0ZW0ucHJvcHMuc3BhblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW2l0ZW0ubGFiZWxdXG4gICAgICAgICAgKTtcbiAgICAgICAgfSldXG4gICAgICApLCBoKFxuICAgICAgICAndHInLFxuICAgICAgICB7ICdjbGFzcyc6ICdlbC1kZXNjcmlwdGlvbnMtcm93JyB9LFxuICAgICAgICBbcm93Lm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBoKFxuICAgICAgICAgICAgJ3RkJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgJ2NsYXNzJzogWydlbC1kZXNjcmlwdGlvbnMtaXRlbV9fY2VsbCcsICdlbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGVudCcsIGl0ZW0uY29udGVudENsYXNzTmFtZV0sXG4gICAgICAgICAgICAgIHN0eWxlOiBpdGVtLmNvbnRlbnRTdHlsZSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgY29sU3BhbjogaXRlbS5wcm9wcy5zcGFuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbaXRlbS5zbG90cy5kZWZhdWx0XVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXVxuICAgICAgKV0pO1xuICAgIH1cbiAgICBpZiAoZWxEZXNjcmlwdGlvbnMuYm9yZGVyKSB7XG4gICAgICByZXR1cm4gaCgndGJvZHknLCBbaChcbiAgICAgICAgJ3RyJyxcbiAgICAgICAgeyAnY2xhc3MnOiAnZWwtZGVzY3JpcHRpb25zLXJvdycgfSxcbiAgICAgICAgW3Jvdy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICB2YXIgX3JlZjI7XG5cbiAgICAgICAgICByZXR1cm4gW2goXG4gICAgICAgICAgICAndGgnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAnY2xhc3MnOiAoX3JlZjIgPSB7XG4gICAgICAgICAgICAgICAgJ2VsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2xhYmVsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnaXMtYm9yZGVyZWQtbGFiZWwnOiBlbERlc2NyaXB0aW9ucy5ib3JkZXJcbiAgICAgICAgICAgICAgfSwgX3JlZjJbaXRlbS5sYWJlbENsYXNzTmFtZV0gPSB0cnVlLCBfcmVmMiksXG4gICAgICAgICAgICAgIHN0eWxlOiBpdGVtLmxhYmVsU3R5bGUsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IGNvbFNwYW46ICcxJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW2l0ZW0ubGFiZWxdXG4gICAgICAgICAgKSwgaChcbiAgICAgICAgICAgICd0ZCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICdjbGFzcyc6IFsnZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NlbGwnLCAnZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NvbnRlbnQnLCBpdGVtLmNvbnRlbnRDbGFzc05hbWVdLFxuICAgICAgICAgICAgICBzdHlsZTogaXRlbS5jb250ZW50U3R5bGUsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IGNvbFNwYW46IGl0ZW0ucHJvcHMuc3BhbiAqIDIgLSAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbaXRlbS5zbG90cy5kZWZhdWx0XVxuICAgICAgICAgICldO1xuICAgICAgICB9KV1cbiAgICAgICldKTtcbiAgICB9XG4gICAgcmV0dXJuIGgoJ3Rib2R5JywgW2goXG4gICAgICAndHInLFxuICAgICAgeyAnY2xhc3MnOiAnZWwtZGVzY3JpcHRpb25zLXJvdycgfSxcbiAgICAgIFtyb3cubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHZhciBfcmVmMztcblxuICAgICAgICByZXR1cm4gaChcbiAgICAgICAgICAndGQnLFxuICAgICAgICAgIHsgJ2NsYXNzJzogJ2VsLWRlc2NyaXB0aW9ucy1pdGVtIGVsLWRlc2NyaXB0aW9ucy1pdGVtX19jZWxsJywgYXR0cnM6IHsgY29sU3BhbjogaXRlbS5wcm9wcy5zcGFuIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIFtoKFxuICAgICAgICAgICAgJ2RpdicsXG4gICAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1kZXNjcmlwdGlvbnMtaXRlbV9fY29udGFpbmVyJyB9LFxuICAgICAgICAgICAgW2goXG4gICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICdjbGFzcyc6IChfcmVmMyA9IHtcbiAgICAgICAgICAgICAgICAgICdlbC1kZXNjcmlwdGlvbnMtaXRlbV9fbGFiZWwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgJ2hhcy1jb2xvbic6IGVsRGVzY3JpcHRpb25zLmNvbG9uXG4gICAgICAgICAgICAgICAgfSwgX3JlZjNbaXRlbS5sYWJlbENsYXNzTmFtZV0gPSB0cnVlLCBfcmVmMyksXG4gICAgICAgICAgICAgICAgc3R5bGU6IGl0ZW0ubGFiZWxTdHlsZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbaXRlbS5sYWJlbF1cbiAgICAgICAgICAgICksIGgoXG4gICAgICAgICAgICAgICdzcGFuJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICdjbGFzcyc6IFsnZWwtZGVzY3JpcHRpb25zLWl0ZW1fX2NvbnRlbnQnLCBpdGVtLmNvbnRlbnRDbGFzc05hbWVdLFxuICAgICAgICAgICAgICAgIHN0eWxlOiBpdGVtLmNvbnRlbnRTdHlsZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbaXRlbS5zbG90cy5kZWZhdWx0XVxuICAgICAgICAgICAgKV1cbiAgICAgICAgICApXVxuICAgICAgICApO1xuICAgICAgfSldXG4gICAgKV0pO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvZGVzY3JpcHRpb25zL3NyYy9pbmRleC5qc1xudmFyIHNyY19leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIHNyY19jb21wb25lbnRzO1xuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkZXNjcmlwdGlvbnNfc3JjID0gKHtcbiAgbmFtZTogJ0VsRGVzY3JpcHRpb25zJyxcbiAgY29tcG9uZW50czogKHNyY19jb21wb25lbnRzID0ge30sIHNyY19jb21wb25lbnRzW2Rlc2NyaXB0aW9uc19yb3cubmFtZV0gPSBkZXNjcmlwdGlvbnNfcm93LCBzcmNfY29tcG9uZW50cyksXG4gIHByb3BzOiB7XG4gICAgYm9yZGVyOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGNvbHVtbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogM1xuICAgIH0sXG4gICAgZGlyZWN0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaG9yaXpvbnRhbCdcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgLy8gdmFsaWRhdG9yOiBpc1ZhbGlkQ29tcG9uZW50U2l6ZSxcbiAgICB9LFxuICAgIHRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgZXh0cmE6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBsYWJlbFN0eWxlOiB7XG4gICAgICB0eXBlOiBPYmplY3RcbiAgICB9LFxuICAgIGNvbnRlbnRTdHlsZToge1xuICAgICAgdHlwZTogT2JqZWN0XG4gICAgfSxcbiAgICBsYWJlbENsYXNzTmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGNvbnRlbnRDbGFzc05hbWU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBjb2xvbjoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgZGVzY3JpcHRpb25zU2l6ZTogZnVuY3Rpb24gZGVzY3JpcHRpb25zU2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfVxuICB9LFxuICBwcm92aWRlOiBmdW5jdGlvbiBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlbERlc2NyaXB0aW9uczogdGhpc1xuICAgIH07XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE9wdGlvblByb3BzOiBmdW5jdGlvbiBnZXRPcHRpb25Qcm9wcyh2bm9kZSkge1xuICAgICAgaWYgKHZub2RlLmNvbXBvbmVudE9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zO1xuICAgICAgICB2YXIgX2NvbXBvbmVudE9wdGlvbnMkcHJvID0gY29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGEsXG4gICAgICAgICAgICBwcm9wc0RhdGEgPSBfY29tcG9uZW50T3B0aW9ucyRwcm8gPT09IHVuZGVmaW5lZCA/IHt9IDogX2NvbXBvbmVudE9wdGlvbnMkcHJvLFxuICAgICAgICAgICAgX2NvbXBvbmVudE9wdGlvbnMkQ3RvID0gY29tcG9uZW50T3B0aW9ucy5DdG9yLFxuICAgICAgICAgICAgQ3RvciA9IF9jb21wb25lbnRPcHRpb25zJEN0byA9PT0gdW5kZWZpbmVkID8ge30gOiBfY29tcG9uZW50T3B0aW9ucyRDdG87XG5cbiAgICAgICAgdmFyIHByb3BzID0gKEN0b3Iub3B0aW9ucyB8fCB7fSkucHJvcHMgfHwge307XG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgZm9yICh2YXIgayBpbiBwcm9wcykge1xuICAgICAgICAgIHZhciB2ID0gcHJvcHNba107XG4gICAgICAgICAgdmFyIGRlZmF1bHRWYWx1ZSA9IHYuZGVmYXVsdDtcbiAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc1trXSA9IE9iamVjdCh0eXBlc19bXCJpc0Z1bmN0aW9uXCJdKShkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlLmNhbGwodm5vZGUpIDogZGVmYXVsdFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3JjX2V4dGVuZHMoe30sIHJlcywgcHJvcHNEYXRhKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIGdldFNsb3RzOiBmdW5jdGlvbiBnZXRTbG90cyh2bm9kZSkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGNvbXBvbmVudE9wdGlvbnMgPSB2bm9kZS5jb21wb25lbnRPcHRpb25zIHx8IHt9O1xuICAgICAgdmFyIGNoaWxkcmVuID0gdm5vZGUuY2hpbGRyZW4gfHwgY29tcG9uZW50T3B0aW9ucy5jaGlsZHJlbiB8fCBbXTtcbiAgICAgIHZhciBzbG90cyA9IHt9O1xuICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgaWYgKCFfdGhpcy5pc0VtcHR5RWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IGNoaWxkLmRhdGEgJiYgY2hpbGQuZGF0YS5zbG90IHx8ICdkZWZhdWx0JztcbiAgICAgICAgICBzbG90c1tuYW1lXSA9IHNsb3RzW25hbWVdIHx8IFtdO1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgICAgIHNsb3RzW25hbWVdLnB1c2goY2hpbGQuY2hpbGRyZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbG90c1tuYW1lXS5wdXNoKGNoaWxkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHNyY19leHRlbmRzKHt9LCBzbG90cyk7XG4gICAgfSxcbiAgICBpc0VtcHR5RWxlbWVudDogZnVuY3Rpb24gaXNFbXB0eUVsZW1lbnQoYykge1xuICAgICAgcmV0dXJuICEoYy50YWcgfHwgYy50ZXh0ICYmIGMudGV4dC50cmltKCkgIT09ICcnKTtcbiAgICB9LFxuICAgIGZpbGxlZE5vZGU6IGZ1bmN0aW9uIGZpbGxlZE5vZGUobm9kZSwgc3BhbiwgY291bnQpIHtcbiAgICAgIHZhciBpc0xhc3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuXG4gICAgICBpZiAoIW5vZGUucHJvcHMpIHtcbiAgICAgICAgbm9kZS5wcm9wcyA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKHNwYW4gPiBjb3VudCkge1xuICAgICAgICBub2RlLnByb3BzLnNwYW4gPSBjb3VudDtcbiAgICAgIH1cbiAgICAgIGlmIChpc0xhc3QpIHtcbiAgICAgICAgLy8gc2V0IHRoZSBtYXggc3BhbiwgY2F1c2Ugb2YgdGhlIGxhc3QgdGRcbiAgICAgICAgbm9kZS5wcm9wcy5zcGFuID0gY291bnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuICAgIGdldFJvd3M6IGZ1bmN0aW9uIGdldFJvd3MoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdmFyIGNoaWxkcmVuID0gKHRoaXMuJHNsb3RzLmRlZmF1bHQgfHwgW10pLmZpbHRlcihmdW5jdGlvbiAodm5vZGUpIHtcbiAgICAgICAgcmV0dXJuIHZub2RlLnRhZyAmJiB2bm9kZS5jb21wb25lbnRPcHRpb25zICYmIHZub2RlLmNvbXBvbmVudE9wdGlvbnMuQ3Rvci5vcHRpb25zLm5hbWUgPT09ICdFbERlc2NyaXB0aW9uc0l0ZW0nO1xuICAgICAgfSk7XG4gICAgICB2YXIgbm9kZXMgPSBjaGlsZHJlbi5tYXAoZnVuY3Rpb24gKHZub2RlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJvcHM6IF90aGlzMi5nZXRPcHRpb25Qcm9wcyh2bm9kZSksXG4gICAgICAgICAgc2xvdHM6IF90aGlzMi5nZXRTbG90cyh2bm9kZSksXG4gICAgICAgICAgdm5vZGU6IHZub2RlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHZhciByb3dzID0gW107XG4gICAgICB2YXIgdGVtcCA9IFtdO1xuICAgICAgdmFyIGNvdW50ID0gdGhpcy5jb2x1bW47XG5cbiAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKG5vZGUsIGluZGV4KSB7XG4gICAgICAgIHZhciBzcGFuID0gbm9kZS5wcm9wcy5zcGFuIHx8IDE7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZHJlbi5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgdGVtcC5wdXNoKF90aGlzMi5maWxsZWROb2RlKG5vZGUsIHNwYW4sIGNvdW50LCB0cnVlKSk7XG4gICAgICAgICAgcm93cy5wdXNoKHRlbXApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzcGFuIDwgY291bnQpIHtcbiAgICAgICAgICBjb3VudCAtPSBzcGFuO1xuICAgICAgICAgIHRlbXAucHVzaChub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZW1wLnB1c2goX3RoaXMyLmZpbGxlZE5vZGUobm9kZSwgc3BhbiwgY291bnQpKTtcbiAgICAgICAgICByb3dzLnB1c2godGVtcCk7XG4gICAgICAgICAgY291bnQgPSBfdGhpczIuY29sdW1uO1xuICAgICAgICAgIHRlbXAgPSBbXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByb3dzO1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIGggPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIHRpdGxlID0gdGhpcy50aXRsZSxcbiAgICAgICAgZXh0cmEgPSB0aGlzLmV4dHJhLFxuICAgICAgICBib3JkZXIgPSB0aGlzLmJvcmRlcixcbiAgICAgICAgZGVzY3JpcHRpb25zU2l6ZSA9IHRoaXMuZGVzY3JpcHRpb25zU2l6ZSxcbiAgICAgICAgJHNsb3RzID0gdGhpcy4kc2xvdHM7XG5cbiAgICB2YXIgcm93cyA9IHRoaXMuZ2V0Um93cygpO1xuXG4gICAgcmV0dXJuIGgoXG4gICAgICAnZGl2JyxcbiAgICAgIHsgJ2NsYXNzJzogJ2VsLWRlc2NyaXB0aW9ucycgfSxcbiAgICAgIFt0aXRsZSB8fCBleHRyYSB8fCAkc2xvdHMudGl0bGUgfHwgJHNsb3RzLmV4dHJhID8gaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHsgJ2NsYXNzJzogJ2VsLWRlc2NyaXB0aW9uc19faGVhZGVyJyB9LFxuICAgICAgICBbaChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1kZXNjcmlwdGlvbnNfX3RpdGxlJyB9LFxuICAgICAgICAgIFskc2xvdHMudGl0bGUgPyAkc2xvdHMudGl0bGUgOiB0aXRsZV1cbiAgICAgICAgKSwgaChcbiAgICAgICAgICAnZGl2JyxcbiAgICAgICAgICB7ICdjbGFzcyc6ICdlbC1kZXNjcmlwdGlvbnNfX2V4dHJhJyB9LFxuICAgICAgICAgIFskc2xvdHMuZXh0cmEgPyAkc2xvdHMuZXh0cmEgOiBleHRyYV1cbiAgICAgICAgKV1cbiAgICAgICkgOiBudWxsLCBoKFxuICAgICAgICAnZGl2JyxcbiAgICAgICAgeyAnY2xhc3MnOiAnZWwtZGVzY3JpcHRpb25zX19ib2R5JyB9LFxuICAgICAgICBbaChcbiAgICAgICAgICAndGFibGUnLFxuICAgICAgICAgIHsgJ2NsYXNzJzogWydlbC1kZXNjcmlwdGlvbnNfX3RhYmxlJywgeyAnaXMtYm9yZGVyZWQnOiBib3JkZXIgfSwgZGVzY3JpcHRpb25zU2l6ZSA/ICdlbC1kZXNjcmlwdGlvbnMtLScgKyBkZXNjcmlwdGlvbnNTaXplIDogJyddIH0sXG4gICAgICAgICAgW3Jvd3MubWFwKGZ1bmN0aW9uIChyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiBoKGRlc2NyaXB0aW9uc19yb3csIHtcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm93OiByb3cgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSldXG4gICAgICAgICldXG4gICAgICApXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kZXNjcmlwdGlvbnMvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZGVzY3JpcHRpb25zX3NyYy5pbnN0YWxsID0gZnVuY3Rpb24gaW5zdGFsbChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChkZXNjcmlwdGlvbnNfc3JjLm5hbWUsIGRlc2NyaXB0aW9uc19zcmMpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGVzY3JpcHRpb25zID0gKGRlc2NyaXB0aW9uc19zcmMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kZXNjcmlwdGlvbnMvc3JjL2Rlc2NyaXB0aW9ucy1pdGVtLmpzXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBkZXNjcmlwdGlvbnNfaXRlbSA9ICh7XG4gIG5hbWU6ICdFbERlc2NyaXB0aW9uc0l0ZW0nLFxuICBwcm9wczoge1xuICAgIGxhYmVsOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgc3Bhbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMVxuICAgIH0sXG4gICAgY29udGVudENsYXNzTmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGNvbnRlbnRTdHlsZToge1xuICAgICAgdHlwZTogT2JqZWN0XG4gICAgfSxcbiAgICBsYWJlbENsYXNzTmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGxhYmVsU3R5bGU6IHtcbiAgICAgIHR5cGU6IE9iamVjdFxuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9kZXNjcmlwdGlvbnMtaXRlbS9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5kZXNjcmlwdGlvbnNfaXRlbS5pbnN0YWxsID0gZnVuY3Rpb24gaW5zdGFsbChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChkZXNjcmlwdGlvbnNfaXRlbS5uYW1lLCBkZXNjcmlwdGlvbnNfaXRlbSk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19kZXNjcmlwdGlvbnNfaXRlbSA9IChkZXNjcmlwdGlvbnNfaXRlbSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0MDhiMTM5JlxudmFyIHNyY3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzM0MDhiMTM5X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXJlc3VsdFwiIH0sIFtcbiAgICBfYyhcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXJlc3VsdF9faWNvblwiIH0sXG4gICAgICBbXG4gICAgICAgIF92bS5fdChcImljb25cIiwgW1xuICAgICAgICAgIF9jKF92bS5pY29uRWxlbWVudCwgeyB0YWc6IFwiY29tcG9uZW50XCIsIGNsYXNzOiBfdm0uaWNvbkVsZW1lbnQgfSlcbiAgICAgICAgXSlcbiAgICAgIF0sXG4gICAgICAyXG4gICAgKSxcbiAgICBfdm0udGl0bGUgfHwgX3ZtLiRzbG90cy50aXRsZVxuICAgICAgPyBfYyhcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtcmVzdWx0X190aXRsZVwiIH0sXG4gICAgICAgICAgW192bS5fdChcInRpdGxlXCIsIFtfYyhcInBcIiwgW192bS5fdihfdm0uX3MoX3ZtLnRpdGxlKSldKV0pXSxcbiAgICAgICAgICAyXG4gICAgICAgIClcbiAgICAgIDogX3ZtLl9lKCksXG4gICAgX3ZtLnN1YlRpdGxlIHx8IF92bS4kc2xvdHMuc3ViVGl0bGVcbiAgICAgID8gX2MoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXJlc3VsdF9fc3VidGl0bGVcIiB9LFxuICAgICAgICAgIFtfdm0uX3QoXCJzdWJUaXRsZVwiLCBbX2MoXCJwXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5zdWJUaXRsZSkpXSldKV0sXG4gICAgICAgICAgMlxuICAgICAgICApXG4gICAgICA6IF92bS5fZSgpLFxuICAgIF92bS4kc2xvdHMuZXh0cmFcbiAgICAgID8gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1yZXN1bHRfX2V4dHJhXCIgfSwgW192bS5fdChcImV4dHJhXCIpXSwgMilcbiAgICAgIDogX3ZtLl9lKClcbiAgXSlcbn1cbnZhciBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDA4YjEzOV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQwOGIxMzlfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2luZGV4LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0zNDA4YjEzOSZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24tc3VjY2Vzcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTgxMTk0MTgmXG52YXIgaWNvbl9zdWNjZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTgxMTk0MThfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3ZnXCIsXG4gICAgeyBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIH0gfSxcbiAgICBbXG4gICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGQ6XG4gICAgICAgICAgICBcIk0yNCw0IEMzNS4wNDU2OTUsNCA0NCwxMi45NTQzMDUgNDQsMjQgQzQ0LDM1LjA0NTY5NSAzNS4wNDU2OTUsNDQgMjQsNDQgQzEyLjk1NDMwNSw0NCA0LDM1LjA0NTY5NSA0LDI0IEM0LDEyLjk1NDMwNSAxMi45NTQzMDUsNCAyNCw0IFogTTM0LjU1NDgwOTgsMTYuNDQ4NTcxMSBDMzMuOTYxMjIyOCwxNS44NTA0NzYzIDMyLjk5ODgyODIsMTUuODUwNDc2MyAzMi40MDUyNDEyLDE2LjQ0ODU3MTEgTDMyLjQwNTI0MTIsMTYuNDQ4NTcxMSBMMjEuNDEzNzU3LDI3LjU4MDU4MTEgTDIxLjQxMzc1NywyNy41ODA1ODExIEwyMS40MDM0NjQyLDI3LjU5MDg1NSBDMjEuMDA5NzU0MiwyNy45NzgxNjc0IDIwLjM3NjYxMDUsMjcuOTcyOTgxMSAxOS45ODkyOTgxLDI3LjU3OTI3MTEgTDE5Ljk4OTI5ODEsMjcuNTc5MjcxMSBMMTUuNTk0NzU4OCwyMy4xMTIxNDI4IEMxNS4wMDExNzE4LDIyLjUxNDA0OCAxNC4wMzg3NzcyLDIyLjUxNDA0OCAxMy40NDUxOTAyLDIzLjExMjE0MjggQzEyLjg1MTYwMzMsMjMuNzEwMjM3NiAxMi44NTE2MDMzLDI0LjY3OTk0MDkgMTMuNDQ1MTkwMiwyNS4yNzgwMzU3IEwxMy40NDUxOTAyLDI1LjI3ODAzNTcgTDE5LjYyNjA3ODYsMzEuNTUxNDI4OSBDMjAuMjE5NjY1NiwzMi4xNDk1MjM3IDIxLjE4MjA2MDIsMzIuMTQ5NTIzNyAyMS43NzU2NDcyLDMxLjU1MTQyODkgTDIxLjc3NTY0NzIsMzEuNTUxNDI4OSBMMzQuNTU0ODA5OCwxOC42MTQ0NjQgQzM1LjE0ODM5NjcsMTguMDE2MzY5MiAzNS4xNDgzOTY3LDE3LjA0NjY2NTkgMzQuNTU0ODA5OCwxNi40NDg1NzExIFpcIlxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF1cbiAgKVxufVxudmFyIGljb25fc3VjY2Vzc3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE4MTE5NDE4X3N0YXRpY1JlbmRlckZucyA9IFtdXG5pY29uX3N1Y2Nlc3N2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODExOTQxOF9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1zdWNjZXNzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xODExOTQxOCZcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLXN1Y2Nlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGljb25fc3VjY2Vzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdJY29uU3VjY2Vzcydcbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24tc3VjY2Vzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2ljb25fc3VjY2Vzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChpY29uX3N1Y2Nlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLXN1Y2Nlc3MudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgaWNvbl9zdWNjZXNzX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2ljb25fc3VjY2Vzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgaWNvbl9zdWNjZXNzdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTgxMTk0MThfcmVuZGVyLFxuICBpY29uX3N1Y2Nlc3N2dWVfdHlwZV90ZW1wbGF0ZV9pZF8xODExOTQxOF9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGljb25fc3VjY2Vzc19hcGk7IH1cbmljb25fc3VjY2Vzc19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1zdWNjZXNzLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpY29uX3N1Y2Nlc3MgPSAoaWNvbl9zdWNjZXNzX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWVycm9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yMTE5OTI0NiZcbnZhciBpY29uX2Vycm9ydnVlX3R5cGVfdGVtcGxhdGVfaWRfMjExOTkyNDZfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3ZnXCIsXG4gICAgeyBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIH0gfSxcbiAgICBbXG4gICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGQ6XG4gICAgICAgICAgICBcIk0yNCw0IEMzNS4wNDU2OTUsNCA0NCwxMi45NTQzMDUgNDQsMjQgQzQ0LDM1LjA0NTY5NSAzNS4wNDU2OTUsNDQgMjQsNDQgQzEyLjk1NDMwNSw0NCA0LDM1LjA0NTY5NSA0LDI0IEM0LDEyLjk1NDMwNSAxMi45NTQzMDUsNCAyNCw0IFogTTMyLjU3ODE4LDE1LjQyMTgyIEMzMi4wMTU3NTM0LDE0Ljg1OTM5MzMgMzEuMTAzODc5NywxNC44NTkzOTMzIDMwLjU0MTQ1MywxNS40MjE4MiBMMzAuNTQxNDUzLDE1LjQyMTgyIEwyNC4wMDA2Nzg5LDIxLjk2MjU5NDEgTDE3LjQ1ODU0NywxNS40MjE4MiBDMTYuODk2MTIwMywxNC44NTkzOTMzIDE1Ljk4NDI0NjYsMTQuODU5MzkzMyAxNS40MjE4MiwxNS40MjE4MiBDMTQuODU5MzkzMywxNS45ODQyNDY2IDE0Ljg1OTM5MzMsMTYuODk2MTIwMyAxNS40MjE4MiwxNy40NTg1NDcgTDE1LjQyMTgyLDE3LjQ1ODU0NyBMMjEuOTYzOTUxOSwyMy45OTkzMjExIEwxNS40MjE4MiwzMC41NDE0NTMgQzE0Ljg1OTM5MzMsMzEuMTAzODc5NyAxNC44NTkzOTMzLDMyLjAxNTc1MzQgMTUuNDIxODIsMzIuNTc4MTggQzE1Ljk4NDI0NjYsMzMuMTQwNjA2NyAxNi44OTYxMjAzLDMzLjE0MDYwNjcgMTcuNDU4NTQ3LDMyLjU3ODE4IEwxNy40NTg1NDcsMzIuNTc4MTggTDI0LjAwMDY3ODksMjYuMDM2MDQ4MSBMMzAuNTQxNDUzLDMyLjU3ODE4IEMzMS4xMDM4Nzk3LDMzLjE0MDYwNjcgMzIuMDE1NzUzNCwzMy4xNDA2MDY3IDMyLjU3ODE4LDMyLjU3ODE4IEMzMy4xNDA2MDY3LDMyLjAxNTc1MzQgMzMuMTQwNjA2NywzMS4xMDM4Nzk3IDMyLjU3ODE4LDMwLjU0MTQ1MyBMMzIuNTc4MTgsMzAuNTQxNDUzIEwyNi4wMzc0MDU5LDIzLjk5OTMyMTEgTDMyLjU3ODE4LDE3LjQ1ODU0NyBDMzMuMTQwNjA2NywxNi44OTYxMjAzIDMzLjE0MDYwNjcsMTUuOTg0MjQ2NiAzMi41NzgxOCwxNS40MjE4MiBaXCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdXG4gIClcbn1cbnZhciBpY29uX2Vycm9ydnVlX3R5cGVfdGVtcGxhdGVfaWRfMjExOTkyNDZfc3RhdGljUmVuZGVyRm5zID0gW11cbmljb25fZXJyb3J2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMTE5OTI0Nl9yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1lcnJvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MjExOTkyNDYmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1lcnJvci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaWNvbl9lcnJvcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdJY29uRXJyb3InXG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWVycm9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfaWNvbl9lcnJvcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChpY29uX2Vycm9ydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1lcnJvci52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBpY29uX2Vycm9yX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2ljb25fZXJyb3J2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIGljb25fZXJyb3J2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMTE5OTI0Nl9yZW5kZXIsXG4gIGljb25fZXJyb3J2dWVfdHlwZV90ZW1wbGF0ZV9pZF8yMTE5OTI0Nl9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGljb25fZXJyb3JfYXBpOyB9XG5pY29uX2Vycm9yX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWVycm9yLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpY29uX2Vycm9yID0gKGljb25fZXJyb3JfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24td2FybmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDZmZThmMzEmXG52YXIgaWNvbl93YXJuaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfNDZmZThmMzFfcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3ZnXCIsXG4gICAgeyBhdHRyczogeyB2aWV3Qm94OiBcIjAgMCA0OCA0OFwiLCB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIH0gfSxcbiAgICBbXG4gICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGQ6XG4gICAgICAgICAgICBcIk0yNCw0IEMzNS4wNDU2OTUsNCA0NCwxMi45NTQzMDUgNDQsMjQgQzQ0LDM1LjA0NTY5NSAzNS4wNDU2OTUsNDQgMjQsNDQgQzEyLjk1NDMwNSw0NCA0LDM1LjA0NTY5NSA0LDI0IEM0LDEyLjk1NDMwNSAxMi45NTQzMDUsNCAyNCw0IFogTTI0LDMxIEMyMi44OTU0MzA1LDMxIDIyLDMxLjg5NTQzMDUgMjIsMzMgQzIyLDM0LjEwNDU2OTUgMjIuODk1NDMwNSwzNSAyNCwzNSBDMjUuMTA0NTY5NSwzNSAyNiwzNC4xMDQ1Njk1IDI2LDMzIEMyNiwzMS44OTU0MzA1IDI1LjEwNDU2OTUsMzEgMjQsMzEgWiBNMjQsMTQgQzIzLjE3MTU3MjksMTQgMjIuNSwxNC42NzE1NzI5IDIyLjUsMTUuNSBMMjIuNSwxNS41IEwyMi41LDI3LjUgQzIyLjUsMjguMzI4NDI3MSAyMy4xNzE1NzI5LDI5IDI0LDI5IEMyNC44Mjg0MjcxLDI5IDI1LjUsMjguMzI4NDI3MSAyNS41LDI3LjUgTDI1LjUsMjcuNSBMMjUuNSwxNS41IEMyNS41LDE0LjY3MTU3MjkgMjQuODI4NDI3MSwxNCAyNCwxNCBaXCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdXG4gIClcbn1cbnZhciBpY29uX3dhcm5pbmd2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NmZlOGYzMV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaWNvbl93YXJuaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfNDZmZThmMzFfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24td2FybmluZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDZmZThmMzEmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24td2FybmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXG5cblxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpY29uX3dhcm5pbmd2dWVfdHlwZV9zY3JpcHRfbGFuZ190c18gPSAoe1xuICBuYW1lOiAnSWNvbldhcm5pbmcnXG59KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24td2FybmluZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2ljb25fd2FybmluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzXyA9IChpY29uX3dhcm5pbmd2dWVfdHlwZV9zY3JpcHRfbGFuZ190c18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLXdhcm5pbmcudnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgaWNvbl93YXJuaW5nX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2ljb25fd2FybmluZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzXyxcbiAgaWNvbl93YXJuaW5ndnVlX3R5cGVfdGVtcGxhdGVfaWRfNDZmZThmMzFfcmVuZGVyLFxuICBpY29uX3dhcm5pbmd2dWVfdHlwZV90ZW1wbGF0ZV9pZF80NmZlOGYzMV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGljb25fd2FybmluZ19hcGk7IH1cbmljb25fd2FybmluZ19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi13YXJuaW5nLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpY29uX3dhcm5pbmcgPSAoaWNvbl93YXJuaW5nX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWluZm8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTE5ZTNkZTY5JlxudmFyIGljb25faW5mb3Z1ZV90eXBlX3RlbXBsYXRlX2lkXzE5ZTNkZTY5X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInN2Z1wiLFxuICAgIHsgYXR0cnM6IHsgdmlld0JveDogXCIwIDAgNDggNDhcIiwgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB9IH0sXG4gICAgW1xuICAgICAgX2MoXCJwYXRoXCIsIHtcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBkOlxuICAgICAgICAgICAgXCJNMjQsNCBDMzUuMDQ1Njk1LDQgNDQsMTIuOTU0MzA1IDQ0LDI0IEM0NCwzNS4wNDU2OTUgMzUuMDQ1Njk1LDQ0IDI0LDQ0IEMxMi45NTQzMDUsNDQgNCwzNS4wNDU2OTUgNCwyNCBDNCwxMi45NTQzMDUgMTIuOTU0MzA1LDQgMjQsNCBaIE0yNCwxOSBMMjEsMTkgQzIwLjE3MTU3MjksMTkgMTkuNSwxOS42NzE1NzI5IDE5LjUsMjAuNSBDMTkuNSwyMS4zMjg0MjcxIDIwLjE3MTU3MjksMjIgMjEsMjIgTDIxLDIyIEwyMi41LDIyIEwyMi41LDMxIEwyMSwzMSBDMjAuMTcxNTcyOSwzMSAxOS41LDMxLjY3MTU3MjkgMTkuNSwzMi41IEMxOS41LDMzLjMyODQyNzEgMjAuMTcxNTcyOSwzNCAyMSwzNCBMMjEsMzQgTDI3LDM0IEMyNy44Mjg0MjcxLDM0IDI4LjUsMzMuMzI4NDI3MSAyOC41LDMyLjUgQzI4LjUsMzEuNjcxNTcyOSAyNy44Mjg0MjcxLDMxIDI3LDMxIEwyNywzMSBMMjUuNSwzMSBMMjUuNSwyMC41IEMyNS41LDE5LjY3MTU3MjkgMjQuODI4NDI3MSwxOSAyNCwxOSBMMjQsMTkgWiBNMjQsMTMgQzIyLjg5NTQzMDUsMTMgMjIsMTMuODk1NDMwNSAyMiwxNSBDMjIsMTYuMTA0NTY5NSAyMi44OTU0MzA1LDE3IDI0LDE3IEMyNS4xMDQ1Njk1LDE3IDI2LDE2LjEwNDU2OTUgMjYsMTUgQzI2LDEzLjg5NTQzMDUgMjUuMTA0NTY5NSwxMyAyNCwxMyBaXCJcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICBdXG4gIClcbn1cbnZhciBpY29uX2luZm92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOWUzZGU2OV9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuaWNvbl9pbmZvdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTllM2RlNjlfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24taW5mby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MTllM2RlNjkmXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24taW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXG5cblxuXG5cblxuXG5cblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpY29uX2luZm92dWVfdHlwZV9zY3JpcHRfbGFuZ190c18gPSAoe1xuICBuYW1lOiAnSWNvbkluZm8nXG59KTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2ljb24taW5mby52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9dHMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2ljb25faW5mb3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzXyA9IChpY29uX2luZm92dWVfdHlwZV9zY3JpcHRfbGFuZ190c18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L3NyYy9pY29uLWluZm8udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgaWNvbl9pbmZvX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgc3JjX2ljb25faW5mb3Z1ZV90eXBlX3NjcmlwdF9sYW5nX3RzXyxcbiAgaWNvbl9pbmZvdnVlX3R5cGVfdGVtcGxhdGVfaWRfMTllM2RlNjlfcmVuZGVyLFxuICBpY29uX2luZm92dWVfdHlwZV90ZW1wbGF0ZV9pZF8xOWUzZGU2OV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGljb25faW5mb19hcGk7IH1cbmljb25faW5mb19jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3Jlc3VsdC9zcmMvaWNvbi1pbmZvLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBpY29uX2luZm8gPSAoaWNvbl9pbmZvX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3Jlc3VsdC9zcmMvaW5kZXgudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxudmFyIHJlc3VsdF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jb21wb25lbnRzO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuXG5cblxudmFyIEljb25NYXAgPSB7XG4gIHN1Y2Nlc3M6ICdpY29uLXN1Y2Nlc3MnLFxuICB3YXJuaW5nOiAnaWNvbi13YXJuaW5nJyxcbiAgZXJyb3I6ICdpY29uLWVycm9yJyxcbiAgaW5mbzogJ2ljb24taW5mbydcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHJlc3VsdF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxSZXN1bHQnLFxuICBjb21wb25lbnRzOiAocmVzdWx0X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NvbXBvbmVudHMgPSB7fSwgcmVzdWx0X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NvbXBvbmVudHNbaWNvbl9zdWNjZXNzLm5hbWVdID0gaWNvbl9zdWNjZXNzLCByZXN1bHRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY29tcG9uZW50c1tpY29uX2Vycm9yLm5hbWVdID0gaWNvbl9lcnJvciwgcmVzdWx0X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzX2NvbXBvbmVudHNbaWNvbl93YXJuaW5nLm5hbWVdID0gaWNvbl93YXJuaW5nLCByZXN1bHRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfY29tcG9uZW50c1tpY29uX2luZm8ubmFtZV0gPSBpY29uX2luZm8sIHJlc3VsdF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc19jb21wb25lbnRzKSxcbiAgcHJvcHM6IHtcbiAgICB0aXRsZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIHN1YlRpdGxlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH0sXG4gICAgaWNvbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2luZm8nXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGljb25FbGVtZW50OiBmdW5jdGlvbiBpY29uRWxlbWVudCgpIHtcbiAgICAgIHZhciBpY29uID0gdGhpcy5pY29uO1xuICAgICAgcmV0dXJuIGljb24gJiYgSWNvbk1hcFtpY29uXSA/IEljb25NYXBbaWNvbl0gOiAnaWNvbi1pbmZvJztcbiAgICB9XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9yZXN1bHQvc3JjL2luZGV4LnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19yZXN1bHRfc3JjdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHJlc3VsdF9zcmN2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L3NyYy9pbmRleC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciByZXN1bHRfc3JjX2NvbXBvbmVudCA9IG5vcm1hbGl6ZUNvbXBvbmVudChcbiAgcGFja2FnZXNfcmVzdWx0X3NyY3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgc3JjdnVlX3R5cGVfdGVtcGxhdGVfaWRfMzQwOGIxMzlfcmVuZGVyLFxuICBzcmN2dWVfdHlwZV90ZW1wbGF0ZV9pZF8zNDA4YjEzOV9zdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIHJlc3VsdF9zcmNfYXBpOyB9XG5yZXN1bHRfc3JjX2NvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvcmVzdWx0L3NyYy9pbmRleC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmVzdWx0X3NyYyA9IChyZXN1bHRfc3JjX2NvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmVzdWx0L2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnJlc3VsdF9zcmMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChyZXN1bHRfc3JjLm5hbWUsIHJlc3VsdF9zcmMpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmVzdWx0ID0gKHJlc3VsdF9zcmMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvaW5kZXguanNcbi8qIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5ICcuL2J1aWxkL2Jpbi9idWlsZC1lbnRyeS5qcycgKi9cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgY29tcG9uZW50cyA9IFtwYWNrYWdlc19wYWdpbmF0aW9uLCBkaWFsb2csIHBhY2thZ2VzX2F1dG9jb21wbGV0ZSwgcGFja2FnZXNfZHJvcGRvd24sIHBhY2thZ2VzX2Ryb3Bkb3duX21lbnUsIHBhY2thZ2VzX2Ryb3Bkb3duX2l0ZW0sIHBhY2thZ2VzX21lbnUsIHBhY2thZ2VzX3N1Ym1lbnUsIHBhY2thZ2VzX21lbnVfaXRlbSwgcGFja2FnZXNfbWVudV9pdGVtX2dyb3VwLCBwYWNrYWdlc19pbnB1dCwgcGFja2FnZXNfaW5wdXRfbnVtYmVyLCBwYWNrYWdlc19yYWRpbywgcGFja2FnZXNfcmFkaW9fZ3JvdXAsIHBhY2thZ2VzX3JhZGlvX2J1dHRvbiwgcGFja2FnZXNfY2hlY2tib3gsIHBhY2thZ2VzX2NoZWNrYm94X2J1dHRvbiwgcGFja2FnZXNfY2hlY2tib3hfZ3JvdXAsIHBhY2thZ2VzX3N3aXRjaCwgcGFja2FnZXNfc2VsZWN0LCBwYWNrYWdlc19vcHRpb24sIHBhY2thZ2VzX29wdGlvbl9ncm91cCwgcGFja2FnZXNfYnV0dG9uLCBwYWNrYWdlc19idXR0b25fZ3JvdXAsIHBhY2thZ2VzX3RhYmxlLCBwYWNrYWdlc190YWJsZV9jb2x1bW4sIHBhY2thZ2VzX2RhdGVfcGlja2VyLCBwYWNrYWdlc190aW1lX3NlbGVjdCwgcGFja2FnZXNfdGltZV9waWNrZXIsIHBvcG92ZXIsIHBhY2thZ2VzX3Rvb2x0aXAsIHBhY2thZ2VzX2JyZWFkY3J1bWIsIHBhY2thZ2VzX2JyZWFkY3J1bWJfaXRlbSwgcGFja2FnZXNfZm9ybSwgcGFja2FnZXNfZm9ybV9pdGVtLCBwYWNrYWdlc190YWJzLCBwYWNrYWdlc190YWJfcGFuZSwgcGFja2FnZXNfdGFnLCBwYWNrYWdlc190cmVlLCBwYWNrYWdlc19hbGVydCwgc2xpZGVyLCBwYWNrYWdlc19pY29uLCBwYWNrYWdlc19yb3csIHBhY2thZ2VzX2NvbCwgcGFja2FnZXNfdXBsb2FkLCBwYWNrYWdlc19wcm9ncmVzcywgcGFja2FnZXNfc3Bpbm5lciwgYmFkZ2UsIGNhcmQsIHJhdGUsIHBhY2thZ2VzX3N0ZXBzLCBwYWNrYWdlc19zdGVwLCBjYXJvdXNlbCwgc2Nyb2xsYmFyLCBjYXJvdXNlbF9pdGVtLCBwYWNrYWdlc19jb2xsYXBzZSwgcGFja2FnZXNfY29sbGFwc2VfaXRlbSwgcGFja2FnZXNfY2FzY2FkZXIsIGNvbG9yX3BpY2tlciwgdHJhbnNmZXIsIHBhY2thZ2VzX2NvbnRhaW5lciwgaGVhZGVyLCBhc2lkZSwgcGFja2FnZXNfbWFpbiwgZm9vdGVyLCB0aW1lbGluZSwgdGltZWxpbmVfaXRlbSwgcGFja2FnZXNfbGluaywgZGl2aWRlciwgcGFja2FnZXNfaW1hZ2UsIGNhbGVuZGFyLCBiYWNrdG9wLCBwYWdlX2hlYWRlciwgcGFja2FnZXNfY2FzY2FkZXJfcGFuZWwsIGF2YXRhciwgZHJhd2VyLCBwb3Bjb25maXJtLCBza2VsZXRvbiwgc2tlbGV0b25faXRlbSwgZW1wdHksIGRlc2NyaXB0aW9ucywgcGFja2FnZXNfZGVzY3JpcHRpb25zX2l0ZW0sIHJlc3VsdCwgY29sbGFwc2VfdHJhbnNpdGlvbl9kZWZhdWx0LmFdO1xuXG52YXIgc3JjX2luc3RhbGwgPSBmdW5jdGlvbiBpbnN0YWxsKFZ1ZSkge1xuICB2YXIgb3B0cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgbGliX2xvY2FsZV9kZWZhdWx0LmEudXNlKG9wdHMubG9jYWxlKTtcbiAgbGliX2xvY2FsZV9kZWZhdWx0LmEuaTE4bihvcHRzLmkxOG4pO1xuXG4gIGNvbXBvbmVudHMuZm9yRWFjaChmdW5jdGlvbiAoY29tcG9uZW50KSB7XG4gICAgVnVlLmNvbXBvbmVudChjb21wb25lbnQubmFtZSwgY29tcG9uZW50KTtcbiAgfSk7XG5cbiAgVnVlLnVzZShpbmZpbml0ZV9zY3JvbGwpO1xuICBWdWUudXNlKHBhY2thZ2VzX2xvYWRpbmcuZGlyZWN0aXZlKTtcblxuICBWdWUucHJvdG90eXBlLiRFTEVNRU5UID0ge1xuICAgIHNpemU6IG9wdHMuc2l6ZSB8fCAnJyxcbiAgICB6SW5kZXg6IG9wdHMuekluZGV4IHx8IDIwMDBcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRsb2FkaW5nID0gcGFja2FnZXNfbG9hZGluZy5zZXJ2aWNlO1xuICBWdWUucHJvdG90eXBlLiRtc2dib3ggPSBtZXNzYWdlX2JveDtcbiAgVnVlLnByb3RvdHlwZS4kYWxlcnQgPSBtZXNzYWdlX2JveC5hbGVydDtcbiAgVnVlLnByb3RvdHlwZS4kY29uZmlybSA9IG1lc3NhZ2VfYm94LmNvbmZpcm07XG4gIFZ1ZS5wcm90b3R5cGUuJHByb21wdCA9IG1lc3NhZ2VfYm94LnByb21wdDtcbiAgVnVlLnByb3RvdHlwZS4kbm90aWZ5ID0gbm90aWZpY2F0aW9uO1xuICBWdWUucHJvdG90eXBlLiRtZXNzYWdlID0gcGFja2FnZXNfbWVzc2FnZTtcbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5WdWUpIHtcbiAgc3JjX2luc3RhbGwod2luZG93LlZ1ZSk7XG59XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY18wID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoe1xuICB2ZXJzaW9uOiAnMi4xNS44JyxcbiAgbG9jYWxlOiBsaWJfbG9jYWxlX2RlZmF1bHQuYS51c2UsXG4gIGkxOG46IGxpYl9sb2NhbGVfZGVmYXVsdC5hLmkxOG4sXG4gIGluc3RhbGw6IHNyY19pbnN0YWxsLFxuICBDb2xsYXBzZVRyYW5zaXRpb246IGNvbGxhcHNlX3RyYW5zaXRpb25fZGVmYXVsdC5hLFxuICBMb2FkaW5nOiBwYWNrYWdlc19sb2FkaW5nLFxuICBQYWdpbmF0aW9uOiBwYWNrYWdlc19wYWdpbmF0aW9uLFxuICBEaWFsb2c6IGRpYWxvZyxcbiAgQXV0b2NvbXBsZXRlOiBwYWNrYWdlc19hdXRvY29tcGxldGUsXG4gIERyb3Bkb3duOiBwYWNrYWdlc19kcm9wZG93bixcbiAgRHJvcGRvd25NZW51OiBwYWNrYWdlc19kcm9wZG93bl9tZW51LFxuICBEcm9wZG93bkl0ZW06IHBhY2thZ2VzX2Ryb3Bkb3duX2l0ZW0sXG4gIE1lbnU6IHBhY2thZ2VzX21lbnUsXG4gIFN1Ym1lbnU6IHBhY2thZ2VzX3N1Ym1lbnUsXG4gIE1lbnVJdGVtOiBwYWNrYWdlc19tZW51X2l0ZW0sXG4gIE1lbnVJdGVtR3JvdXA6IHBhY2thZ2VzX21lbnVfaXRlbV9ncm91cCxcbiAgSW5wdXQ6IHBhY2thZ2VzX2lucHV0LFxuICBJbnB1dE51bWJlcjogcGFja2FnZXNfaW5wdXRfbnVtYmVyLFxuICBSYWRpbzogcGFja2FnZXNfcmFkaW8sXG4gIFJhZGlvR3JvdXA6IHBhY2thZ2VzX3JhZGlvX2dyb3VwLFxuICBSYWRpb0J1dHRvbjogcGFja2FnZXNfcmFkaW9fYnV0dG9uLFxuICBDaGVja2JveDogcGFja2FnZXNfY2hlY2tib3gsXG4gIENoZWNrYm94QnV0dG9uOiBwYWNrYWdlc19jaGVja2JveF9idXR0b24sXG4gIENoZWNrYm94R3JvdXA6IHBhY2thZ2VzX2NoZWNrYm94X2dyb3VwLFxuICBTd2l0Y2g6IHBhY2thZ2VzX3N3aXRjaCxcbiAgU2VsZWN0OiBwYWNrYWdlc19zZWxlY3QsXG4gIE9wdGlvbjogcGFja2FnZXNfb3B0aW9uLFxuICBPcHRpb25Hcm91cDogcGFja2FnZXNfb3B0aW9uX2dyb3VwLFxuICBCdXR0b246IHBhY2thZ2VzX2J1dHRvbixcbiAgQnV0dG9uR3JvdXA6IHBhY2thZ2VzX2J1dHRvbl9ncm91cCxcbiAgVGFibGU6IHBhY2thZ2VzX3RhYmxlLFxuICBUYWJsZUNvbHVtbjogcGFja2FnZXNfdGFibGVfY29sdW1uLFxuICBEYXRlUGlja2VyOiBwYWNrYWdlc19kYXRlX3BpY2tlcixcbiAgVGltZVNlbGVjdDogcGFja2FnZXNfdGltZV9zZWxlY3QsXG4gIFRpbWVQaWNrZXI6IHBhY2thZ2VzX3RpbWVfcGlja2VyLFxuICBQb3BvdmVyOiBwb3BvdmVyLFxuICBUb29sdGlwOiBwYWNrYWdlc190b29sdGlwLFxuICBNZXNzYWdlQm94OiBtZXNzYWdlX2JveCxcbiAgQnJlYWRjcnVtYjogcGFja2FnZXNfYnJlYWRjcnVtYixcbiAgQnJlYWRjcnVtYkl0ZW06IHBhY2thZ2VzX2JyZWFkY3J1bWJfaXRlbSxcbiAgRm9ybTogcGFja2FnZXNfZm9ybSxcbiAgRm9ybUl0ZW06IHBhY2thZ2VzX2Zvcm1faXRlbSxcbiAgVGFiczogcGFja2FnZXNfdGFicyxcbiAgVGFiUGFuZTogcGFja2FnZXNfdGFiX3BhbmUsXG4gIFRhZzogcGFja2FnZXNfdGFnLFxuICBUcmVlOiBwYWNrYWdlc190cmVlLFxuICBBbGVydDogcGFja2FnZXNfYWxlcnQsXG4gIE5vdGlmaWNhdGlvbjogbm90aWZpY2F0aW9uLFxuICBTbGlkZXI6IHNsaWRlcixcbiAgSWNvbjogcGFja2FnZXNfaWNvbixcbiAgUm93OiBwYWNrYWdlc19yb3csXG4gIENvbDogcGFja2FnZXNfY29sLFxuICBVcGxvYWQ6IHBhY2thZ2VzX3VwbG9hZCxcbiAgUHJvZ3Jlc3M6IHBhY2thZ2VzX3Byb2dyZXNzLFxuICBTcGlubmVyOiBwYWNrYWdlc19zcGlubmVyLFxuICBNZXNzYWdlOiBwYWNrYWdlc19tZXNzYWdlLFxuICBCYWRnZTogYmFkZ2UsXG4gIENhcmQ6IGNhcmQsXG4gIFJhdGU6IHJhdGUsXG4gIFN0ZXBzOiBwYWNrYWdlc19zdGVwcyxcbiAgU3RlcDogcGFja2FnZXNfc3RlcCxcbiAgQ2Fyb3VzZWw6IGNhcm91c2VsLFxuICBTY3JvbGxiYXI6IHNjcm9sbGJhcixcbiAgQ2Fyb3VzZWxJdGVtOiBjYXJvdXNlbF9pdGVtLFxuICBDb2xsYXBzZTogcGFja2FnZXNfY29sbGFwc2UsXG4gIENvbGxhcHNlSXRlbTogcGFja2FnZXNfY29sbGFwc2VfaXRlbSxcbiAgQ2FzY2FkZXI6IHBhY2thZ2VzX2Nhc2NhZGVyLFxuICBDb2xvclBpY2tlcjogY29sb3JfcGlja2VyLFxuICBUcmFuc2ZlcjogdHJhbnNmZXIsXG4gIENvbnRhaW5lcjogcGFja2FnZXNfY29udGFpbmVyLFxuICBIZWFkZXI6IGhlYWRlcixcbiAgQXNpZGU6IGFzaWRlLFxuICBNYWluOiBwYWNrYWdlc19tYWluLFxuICBGb290ZXI6IGZvb3RlcixcbiAgVGltZWxpbmU6IHRpbWVsaW5lLFxuICBUaW1lbGluZUl0ZW06IHRpbWVsaW5lX2l0ZW0sXG4gIExpbms6IHBhY2thZ2VzX2xpbmssXG4gIERpdmlkZXI6IGRpdmlkZXIsXG4gIEltYWdlOiBwYWNrYWdlc19pbWFnZSxcbiAgQ2FsZW5kYXI6IGNhbGVuZGFyLFxuICBCYWNrdG9wOiBiYWNrdG9wLFxuICBJbmZpbml0ZVNjcm9sbDogaW5maW5pdGVfc2Nyb2xsLFxuICBQYWdlSGVhZGVyOiBwYWdlX2hlYWRlcixcbiAgQ2FzY2FkZXJQYW5lbDogcGFja2FnZXNfY2FzY2FkZXJfcGFuZWwsXG4gIEF2YXRhcjogYXZhdGFyLFxuICBEcmF3ZXI6IGRyYXdlcixcbiAgUG9wY29uZmlybTogcG9wY29uZmlybSxcbiAgU2tlbGV0b246IHNrZWxldG9uLFxuICBTa2VsZXRvbkl0ZW06IHNrZWxldG9uX2l0ZW0sXG4gIEVtcHR5OiBlbXB0eSxcbiAgRGVzY3JpcHRpb25zOiBkZXNjcmlwdGlvbnMsXG4gIERlc2NyaXB0aW9uc0l0ZW06IHBhY2thZ2VzX2Rlc2NyaXB0aW9uc19pdGVtLFxuICBSZXN1bHQ6IHJlc3VsdFxufSk7XG5cbi8qKiovIH0pXG4vKioqKioqLyBdKVtcImRlZmF1bHRcIl07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/element-ui.common.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/input-number.js":
- /*!*****************************************************!*\
- !*** ./node_modules/element-ui/lib/input-number.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 86);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 10:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/input */ \"./node_modules/element-ui/lib/input.js\");\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n\n/***/ 22:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/focus */ \"./node_modules/element-ui/lib/mixins/focus.js\");\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony import */ var element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);\n/* harmony import */ var element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__);\n\n\n/* harmony default export */ __webpack_exports__[\"a\"] = ({\n bind: function bind(el, binding, vnode) {\n var interval = null;\n var startTime = void 0;\n var handler = function handler() {\n return vnode.context[binding.expression].apply();\n };\n var clear = function clear() {\n if (Date.now() - startTime < 100) {\n handler();\n }\n clearInterval(interval);\n interval = null;\n };\n\n Object(element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__[\"on\"])(el, 'mousedown', function (e) {\n if (e.button !== 0) return;\n startTime = Date.now();\n Object(element_ui_src_utils_dom__WEBPACK_IMPORTED_MODULE_0__[\"once\"])(document, 'mouseup', clear);\n clearInterval(interval);\n interval = setInterval(handler, 100);\n });\n }\n});\n\n/***/ }),\n\n/***/ 86:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\n \"el-input-number\",\n _vm.inputNumberSize ? \"el-input-number--\" + _vm.inputNumberSize : \"\",\n { \"is-disabled\": _vm.inputNumberDisabled },\n { \"is-without-controls\": !_vm.controls },\n { \"is-controls-right\": _vm.controlsAtRight }\n ],\n on: {\n dragstart: function($event) {\n $event.preventDefault()\n }\n }\n },\n [\n _vm.controls\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.decrease,\n expression: \"decrease\"\n }\n ],\n staticClass: \"el-input-number__decrease\",\n class: { \"is-disabled\": _vm.minDisabled },\n attrs: { role: \"button\" },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.decrease($event)\n }\n }\n },\n [\n _c(\"i\", {\n class:\n \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-down\" : \"minus\")\n })\n ]\n )\n : _vm._e(),\n _vm.controls\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"repeat-click\",\n rawName: \"v-repeat-click\",\n value: _vm.increase,\n expression: \"increase\"\n }\n ],\n staticClass: \"el-input-number__increase\",\n class: { \"is-disabled\": _vm.maxDisabled },\n attrs: { role: \"button\" },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n return _vm.increase($event)\n }\n }\n },\n [\n _c(\"i\", {\n class: \"el-icon-\" + (_vm.controlsAtRight ? \"arrow-up\" : \"plus\")\n })\n ]\n )\n : _vm._e(),\n _c(\"el-input\", {\n ref: \"input\",\n attrs: {\n value: _vm.displayValue,\n placeholder: _vm.placeholder,\n disabled: _vm.inputNumberDisabled,\n size: _vm.inputNumberSize,\n max: _vm.max,\n min: _vm.min,\n name: _vm.name,\n label: _vm.label\n },\n on: {\n blur: _vm.handleBlur,\n focus: _vm.handleFocus,\n input: _vm.handleInput,\n change: _vm.handleInputChange\n },\n nativeOn: {\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\"Up\", \"ArrowUp\"])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.increase($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.decrease($event)\n }\n ]\n }\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=template&id=42f8cf66&\n\n// EXTERNAL MODULE: external \"element-ui/lib/input\"\nvar input_ = __webpack_require__(10);\nvar input_default = /*#__PURE__*/__webpack_require__.n(input_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/focus\"\nvar focus_ = __webpack_require__(22);\nvar focus_default = /*#__PURE__*/__webpack_require__.n(focus_);\n\n// EXTERNAL MODULE: ./src/directives/repeat-click.js\nvar repeat_click = __webpack_require__(30);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ var input_numbervue_type_script_lang_js_ = ({\n name: 'ElInputNumber',\n mixins: [focus_default()('input')],\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n directives: {\n repeatClick: repeat_click[\"a\" /* default */]\n },\n components: {\n ElInput: input_default.a\n },\n props: {\n step: {\n type: Number,\n default: 1\n },\n stepStrictly: {\n type: Boolean,\n default: false\n },\n max: {\n type: Number,\n default: Infinity\n },\n min: {\n type: Number,\n default: -Infinity\n },\n value: {},\n disabled: Boolean,\n size: String,\n controls: {\n type: Boolean,\n default: true\n },\n controlsPosition: {\n type: String,\n default: ''\n },\n name: String,\n label: String,\n placeholder: String,\n precision: {\n type: Number,\n validator: function validator(val) {\n return val >= 0 && val === parseInt(val, 10);\n }\n }\n },\n data: function data() {\n return {\n currentValue: 0,\n userInput: null\n };\n },\n\n watch: {\n value: {\n immediate: true,\n handler: function handler(value) {\n var newVal = value === undefined ? value : Number(value);\n if (newVal !== undefined) {\n if (isNaN(newVal)) {\n return;\n }\n\n if (this.stepStrictly) {\n var stepPrecision = this.getPrecision(this.step);\n var precisionFactor = Math.pow(10, stepPrecision);\n newVal = Math.round(newVal / this.step) * precisionFactor * this.step / precisionFactor;\n }\n\n if (this.precision !== undefined) {\n newVal = this.toPrecision(newVal, this.precision);\n }\n }\n if (newVal >= this.max) newVal = this.max;\n if (newVal <= this.min) newVal = this.min;\n this.currentValue = newVal;\n this.userInput = null;\n this.$emit('input', newVal);\n }\n }\n },\n computed: {\n minDisabled: function minDisabled() {\n return this._decrease(this.value, this.step) < this.min;\n },\n maxDisabled: function maxDisabled() {\n return this._increase(this.value, this.step) > this.max;\n },\n numPrecision: function numPrecision() {\n var value = this.value,\n step = this.step,\n getPrecision = this.getPrecision,\n precision = this.precision;\n\n var stepPrecision = getPrecision(step);\n if (precision !== undefined) {\n if (stepPrecision > precision) {\n console.warn('[Element Warn][InputNumber]precision should not be less than the decimal places of step');\n }\n return precision;\n } else {\n return Math.max(getPrecision(value), stepPrecision);\n }\n },\n controlsAtRight: function controlsAtRight() {\n return this.controls && this.controlsPosition === 'right';\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n inputNumberSize: function inputNumberSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n inputNumberDisabled: function inputNumberDisabled() {\n return this.disabled || !!(this.elForm || {}).disabled;\n },\n displayValue: function displayValue() {\n if (this.userInput !== null) {\n return this.userInput;\n }\n\n var currentValue = this.currentValue;\n\n if (typeof currentValue === 'number') {\n if (this.stepStrictly) {\n var stepPrecision = this.getPrecision(this.step);\n var precisionFactor = Math.pow(10, stepPrecision);\n currentValue = Math.round(currentValue / this.step) * precisionFactor * this.step / precisionFactor;\n }\n\n if (this.precision !== undefined) {\n currentValue = currentValue.toFixed(this.precision);\n }\n }\n\n return currentValue;\n }\n },\n methods: {\n toPrecision: function toPrecision(num, precision) {\n if (precision === undefined) precision = this.numPrecision;\n return parseFloat(Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision));\n },\n getPrecision: function getPrecision(value) {\n if (value === undefined) return 0;\n var valueString = value.toString();\n var dotPosition = valueString.indexOf('.');\n var precision = 0;\n if (dotPosition !== -1) {\n precision = valueString.length - dotPosition - 1;\n }\n return precision;\n },\n _increase: function _increase(val, step) {\n if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n var precisionFactor = Math.pow(10, this.numPrecision);\n // Solve the accuracy problem of JS decimal calculation by converting the value to integer.\n return this.toPrecision((precisionFactor * val + precisionFactor * step) / precisionFactor);\n },\n _decrease: function _decrease(val, step) {\n if (typeof val !== 'number' && val !== undefined) return this.currentValue;\n\n var precisionFactor = Math.pow(10, this.numPrecision);\n\n return this.toPrecision((precisionFactor * val - precisionFactor * step) / precisionFactor);\n },\n increase: function increase() {\n if (this.inputNumberDisabled || this.maxDisabled) return;\n var value = this.value || 0;\n var newVal = this._increase(value, this.step);\n this.setCurrentValue(newVal);\n },\n decrease: function decrease() {\n if (this.inputNumberDisabled || this.minDisabled) return;\n var value = this.value || 0;\n var newVal = this._decrease(value, this.step);\n this.setCurrentValue(newVal);\n },\n handleBlur: function handleBlur(event) {\n this.$emit('blur', event);\n },\n handleFocus: function handleFocus(event) {\n this.$emit('focus', event);\n },\n setCurrentValue: function setCurrentValue(newVal) {\n var oldVal = this.currentValue;\n if (typeof newVal === 'number' && this.precision !== undefined) {\n newVal = this.toPrecision(newVal, this.precision);\n }\n if (newVal >= this.max) newVal = this.max;\n if (newVal <= this.min) newVal = this.min;\n if (oldVal === newVal) return;\n this.userInput = null;\n this.$emit('input', newVal);\n this.$emit('change', newVal, oldVal);\n this.currentValue = newVal;\n },\n handleInput: function handleInput(value) {\n this.userInput = value;\n },\n handleInputChange: function handleInputChange(value) {\n var newVal = value === '' ? undefined : Number(value);\n if (!isNaN(newVal) || value === '') {\n this.setCurrentValue(newVal);\n }\n this.userInput = null;\n },\n select: function select() {\n this.$refs.input.select();\n }\n },\n mounted: function mounted() {\n var innerInput = this.$refs.input.$refs.input;\n innerInput.setAttribute('role', 'spinbutton');\n innerInput.setAttribute('aria-valuemax', this.max);\n innerInput.setAttribute('aria-valuemin', this.min);\n innerInput.setAttribute('aria-valuenow', this.currentValue);\n innerInput.setAttribute('aria-disabled', this.inputNumberDisabled);\n },\n updated: function updated() {\n if (!this.$refs || !this.$refs.input) return;\n var innerInput = this.$refs.input.$refs.input;\n innerInput.setAttribute('aria-valuenow', this.currentValue);\n }\n});\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_input_numbervue_type_script_lang_js_ = (input_numbervue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/input-number/src/input-number.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_input_numbervue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/input-number/src/input-number.vue\"\n/* harmony default export */ var input_number = (component.exports);\n// CONCATENATED MODULE: ./packages/input-number/index.js\n\n\n/* istanbul ignore next */\ninput_number.install = function (Vue) {\n Vue.component(input_number.name, input_number);\n};\n\n/* harmony default export */ var packages_input_number = __webpack_exports__[\"default\"] = (input_number);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvaW5wdXQtbnVtYmVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2lucHV0LW51bWJlci5qcz9lNDUwIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gODYpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9pbnB1dFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL2RvbVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZm9jdXNcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgZWxlbWVudF91aV9zcmNfdXRpbHNfZG9tX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGVsZW1lbnRfdWlfc3JjX3V0aWxzX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGVsZW1lbnRfdWlfc3JjX3V0aWxzX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcblxuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKHtcbiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICB2YXIgaW50ZXJ2YWwgPSBudWxsO1xuICAgIHZhciBzdGFydFRpbWUgPSB2b2lkIDA7XG4gICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiBoYW5kbGVyKCkge1xuICAgICAgcmV0dXJuIHZub2RlLmNvbnRleHRbYmluZGluZy5leHByZXNzaW9uXS5hcHBseSgpO1xuICAgIH07XG4gICAgdmFyIGNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA8IDEwMCkge1xuICAgICAgICBoYW5kbGVyKCk7XG4gICAgICB9XG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgICAgIGludGVydmFsID0gbnVsbDtcbiAgICB9O1xuXG4gICAgT2JqZWN0KGVsZW1lbnRfdWlfc3JjX3V0aWxzX2RvbV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fW1wib25cIl0pKGVsLCAnbW91c2Vkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChlLmJ1dHRvbiAhPT0gMCkgcmV0dXJuO1xuICAgICAgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIE9iamVjdChlbGVtZW50X3VpX3NyY191dGlsc19kb21fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1tcIm9uY2VcIl0pKGRvY3VtZW50LCAnbW91c2V1cCcsIGNsZWFyKTtcbiAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVyLCAxMDApO1xuICAgIH0pO1xuICB9XG59KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDg2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NDJmOGNmNjYmXG52YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgY2xhc3M6IFtcbiAgICAgICAgXCJlbC1pbnB1dC1udW1iZXJcIixcbiAgICAgICAgX3ZtLmlucHV0TnVtYmVyU2l6ZSA/IFwiZWwtaW5wdXQtbnVtYmVyLS1cIiArIF92bS5pbnB1dE51bWJlclNpemUgOiBcIlwiLFxuICAgICAgICB7IFwiaXMtZGlzYWJsZWRcIjogX3ZtLmlucHV0TnVtYmVyRGlzYWJsZWQgfSxcbiAgICAgICAgeyBcImlzLXdpdGhvdXQtY29udHJvbHNcIjogIV92bS5jb250cm9scyB9LFxuICAgICAgICB7IFwiaXMtY29udHJvbHMtcmlnaHRcIjogX3ZtLmNvbnRyb2xzQXRSaWdodCB9XG4gICAgICBdLFxuICAgICAgb246IHtcbiAgICAgICAgZHJhZ3N0YXJ0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0uY29udHJvbHNcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJyZXBlYXQtY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1yZXBlYXQtY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uZGVjcmVhc2UsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImRlY3JlYXNlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0LW51bWJlcl9fZGVjcmVhc2VcIixcbiAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0ubWluRGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZW50ZXJcIiwgMTMsICRldmVudC5rZXksIFwiRW50ZXJcIilcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kZWNyZWFzZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOlxuICAgICAgICAgICAgICAgICAgXCJlbC1pY29uLVwiICsgKF92bS5jb250cm9sc0F0UmlnaHQgPyBcImFycm93LWRvd25cIiA6IFwibWludXNcIilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKCksXG4gICAgICBfdm0uY29udHJvbHNcbiAgICAgICAgPyBfYyhcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJyZXBlYXQtY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1yZXBlYXQtY2xpY2tcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0uaW5jcmVhc2UsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImluY3JlYXNlXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0LW51bWJlcl9faW5jcmVhc2VcIixcbiAgICAgICAgICAgICAgY2xhc3M6IHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0ubWF4RGlzYWJsZWQgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHsgcm9sZTogXCJidXR0b25cIiB9LFxuICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgIGtleWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZW50ZXJcIiwgMTMsICRldmVudC5rZXksIFwiRW50ZXJcIilcbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5pbmNyZWFzZSgkZXZlbnQpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzOiBcImVsLWljb24tXCIgKyAoX3ZtLmNvbnRyb2xzQXRSaWdodCA/IFwiYXJyb3ctdXBcIiA6IFwicGx1c1wiKVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgIClcbiAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgIF9jKFwiZWwtaW5wdXRcIiwge1xuICAgICAgICByZWY6IFwiaW5wdXRcIixcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICB2YWx1ZTogX3ZtLmRpc3BsYXlWYWx1ZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogX3ZtLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIGRpc2FibGVkOiBfdm0uaW5wdXROdW1iZXJEaXNhYmxlZCxcbiAgICAgICAgICBzaXplOiBfdm0uaW5wdXROdW1iZXJTaXplLFxuICAgICAgICAgIG1heDogX3ZtLm1heCxcbiAgICAgICAgICBtaW46IF92bS5taW4sXG4gICAgICAgICAgbmFtZTogX3ZtLm5hbWUsXG4gICAgICAgICAgbGFiZWw6IF92bS5sYWJlbFxuICAgICAgICB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLFxuICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgaW5wdXQ6IF92bS5oYW5kbGVJbnB1dCxcbiAgICAgICAgICBjaGFuZ2U6IF92bS5oYW5kbGVJbnB1dENoYW5nZVxuICAgICAgICB9LFxuICAgICAgICBuYXRpdmVPbjoge1xuICAgICAgICAgIGtleWRvd246IFtcbiAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidXBcIiwgMzgsICRldmVudC5rZXksIFtcIlVwXCIsIFwiQXJyb3dVcFwiXSlcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICByZXR1cm4gX3ZtLmluY3JlYXNlKCRldmVudClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImRvd25cIiwgNDAsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgIFwiRG93blwiLFxuICAgICAgICAgICAgICAgICAgXCJBcnJvd0Rvd25cIlxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgcmV0dXJuIF92bS5kZWNyZWFzZSgkZXZlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIF0sXG4gICAgMVxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTQyZjhjZjY2JlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvaW5wdXRcIlxudmFyIGlucHV0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGlucHV0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGlucHV0Xyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZm9jdXNcIlxudmFyIGZvY3VzXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xudmFyIGZvY3VzX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGZvY3VzXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9zcmMvZGlyZWN0aXZlcy9yZXBlYXQtY2xpY2suanNcbnZhciByZXBlYXRfY2xpY2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW5wdXRfbnVtYmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbmFtZTogJ0VsSW5wdXROdW1iZXInLFxuICBtaXhpbnM6IFtmb2N1c19kZWZhdWx0KCkoJ2lucHV0JyldLFxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBlbEZvcm1JdGVtOiB7XG4gICAgICBkZWZhdWx0OiAnJ1xuICAgIH1cbiAgfSxcbiAgZGlyZWN0aXZlczoge1xuICAgIHJlcGVhdENsaWNrOiByZXBlYXRfY2xpY2tbXCJhXCIgLyogZGVmYXVsdCAqL11cbiAgfSxcbiAgY29tcG9uZW50czoge1xuICAgIEVsSW5wdXQ6IGlucHV0X2RlZmF1bHQuYVxuICB9LFxuICBwcm9wczoge1xuICAgIHN0ZXA6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDFcbiAgICB9LFxuICAgIHN0ZXBTdHJpY3RseToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBtYXg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IEluZmluaXR5XG4gICAgfSxcbiAgICBtaW46IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IC1JbmZpbml0eVxuICAgIH0sXG4gICAgdmFsdWU6IHt9LFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBjb250cm9sczoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbnRyb2xzUG9zaXRpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgbGFiZWw6IFN0cmluZyxcbiAgICBwbGFjZWhvbGRlcjogU3RyaW5nLFxuICAgIHByZWNpc2lvbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgPj0gMCAmJiB2YWwgPT09IHBhcnNlSW50KHZhbCwgMTApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiAwLFxuICAgICAgdXNlcklucHV0OiBudWxsXG4gICAgfTtcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbHVlKSB7XG4gICAgICAgIHZhciBuZXdWYWwgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBOdW1iZXIodmFsdWUpO1xuICAgICAgICBpZiAobmV3VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoaXNOYU4obmV3VmFsKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnN0ZXBTdHJpY3RseSkge1xuICAgICAgICAgICAgdmFyIHN0ZXBQcmVjaXNpb24gPSB0aGlzLmdldFByZWNpc2lvbih0aGlzLnN0ZXApO1xuICAgICAgICAgICAgdmFyIHByZWNpc2lvbkZhY3RvciA9IE1hdGgucG93KDEwLCBzdGVwUHJlY2lzaW9uKTtcbiAgICAgICAgICAgIG5ld1ZhbCA9IE1hdGgucm91bmQobmV3VmFsIC8gdGhpcy5zdGVwKSAqIHByZWNpc2lvbkZhY3RvciAqIHRoaXMuc3RlcCAvIHByZWNpc2lvbkZhY3RvcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3VmFsID0gdGhpcy50b1ByZWNpc2lvbihuZXdWYWwsIHRoaXMucHJlY2lzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5ld1ZhbCA+PSB0aGlzLm1heCkgbmV3VmFsID0gdGhpcy5tYXg7XG4gICAgICAgIGlmIChuZXdWYWwgPD0gdGhpcy5taW4pIG5ld1ZhbCA9IHRoaXMubWluO1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgdGhpcy51c2VySW5wdXQgPSBudWxsO1xuICAgICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIG5ld1ZhbCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIG1pbkRpc2FibGVkOiBmdW5jdGlvbiBtaW5EaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kZWNyZWFzZSh0aGlzLnZhbHVlLCB0aGlzLnN0ZXApIDwgdGhpcy5taW47XG4gICAgfSxcbiAgICBtYXhEaXNhYmxlZDogZnVuY3Rpb24gbWF4RGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5faW5jcmVhc2UodGhpcy52YWx1ZSwgdGhpcy5zdGVwKSA+IHRoaXMubWF4O1xuICAgIH0sXG4gICAgbnVtUHJlY2lzaW9uOiBmdW5jdGlvbiBudW1QcmVjaXNpb24oKSB7XG4gICAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLFxuICAgICAgICAgIHN0ZXAgPSB0aGlzLnN0ZXAsXG4gICAgICAgICAgZ2V0UHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb24sXG4gICAgICAgICAgcHJlY2lzaW9uID0gdGhpcy5wcmVjaXNpb247XG5cbiAgICAgIHZhciBzdGVwUHJlY2lzaW9uID0gZ2V0UHJlY2lzaW9uKHN0ZXApO1xuICAgICAgaWYgKHByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGVwUHJlY2lzaW9uID4gcHJlY2lzaW9uKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtJbnB1dE51bWJlcl1wcmVjaXNpb24gc2hvdWxkIG5vdCBiZSBsZXNzIHRoYW4gdGhlIGRlY2ltYWwgcGxhY2VzIG9mIHN0ZXAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlY2lzaW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGdldFByZWNpc2lvbih2YWx1ZSksIHN0ZXBQcmVjaXNpb24pO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29udHJvbHNBdFJpZ2h0OiBmdW5jdGlvbiBjb250cm9sc0F0UmlnaHQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250cm9scyAmJiB0aGlzLmNvbnRyb2xzUG9zaXRpb24gPT09ICdyaWdodCc7XG4gICAgfSxcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIGlucHV0TnVtYmVyU2l6ZTogZnVuY3Rpb24gaW5wdXROdW1iZXJTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCB0aGlzLl9lbEZvcm1JdGVtU2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9LFxuICAgIGlucHV0TnVtYmVyRGlzYWJsZWQ6IGZ1bmN0aW9uIGlucHV0TnVtYmVyRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAhISh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfSxcbiAgICBkaXNwbGF5VmFsdWU6IGZ1bmN0aW9uIGRpc3BsYXlWYWx1ZSgpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJJbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VySW5wdXQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBjdXJyZW50VmFsdWUgPSB0aGlzLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmICh0aGlzLnN0ZXBTdHJpY3RseSkge1xuICAgICAgICAgIHZhciBzdGVwUHJlY2lzaW9uID0gdGhpcy5nZXRQcmVjaXNpb24odGhpcy5zdGVwKTtcbiAgICAgICAgICB2YXIgcHJlY2lzaW9uRmFjdG9yID0gTWF0aC5wb3coMTAsIHN0ZXBQcmVjaXNpb24pO1xuICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IE1hdGgucm91bmQoY3VycmVudFZhbHVlIC8gdGhpcy5zdGVwKSAqIHByZWNpc2lvbkZhY3RvciAqIHRoaXMuc3RlcCAvIHByZWNpc2lvbkZhY3RvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKG51bSwgcHJlY2lzaW9uKSB7XG4gICAgICBpZiAocHJlY2lzaW9uID09PSB1bmRlZmluZWQpIHByZWNpc2lvbiA9IHRoaXMubnVtUHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoTWF0aC5yb3VuZChudW0gKiBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKSkgLyBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKSk7XG4gICAgfSxcbiAgICBnZXRQcmVjaXNpb246IGZ1bmN0aW9uIGdldFByZWNpc2lvbih2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICAgICAgdmFyIHZhbHVlU3RyaW5nID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIHZhciBkb3RQb3NpdGlvbiA9IHZhbHVlU3RyaW5nLmluZGV4T2YoJy4nKTtcbiAgICAgIHZhciBwcmVjaXNpb24gPSAwO1xuICAgICAgaWYgKGRvdFBvc2l0aW9uICE9PSAtMSkge1xuICAgICAgICBwcmVjaXNpb24gPSB2YWx1ZVN0cmluZy5sZW5ndGggLSBkb3RQb3NpdGlvbiAtIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJlY2lzaW9uO1xuICAgIH0sXG4gICAgX2luY3JlYXNlOiBmdW5jdGlvbiBfaW5jcmVhc2UodmFsLCBzdGVwKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicgJiYgdmFsICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgdmFyIHByZWNpc2lvbkZhY3RvciA9IE1hdGgucG93KDEwLCB0aGlzLm51bVByZWNpc2lvbik7XG4gICAgICAvLyBTb2x2ZSB0aGUgYWNjdXJhY3kgcHJvYmxlbSBvZiBKUyBkZWNpbWFsIGNhbGN1bGF0aW9uIGJ5IGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGludGVnZXIuXG4gICAgICByZXR1cm4gdGhpcy50b1ByZWNpc2lvbigocHJlY2lzaW9uRmFjdG9yICogdmFsICsgcHJlY2lzaW9uRmFjdG9yICogc3RlcCkgLyBwcmVjaXNpb25GYWN0b3IpO1xuICAgIH0sXG4gICAgX2RlY3JlYXNlOiBmdW5jdGlvbiBfZGVjcmVhc2UodmFsLCBzdGVwKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ251bWJlcicgJiYgdmFsICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgdmFyIHByZWNpc2lvbkZhY3RvciA9IE1hdGgucG93KDEwLCB0aGlzLm51bVByZWNpc2lvbik7XG5cbiAgICAgIHJldHVybiB0aGlzLnRvUHJlY2lzaW9uKChwcmVjaXNpb25GYWN0b3IgKiB2YWwgLSBwcmVjaXNpb25GYWN0b3IgKiBzdGVwKSAvIHByZWNpc2lvbkZhY3Rvcik7XG4gICAgfSxcbiAgICBpbmNyZWFzZTogZnVuY3Rpb24gaW5jcmVhc2UoKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dE51bWJlckRpc2FibGVkIHx8IHRoaXMubWF4RGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUgfHwgMDtcbiAgICAgIHZhciBuZXdWYWwgPSB0aGlzLl9pbmNyZWFzZSh2YWx1ZSwgdGhpcy5zdGVwKTtcbiAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCk7XG4gICAgfSxcbiAgICBkZWNyZWFzZTogZnVuY3Rpb24gZGVjcmVhc2UoKSB7XG4gICAgICBpZiAodGhpcy5pbnB1dE51bWJlckRpc2FibGVkIHx8IHRoaXMubWluRGlzYWJsZWQpIHJldHVybjtcbiAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUgfHwgMDtcbiAgICAgIHZhciBuZXdWYWwgPSB0aGlzLl9kZWNyZWFzZSh2YWx1ZSwgdGhpcy5zdGVwKTtcbiAgICAgIHRoaXMuc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCk7XG4gICAgfSxcbiAgICBoYW5kbGVCbHVyOiBmdW5jdGlvbiBoYW5kbGVCbHVyKGV2ZW50KSB7XG4gICAgICB0aGlzLiRlbWl0KCdibHVyJywgZXZlbnQpO1xuICAgIH0sXG4gICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XG4gICAgICB0aGlzLiRlbWl0KCdmb2N1cycsIGV2ZW50KTtcbiAgICB9LFxuICAgIHNldEN1cnJlbnRWYWx1ZTogZnVuY3Rpb24gc2V0Q3VycmVudFZhbHVlKG5ld1ZhbCkge1xuICAgICAgdmFyIG9sZFZhbCA9IHRoaXMuY3VycmVudFZhbHVlO1xuICAgICAgaWYgKHR5cGVvZiBuZXdWYWwgPT09ICdudW1iZXInICYmIHRoaXMucHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3VmFsID0gdGhpcy50b1ByZWNpc2lvbihuZXdWYWwsIHRoaXMucHJlY2lzaW9uKTtcbiAgICAgIH1cbiAgICAgIGlmIChuZXdWYWwgPj0gdGhpcy5tYXgpIG5ld1ZhbCA9IHRoaXMubWF4O1xuICAgICAgaWYgKG5ld1ZhbCA8PSB0aGlzLm1pbikgbmV3VmFsID0gdGhpcy5taW47XG4gICAgICBpZiAob2xkVmFsID09PSBuZXdWYWwpIHJldHVybjtcbiAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgbmV3VmFsKTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIG5ld1ZhbCwgb2xkVmFsKTtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gbmV3VmFsO1xuICAgIH0sXG4gICAgaGFuZGxlSW5wdXQ6IGZ1bmN0aW9uIGhhbmRsZUlucHV0KHZhbHVlKSB7XG4gICAgICB0aGlzLnVzZXJJbnB1dCA9IHZhbHVlO1xuICAgIH0sXG4gICAgaGFuZGxlSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUlucHV0Q2hhbmdlKHZhbHVlKSB7XG4gICAgICB2YXIgbmV3VmFsID0gdmFsdWUgPT09ICcnID8gdW5kZWZpbmVkIDogTnVtYmVyKHZhbHVlKTtcbiAgICAgIGlmICghaXNOYU4obmV3VmFsKSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VmFsdWUobmV3VmFsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXNlcklucHV0ID0gbnVsbDtcbiAgICB9LFxuICAgIHNlbGVjdDogZnVuY3Rpb24gc2VsZWN0KCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5zZWxlY3QoKTtcbiAgICB9XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIGlubmVySW5wdXQgPSB0aGlzLiRyZWZzLmlucHV0LiRyZWZzLmlucHV0O1xuICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ3NwaW5idXR0b24nKTtcbiAgICBpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIHRoaXMubWF4KTtcbiAgICBpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1pbicsIHRoaXMubWluKTtcbiAgICBpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW5vdycsIHRoaXMuY3VycmVudFZhbHVlKTtcbiAgICBpbm5lcklucHV0LnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsIHRoaXMuaW5wdXROdW1iZXJEaXNhYmxlZCk7XG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgaWYgKCF0aGlzLiRyZWZzIHx8ICF0aGlzLiRyZWZzLmlucHV0KSByZXR1cm47XG4gICAgdmFyIGlubmVySW5wdXQgPSB0aGlzLiRyZWZzLmlucHV0LiRyZWZzLmlucHV0O1xuICAgIGlubmVySW5wdXQuc2V0QXR0cmlidXRlKCdhcmlhLXZhbHVlbm93JywgdGhpcy5jdXJyZW50VmFsdWUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL3NyYy9pbnB1dC1udW1iZXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19pbnB1dF9udW1iZXJ2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoaW5wdXRfbnVtYmVydnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1xudmFyIGNvbXBvbmVudE5vcm1hbGl6ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0LW51bWJlci9zcmMvaW5wdXQtbnVtYmVyLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX2lucHV0X251bWJlcnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9pbnB1dC1udW1iZXIvc3JjL2lucHV0LW51bWJlci52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW5wdXRfbnVtYmVyID0gKGNvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQtbnVtYmVyL2luZGV4LmpzXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlucHV0X251bWJlci5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KGlucHV0X251bWJlci5uYW1lLCBpbnB1dF9udW1iZXIpO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcGFja2FnZXNfaW5wdXRfbnVtYmVyID0gX193ZWJwYWNrX2V4cG9ydHNfX1tcImRlZmF1bHRcIl0gPSAoaW5wdXRfbnVtYmVyKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/input-number.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/input.js":
- /*!**********************************************!*\
- !*** ./node_modules/element-ui/lib/input.js ***!
- \**********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 74);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 11:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/migrating */ \"./node_modules/element-ui/lib/mixins/migrating.js\");\n\n/***/ }),\n\n/***/ 21:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/shared */ \"./node_modules/element-ui/lib/utils/shared.js\");\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 74:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=template&id=343dd774&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n class: [\n _vm.type === \"textarea\" ? \"el-textarea\" : \"el-input\",\n _vm.inputSize ? \"el-input--\" + _vm.inputSize : \"\",\n {\n \"is-disabled\": _vm.inputDisabled,\n \"is-exceed\": _vm.inputExceed,\n \"el-input-group\": _vm.$slots.prepend || _vm.$slots.append,\n \"el-input-group--append\": _vm.$slots.append,\n \"el-input-group--prepend\": _vm.$slots.prepend,\n \"el-input--prefix\": _vm.$slots.prefix || _vm.prefixIcon,\n \"el-input--suffix\":\n _vm.$slots.suffix ||\n _vm.suffixIcon ||\n _vm.clearable ||\n _vm.showPassword\n }\n ],\n on: {\n mouseenter: function($event) {\n _vm.hovering = true\n },\n mouseleave: function($event) {\n _vm.hovering = false\n }\n }\n },\n [\n _vm.type !== \"textarea\"\n ? [\n _vm.$slots.prepend\n ? _c(\n \"div\",\n { staticClass: \"el-input-group__prepend\" },\n [_vm._t(\"prepend\")],\n 2\n )\n : _vm._e(),\n _vm.type !== \"textarea\"\n ? _c(\n \"input\",\n _vm._b(\n {\n ref: \"input\",\n staticClass: \"el-input__inner\",\n attrs: {\n tabindex: _vm.tabindex,\n type: _vm.showPassword\n ? _vm.passwordVisible\n ? \"text\"\n : \"password\"\n : _vm.type,\n disabled: _vm.inputDisabled,\n readonly: _vm.readonly,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n \"aria-label\": _vm.label\n },\n on: {\n compositionstart: _vm.handleCompositionStart,\n compositionupdate: _vm.handleCompositionUpdate,\n compositionend: _vm.handleCompositionEnd,\n input: _vm.handleInput,\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n change: _vm.handleChange\n }\n },\n \"input\",\n _vm.$attrs,\n false\n )\n )\n : _vm._e(),\n _vm.$slots.prefix || _vm.prefixIcon\n ? _c(\n \"span\",\n { staticClass: \"el-input__prefix\" },\n [\n _vm._t(\"prefix\"),\n _vm.prefixIcon\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: _vm.prefixIcon\n })\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _vm.getSuffixVisible()\n ? _c(\"span\", { staticClass: \"el-input__suffix\" }, [\n _c(\n \"span\",\n { staticClass: \"el-input__suffix-inner\" },\n [\n !_vm.showClear ||\n !_vm.showPwdVisible ||\n !_vm.isWordLimitVisible\n ? [\n _vm._t(\"suffix\"),\n _vm.suffixIcon\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: _vm.suffixIcon\n })\n : _vm._e()\n ]\n : _vm._e(),\n _vm.showClear\n ? _c(\"i\", {\n staticClass:\n \"el-input__icon el-icon-circle-close el-input__clear\",\n on: {\n mousedown: function($event) {\n $event.preventDefault()\n },\n click: _vm.clear\n }\n })\n : _vm._e(),\n _vm.showPwdVisible\n ? _c(\"i\", {\n staticClass:\n \"el-input__icon el-icon-view el-input__clear\",\n on: { click: _vm.handlePasswordVisible }\n })\n : _vm._e(),\n _vm.isWordLimitVisible\n ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n _c(\n \"span\",\n { staticClass: \"el-input__count-inner\" },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.textLength) +\n \"/\" +\n _vm._s(_vm.upperLimit) +\n \"\\n \"\n )\n ]\n )\n ])\n : _vm._e()\n ],\n 2\n ),\n _vm.validateState\n ? _c(\"i\", {\n staticClass: \"el-input__icon\",\n class: [\"el-input__validateIcon\", _vm.validateIcon]\n })\n : _vm._e()\n ])\n : _vm._e(),\n _vm.$slots.append\n ? _c(\n \"div\",\n { staticClass: \"el-input-group__append\" },\n [_vm._t(\"append\")],\n 2\n )\n : _vm._e()\n ]\n : _c(\n \"textarea\",\n _vm._b(\n {\n ref: \"textarea\",\n staticClass: \"el-textarea__inner\",\n style: _vm.textareaStyle,\n attrs: {\n tabindex: _vm.tabindex,\n disabled: _vm.inputDisabled,\n readonly: _vm.readonly,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n \"aria-label\": _vm.label\n },\n on: {\n compositionstart: _vm.handleCompositionStart,\n compositionupdate: _vm.handleCompositionUpdate,\n compositionend: _vm.handleCompositionEnd,\n input: _vm.handleInput,\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n change: _vm.handleChange\n }\n },\n \"textarea\",\n _vm.$attrs,\n false\n )\n ),\n _vm.isWordLimitVisible && _vm.type === \"textarea\"\n ? _c(\"span\", { staticClass: \"el-input__count\" }, [\n _vm._v(_vm._s(_vm.textLength) + \"/\" + _vm._s(_vm.upperLimit))\n ])\n : _vm._e()\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=template&id=343dd774&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(4);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/migrating\"\nvar migrating_ = __webpack_require__(11);\nvar migrating_default = /*#__PURE__*/__webpack_require__.n(migrating_);\n\n// CONCATENATED MODULE: ./packages/input/src/calcTextareaHeight.js\nvar hiddenTextarea = void 0;\n\nvar HIDDEN_STYLE = '\\n height:0 !important;\\n visibility:hidden !important;\\n overflow:hidden !important;\\n position:absolute !important;\\n z-index:-1000 !important;\\n top:0 !important;\\n right:0 !important\\n';\n\nvar CONTEXT_STYLE = ['letter-spacing', 'line-height', 'padding-top', 'padding-bottom', 'font-family', 'font-weight', 'font-size', 'text-rendering', 'text-transform', 'width', 'text-indent', 'padding-left', 'padding-right', 'border-width', 'box-sizing'];\n\nfunction calculateNodeStyling(targetElement) {\n var style = window.getComputedStyle(targetElement);\n\n var boxSizing = style.getPropertyValue('box-sizing');\n\n var paddingSize = parseFloat(style.getPropertyValue('padding-bottom')) + parseFloat(style.getPropertyValue('padding-top'));\n\n var borderSize = parseFloat(style.getPropertyValue('border-bottom-width')) + parseFloat(style.getPropertyValue('border-top-width'));\n\n var contextStyle = CONTEXT_STYLE.map(function (name) {\n return name + ':' + style.getPropertyValue(name);\n }).join(';');\n\n return { contextStyle: contextStyle, paddingSize: paddingSize, borderSize: borderSize, boxSizing: boxSizing };\n}\n\nfunction calcTextareaHeight(targetElement) {\n var minRows = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var maxRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (!hiddenTextarea) {\n hiddenTextarea = document.createElement('textarea');\n document.body.appendChild(hiddenTextarea);\n }\n\n var _calculateNodeStyling = calculateNodeStyling(targetElement),\n paddingSize = _calculateNodeStyling.paddingSize,\n borderSize = _calculateNodeStyling.borderSize,\n boxSizing = _calculateNodeStyling.boxSizing,\n contextStyle = _calculateNodeStyling.contextStyle;\n\n hiddenTextarea.setAttribute('style', contextStyle + ';' + HIDDEN_STYLE);\n hiddenTextarea.value = targetElement.value || targetElement.placeholder || '';\n\n var height = hiddenTextarea.scrollHeight;\n var result = {};\n\n if (boxSizing === 'border-box') {\n height = height + borderSize;\n } else if (boxSizing === 'content-box') {\n height = height - paddingSize;\n }\n\n hiddenTextarea.value = '';\n var singleRowHeight = hiddenTextarea.scrollHeight - paddingSize;\n\n if (minRows !== null) {\n var minHeight = singleRowHeight * minRows;\n if (boxSizing === 'border-box') {\n minHeight = minHeight + paddingSize + borderSize;\n }\n height = Math.max(minHeight, height);\n result.minHeight = minHeight + 'px';\n }\n if (maxRows !== null) {\n var maxHeight = singleRowHeight * maxRows;\n if (boxSizing === 'border-box') {\n maxHeight = maxHeight + paddingSize + borderSize;\n }\n height = Math.min(maxHeight, height);\n }\n result.height = height + 'px';\n hiddenTextarea.parentNode && hiddenTextarea.parentNode.removeChild(hiddenTextarea);\n hiddenTextarea = null;\n return result;\n};\n// EXTERNAL MODULE: external \"element-ui/lib/utils/merge\"\nvar merge_ = __webpack_require__(9);\nvar merge_default = /*#__PURE__*/__webpack_require__.n(merge_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __webpack_require__(21);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/input/src/input.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n/* harmony default export */ var inputvue_type_script_lang_js_ = ({\n name: 'ElInput',\n\n componentName: 'ElInput',\n\n mixins: [emitter_default.a, migrating_default.a],\n\n inheritAttrs: false,\n\n inject: {\n elForm: {\n default: ''\n },\n elFormItem: {\n default: ''\n }\n },\n\n data: function data() {\n return {\n textareaCalcStyle: {},\n hovering: false,\n focused: false,\n isComposing: false,\n passwordVisible: false\n };\n },\n\n\n props: {\n value: [String, Number],\n size: String,\n resize: String,\n form: String,\n disabled: Boolean,\n readonly: Boolean,\n type: {\n type: String,\n default: 'text'\n },\n autosize: {\n type: [Boolean, Object],\n default: false\n },\n autocomplete: {\n type: String,\n default: 'off'\n },\n /** @Deprecated in next major version */\n autoComplete: {\n type: String,\n validator: function validator(val) {\n false && false;\n return true;\n }\n },\n validateEvent: {\n type: Boolean,\n default: true\n },\n suffixIcon: String,\n prefixIcon: String,\n label: String,\n clearable: {\n type: Boolean,\n default: false\n },\n showPassword: {\n type: Boolean,\n default: false\n },\n showWordLimit: {\n type: Boolean,\n default: false\n },\n tabindex: String\n },\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n validateState: function validateState() {\n return this.elFormItem ? this.elFormItem.validateState : '';\n },\n needStatusIcon: function needStatusIcon() {\n return this.elForm ? this.elForm.statusIcon : false;\n },\n validateIcon: function validateIcon() {\n return {\n validating: 'el-icon-loading',\n success: 'el-icon-circle-check',\n error: 'el-icon-circle-close'\n }[this.validateState];\n },\n textareaStyle: function textareaStyle() {\n return merge_default()({}, this.textareaCalcStyle, { resize: this.resize });\n },\n inputSize: function inputSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n inputDisabled: function inputDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n nativeInputValue: function nativeInputValue() {\n return this.value === null || this.value === undefined ? '' : String(this.value);\n },\n showClear: function showClear() {\n return this.clearable && !this.inputDisabled && !this.readonly && this.nativeInputValue && (this.focused || this.hovering);\n },\n showPwdVisible: function showPwdVisible() {\n return this.showPassword && !this.inputDisabled && !this.readonly && (!!this.nativeInputValue || this.focused);\n },\n isWordLimitVisible: function isWordLimitVisible() {\n return this.showWordLimit && this.$attrs.maxlength && (this.type === 'text' || this.type === 'textarea') && !this.inputDisabled && !this.readonly && !this.showPassword;\n },\n upperLimit: function upperLimit() {\n return this.$attrs.maxlength;\n },\n textLength: function textLength() {\n if (typeof this.value === 'number') {\n return String(this.value).length;\n }\n\n return (this.value || '').length;\n },\n inputExceed: function inputExceed() {\n // show exceed style if length of initial value greater then maxlength\n return this.isWordLimitVisible && this.textLength > this.upperLimit;\n }\n },\n\n watch: {\n value: function value(val) {\n this.$nextTick(this.resizeTextarea);\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.change', [val]);\n }\n },\n\n // native input value is set explicitly\n // do not use v-model / :value in template\n // see: https://github.com/ElemeFE/element/issues/14521\n nativeInputValue: function nativeInputValue() {\n this.setNativeInputValue();\n },\n\n // when change between <input> and <textarea>,\n // update DOM dependent value and styles\n // https://github.com/ElemeFE/element/issues/14857\n type: function type() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.setNativeInputValue();\n _this.resizeTextarea();\n _this.updateIconOffset();\n });\n }\n },\n\n methods: {\n focus: function focus() {\n this.getInput().focus();\n },\n blur: function blur() {\n this.getInput().blur();\n },\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {\n 'icon': 'icon is removed, use suffix-icon / prefix-icon instead.',\n 'on-icon-click': 'on-icon-click is removed.'\n },\n events: {\n 'click': 'click is removed.'\n }\n };\n },\n handleBlur: function handleBlur(event) {\n this.focused = false;\n this.$emit('blur', event);\n if (this.validateEvent) {\n this.dispatch('ElFormItem', 'el.form.blur', [this.value]);\n }\n },\n select: function select() {\n this.getInput().select();\n },\n resizeTextarea: function resizeTextarea() {\n if (this.$isServer) return;\n var autosize = this.autosize,\n type = this.type;\n\n if (type !== 'textarea') return;\n if (!autosize) {\n this.textareaCalcStyle = {\n minHeight: calcTextareaHeight(this.$refs.textarea).minHeight\n };\n return;\n }\n var minRows = autosize.minRows;\n var maxRows = autosize.maxRows;\n\n this.textareaCalcStyle = calcTextareaHeight(this.$refs.textarea, minRows, maxRows);\n },\n setNativeInputValue: function setNativeInputValue() {\n var input = this.getInput();\n if (!input) return;\n if (input.value === this.nativeInputValue) return;\n input.value = this.nativeInputValue;\n },\n handleFocus: function handleFocus(event) {\n this.focused = true;\n this.$emit('focus', event);\n },\n handleCompositionStart: function handleCompositionStart(event) {\n this.$emit('compositionstart', event);\n this.isComposing = true;\n },\n handleCompositionUpdate: function handleCompositionUpdate(event) {\n this.$emit('compositionupdate', event);\n var text = event.target.value;\n var lastCharacter = text[text.length - 1] || '';\n this.isComposing = !Object(shared_[\"isKorean\"])(lastCharacter);\n },\n handleCompositionEnd: function handleCompositionEnd(event) {\n this.$emit('compositionend', event);\n if (this.isComposing) {\n this.isComposing = false;\n this.handleInput(event);\n }\n },\n handleInput: function handleInput(event) {\n // should not emit input during composition\n // see: https://github.com/ElemeFE/element/issues/10516\n if (this.isComposing) return;\n\n // hack for https://github.com/ElemeFE/element/issues/8548\n // should remove the following line when we don't support IE\n if (event.target.value === this.nativeInputValue) return;\n\n this.$emit('input', event.target.value);\n\n // ensure native input value is controlled\n // see: https://github.com/ElemeFE/element/issues/12850\n this.$nextTick(this.setNativeInputValue);\n },\n handleChange: function handleChange(event) {\n this.$emit('change', event.target.value);\n },\n calcIconOffset: function calcIconOffset(place) {\n var elList = [].slice.call(this.$el.querySelectorAll('.el-input__' + place) || []);\n if (!elList.length) return;\n var el = null;\n for (var i = 0; i < elList.length; i++) {\n if (elList[i].parentNode === this.$el) {\n el = elList[i];\n break;\n }\n }\n if (!el) return;\n var pendantMap = {\n suffix: 'append',\n prefix: 'prepend'\n };\n\n var pendant = pendantMap[place];\n if (this.$slots[pendant]) {\n el.style.transform = 'translateX(' + (place === 'suffix' ? '-' : '') + this.$el.querySelector('.el-input-group__' + pendant).offsetWidth + 'px)';\n } else {\n el.removeAttribute('style');\n }\n },\n updateIconOffset: function updateIconOffset() {\n this.calcIconOffset('prefix');\n this.calcIconOffset('suffix');\n },\n clear: function clear() {\n this.$emit('input', '');\n this.$emit('change', '');\n this.$emit('clear');\n },\n handlePasswordVisible: function handlePasswordVisible() {\n var _this2 = this;\n\n this.passwordVisible = !this.passwordVisible;\n this.$nextTick(function () {\n _this2.focus();\n });\n },\n getInput: function getInput() {\n return this.$refs.input || this.$refs.textarea;\n },\n getSuffixVisible: function getSuffixVisible() {\n return this.$slots.suffix || this.suffixIcon || this.showClear || this.showPassword || this.isWordLimitVisible || this.validateState && this.needStatusIcon;\n }\n },\n\n created: function created() {\n this.$on('inputSelect', this.select);\n },\n mounted: function mounted() {\n this.setNativeInputValue();\n this.resizeTextarea();\n this.updateIconOffset();\n },\n updated: function updated() {\n this.$nextTick(this.updateIconOffset);\n }\n});\n// CONCATENATED MODULE: ./packages/input/src/input.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_inputvue_type_script_lang_js_ = (inputvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/input/src/input.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_inputvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/input/src/input.vue\"\n/* harmony default export */ var input = (component.exports);\n// CONCATENATED MODULE: ./packages/input/index.js\n\n\n/* istanbul ignore next */\ninput.install = function (Vue) {\n Vue.component(input.name, input);\n};\n\n/* harmony default export */ var packages_input = __webpack_exports__[\"default\"] = (input);\n\n/***/ }),\n\n/***/ 9:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/merge */ \"./node_modules/element-ui/lib/utils/merge.js\");\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvaW5wdXQuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvaW5wdXQuanM/ZjNhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDc0KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZ1wiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9zaGFyZWRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDc0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTM0M2RkNzc0JlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIF92bS50eXBlID09PSBcInRleHRhcmVhXCIgPyBcImVsLXRleHRhcmVhXCIgOiBcImVsLWlucHV0XCIsXG4gICAgICAgIF92bS5pbnB1dFNpemUgPyBcImVsLWlucHV0LS1cIiArIF92bS5pbnB1dFNpemUgOiBcIlwiLFxuICAgICAgICB7XG4gICAgICAgICAgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaW5wdXREaXNhYmxlZCxcbiAgICAgICAgICBcImlzLWV4Y2VlZFwiOiBfdm0uaW5wdXRFeGNlZWQsXG4gICAgICAgICAgXCJlbC1pbnB1dC1ncm91cFwiOiBfdm0uJHNsb3RzLnByZXBlbmQgfHwgX3ZtLiRzbG90cy5hcHBlbmQsXG4gICAgICAgICAgXCJlbC1pbnB1dC1ncm91cC0tYXBwZW5kXCI6IF92bS4kc2xvdHMuYXBwZW5kLFxuICAgICAgICAgIFwiZWwtaW5wdXQtZ3JvdXAtLXByZXBlbmRcIjogX3ZtLiRzbG90cy5wcmVwZW5kLFxuICAgICAgICAgIFwiZWwtaW5wdXQtLXByZWZpeFwiOiBfdm0uJHNsb3RzLnByZWZpeCB8fCBfdm0ucHJlZml4SWNvbixcbiAgICAgICAgICBcImVsLWlucHV0LS1zdWZmaXhcIjpcbiAgICAgICAgICAgIF92bS4kc2xvdHMuc3VmZml4IHx8XG4gICAgICAgICAgICBfdm0uc3VmZml4SWNvbiB8fFxuICAgICAgICAgICAgX3ZtLmNsZWFyYWJsZSB8fFxuICAgICAgICAgICAgX3ZtLnNob3dQYXNzd29yZFxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgb246IHtcbiAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgX3ZtLmhvdmVyaW5nID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBtb3VzZWxlYXZlOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBfdm0uaG92ZXJpbmcgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0udHlwZSAhPT0gXCJ0ZXh0YXJlYVwiXG4gICAgICAgID8gW1xuICAgICAgICAgICAgX3ZtLiRzbG90cy5wcmVwZW5kXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dC1ncm91cF9fcHJlcGVuZFwiIH0sXG4gICAgICAgICAgICAgICAgICBbX3ZtLl90KFwicHJlcGVuZFwiKV0sXG4gICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLnR5cGUgIT09IFwidGV4dGFyZWFcIlxuICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2lubmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4OiBfdm0udGFiaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBfdm0uc2hvd1Bhc3N3b3JkXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gX3ZtLnBhc3N3b3JkVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IF92bS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pbnB1dERpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6IF92bS5yZWFkb25seSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLmF1dG9Db21wbGV0ZSB8fCBfdm0uYXV0b2NvbXBsZXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uc3RhcnQ6IF92bS5oYW5kbGVDb21wb3NpdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb251cGRhdGU6IF92bS5oYW5kbGVDb21wb3NpdGlvblVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uZW5kOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25FbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcImlucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgIF92bS4kYXR0cnMsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLiRzbG90cy5wcmVmaXggfHwgX3ZtLnByZWZpeEljb25cbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fcHJlZml4XCIgfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFwicHJlZml4XCIpLFxuICAgICAgICAgICAgICAgICAgICBfdm0ucHJlZml4SWNvblxuICAgICAgICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M6IF92bS5wcmVmaXhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLmdldFN1ZmZpeFZpc2libGUoKVxuICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19zdWZmaXhcIiB9LCBbXG4gICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX3N1ZmZpeC1pbm5lclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAhX3ZtLnNob3dDbGVhciB8fFxuICAgICAgICAgICAgICAgICAgICAgICFfdm0uc2hvd1B3ZFZpc2libGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAhX3ZtLmlzV29yZExpbWl0VmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl90KFwic3VmZml4XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5zdWZmaXhJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtaW5wdXRfX2ljb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogX3ZtLnN1ZmZpeEljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd0NsZWFyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVsLWlucHV0X19pY29uIGVsLWljb24tY2lyY2xlLWNsb3NlIGVsLWlucHV0X19jbGVhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBfdm0uY2xlYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5zaG93UHdkVmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC1pbnB1dF9faWNvbiBlbC1pY29uLXZpZXcgZWwtaW5wdXRfX2NsZWFyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVQYXNzd29yZFZpc2libGUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdm0uX2UoKSxcbiAgICAgICAgICAgICAgICAgICAgICBfdm0uaXNXb3JkTGltaXRWaXNpYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19jb3VudFwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1pbnB1dF9fY291bnQtaW5uZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgICBcIiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3MoX3ZtLnRleHRMZW5ndGgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiL1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fcyhfdm0udXBwZXJMaW1pdCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIF92bS52YWxpZGF0ZVN0YXRlXG4gICAgICAgICAgICAgICAgICAgID8gX2MoXCJpXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzczogW1wiZWwtaW5wdXRfX3ZhbGlkYXRlSWNvblwiLCBfdm0udmFsaWRhdGVJY29uXVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgX3ZtLiRzbG90cy5hcHBlbmRcbiAgICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0LWdyb3VwX19hcHBlbmRcIiB9LFxuICAgICAgICAgICAgICAgICAgW192bS5fdChcImFwcGVuZFwiKV0sXG4gICAgICAgICAgICAgICAgICAyXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXVxuICAgICAgICA6IF9jKFxuICAgICAgICAgICAgXCJ0ZXh0YXJlYVwiLFxuICAgICAgICAgICAgX3ZtLl9iKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVmOiBcInRleHRhcmVhXCIsXG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtdGV4dGFyZWFfX2lubmVyXCIsXG4gICAgICAgICAgICAgICAgc3R5bGU6IF92bS50ZXh0YXJlYVN0eWxlLFxuICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICB0YWJpbmRleDogX3ZtLnRhYmluZGV4LFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5pbnB1dERpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgcmVhZG9ubHk6IF92bS5yZWFkb25seSxcbiAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogX3ZtLmF1dG9Db21wbGV0ZSB8fCBfdm0uYXV0b2NvbXBsZXRlLFxuICAgICAgICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IF92bS5sYWJlbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uc3RhcnQ6IF92bS5oYW5kbGVDb21wb3NpdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgICAgY29tcG9zaXRpb251cGRhdGU6IF92bS5oYW5kbGVDb21wb3NpdGlvblVwZGF0ZSxcbiAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uZW5kOiBfdm0uaGFuZGxlQ29tcG9zaXRpb25FbmQsXG4gICAgICAgICAgICAgICAgICBpbnB1dDogX3ZtLmhhbmRsZUlucHV0LFxuICAgICAgICAgICAgICAgICAgZm9jdXM6IF92bS5oYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICAgIGJsdXI6IF92bS5oYW5kbGVCbHVyLFxuICAgICAgICAgICAgICAgICAgY2hhbmdlOiBfdm0uaGFuZGxlQ2hhbmdlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcInRleHRhcmVhXCIsXG4gICAgICAgICAgICAgIF92bS4kYXR0cnMsXG4gICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgIF92bS5pc1dvcmRMaW1pdFZpc2libGUgJiYgX3ZtLnR5cGUgPT09IFwidGV4dGFyZWFcIlxuICAgICAgICA/IF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLWlucHV0X19jb3VudFwiIH0sIFtcbiAgICAgICAgICAgIF92bS5fdihfdm0uX3MoX3ZtLnRleHRMZW5ndGgpICsgXCIvXCIgKyBfdm0uX3MoX3ZtLnVwcGVyTGltaXQpKVxuICAgICAgICAgIF0pXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MzQzZGQ3NzQmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZ1wiXG52YXIgbWlncmF0aW5nXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xudmFyIG1pZ3JhdGluZ19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihtaWdyYXRpbmdfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9pbnB1dC9zcmMvY2FsY1RleHRhcmVhSGVpZ2h0LmpzXG52YXIgaGlkZGVuVGV4dGFyZWEgPSB2b2lkIDA7XG5cbnZhciBISURERU5fU1RZTEUgPSAnXFxuICBoZWlnaHQ6MCAhaW1wb3J0YW50O1xcbiAgdmlzaWJpbGl0eTpoaWRkZW4gIWltcG9ydGFudDtcXG4gIG92ZXJmbG93OmhpZGRlbiAhaW1wb3J0YW50O1xcbiAgcG9zaXRpb246YWJzb2x1dGUgIWltcG9ydGFudDtcXG4gIHotaW5kZXg6LTEwMDAgIWltcG9ydGFudDtcXG4gIHRvcDowICFpbXBvcnRhbnQ7XFxuICByaWdodDowICFpbXBvcnRhbnRcXG4nO1xuXG52YXIgQ09OVEVYVF9TVFlMRSA9IFsnbGV0dGVyLXNwYWNpbmcnLCAnbGluZS1oZWlnaHQnLCAncGFkZGluZy10b3AnLCAncGFkZGluZy1ib3R0b20nLCAnZm9udC1mYW1pbHknLCAnZm9udC13ZWlnaHQnLCAnZm9udC1zaXplJywgJ3RleHQtcmVuZGVyaW5nJywgJ3RleHQtdHJhbnNmb3JtJywgJ3dpZHRoJywgJ3RleHQtaW5kZW50JywgJ3BhZGRpbmctbGVmdCcsICdwYWRkaW5nLXJpZ2h0JywgJ2JvcmRlci13aWR0aCcsICdib3gtc2l6aW5nJ107XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZU5vZGVTdHlsaW5nKHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGFyZ2V0RWxlbWVudCk7XG5cbiAgdmFyIGJveFNpemluZyA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcblxuICB2YXIgcGFkZGluZ1NpemUgPSBwYXJzZUZsb2F0KHN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3BhZGRpbmctYm90dG9tJykpICsgcGFyc2VGbG9hdChzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLXRvcCcpKTtcblxuICB2YXIgYm9yZGVyU2l6ZSA9IHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLWJvdHRvbS13aWR0aCcpKSArIHBhcnNlRmxvYXQoc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZSgnYm9yZGVyLXRvcC13aWR0aCcpKTtcblxuICB2YXIgY29udGV4dFN0eWxlID0gQ09OVEVYVF9TVFlMRS5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gbmFtZSArICc6JyArIHN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG4gIH0pLmpvaW4oJzsnKTtcblxuICByZXR1cm4geyBjb250ZXh0U3R5bGU6IGNvbnRleHRTdHlsZSwgcGFkZGluZ1NpemU6IHBhZGRpbmdTaXplLCBib3JkZXJTaXplOiBib3JkZXJTaXplLCBib3hTaXppbmc6IGJveFNpemluZyB9O1xufVxuXG5mdW5jdGlvbiBjYWxjVGV4dGFyZWFIZWlnaHQodGFyZ2V0RWxlbWVudCkge1xuICB2YXIgbWluUm93cyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcbiAgdmFyIG1heFJvd3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgaWYgKCFoaWRkZW5UZXh0YXJlYSkge1xuICAgIGhpZGRlblRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhpZGRlblRleHRhcmVhKTtcbiAgfVxuXG4gIHZhciBfY2FsY3VsYXRlTm9kZVN0eWxpbmcgPSBjYWxjdWxhdGVOb2RlU3R5bGluZyh0YXJnZXRFbGVtZW50KSxcbiAgICAgIHBhZGRpbmdTaXplID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLnBhZGRpbmdTaXplLFxuICAgICAgYm9yZGVyU2l6ZSA9IF9jYWxjdWxhdGVOb2RlU3R5bGluZy5ib3JkZXJTaXplLFxuICAgICAgYm94U2l6aW5nID0gX2NhbGN1bGF0ZU5vZGVTdHlsaW5nLmJveFNpemluZyxcbiAgICAgIGNvbnRleHRTdHlsZSA9IF9jYWxjdWxhdGVOb2RlU3R5bGluZy5jb250ZXh0U3R5bGU7XG5cbiAgaGlkZGVuVGV4dGFyZWEuc2V0QXR0cmlidXRlKCdzdHlsZScsIGNvbnRleHRTdHlsZSArICc7JyArIEhJRERFTl9TVFlMRSk7XG4gIGhpZGRlblRleHRhcmVhLnZhbHVlID0gdGFyZ2V0RWxlbWVudC52YWx1ZSB8fCB0YXJnZXRFbGVtZW50LnBsYWNlaG9sZGVyIHx8ICcnO1xuXG4gIHZhciBoZWlnaHQgPSBoaWRkZW5UZXh0YXJlYS5zY3JvbGxIZWlnaHQ7XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAoYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCcpIHtcbiAgICBoZWlnaHQgPSBoZWlnaHQgKyBib3JkZXJTaXplO1xuICB9IGVsc2UgaWYgKGJveFNpemluZyA9PT0gJ2NvbnRlbnQtYm94Jykge1xuICAgIGhlaWdodCA9IGhlaWdodCAtIHBhZGRpbmdTaXplO1xuICB9XG5cbiAgaGlkZGVuVGV4dGFyZWEudmFsdWUgPSAnJztcbiAgdmFyIHNpbmdsZVJvd0hlaWdodCA9IGhpZGRlblRleHRhcmVhLnNjcm9sbEhlaWdodCAtIHBhZGRpbmdTaXplO1xuXG4gIGlmIChtaW5Sb3dzICE9PSBudWxsKSB7XG4gICAgdmFyIG1pbkhlaWdodCA9IHNpbmdsZVJvd0hlaWdodCAqIG1pblJvd3M7XG4gICAgaWYgKGJveFNpemluZyA9PT0gJ2JvcmRlci1ib3gnKSB7XG4gICAgICBtaW5IZWlnaHQgPSBtaW5IZWlnaHQgKyBwYWRkaW5nU2l6ZSArIGJvcmRlclNpemU7XG4gICAgfVxuICAgIGhlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgaGVpZ2h0KTtcbiAgICByZXN1bHQubWluSGVpZ2h0ID0gbWluSGVpZ2h0ICsgJ3B4JztcbiAgfVxuICBpZiAobWF4Um93cyAhPT0gbnVsbCkge1xuICAgIHZhciBtYXhIZWlnaHQgPSBzaW5nbGVSb3dIZWlnaHQgKiBtYXhSb3dzO1xuICAgIGlmIChib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgbWF4SGVpZ2h0ID0gbWF4SGVpZ2h0ICsgcGFkZGluZ1NpemUgKyBib3JkZXJTaXplO1xuICAgIH1cbiAgICBoZWlnaHQgPSBNYXRoLm1pbihtYXhIZWlnaHQsIGhlaWdodCk7XG4gIH1cbiAgcmVzdWx0LmhlaWdodCA9IGhlaWdodCArICdweCc7XG4gIGhpZGRlblRleHRhcmVhLnBhcmVudE5vZGUgJiYgaGlkZGVuVGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChoaWRkZW5UZXh0YXJlYSk7XG4gIGhpZGRlblRleHRhcmVhID0gbnVsbDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2VcIlxudmFyIG1lcmdlXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XG52YXIgbWVyZ2VfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4obWVyZ2VfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZFwiXG52YXIgc2hhcmVkXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgaW5wdXR2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxJbnB1dCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsSW5wdXQnLFxuXG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hLCBtaWdyYXRpbmdfZGVmYXVsdC5hXSxcblxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHRhcmVhQ2FsY1N0eWxlOiB7fSxcbiAgICAgIGhvdmVyaW5nOiBmYWxzZSxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlLFxuICAgICAgaXNDb21wb3Npbmc6IGZhbHNlLFxuICAgICAgcGFzc3dvcmRWaXNpYmxlOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICBwcm9wczoge1xuICAgIHZhbHVlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIHNpemU6IFN0cmluZyxcbiAgICByZXNpemU6IFN0cmluZyxcbiAgICBmb3JtOiBTdHJpbmcsXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgcmVhZG9ubHk6IEJvb2xlYW4sXG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3RleHQnXG4gICAgfSxcbiAgICBhdXRvc2l6ZToge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnb2ZmJ1xuICAgIH0sXG4gICAgLyoqIEBEZXByZWNhdGVkIGluIG5leHQgbWFqb3IgdmVyc2lvbiAqL1xuICAgIGF1dG9Db21wbGV0ZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgICBmYWxzZSAmJiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSxcbiAgICB2YWxpZGF0ZUV2ZW50OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgc3VmZml4SWNvbjogU3RyaW5nLFxuICAgIHByZWZpeEljb246IFN0cmluZyxcbiAgICBsYWJlbDogU3RyaW5nLFxuICAgIGNsZWFyYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICBzaG93UGFzc3dvcmQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgc2hvd1dvcmRMaW1pdDoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSxcbiAgICB0YWJpbmRleDogU3RyaW5nXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBfZWxGb3JtSXRlbVNpemU6IGZ1bmN0aW9uIF9lbEZvcm1JdGVtU2l6ZSgpIHtcbiAgICAgIHJldHVybiAodGhpcy5lbEZvcm1JdGVtIHx8IHt9KS5lbEZvcm1JdGVtU2l6ZTtcbiAgICB9LFxuICAgIHZhbGlkYXRlU3RhdGU6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbEZvcm1JdGVtID8gdGhpcy5lbEZvcm1JdGVtLnZhbGlkYXRlU3RhdGUgOiAnJztcbiAgICB9LFxuICAgIG5lZWRTdGF0dXNJY29uOiBmdW5jdGlvbiBuZWVkU3RhdHVzSWNvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsRm9ybSA/IHRoaXMuZWxGb3JtLnN0YXR1c0ljb24gOiBmYWxzZTtcbiAgICB9LFxuICAgIHZhbGlkYXRlSWNvbjogZnVuY3Rpb24gdmFsaWRhdGVJY29uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWRhdGluZzogJ2VsLWljb24tbG9hZGluZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdlbC1pY29uLWNpcmNsZS1jaGVjaycsXG4gICAgICAgIGVycm9yOiAnZWwtaWNvbi1jaXJjbGUtY2xvc2UnXG4gICAgICB9W3RoaXMudmFsaWRhdGVTdGF0ZV07XG4gICAgfSxcbiAgICB0ZXh0YXJlYVN0eWxlOiBmdW5jdGlvbiB0ZXh0YXJlYVN0eWxlKCkge1xuICAgICAgcmV0dXJuIG1lcmdlX2RlZmF1bHQoKSh7fSwgdGhpcy50ZXh0YXJlYUNhbGNTdHlsZSwgeyByZXNpemU6IHRoaXMucmVzaXplIH0pO1xuICAgIH0sXG4gICAgaW5wdXRTaXplOiBmdW5jdGlvbiBpbnB1dFNpemUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaXplIHx8IHRoaXMuX2VsRm9ybUl0ZW1TaXplIHx8ICh0aGlzLiRFTEVNRU5UIHx8IHt9KS5zaXplO1xuICAgIH0sXG4gICAgaW5wdXREaXNhYmxlZDogZnVuY3Rpb24gaW5wdXREaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8ICh0aGlzLmVsRm9ybSB8fCB7fSkuZGlzYWJsZWQ7XG4gICAgfSxcbiAgICBuYXRpdmVJbnB1dFZhbHVlOiBmdW5jdGlvbiBuYXRpdmVJbnB1dFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgfHwgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcodGhpcy52YWx1ZSk7XG4gICAgfSxcbiAgICBzaG93Q2xlYXI6IGZ1bmN0aW9uIHNob3dDbGVhcigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiAhdGhpcy5pbnB1dERpc2FibGVkICYmICF0aGlzLnJlYWRvbmx5ICYmIHRoaXMubmF0aXZlSW5wdXRWYWx1ZSAmJiAodGhpcy5mb2N1c2VkIHx8IHRoaXMuaG92ZXJpbmcpO1xuICAgIH0sXG4gICAgc2hvd1B3ZFZpc2libGU6IGZ1bmN0aW9uIHNob3dQd2RWaXNpYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1Bhc3N3b3JkICYmICF0aGlzLmlucHV0RGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkgJiYgKCEhdGhpcy5uYXRpdmVJbnB1dFZhbHVlIHx8IHRoaXMuZm9jdXNlZCk7XG4gICAgfSxcbiAgICBpc1dvcmRMaW1pdFZpc2libGU6IGZ1bmN0aW9uIGlzV29yZExpbWl0VmlzaWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNob3dXb3JkTGltaXQgJiYgdGhpcy4kYXR0cnMubWF4bGVuZ3RoICYmICh0aGlzLnR5cGUgPT09ICd0ZXh0JyB8fCB0aGlzLnR5cGUgPT09ICd0ZXh0YXJlYScpICYmICF0aGlzLmlucHV0RGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMuc2hvd1Bhc3N3b3JkO1xuICAgIH0sXG4gICAgdXBwZXJMaW1pdDogZnVuY3Rpb24gdXBwZXJMaW1pdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRhdHRycy5tYXhsZW5ndGg7XG4gICAgfSxcbiAgICB0ZXh0TGVuZ3RoOiBmdW5jdGlvbiB0ZXh0TGVuZ3RoKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWUpLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICh0aGlzLnZhbHVlIHx8ICcnKS5sZW5ndGg7XG4gICAgfSxcbiAgICBpbnB1dEV4Y2VlZDogZnVuY3Rpb24gaW5wdXRFeGNlZWQoKSB7XG4gICAgICAvLyBzaG93IGV4Y2VlZCBzdHlsZSBpZiBsZW5ndGggb2YgaW5pdGlhbCB2YWx1ZSBncmVhdGVyIHRoZW4gbWF4bGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy5pc1dvcmRMaW1pdFZpc2libGUgJiYgdGhpcy50ZXh0TGVuZ3RoID4gdGhpcy51cHBlckxpbWl0O1xuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMucmVzaXplVGV4dGFyZWEpO1xuICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgW3ZhbF0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBuYXRpdmUgaW5wdXQgdmFsdWUgaXMgc2V0IGV4cGxpY2l0bHlcbiAgICAvLyBkbyBub3QgdXNlIHYtbW9kZWwgLyA6dmFsdWUgaW4gdGVtcGxhdGVcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE0NTIxXG4gICAgbmF0aXZlSW5wdXRWYWx1ZTogZnVuY3Rpb24gbmF0aXZlSW5wdXRWYWx1ZSgpIHtcbiAgICAgIHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgpO1xuICAgIH0sXG5cbiAgICAvLyB3aGVuIGNoYW5nZSBiZXR3ZWVuIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4sXG4gICAgLy8gdXBkYXRlIERPTSBkZXBlbmRlbnQgdmFsdWUgYW5kIHN0eWxlc1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FbGVtZUZFL2VsZW1lbnQvaXNzdWVzLzE0ODU3XG4gICAgdHlwZTogZnVuY3Rpb24gdHlwZSgpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSgpO1xuICAgICAgICBfdGhpcy5yZXNpemVUZXh0YXJlYSgpO1xuICAgICAgICBfdGhpcy51cGRhdGVJY29uT2Zmc2V0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzOiBmdW5jdGlvbiBmb2N1cygpIHtcbiAgICAgIHRoaXMuZ2V0SW5wdXQoKS5mb2N1cygpO1xuICAgIH0sXG4gICAgYmx1cjogZnVuY3Rpb24gYmx1cigpIHtcbiAgICAgIHRoaXMuZ2V0SW5wdXQoKS5ibHVyKCk7XG4gICAgfSxcbiAgICBnZXRNaWdyYXRpbmdDb25maWc6IGZ1bmN0aW9uIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgJ2ljb24nOiAnaWNvbiBpcyByZW1vdmVkLCB1c2Ugc3VmZml4LWljb24gLyBwcmVmaXgtaWNvbiBpbnN0ZWFkLicsXG4gICAgICAgICAgJ29uLWljb24tY2xpY2snOiAnb24taWNvbi1jbGljayBpcyByZW1vdmVkLidcbiAgICAgICAgfSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgJ2NsaWNrJzogJ2NsaWNrIGlzIHJlbW92ZWQuJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sXG4gICAgaGFuZGxlQmx1cjogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLiRlbWl0KCdibHVyJywgZXZlbnQpO1xuICAgICAgaWYgKHRoaXMudmFsaWRhdGVFdmVudCkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uYmx1cicsIFt0aGlzLnZhbHVlXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3Q6IGZ1bmN0aW9uIHNlbGVjdCgpIHtcbiAgICAgIHRoaXMuZ2V0SW5wdXQoKS5zZWxlY3QoKTtcbiAgICB9LFxuICAgIHJlc2l6ZVRleHRhcmVhOiBmdW5jdGlvbiByZXNpemVUZXh0YXJlYSgpIHtcbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgdmFyIGF1dG9zaXplID0gdGhpcy5hdXRvc2l6ZSxcbiAgICAgICAgICB0eXBlID0gdGhpcy50eXBlO1xuXG4gICAgICBpZiAodHlwZSAhPT0gJ3RleHRhcmVhJykgcmV0dXJuO1xuICAgICAgaWYgKCFhdXRvc2l6ZSkge1xuICAgICAgICB0aGlzLnRleHRhcmVhQ2FsY1N0eWxlID0ge1xuICAgICAgICAgIG1pbkhlaWdodDogY2FsY1RleHRhcmVhSGVpZ2h0KHRoaXMuJHJlZnMudGV4dGFyZWEpLm1pbkhlaWdodFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgbWluUm93cyA9IGF1dG9zaXplLm1pblJvd3M7XG4gICAgICB2YXIgbWF4Um93cyA9IGF1dG9zaXplLm1heFJvd3M7XG5cbiAgICAgIHRoaXMudGV4dGFyZWFDYWxjU3R5bGUgPSBjYWxjVGV4dGFyZWFIZWlnaHQodGhpcy4kcmVmcy50ZXh0YXJlYSwgbWluUm93cywgbWF4Um93cyk7XG4gICAgfSxcbiAgICBzZXROYXRpdmVJbnB1dFZhbHVlOiBmdW5jdGlvbiBzZXROYXRpdmVJbnB1dFZhbHVlKCkge1xuICAgICAgdmFyIGlucHV0ID0gdGhpcy5nZXRJbnB1dCgpO1xuICAgICAgaWYgKCFpbnB1dCkgcmV0dXJuO1xuICAgICAgaWYgKGlucHV0LnZhbHVlID09PSB0aGlzLm5hdGl2ZUlucHV0VmFsdWUpIHJldHVybjtcbiAgICAgIGlucHV0LnZhbHVlID0gdGhpcy5uYXRpdmVJbnB1dFZhbHVlO1xuICAgIH0sXG4gICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgdGhpcy4kZW1pdCgnZm9jdXMnLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVDb21wb3NpdGlvblN0YXJ0OiBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvblN0YXJ0KGV2ZW50KSB7XG4gICAgICB0aGlzLiRlbWl0KCdjb21wb3NpdGlvbnN0YXJ0JywgZXZlbnQpO1xuICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IHRydWU7XG4gICAgfSxcbiAgICBoYW5kbGVDb21wb3NpdGlvblVwZGF0ZTogZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb25VcGRhdGUoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NvbXBvc2l0aW9udXBkYXRlJywgZXZlbnQpO1xuICAgICAgdmFyIHRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICB2YXIgbGFzdENoYXJhY3RlciA9IHRleHRbdGV4dC5sZW5ndGggLSAxXSB8fCAnJztcbiAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSAhT2JqZWN0KHNoYXJlZF9bXCJpc0tvcmVhblwiXSkobGFzdENoYXJhY3Rlcik7XG4gICAgfSxcbiAgICBoYW5kbGVDb21wb3NpdGlvbkVuZDogZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb25FbmQoZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NvbXBvc2l0aW9uZW5kJywgZXZlbnQpO1xuICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcpIHtcbiAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhbmRsZUlucHV0KGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUlucHV0OiBmdW5jdGlvbiBoYW5kbGVJbnB1dChldmVudCkge1xuICAgICAgLy8gc2hvdWxkIG5vdCBlbWl0IGlucHV0IGR1cmluZyBjb21wb3NpdGlvblxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xMDUxNlxuICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcpIHJldHVybjtcblxuICAgICAgLy8gaGFjayBmb3IgaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvODU0OFxuICAgICAgLy8gc2hvdWxkIHJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgd2hlbiB3ZSBkb24ndCBzdXBwb3J0IElFXG4gICAgICBpZiAoZXZlbnQudGFyZ2V0LnZhbHVlID09PSB0aGlzLm5hdGl2ZUlucHV0VmFsdWUpIHJldHVybjtcblxuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBldmVudC50YXJnZXQudmFsdWUpO1xuXG4gICAgICAvLyBlbnN1cmUgbmF0aXZlIGlucHV0IHZhbHVlIGlzIGNvbnRyb2xsZWRcbiAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL0VsZW1lRkUvZWxlbWVudC9pc3N1ZXMvMTI4NTBcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMuc2V0TmF0aXZlSW5wdXRWYWx1ZSk7XG4gICAgfSxcbiAgICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShldmVudCkge1xuICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICB9LFxuICAgIGNhbGNJY29uT2Zmc2V0OiBmdW5jdGlvbiBjYWxjSWNvbk9mZnNldChwbGFjZSkge1xuICAgICAgdmFyIGVsTGlzdCA9IFtdLnNsaWNlLmNhbGwodGhpcy4kZWwucXVlcnlTZWxlY3RvckFsbCgnLmVsLWlucHV0X18nICsgcGxhY2UpIHx8IFtdKTtcbiAgICAgIGlmICghZWxMaXN0Lmxlbmd0aCkgcmV0dXJuO1xuICAgICAgdmFyIGVsID0gbnVsbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChlbExpc3RbaV0ucGFyZW50Tm9kZSA9PT0gdGhpcy4kZWwpIHtcbiAgICAgICAgICBlbCA9IGVsTGlzdFtpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgICAgdmFyIHBlbmRhbnRNYXAgPSB7XG4gICAgICAgIHN1ZmZpeDogJ2FwcGVuZCcsXG4gICAgICAgIHByZWZpeDogJ3ByZXBlbmQnXG4gICAgICB9O1xuXG4gICAgICB2YXIgcGVuZGFudCA9IHBlbmRhbnRNYXBbcGxhY2VdO1xuICAgICAgaWYgKHRoaXMuJHNsb3RzW3BlbmRhbnRdKSB7XG4gICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGVYKCcgKyAocGxhY2UgPT09ICdzdWZmaXgnID8gJy0nIDogJycpICsgdGhpcy4kZWwucXVlcnlTZWxlY3RvcignLmVsLWlucHV0LWdyb3VwX18nICsgcGVuZGFudCkub2Zmc2V0V2lkdGggKyAncHgpJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVwZGF0ZUljb25PZmZzZXQ6IGZ1bmN0aW9uIHVwZGF0ZUljb25PZmZzZXQoKSB7XG4gICAgICB0aGlzLmNhbGNJY29uT2Zmc2V0KCdwcmVmaXgnKTtcbiAgICAgIHRoaXMuY2FsY0ljb25PZmZzZXQoJ3N1ZmZpeCcpO1xuICAgIH0sXG4gICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCAnJyk7XG4gICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCAnJyk7XG4gICAgICB0aGlzLiRlbWl0KCdjbGVhcicpO1xuICAgIH0sXG4gICAgaGFuZGxlUGFzc3dvcmRWaXNpYmxlOiBmdW5jdGlvbiBoYW5kbGVQYXNzd29yZFZpc2libGUoKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgdGhpcy5wYXNzd29yZFZpc2libGUgPSAhdGhpcy5wYXNzd29yZFZpc2libGU7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBnZXRJbnB1dDogZnVuY3Rpb24gZ2V0SW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dCB8fCB0aGlzLiRyZWZzLnRleHRhcmVhO1xuICAgIH0sXG4gICAgZ2V0U3VmZml4VmlzaWJsZTogZnVuY3Rpb24gZ2V0U3VmZml4VmlzaWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzbG90cy5zdWZmaXggfHwgdGhpcy5zdWZmaXhJY29uIHx8IHRoaXMuc2hvd0NsZWFyIHx8IHRoaXMuc2hvd1Bhc3N3b3JkIHx8IHRoaXMuaXNXb3JkTGltaXRWaXNpYmxlIHx8IHRoaXMudmFsaWRhdGVTdGF0ZSAmJiB0aGlzLm5lZWRTdGF0dXNJY29uO1xuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkge1xuICAgIHRoaXMuJG9uKCdpbnB1dFNlbGVjdCcsIHRoaXMuc2VsZWN0KTtcbiAgfSxcbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHtcbiAgICB0aGlzLnNldE5hdGl2ZUlucHV0VmFsdWUoKTtcbiAgICB0aGlzLnJlc2l6ZVRleHRhcmVhKCk7XG4gICAgdGhpcy51cGRhdGVJY29uT2Zmc2V0KCk7XG4gIH0sXG4gIHVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZGF0ZWQoKSB7XG4gICAgdGhpcy4kbmV4dFRpY2sodGhpcy51cGRhdGVJY29uT2Zmc2V0KTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX2lucHV0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKGlucHV0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1xudmFyIGNvbXBvbmVudE5vcm1hbGl6ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL2lucHV0L3NyYy9pbnB1dC52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19pbnB1dHZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9pbnB1dC9zcmMvaW5wdXQudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIGlucHV0ID0gKGNvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvaW5wdXQvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaW5wdXQuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChpbnB1dC5uYW1lLCBpbnB1dCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19pbnB1dCA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKGlucHV0KTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDk6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL21lcmdlXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/input.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/locale/format.js":
- /*!******************************************************!*\
- !*** ./node_modules/element-ui/lib/locale/format.js ***!
- \******************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.default = function (Vue) {\n\n /**\n * template\n *\n * @param {String} string\n * @param {Array} ...args\n * @return {String}\n */\n\n function template(string) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (args.length === 1 && _typeof(args[0]) === 'object') {\n args = args[0];\n }\n\n if (!args || !args.hasOwnProperty) {\n args = {};\n }\n\n return string.replace(RE_NARGS, function (match, prefix, i, index) {\n var result = void 0;\n\n if (string[index - 1] === '{' && string[index + match.length] === '}') {\n return i;\n } else {\n result = (0, _util.hasOwn)(args, i) ? args[i] : null;\n if (result === null || result === undefined) {\n return '';\n }\n\n return result;\n }\n });\n }\n\n return template;\n};\n\nvar _util = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\nvar RE_NARGS = /(%|)\\{([0-9a-zA-Z_]+)\\}/g;\n/**\n * String format template\n * - Inspired:\n * https://github.com/Matt-Esch/string-template/index.js\n *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2Zvcm1hdC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9sb2NhbGUvZm9ybWF0LmpzPzlkN2UiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChWdWUpIHtcblxuICAvKipcbiAgICogdGVtcGxhdGVcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZ1xuICAgKiBAcGFyYW0ge0FycmF5fSAuLi5hcmdzXG4gICAqIEByZXR1cm4ge1N0cmluZ31cbiAgICovXG5cbiAgZnVuY3Rpb24gdGVtcGxhdGUoc3RyaW5nKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgX3R5cGVvZihhcmdzWzBdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGFyZ3MgPSBhcmdzWzBdO1xuICAgIH1cblxuICAgIGlmICghYXJncyB8fCAhYXJncy5oYXNPd25Qcm9wZXJ0eSkge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShSRV9OQVJHUywgZnVuY3Rpb24gKG1hdGNoLCBwcmVmaXgsIGksIGluZGV4KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gdm9pZCAwO1xuXG4gICAgICBpZiAoc3RyaW5nW2luZGV4IC0gMV0gPT09ICd7JyAmJiBzdHJpbmdbaW5kZXggKyBtYXRjaC5sZW5ndGhdID09PSAnfScpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSAoMCwgX3V0aWwuaGFzT3duKShhcmdzLCBpKSA/IGFyZ3NbaV0gOiBudWxsO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0ZW1wbGF0ZTtcbn07XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwnKTtcblxudmFyIFJFX05BUkdTID0gLyglfClcXHsoWzAtOWEtekEtWl9dKylcXH0vZztcbi8qKlxuICogIFN0cmluZyBmb3JtYXQgdGVtcGxhdGVcbiAqICAtIEluc3BpcmVkOlxuICogICAgaHR0cHM6Ly9naXRodWIuY29tL01hdHQtRXNjaC9zdHJpbmctdGVtcGxhdGUvaW5kZXguanNcbiAqLyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/locale/format.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/locale/index.js":
- /*!*****************************************************!*\
- !*** ./node_modules/element-ui/lib/locale/index.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.i18n = exports.use = exports.t = undefined;\n\nvar _zhCN = __webpack_require__(/*! element-ui/lib/locale/lang/zh-CN */ \"./node_modules/element-ui/lib/locale/lang/zh-CN.js\");\n\nvar _zhCN2 = _interopRequireDefault(_zhCN);\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _deepmerge = __webpack_require__(/*! deepmerge */ \"./node_modules/deepmerge/dist/cjs.js\");\n\nvar _deepmerge2 = _interopRequireDefault(_deepmerge);\n\nvar _format = __webpack_require__(/*! ./format */ \"./node_modules/element-ui/lib/locale/format.js\");\n\nvar _format2 = _interopRequireDefault(_format);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar format = (0, _format2.default)(_vue2.default);\nvar lang = _zhCN2.default;\nvar merged = false;\nvar i18nHandler = function i18nHandler() {\n var vuei18n = Object.getPrototypeOf(this || _vue2.default).$t;\n if (typeof vuei18n === 'function' && !!_vue2.default.locale) {\n if (!merged) {\n merged = true;\n _vue2.default.locale(_vue2.default.config.lang, (0, _deepmerge2.default)(lang, _vue2.default.locale(_vue2.default.config.lang) || {}, { clone: true }));\n }\n return vuei18n.apply(this, arguments);\n }\n};\n\nvar t = exports.t = function t(path, options) {\n var value = i18nHandler.apply(this, arguments);\n if (value !== null && value !== undefined) return value;\n\n var array = path.split('.');\n var current = lang;\n\n for (var i = 0, j = array.length; i < j; i++) {\n var property = array[i];\n value = current[property];\n if (i === j - 1) return format(value, options);\n if (!value) return '';\n current = value;\n }\n return '';\n};\n\nvar use = exports.use = function use(l) {\n lang = l || lang;\n};\n\nvar i18n = exports.i18n = function i18n(fn) {\n i18nHandler = fn || i18nHandler;\n};\n\nexports.default = { use: use, t: t, i18n: i18n };//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2luZGV4LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL2xvY2FsZS9pbmRleC5qcz80ODk3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuaTE4biA9IGV4cG9ydHMudXNlID0gZXhwb3J0cy50ID0gdW5kZWZpbmVkO1xuXG52YXIgX3poQ04gPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi9sb2NhbGUvbGFuZy96aC1DTicpO1xuXG52YXIgX3poQ04yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfemhDTik7XG5cbnZhciBfdnVlID0gcmVxdWlyZSgndnVlJyk7XG5cbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cbnZhciBfZGVlcG1lcmdlID0gcmVxdWlyZSgnZGVlcG1lcmdlJyk7XG5cbnZhciBfZGVlcG1lcmdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlZXBtZXJnZSk7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZSgnLi9mb3JtYXQnKTtcblxudmFyIF9mb3JtYXQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZm9ybWF0KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGZvcm1hdCA9ICgwLCBfZm9ybWF0Mi5kZWZhdWx0KShfdnVlMi5kZWZhdWx0KTtcbnZhciBsYW5nID0gX3poQ04yLmRlZmF1bHQ7XG52YXIgbWVyZ2VkID0gZmFsc2U7XG52YXIgaTE4bkhhbmRsZXIgPSBmdW5jdGlvbiBpMThuSGFuZGxlcigpIHtcbiAgdmFyIHZ1ZWkxOG4gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyB8fCBfdnVlMi5kZWZhdWx0KS4kdDtcbiAgaWYgKHR5cGVvZiB2dWVpMThuID09PSAnZnVuY3Rpb24nICYmICEhX3Z1ZTIuZGVmYXVsdC5sb2NhbGUpIHtcbiAgICBpZiAoIW1lcmdlZCkge1xuICAgICAgbWVyZ2VkID0gdHJ1ZTtcbiAgICAgIF92dWUyLmRlZmF1bHQubG9jYWxlKF92dWUyLmRlZmF1bHQuY29uZmlnLmxhbmcsICgwLCBfZGVlcG1lcmdlMi5kZWZhdWx0KShsYW5nLCBfdnVlMi5kZWZhdWx0LmxvY2FsZShfdnVlMi5kZWZhdWx0LmNvbmZpZy5sYW5nKSB8fCB7fSwgeyBjbG9uZTogdHJ1ZSB9KSk7XG4gICAgfVxuICAgIHJldHVybiB2dWVpMThuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbn07XG5cbnZhciB0ID0gZXhwb3J0cy50ID0gZnVuY3Rpb24gdChwYXRoLCBvcHRpb25zKSB7XG4gIHZhciB2YWx1ZSA9IGkxOG5IYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdmFsdWU7XG5cbiAgdmFyIGFycmF5ID0gcGF0aC5zcGxpdCgnLicpO1xuICB2YXIgY3VycmVudCA9IGxhbmc7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGogPSBhcnJheS5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgcHJvcGVydHkgPSBhcnJheVtpXTtcbiAgICB2YWx1ZSA9IGN1cnJlbnRbcHJvcGVydHldO1xuICAgIGlmIChpID09PSBqIC0gMSkgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgIGN1cnJlbnQgPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gJyc7XG59O1xuXG52YXIgdXNlID0gZXhwb3J0cy51c2UgPSBmdW5jdGlvbiB1c2UobCkge1xuICBsYW5nID0gbCB8fCBsYW5nO1xufTtcblxudmFyIGkxOG4gPSBleHBvcnRzLmkxOG4gPSBmdW5jdGlvbiBpMThuKGZuKSB7XG4gIGkxOG5IYW5kbGVyID0gZm4gfHwgaTE4bkhhbmRsZXI7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSB7IHVzZTogdXNlLCB0OiB0LCBpMThuOiBpMThuIH07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/locale/index.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/locale/lang/zh-CN.js":
- /*!**********************************************************!*\
- !*** ./node_modules/element-ui/lib/locale/lang/zh-CN.js ***!
- \**********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.default = {\n el: {\n colorpicker: {\n confirm: '确定',\n clear: '清空'\n },\n datepicker: {\n now: '此刻',\n today: '今天',\n cancel: '取消',\n clear: '清空',\n confirm: '确定',\n selectDate: '选择日期',\n selectTime: '选择时间',\n startDate: '开始日期',\n startTime: '开始时间',\n endDate: '结束日期',\n endTime: '结束时间',\n prevYear: '前一年',\n nextYear: '后一年',\n prevMonth: '上个月',\n nextMonth: '下个月',\n year: '年',\n month1: '1 月',\n month2: '2 月',\n month3: '3 月',\n month4: '4 月',\n month5: '5 月',\n month6: '6 月',\n month7: '7 月',\n month8: '8 月',\n month9: '9 月',\n month10: '10 月',\n month11: '11 月',\n month12: '12 月',\n // week: '周次',\n weeks: {\n sun: '日',\n mon: '一',\n tue: '二',\n wed: '三',\n thu: '四',\n fri: '五',\n sat: '六'\n },\n months: {\n jan: '一月',\n feb: '二月',\n mar: '三月',\n apr: '四月',\n may: '五月',\n jun: '六月',\n jul: '七月',\n aug: '八月',\n sep: '九月',\n oct: '十月',\n nov: '十一月',\n dec: '十二月'\n }\n },\n select: {\n loading: '加载中',\n noMatch: '无匹配数据',\n noData: '无数据',\n placeholder: '请选择'\n },\n cascader: {\n noMatch: '无匹配数据',\n loading: '加载中',\n placeholder: '请选择',\n noData: '暂无数据'\n },\n pagination: {\n goto: '前往',\n pagesize: '条/页',\n total: '共 {total} 条',\n pageClassifier: '页'\n },\n messagebox: {\n title: '提示',\n confirm: '确定',\n cancel: '取消',\n error: '输入的数据不合法!'\n },\n upload: {\n deleteTip: '按 delete 键可删除',\n delete: '删除',\n preview: '查看图片',\n continue: '继续上传'\n },\n table: {\n emptyText: '暂无数据',\n confirmFilter: '筛选',\n resetFilter: '重置',\n clearFilter: '全部',\n sumText: '合计'\n },\n tree: {\n emptyText: '暂无数据'\n },\n transfer: {\n noMatch: '无匹配数据',\n noData: '无数据',\n titles: ['列表 1', '列表 2'],\n filterPlaceholder: '请输入搜索内容',\n noCheckedFormat: '共 {total} 项',\n hasCheckedFormat: '已选 {checked}/{total} 项'\n },\n image: {\n error: '加载失败'\n },\n pageHeader: {\n title: '返回'\n },\n popconfirm: {\n confirmButtonText: '确定',\n cancelButtonText: '取消'\n },\n empty: {\n description: '暂无数据'\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2xhbmcvemgtQ04uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbG9jYWxlL2xhbmcvemgtQ04uanM/ZjBkOSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIGVsOiB7XG4gICAgY29sb3JwaWNrZXI6IHtcbiAgICAgIGNvbmZpcm06ICfnoa7lrponLFxuICAgICAgY2xlYXI6ICfmuIXnqbonXG4gICAgfSxcbiAgICBkYXRlcGlja2VyOiB7XG4gICAgICBub3c6ICfmraTliLsnLFxuICAgICAgdG9kYXk6ICfku4rlpKknLFxuICAgICAgY2FuY2VsOiAn5Y+W5raIJyxcbiAgICAgIGNsZWFyOiAn5riF56m6JyxcbiAgICAgIGNvbmZpcm06ICfnoa7lrponLFxuICAgICAgc2VsZWN0RGF0ZTogJ+mAieaLqeaXpeacnycsXG4gICAgICBzZWxlY3RUaW1lOiAn6YCJ5oup5pe26Ze0JyxcbiAgICAgIHN0YXJ0RGF0ZTogJ+W8gOWni+aXpeacnycsXG4gICAgICBzdGFydFRpbWU6ICflvIDlp4vml7bpl7QnLFxuICAgICAgZW5kRGF0ZTogJ+e7k+adn+aXpeacnycsXG4gICAgICBlbmRUaW1lOiAn57uT5p2f5pe26Ze0JyxcbiAgICAgIHByZXZZZWFyOiAn5YmN5LiA5bm0JyxcbiAgICAgIG5leHRZZWFyOiAn5ZCO5LiA5bm0JyxcbiAgICAgIHByZXZNb250aDogJ+S4iuS4quaciCcsXG4gICAgICBuZXh0TW9udGg6ICfkuIvkuKrmnIgnLFxuICAgICAgeWVhcjogJ+W5tCcsXG4gICAgICBtb250aDE6ICcxIOaciCcsXG4gICAgICBtb250aDI6ICcyIOaciCcsXG4gICAgICBtb250aDM6ICczIOaciCcsXG4gICAgICBtb250aDQ6ICc0IOaciCcsXG4gICAgICBtb250aDU6ICc1IOaciCcsXG4gICAgICBtb250aDY6ICc2IOaciCcsXG4gICAgICBtb250aDc6ICc3IOaciCcsXG4gICAgICBtb250aDg6ICc4IOaciCcsXG4gICAgICBtb250aDk6ICc5IOaciCcsXG4gICAgICBtb250aDEwOiAnMTAg5pyIJyxcbiAgICAgIG1vbnRoMTE6ICcxMSDmnIgnLFxuICAgICAgbW9udGgxMjogJzEyIOaciCcsXG4gICAgICAvLyB3ZWVrOiAn5ZGo5qyhJyxcbiAgICAgIHdlZWtzOiB7XG4gICAgICAgIHN1bjogJ+aXpScsXG4gICAgICAgIG1vbjogJ+S4gCcsXG4gICAgICAgIHR1ZTogJ+S6jCcsXG4gICAgICAgIHdlZDogJ+S4iScsXG4gICAgICAgIHRodTogJ+WbmycsXG4gICAgICAgIGZyaTogJ+S6lCcsXG4gICAgICAgIHNhdDogJ+WFrSdcbiAgICAgIH0sXG4gICAgICBtb250aHM6IHtcbiAgICAgICAgamFuOiAn5LiA5pyIJyxcbiAgICAgICAgZmViOiAn5LqM5pyIJyxcbiAgICAgICAgbWFyOiAn5LiJ5pyIJyxcbiAgICAgICAgYXByOiAn5Zub5pyIJyxcbiAgICAgICAgbWF5OiAn5LqU5pyIJyxcbiAgICAgICAganVuOiAn5YWt5pyIJyxcbiAgICAgICAganVsOiAn5LiD5pyIJyxcbiAgICAgICAgYXVnOiAn5YWr5pyIJyxcbiAgICAgICAgc2VwOiAn5Lmd5pyIJyxcbiAgICAgICAgb2N0OiAn5Y2B5pyIJyxcbiAgICAgICAgbm92OiAn5Y2B5LiA5pyIJyxcbiAgICAgICAgZGVjOiAn5Y2B5LqM5pyIJ1xuICAgICAgfVxuICAgIH0sXG4gICAgc2VsZWN0OiB7XG4gICAgICBsb2FkaW5nOiAn5Yqg6L295LitJyxcbiAgICAgIG5vTWF0Y2g6ICfml6DljLnphY3mlbDmja4nLFxuICAgICAgbm9EYXRhOiAn5peg5pWw5o2uJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAn6K+36YCJ5oupJ1xuICAgIH0sXG4gICAgY2FzY2FkZXI6IHtcbiAgICAgIG5vTWF0Y2g6ICfml6DljLnphY3mlbDmja4nLFxuICAgICAgbG9hZGluZzogJ+WKoOi9veS4rScsXG4gICAgICBwbGFjZWhvbGRlcjogJ+ivt+mAieaLqScsXG4gICAgICBub0RhdGE6ICfmmoLml6DmlbDmja4nXG4gICAgfSxcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBnb3RvOiAn5YmN5b6AJyxcbiAgICAgIHBhZ2VzaXplOiAn5p2hL+mhtScsXG4gICAgICB0b3RhbDogJ+WFsSB7dG90YWx9IOadoScsXG4gICAgICBwYWdlQ2xhc3NpZmllcjogJ+mhtSdcbiAgICB9LFxuICAgIG1lc3NhZ2Vib3g6IHtcbiAgICAgIHRpdGxlOiAn5o+Q56S6JyxcbiAgICAgIGNvbmZpcm06ICfnoa7lrponLFxuICAgICAgY2FuY2VsOiAn5Y+W5raIJyxcbiAgICAgIGVycm9yOiAn6L6T5YWl55qE5pWw5o2u5LiN5ZCI5rOVISdcbiAgICB9LFxuICAgIHVwbG9hZDoge1xuICAgICAgZGVsZXRlVGlwOiAn5oyJIGRlbGV0ZSDplK7lj6/liKDpmaQnLFxuICAgICAgZGVsZXRlOiAn5Yig6ZmkJyxcbiAgICAgIHByZXZpZXc6ICfmn6XnnIvlm77niYcnLFxuICAgICAgY29udGludWU6ICfnu6fnu63kuIrkvKAnXG4gICAgfSxcbiAgICB0YWJsZToge1xuICAgICAgZW1wdHlUZXh0OiAn5pqC5peg5pWw5o2uJyxcbiAgICAgIGNvbmZpcm1GaWx0ZXI6ICfnrZvpgIknLFxuICAgICAgcmVzZXRGaWx0ZXI6ICfph43nva4nLFxuICAgICAgY2xlYXJGaWx0ZXI6ICflhajpg6gnLFxuICAgICAgc3VtVGV4dDogJ+WQiOiuoSdcbiAgICB9LFxuICAgIHRyZWU6IHtcbiAgICAgIGVtcHR5VGV4dDogJ+aaguaXoOaVsOaNridcbiAgICB9LFxuICAgIHRyYW5zZmVyOiB7XG4gICAgICBub01hdGNoOiAn5peg5Yy56YWN5pWw5o2uJyxcbiAgICAgIG5vRGF0YTogJ+aXoOaVsOaNricsXG4gICAgICB0aXRsZXM6IFsn5YiX6KGoIDEnLCAn5YiX6KGoIDInXSxcbiAgICAgIGZpbHRlclBsYWNlaG9sZGVyOiAn6K+36L6T5YWl5pCc57Si5YaF5a65JyxcbiAgICAgIG5vQ2hlY2tlZEZvcm1hdDogJ+WFsSB7dG90YWx9IOmhuScsXG4gICAgICBoYXNDaGVja2VkRm9ybWF0OiAn5bey6YCJIHtjaGVja2VkfS97dG90YWx9IOmhuSdcbiAgICB9LFxuICAgIGltYWdlOiB7XG4gICAgICBlcnJvcjogJ+WKoOi9veWksei0pSdcbiAgICB9LFxuICAgIHBhZ2VIZWFkZXI6IHtcbiAgICAgIHRpdGxlOiAn6L+U5ZueJ1xuICAgIH0sXG4gICAgcG9wY29uZmlybToge1xuICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICfnoa7lrponLFxuICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCdcbiAgICB9LFxuICAgIGVtcHR5OiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ+aaguaXoOaVsOaNridcbiAgICB9XG4gIH1cbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/locale/lang/zh-CN.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/mixins/emitter.js":
- /*!*******************************************************!*\
- !*** ./node_modules/element-ui/lib/mixins/emitter.js ***!
- \*******************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nfunction _broadcast(componentName, eventName, params) {\n this.$children.forEach(function (child) {\n var name = child.$options.componentName;\n\n if (name === componentName) {\n child.$emit.apply(child, [eventName].concat(params));\n } else {\n _broadcast.apply(child, [componentName, eventName].concat([params]));\n }\n });\n}\nexports.default = {\n methods: {\n dispatch: function dispatch(componentName, eventName, params) {\n var parent = this.$parent || this.$root;\n var name = parent.$options.componentName;\n\n while (parent && (!name || name !== componentName)) {\n parent = parent.$parent;\n\n if (parent) {\n name = parent.$options.componentName;\n }\n }\n if (parent) {\n parent.$emit.apply(parent, [eventName].concat(params));\n }\n },\n broadcast: function broadcast(componentName, eventName, params) {\n _broadcast.call(this, componentName, eventName, params);\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXIuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXIuanM/ZDAxMCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmZ1bmN0aW9uIF9icm9hZGNhc3QoY29tcG9uZW50TmFtZSwgZXZlbnROYW1lLCBwYXJhbXMpIHtcbiAgdGhpcy4kY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICB2YXIgbmFtZSA9IGNoaWxkLiRvcHRpb25zLmNvbXBvbmVudE5hbWU7XG5cbiAgICBpZiAobmFtZSA9PT0gY29tcG9uZW50TmFtZSkge1xuICAgICAgY2hpbGQuJGVtaXQuYXBwbHkoY2hpbGQsIFtldmVudE5hbWVdLmNvbmNhdChwYXJhbXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2Jyb2FkY2FzdC5hcHBseShjaGlsZCwgW2NvbXBvbmVudE5hbWUsIGV2ZW50TmFtZV0uY29uY2F0KFtwYXJhbXNdKSk7XG4gICAgfVxuICB9KTtcbn1cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgbWV0aG9kczoge1xuICAgIGRpc3BhdGNoOiBmdW5jdGlvbiBkaXNwYXRjaChjb21wb25lbnROYW1lLCBldmVudE5hbWUsIHBhcmFtcykge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudCB8fCB0aGlzLiRyb290O1xuICAgICAgdmFyIG5hbWUgPSBwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZTtcblxuICAgICAgd2hpbGUgKHBhcmVudCAmJiAoIW5hbWUgfHwgbmFtZSAhPT0gY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcGFyZW50ID0gcGFyZW50LiRwYXJlbnQ7XG5cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgIG5hbWUgPSBwYXJlbnQuJG9wdGlvbnMuY29tcG9uZW50TmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQuJGVtaXQuYXBwbHkocGFyZW50LCBbZXZlbnROYW1lXS5jb25jYXQocGFyYW1zKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBicm9hZGNhc3Q6IGZ1bmN0aW9uIGJyb2FkY2FzdChjb21wb25lbnROYW1lLCBldmVudE5hbWUsIHBhcmFtcykge1xuICAgICAgX2Jyb2FkY2FzdC5jYWxsKHRoaXMsIGNvbXBvbmVudE5hbWUsIGV2ZW50TmFtZSwgcGFyYW1zKTtcbiAgICB9XG4gIH1cbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/mixins/emitter.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/mixins/focus.js":
- /*!*****************************************************!*\
- !*** ./node_modules/element-ui/lib/mixins/focus.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nexports.default = function (ref) {\n return {\n methods: {\n focus: function focus() {\n this.$refs[ref].focus();\n }\n }\n };\n};\n\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2ZvY3VzLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL21peGlucy9mb2N1cy5qcz8xMmYyIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAocmVmKSB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kczoge1xuICAgICAgZm9jdXM6IGZ1bmN0aW9uIGZvY3VzKCkge1xuICAgICAgICB0aGlzLiRyZWZzW3JlZl0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuXG47Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/mixins/focus.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/mixins/locale.js":
- /*!******************************************************!*\
- !*** ./node_modules/element-ui/lib/mixins/locale.js ***!
- \******************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _locale = __webpack_require__(/*! element-ui/lib/locale */ \"./node_modules/element-ui/lib/locale/index.js\");\n\nexports.default = {\n methods: {\n t: function t() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return _locale.t.apply(this, args);\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9taXhpbnMvbG9jYWxlLmpzPzZiN2MiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2xvY2FsZSA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL2xvY2FsZScpO1xuXG5leHBvcnRzLmRlZmF1bHQgPSB7XG4gIG1ldGhvZHM6IHtcbiAgICB0OiBmdW5jdGlvbiB0KCkge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9sb2NhbGUudC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH1cbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/mixins/locale.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/mixins/migrating.js":
- /*!*********************************************************!*\
- !*** ./node_modules/element-ui/lib/mixins/migrating.js ***!
- \*********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _util = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/**\n * Show migrating guide in browser console.\n *\n * Usage:\n * import Migrating from 'element-ui/src/mixins/migrating';\n *\n * mixins: [Migrating]\n *\n * add getMigratingConfig method for your component.\n * getMigratingConfig() {\n * return {\n * props: {\n * 'allow-no-selection': 'allow-no-selection is removed.',\n * 'selection-mode': 'selection-mode is removed.'\n * },\n * events: {\n * selectionchange: 'selectionchange is renamed to selection-change.'\n * }\n * };\n * },\n */\nexports.default = {\n mounted: function mounted() {\n if (false) {}\n if (!this.$vnode) return;\n\n var _getMigratingConfig = this.getMigratingConfig(),\n _getMigratingConfig$p = _getMigratingConfig.props,\n props = _getMigratingConfig$p === undefined ? {} : _getMigratingConfig$p,\n _getMigratingConfig$e = _getMigratingConfig.events,\n events = _getMigratingConfig$e === undefined ? {} : _getMigratingConfig$e;\n\n var _$vnode = this.$vnode,\n data = _$vnode.data,\n componentOptions = _$vnode.componentOptions;\n\n var definedProps = data.attrs || {};\n var definedEvents = componentOptions.listeners || {};\n\n for (var propName in definedProps) {\n propName = (0, _util.kebabCase)(propName); // compatible with camel case\n if (props[propName]) {\n console.warn('[Element Migrating][' + this.$options.name + '][Attribute]: ' + props[propName]);\n }\n }\n\n for (var eventName in definedEvents) {\n eventName = (0, _util.kebabCase)(eventName); // compatible with camel case\n if (events[eventName]) {\n console.warn('[Element Migrating][' + this.$options.name + '][Event]: ' + events[eventName]);\n }\n }\n },\n\n methods: {\n getMigratingConfig: function getMigratingConfig() {\n return {\n props: {},\n events: {}\n };\n }\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvbWl4aW5zL21pZ3JhdGluZy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9taXhpbnMvbWlncmF0aW5nLmpzPzJiYjUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy91dGlsJyk7XG5cbi8qKlxuICogU2hvdyBtaWdyYXRpbmcgZ3VpZGUgaW4gYnJvd3NlciBjb25zb2xlLlxuICpcbiAqIFVzYWdlOlxuICogaW1wb3J0IE1pZ3JhdGluZyBmcm9tICdlbGVtZW50LXVpL3NyYy9taXhpbnMvbWlncmF0aW5nJztcbiAqXG4gKiBtaXhpbnM6IFtNaWdyYXRpbmddXG4gKlxuICogYWRkIGdldE1pZ3JhdGluZ0NvbmZpZyBtZXRob2QgZm9yIHlvdXIgY29tcG9uZW50LlxuICogIGdldE1pZ3JhdGluZ0NvbmZpZygpIHtcbiAqICAgIHJldHVybiB7XG4gKiAgICAgIHByb3BzOiB7XG4gKiAgICAgICAgJ2FsbG93LW5vLXNlbGVjdGlvbic6ICdhbGxvdy1uby1zZWxlY3Rpb24gaXMgcmVtb3ZlZC4nLFxuICogICAgICAgICdzZWxlY3Rpb24tbW9kZSc6ICdzZWxlY3Rpb24tbW9kZSBpcyByZW1vdmVkLidcbiAqICAgICAgfSxcbiAqICAgICAgZXZlbnRzOiB7XG4gKiAgICAgICAgc2VsZWN0aW9uY2hhbmdlOiAnc2VsZWN0aW9uY2hhbmdlIGlzIHJlbmFtZWQgdG8gc2VsZWN0aW9uLWNoYW5nZS4nXG4gKiAgICAgIH1cbiAqICAgIH07XG4gKiAgfSxcbiAqL1xuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLiR2bm9kZSkgcmV0dXJuO1xuXG4gICAgdmFyIF9nZXRNaWdyYXRpbmdDb25maWcgPSB0aGlzLmdldE1pZ3JhdGluZ0NvbmZpZygpLFxuICAgICAgICBfZ2V0TWlncmF0aW5nQ29uZmlnJHAgPSBfZ2V0TWlncmF0aW5nQ29uZmlnLnByb3BzLFxuICAgICAgICBwcm9wcyA9IF9nZXRNaWdyYXRpbmdDb25maWckcCA9PT0gdW5kZWZpbmVkID8ge30gOiBfZ2V0TWlncmF0aW5nQ29uZmlnJHAsXG4gICAgICAgIF9nZXRNaWdyYXRpbmdDb25maWckZSA9IF9nZXRNaWdyYXRpbmdDb25maWcuZXZlbnRzLFxuICAgICAgICBldmVudHMgPSBfZ2V0TWlncmF0aW5nQ29uZmlnJGUgPT09IHVuZGVmaW5lZCA/IHt9IDogX2dldE1pZ3JhdGluZ0NvbmZpZyRlO1xuXG4gICAgdmFyIF8kdm5vZGUgPSB0aGlzLiR2bm9kZSxcbiAgICAgICAgZGF0YSA9IF8kdm5vZGUuZGF0YSxcbiAgICAgICAgY29tcG9uZW50T3B0aW9ucyA9IF8kdm5vZGUuY29tcG9uZW50T3B0aW9ucztcblxuICAgIHZhciBkZWZpbmVkUHJvcHMgPSBkYXRhLmF0dHJzIHx8IHt9O1xuICAgIHZhciBkZWZpbmVkRXZlbnRzID0gY29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnMgfHwge307XG5cbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBkZWZpbmVkUHJvcHMpIHtcbiAgICAgIHByb3BOYW1lID0gKDAsIF91dGlsLmtlYmFiQ2FzZSkocHJvcE5hbWUpOyAvLyBjb21wYXRpYmxlIHdpdGggY2FtZWwgY2FzZVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tFbGVtZW50IE1pZ3JhdGluZ11bJyArIHRoaXMuJG9wdGlvbnMubmFtZSArICddW0F0dHJpYnV0ZV06ICcgKyBwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBkZWZpbmVkRXZlbnRzKSB7XG4gICAgICBldmVudE5hbWUgPSAoMCwgX3V0aWwua2ViYWJDYXNlKShldmVudE5hbWUpOyAvLyBjb21wYXRpYmxlIHdpdGggY2FtZWwgY2FzZVxuICAgICAgaWYgKGV2ZW50c1tldmVudE5hbWVdKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW0VsZW1lbnQgTWlncmF0aW5nXVsnICsgdGhpcy4kb3B0aW9ucy5uYW1lICsgJ11bRXZlbnRdOiAnICsgZXZlbnRzW2V2ZW50TmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TWlncmF0aW5nQ29uZmlnOiBmdW5jdGlvbiBnZXRNaWdyYXRpbmdDb25maWcoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcm9wczoge30sXG4gICAgICAgIGV2ZW50czoge31cbiAgICAgIH07XG4gICAgfVxuICB9XG59OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/mixins/migrating.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/option.js":
- /*!***********************************************!*\
- !*** ./node_modules/element-ui/lib/option.js ***!
- \***********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 53);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 33:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=template&id=7a44c642&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-select-dropdown__item\",\n class: {\n selected: _vm.itemSelected,\n \"is-disabled\": _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n hover: _vm.hover\n },\n on: {\n mouseenter: _vm.hoverItem,\n click: function($event) {\n $event.stopPropagation()\n return _vm.selectOptionClick($event)\n }\n }\n },\n [_vm._t(\"default\", [_c(\"span\", [_vm._v(_vm._s(_vm.currentLabel))])])],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=template&id=7a44c642&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(4);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(3);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=script&lang=js&\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var optionvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a],\n\n name: 'ElOption',\n\n componentName: 'ElOption',\n\n inject: ['select'],\n\n props: {\n value: {\n required: true\n },\n label: [String, Number],\n created: Boolean,\n disabled: {\n type: Boolean,\n default: false\n }\n },\n\n data: function data() {\n return {\n index: -1,\n groupDisabled: false,\n visible: true,\n hitState: false,\n hover: false\n };\n },\n\n\n computed: {\n isObject: function isObject() {\n return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n },\n currentLabel: function currentLabel() {\n return this.label || (this.isObject ? '' : this.value);\n },\n currentValue: function currentValue() {\n return this.value || this.label || '';\n },\n itemSelected: function itemSelected() {\n if (!this.select.multiple) {\n return this.isEqual(this.value, this.select.value);\n } else {\n return this.contains(this.select.value, this.value);\n }\n },\n limitReached: function limitReached() {\n if (this.select.multiple) {\n return !this.itemSelected && (this.select.value || []).length >= this.select.multipleLimit && this.select.multipleLimit > 0;\n } else {\n return false;\n }\n }\n },\n\n watch: {\n currentLabel: function currentLabel() {\n if (!this.created && !this.select.remote) this.dispatch('ElSelect', 'setSelected');\n },\n value: function value(val, oldVal) {\n var _select = this.select,\n remote = _select.remote,\n valueKey = _select.valueKey;\n\n if (!this.created && !remote) {\n if (valueKey && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && (typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) === 'object' && val[valueKey] === oldVal[valueKey]) {\n return;\n }\n this.dispatch('ElSelect', 'setSelected');\n }\n }\n },\n\n methods: {\n isEqual: function isEqual(a, b) {\n if (!this.isObject) {\n return a === b;\n } else {\n var valueKey = this.select.valueKey;\n return Object(util_[\"getValueByPath\"])(a, valueKey) === Object(util_[\"getValueByPath\"])(b, valueKey);\n }\n },\n contains: function contains() {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var target = arguments[1];\n\n if (!this.isObject) {\n return arr && arr.indexOf(target) > -1;\n } else {\n var valueKey = this.select.valueKey;\n return arr && arr.some(function (item) {\n return Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(target, valueKey);\n });\n }\n },\n handleGroupDisabled: function handleGroupDisabled(val) {\n this.groupDisabled = val;\n },\n hoverItem: function hoverItem() {\n if (!this.disabled && !this.groupDisabled) {\n this.select.hoverIndex = this.select.options.indexOf(this);\n }\n },\n selectOptionClick: function selectOptionClick() {\n if (this.disabled !== true && this.groupDisabled !== true) {\n this.dispatch('ElSelect', 'handleOptionClick', [this, true]);\n }\n },\n queryChange: function queryChange(query) {\n this.visible = new RegExp(Object(util_[\"escapeRegexpString\"])(query), 'i').test(this.currentLabel) || this.created;\n if (!this.visible) {\n this.select.filteredOptionsCount--;\n }\n }\n },\n\n created: function created() {\n this.select.options.push(this);\n this.select.cachedOptions.push(this);\n this.select.optionsCount++;\n this.select.filteredOptionsCount++;\n\n this.$on('queryChange', this.queryChange);\n this.$on('handleGroupDisabled', this.handleGroupDisabled);\n },\n beforeDestroy: function beforeDestroy() {\n var _select2 = this.select,\n selected = _select2.selected,\n multiple = _select2.multiple;\n\n var selectedOptions = multiple ? selected : [selected];\n var index = this.select.cachedOptions.indexOf(this);\n var selectedIndex = selectedOptions.indexOf(this);\n\n // if option is not selected, remove it from cache\n if (index > -1 && selectedIndex < 0) {\n this.select.cachedOptions.splice(index, 1);\n }\n this.select.onOptionDestroy(this.select.options.indexOf(this));\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_optionvue_type_script_lang_js_ = (optionvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_optionvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/select/src/option.vue\"\n/* harmony default export */ var src_option = __webpack_exports__[\"a\"] = (component.exports);\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 53:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _select_src_option__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(33);\n\n\n/* istanbul ignore next */\n_select_src_option__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"].install = function (Vue) {\n Vue.component(_select_src_option__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"].name, _select_src_option__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"]);\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_select_src_option__WEBPACK_IMPORTED_MODULE_0__[/* default */ \"a\"]);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvb3B0aW9uLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL29wdGlvbi5qcz9lNzcyIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNTMpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdhNDRjNjQyJlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxpXCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aXNpYmxlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1kcm9wZG93bl9faXRlbVwiLFxuICAgICAgY2xhc3M6IHtcbiAgICAgICAgc2VsZWN0ZWQ6IF92bS5pdGVtU2VsZWN0ZWQsXG4gICAgICAgIFwiaXMtZGlzYWJsZWRcIjogX3ZtLmRpc2FibGVkIHx8IF92bS5ncm91cERpc2FibGVkIHx8IF92bS5saW1pdFJlYWNoZWQsXG4gICAgICAgIGhvdmVyOiBfdm0uaG92ZXJcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBtb3VzZWVudGVyOiBfdm0uaG92ZXJJdGVtLFxuICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS5zZWxlY3RPcHRpb25DbGljaygkZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIsIFtfYyhcInNwYW5cIiwgW192bS5fdihfdm0uX3MoX3ZtLmN1cnJlbnRMYWJlbCkpXSldKV0sXG4gICAgMlxuICApXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTdhNDRjNjQyJlxuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIlxudmFyIGVtaXR0ZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcbnZhciBlbWl0dGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGVtaXR0ZXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIlxudmFyIHV0aWxfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgb3B0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIG5hbWU6ICdFbE9wdGlvbicsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsT3B0aW9uJyxcblxuICBpbmplY3Q6IFsnc2VsZWN0J10sXG5cbiAgcHJvcHM6IHtcbiAgICB2YWx1ZToge1xuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGxhYmVsOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgIGNyZWF0ZWQ6IEJvb2xlYW4sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbmRleDogLTEsXG4gICAgICBncm91cERpc2FibGVkOiBmYWxzZSxcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBoaXRTdGF0ZTogZmFsc2UsXG4gICAgICBob3ZlcjogZmFsc2VcbiAgICB9O1xuICB9LFxuXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc09iamVjdDogZnVuY3Rpb24gaXNPYmplY3QoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMudmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IG9iamVjdF0nO1xuICAgIH0sXG4gICAgY3VycmVudExhYmVsOiBmdW5jdGlvbiBjdXJyZW50TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sYWJlbCB8fCAodGhpcy5pc09iamVjdCA/ICcnIDogdGhpcy52YWx1ZSk7XG4gICAgfSxcbiAgICBjdXJyZW50VmFsdWU6IGZ1bmN0aW9uIGN1cnJlbnRWYWx1ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHRoaXMubGFiZWwgfHwgJyc7XG4gICAgfSxcbiAgICBpdGVtU2VsZWN0ZWQ6IGZ1bmN0aW9uIGl0ZW1TZWxlY3RlZCgpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFcXVhbCh0aGlzLnZhbHVlLCB0aGlzLnNlbGVjdC52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWlucyh0aGlzLnNlbGVjdC52YWx1ZSwgdGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBsaW1pdFJlYWNoZWQ6IGZ1bmN0aW9uIGxpbWl0UmVhY2hlZCgpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdC5tdWx0aXBsZSkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXRlbVNlbGVjdGVkICYmICh0aGlzLnNlbGVjdC52YWx1ZSB8fCBbXSkubGVuZ3RoID49IHRoaXMuc2VsZWN0Lm11bHRpcGxlTGltaXQgJiYgdGhpcy5zZWxlY3QubXVsdGlwbGVMaW1pdCA+IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgY3VycmVudExhYmVsOiBmdW5jdGlvbiBjdXJyZW50TGFiZWwoKSB7XG4gICAgICBpZiAoIXRoaXMuY3JlYXRlZCAmJiAhdGhpcy5zZWxlY3QucmVtb3RlKSB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdzZXRTZWxlY3RlZCcpO1xuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCwgb2xkVmFsKSB7XG4gICAgICB2YXIgX3NlbGVjdCA9IHRoaXMuc2VsZWN0LFxuICAgICAgICAgIHJlbW90ZSA9IF9zZWxlY3QucmVtb3RlLFxuICAgICAgICAgIHZhbHVlS2V5ID0gX3NlbGVjdC52YWx1ZUtleTtcblxuICAgICAgaWYgKCF0aGlzLmNyZWF0ZWQgJiYgIXJlbW90ZSkge1xuICAgICAgICBpZiAodmFsdWVLZXkgJiYgKHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHZhbCkpID09PSAnb2JqZWN0JyAmJiAodHlwZW9mIG9sZFZhbCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2Yob2xkVmFsKSkgPT09ICdvYmplY3QnICYmIHZhbFt2YWx1ZUtleV0gPT09IG9sZFZhbFt2YWx1ZUtleV0pIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnc2V0U2VsZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzRXF1YWw6IGZ1bmN0aW9uIGlzRXF1YWwoYSwgYikge1xuICAgICAgaWYgKCF0aGlzLmlzT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBhID09PSBiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlS2V5ID0gdGhpcy5zZWxlY3QudmFsdWVLZXk7XG4gICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoYSwgdmFsdWVLZXkpID09PSBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoYiwgdmFsdWVLZXkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY29udGFpbnM6IGZ1bmN0aW9uIGNvbnRhaW5zKCkge1xuICAgICAgdmFyIGFyciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gICAgICB2YXIgdGFyZ2V0ID0gYXJndW1lbnRzWzFdO1xuXG4gICAgICBpZiAoIXRoaXMuaXNPYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIGFyciAmJiBhcnIuaW5kZXhPZih0YXJnZXQpID4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdmFsdWVLZXkgPSB0aGlzLnNlbGVjdC52YWx1ZUtleTtcbiAgICAgICAgcmV0dXJuIGFyciAmJiBhcnIuc29tZShmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoaXRlbSwgdmFsdWVLZXkpID09PSBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkodGFyZ2V0LCB2YWx1ZUtleSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlR3JvdXBEaXNhYmxlZDogZnVuY3Rpb24gaGFuZGxlR3JvdXBEaXNhYmxlZCh2YWwpIHtcbiAgICAgIHRoaXMuZ3JvdXBEaXNhYmxlZCA9IHZhbDtcbiAgICB9LFxuICAgIGhvdmVySXRlbTogZnVuY3Rpb24gaG92ZXJJdGVtKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmICF0aGlzLmdyb3VwRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QuaG92ZXJJbmRleCA9IHRoaXMuc2VsZWN0Lm9wdGlvbnMuaW5kZXhPZih0aGlzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlbGVjdE9wdGlvbkNsaWNrOiBmdW5jdGlvbiBzZWxlY3RPcHRpb25DbGljaygpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkICE9PSB0cnVlICYmIHRoaXMuZ3JvdXBEaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbFNlbGVjdCcsICdoYW5kbGVPcHRpb25DbGljaycsIFt0aGlzLCB0cnVlXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBxdWVyeUNoYW5nZTogZnVuY3Rpb24gcXVlcnlDaGFuZ2UocXVlcnkpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IG5ldyBSZWdFeHAoT2JqZWN0KHV0aWxfW1wiZXNjYXBlUmVnZXhwU3RyaW5nXCJdKShxdWVyeSksICdpJykudGVzdCh0aGlzLmN1cnJlbnRMYWJlbCkgfHwgdGhpcy5jcmVhdGVkO1xuICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3QuZmlsdGVyZWRPcHRpb25zQ291bnQtLTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHtcbiAgICB0aGlzLnNlbGVjdC5vcHRpb25zLnB1c2godGhpcyk7XG4gICAgdGhpcy5zZWxlY3QuY2FjaGVkT3B0aW9ucy5wdXNoKHRoaXMpO1xuICAgIHRoaXMuc2VsZWN0Lm9wdGlvbnNDb3VudCsrO1xuICAgIHRoaXMuc2VsZWN0LmZpbHRlcmVkT3B0aW9uc0NvdW50Kys7XG5cbiAgICB0aGlzLiRvbigncXVlcnlDaGFuZ2UnLCB0aGlzLnF1ZXJ5Q2hhbmdlKTtcbiAgICB0aGlzLiRvbignaGFuZGxlR3JvdXBEaXNhYmxlZCcsIHRoaXMuaGFuZGxlR3JvdXBEaXNhYmxlZCk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdmFyIF9zZWxlY3QyID0gdGhpcy5zZWxlY3QsXG4gICAgICAgIHNlbGVjdGVkID0gX3NlbGVjdDIuc2VsZWN0ZWQsXG4gICAgICAgIG11bHRpcGxlID0gX3NlbGVjdDIubXVsdGlwbGU7XG5cbiAgICB2YXIgc2VsZWN0ZWRPcHRpb25zID0gbXVsdGlwbGUgPyBzZWxlY3RlZCA6IFtzZWxlY3RlZF07XG4gICAgdmFyIGluZGV4ID0gdGhpcy5zZWxlY3QuY2FjaGVkT3B0aW9ucy5pbmRleE9mKHRoaXMpO1xuICAgIHZhciBzZWxlY3RlZEluZGV4ID0gc2VsZWN0ZWRPcHRpb25zLmluZGV4T2YodGhpcyk7XG5cbiAgICAvLyBpZiBvcHRpb24gaXMgbm90IHNlbGVjdGVkLCByZW1vdmUgaXQgZnJvbSBjYWNoZVxuICAgIGlmIChpbmRleCA+IC0xICYmIHNlbGVjdGVkSW5kZXggPCAwKSB7XG4gICAgICB0aGlzLnNlbGVjdC5jYWNoZWRPcHRpb25zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0Lm9uT3B0aW9uRGVzdHJveSh0aGlzLnNlbGVjdC5vcHRpb25zLmluZGV4T2YodGhpcykpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19vcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAob3B0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1xudmFyIGNvbXBvbmVudE5vcm1hbGl6ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX29wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX29wdGlvbiA9IF9fd2VicGFja19leHBvcnRzX19bXCJhXCJdID0gKGNvbXBvbmVudC5leHBvcnRzKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDQ6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNTM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9zZWxlY3Rfc3JjX29wdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbl9zZWxlY3Rfc3JjX29wdGlvbl9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fWy8qIGRlZmF1bHQgKi8gXCJhXCJdLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoX3NlbGVjdF9zcmNfb3B0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bLyogZGVmYXVsdCAqLyBcImFcIl0ubmFtZSwgX3NlbGVjdF9zcmNfb3B0aW9uX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19bLyogZGVmYXVsdCAqLyBcImFcIl0pO1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChfc2VsZWN0X3NyY19vcHRpb25fX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1svKiBkZWZhdWx0ICovIFwiYVwiXSk7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/option.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/popover.js":
- /*!************************************************!*\
- !*** ./node_modules/element-ui/lib/popover.js ***!
- \************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 77);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vue-popper */ \"./node_modules/element-ui/lib/utils/vue-popper.js\");\n\n/***/ }),\n\n/***/ 7:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! vue */ \"vue\");\n\n/***/ }),\n\n/***/ 77:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=template&id=52060272&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"span\",\n [\n _c(\n \"transition\",\n {\n attrs: { name: _vm.transition },\n on: {\n \"after-enter\": _vm.handleAfterEnter,\n \"after-leave\": _vm.handleAfterLeave\n }\n },\n [\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.disabled && _vm.showPopper,\n expression: \"!disabled && showPopper\"\n }\n ],\n ref: \"popper\",\n staticClass: \"el-popover el-popper\",\n class: [_vm.popperClass, _vm.content && \"el-popover--plain\"],\n style: { width: _vm.width + \"px\" },\n attrs: {\n role: \"tooltip\",\n id: _vm.tooltipId,\n \"aria-hidden\":\n _vm.disabled || !_vm.showPopper ? \"true\" : \"false\"\n }\n },\n [\n _vm.title\n ? _c(\"div\", {\n staticClass: \"el-popover__title\",\n domProps: { textContent: _vm._s(_vm.title) }\n })\n : _vm._e(),\n _vm._t(\"default\", [_vm._v(_vm._s(_vm.content))])\n ],\n 2\n )\n ]\n ),\n _c(\n \"span\",\n { ref: \"wrapper\", staticClass: \"el-popover__reference-wrapper\" },\n [_vm._t(\"reference\")],\n 2\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=template&id=52060272&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __webpack_require__(5);\nvar vue_popper_default = /*#__PURE__*/__webpack_require__.n(vue_popper_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __webpack_require__(2);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(3);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/popover/src/main.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n/* harmony default export */ var mainvue_type_script_lang_js_ = ({\n name: 'ElPopover',\n\n mixins: [vue_popper_default.a],\n\n props: {\n trigger: {\n type: String,\n default: 'click',\n validator: function validator(value) {\n return ['click', 'focus', 'hover', 'manual'].indexOf(value) > -1;\n }\n },\n openDelay: {\n type: Number,\n default: 0\n },\n closeDelay: {\n type: Number,\n default: 200\n },\n title: String,\n disabled: Boolean,\n content: String,\n reference: {},\n popperClass: String,\n width: {},\n visibleArrow: {\n default: true\n },\n arrowOffset: {\n type: Number,\n default: 0\n },\n transition: {\n type: String,\n default: 'fade-in-linear'\n },\n tabindex: {\n type: Number,\n default: 0\n }\n },\n\n computed: {\n tooltipId: function tooltipId() {\n return 'el-popover-' + Object(util_[\"generateId\"])();\n }\n },\n watch: {\n showPopper: function showPopper(val) {\n if (this.disabled) {\n return;\n }\n val ? this.$emit('show') : this.$emit('hide');\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n var reference = this.referenceElm = this.reference || this.$refs.reference;\n var popper = this.popper || this.$refs.popper;\n\n if (!reference && this.$refs.wrapper.children) {\n reference = this.referenceElm = this.$refs.wrapper.children[0];\n }\n // 可访问性\n if (reference) {\n Object(dom_[\"addClass\"])(reference, 'el-popover__reference');\n reference.setAttribute('aria-describedby', this.tooltipId);\n reference.setAttribute('tabindex', this.tabindex); // tab序列\n popper.setAttribute('tabindex', 0);\n\n if (this.trigger !== 'click') {\n Object(dom_[\"on\"])(reference, 'focusin', function () {\n _this.handleFocus();\n var instance = reference.__vue__;\n if (instance && typeof instance.focus === 'function') {\n instance.focus();\n }\n });\n Object(dom_[\"on\"])(popper, 'focusin', this.handleFocus);\n Object(dom_[\"on\"])(reference, 'focusout', this.handleBlur);\n Object(dom_[\"on\"])(popper, 'focusout', this.handleBlur);\n }\n Object(dom_[\"on\"])(reference, 'keydown', this.handleKeydown);\n Object(dom_[\"on\"])(reference, 'click', this.handleClick);\n }\n if (this.trigger === 'click') {\n Object(dom_[\"on\"])(reference, 'click', this.doToggle);\n Object(dom_[\"on\"])(document, 'click', this.handleDocumentClick);\n } else if (this.trigger === 'hover') {\n Object(dom_[\"on\"])(reference, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"on\"])(popper, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"on\"])(reference, 'mouseleave', this.handleMouseLeave);\n Object(dom_[\"on\"])(popper, 'mouseleave', this.handleMouseLeave);\n } else if (this.trigger === 'focus') {\n if (this.tabindex < 0) {\n console.warn('[Element Warn][Popover]a negative taindex means that the element cannot be focused by tab key');\n }\n if (reference.querySelector('input, textarea')) {\n Object(dom_[\"on\"])(reference, 'focusin', this.doShow);\n Object(dom_[\"on\"])(reference, 'focusout', this.doClose);\n } else {\n Object(dom_[\"on\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"on\"])(reference, 'mouseup', this.doClose);\n }\n }\n },\n beforeDestroy: function beforeDestroy() {\n this.cleanup();\n },\n deactivated: function deactivated() {\n this.cleanup();\n },\n\n\n methods: {\n doToggle: function doToggle() {\n this.showPopper = !this.showPopper;\n },\n doShow: function doShow() {\n this.showPopper = true;\n },\n doClose: function doClose() {\n this.showPopper = false;\n },\n handleFocus: function handleFocus() {\n Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = true;\n },\n handleClick: function handleClick() {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n },\n handleBlur: function handleBlur() {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n if (this.trigger === 'click' || this.trigger === 'focus') this.showPopper = false;\n },\n handleMouseEnter: function handleMouseEnter() {\n var _this2 = this;\n\n clearTimeout(this._timer);\n if (this.openDelay) {\n this._timer = setTimeout(function () {\n _this2.showPopper = true;\n }, this.openDelay);\n } else {\n this.showPopper = true;\n }\n },\n handleKeydown: function handleKeydown(ev) {\n if (ev.keyCode === 27 && this.trigger !== 'manual') {\n // esc\n this.doClose();\n }\n },\n handleMouseLeave: function handleMouseLeave() {\n var _this3 = this;\n\n clearTimeout(this._timer);\n if (this.closeDelay) {\n this._timer = setTimeout(function () {\n _this3.showPopper = false;\n }, this.closeDelay);\n } else {\n this.showPopper = false;\n }\n },\n handleDocumentClick: function handleDocumentClick(e) {\n var reference = this.reference || this.$refs.reference;\n var popper = this.popper || this.$refs.popper;\n\n if (!reference && this.$refs.wrapper.children) {\n reference = this.referenceElm = this.$refs.wrapper.children[0];\n }\n if (!this.$el || !reference || this.$el.contains(e.target) || reference.contains(e.target) || !popper || popper.contains(e.target)) return;\n this.showPopper = false;\n },\n handleAfterEnter: function handleAfterEnter() {\n this.$emit('after-enter');\n },\n handleAfterLeave: function handleAfterLeave() {\n this.$emit('after-leave');\n this.doDestroy();\n },\n cleanup: function cleanup() {\n if (this.openDelay || this.closeDelay) {\n clearTimeout(this._timer);\n }\n }\n },\n\n destroyed: function destroyed() {\n var reference = this.reference;\n\n Object(dom_[\"off\"])(reference, 'click', this.doToggle);\n Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"off\"])(reference, 'focusin', this.doShow);\n Object(dom_[\"off\"])(reference, 'focusout', this.doClose);\n Object(dom_[\"off\"])(reference, 'mousedown', this.doShow);\n Object(dom_[\"off\"])(reference, 'mouseup', this.doClose);\n Object(dom_[\"off\"])(reference, 'mouseleave', this.handleMouseLeave);\n Object(dom_[\"off\"])(reference, 'mouseenter', this.handleMouseEnter);\n Object(dom_[\"off\"])(document, 'click', this.handleDocumentClick);\n }\n});\n// CONCATENATED MODULE: ./packages/popover/src/main.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_mainvue_type_script_lang_js_ = (mainvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/popover/src/main.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_mainvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/popover/src/main.vue\"\n/* harmony default export */ var main = (component.exports);\n// CONCATENATED MODULE: ./packages/popover/src/directive.js\nvar getReference = function getReference(el, binding, vnode) {\n var _ref = binding.expression ? binding.value : binding.arg;\n var popper = vnode.context.$refs[_ref];\n if (popper) {\n if (Array.isArray(popper)) {\n popper[0].$refs.reference = el;\n } else {\n popper.$refs.reference = el;\n }\n }\n};\n\n/* harmony default export */ var directive = ({\n bind: function bind(el, binding, vnode) {\n getReference(el, binding, vnode);\n },\n inserted: function inserted(el, binding, vnode) {\n getReference(el, binding, vnode);\n }\n});\n// EXTERNAL MODULE: external \"vue\"\nvar external_vue_ = __webpack_require__(7);\nvar external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);\n\n// CONCATENATED MODULE: ./packages/popover/index.js\n\n\n\n\nexternal_vue_default.a.directive('popover', directive);\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n Vue.directive('popover', directive);\n Vue.component(main.name, main);\n};\nmain.directive = directive;\n\n/* harmony default export */ var popover = __webpack_exports__[\"default\"] = (main);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcG9wb3Zlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi9wb3BvdmVyLmpzPzZhYzkiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA3Nyk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBub3JtYWxpemVDb21wb25lbnQ7IH0pO1xuLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDU6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Z1ZS1wb3BwZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ2dWVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA3Nzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NTIwNjAyNzImXG52YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwic3BhblwiLFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInRyYW5zaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IF92bS50cmFuc2l0aW9uIH0sXG4gICAgICAgICAgb246IHtcbiAgICAgICAgICAgIFwiYWZ0ZXItZW50ZXJcIjogX3ZtLmhhbmRsZUFmdGVyRW50ZXIsXG4gICAgICAgICAgICBcImFmdGVyLWxlYXZlXCI6IF92bS5oYW5kbGVBZnRlckxlYXZlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6ICFfdm0uZGlzYWJsZWQgJiYgX3ZtLnNob3dQb3BwZXIsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIiFkaXNhYmxlZCAmJiBzaG93UG9wcGVyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlZjogXCJwb3BwZXJcIixcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcG9wb3ZlciBlbC1wb3BwZXJcIixcbiAgICAgICAgICAgICAgY2xhc3M6IFtfdm0ucG9wcGVyQ2xhc3MsIF92bS5jb250ZW50ICYmIFwiZWwtcG9wb3Zlci0tcGxhaW5cIl0sXG4gICAgICAgICAgICAgIHN0eWxlOiB7IHdpZHRoOiBfdm0ud2lkdGggKyBcInB4XCIgfSxcbiAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICByb2xlOiBcInRvb2x0aXBcIixcbiAgICAgICAgICAgICAgICBpZDogX3ZtLnRvb2x0aXBJZCxcbiAgICAgICAgICAgICAgICBcImFyaWEtaGlkZGVuXCI6XG4gICAgICAgICAgICAgICAgICBfdm0uZGlzYWJsZWQgfHwgIV92bS5zaG93UG9wcGVyID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX3ZtLnRpdGxlXG4gICAgICAgICAgICAgICAgPyBfYyhcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXBvcG92ZXJfX3RpdGxlXCIsXG4gICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHRleHRDb250ZW50OiBfdm0uX3MoX3ZtLnRpdGxlKSB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICAgIF92bS5fdChcImRlZmF1bHRcIiwgW192bS5fdihfdm0uX3MoX3ZtLmNvbnRlbnQpKV0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgMlxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAgeyByZWY6IFwid3JhcHBlclwiLCBzdGF0aWNDbGFzczogXCJlbC1wb3BvdmVyX19yZWZlcmVuY2Utd3JhcHBlclwiIH0sXG4gICAgICAgIFtfdm0uX3QoXCJyZWZlcmVuY2VcIildLFxuICAgICAgICAyXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9tYWluLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01MjA2MDI3MiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Z1ZS1wb3BwZXJcIlxudmFyIHZ1ZV9wb3BwZXJfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcbnZhciB2dWVfcG9wcGVyX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHZ1ZV9wb3BwZXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL2RvbVwiXG52YXIgZG9tXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCJcbnZhciB1dGlsXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxQb3BvdmVyJyxcblxuICBtaXhpbnM6IFt2dWVfcG9wcGVyX2RlZmF1bHQuYV0sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY2xpY2snLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFsnY2xpY2snLCAnZm9jdXMnLCAnaG92ZXInLCAnbWFudWFsJ10uaW5kZXhPZih2YWx1ZSkgPiAtMTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZW5EZWxheToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgY2xvc2VEZWxheToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMjAwXG4gICAgfSxcbiAgICB0aXRsZTogU3RyaW5nLFxuICAgIGRpc2FibGVkOiBCb29sZWFuLFxuICAgIGNvbnRlbnQ6IFN0cmluZyxcbiAgICByZWZlcmVuY2U6IHt9LFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgd2lkdGg6IHt9LFxuICAgIHZpc2libGVBcnJvdzoge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgYXJyb3dPZmZzZXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIHRyYW5zaXRpb246IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdmYWRlLWluLWxpbmVhcidcbiAgICB9LFxuICAgIHRhYmluZGV4OiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdG9vbHRpcElkOiBmdW5jdGlvbiB0b29sdGlwSWQoKSB7XG4gICAgICByZXR1cm4gJ2VsLXBvcG92ZXItJyArIE9iamVjdCh1dGlsX1tcImdlbmVyYXRlSWRcIl0pKCk7XG4gICAgfVxuICB9LFxuICB3YXRjaDoge1xuICAgIHNob3dQb3BwZXI6IGZ1bmN0aW9uIHNob3dQb3BwZXIodmFsKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YWwgPyB0aGlzLiRlbWl0KCdzaG93JykgOiB0aGlzLiRlbWl0KCdoaWRlJyk7XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMucmVmZXJlbmNlIHx8IHRoaXMuJHJlZnMucmVmZXJlbmNlO1xuICAgIHZhciBwb3BwZXIgPSB0aGlzLnBvcHBlciB8fCB0aGlzLiRyZWZzLnBvcHBlcjtcblxuICAgIGlmICghcmVmZXJlbmNlICYmIHRoaXMuJHJlZnMud3JhcHBlci5jaGlsZHJlbikge1xuICAgICAgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRyZWZzLndyYXBwZXIuY2hpbGRyZW5bMF07XG4gICAgfVxuICAgIC8vIOWPr+iuv+mXruaAp1xuICAgIGlmIChyZWZlcmVuY2UpIHtcbiAgICAgIE9iamVjdChkb21fW1wiYWRkQ2xhc3NcIl0pKHJlZmVyZW5jZSwgJ2VsLXBvcG92ZXJfX3JlZmVyZW5jZScpO1xuICAgICAgcmVmZXJlbmNlLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRoaXMudG9vbHRpcElkKTtcbiAgICAgIHJlZmVyZW5jZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgdGhpcy50YWJpbmRleCk7IC8vIHRhYuW6j+WIl1xuICAgICAgcG9wcGVyLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAwKTtcblxuICAgICAgaWYgKHRoaXMudHJpZ2dlciAhPT0gJ2NsaWNrJykge1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdmb2N1c2luJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzLmhhbmRsZUZvY3VzKCk7XG4gICAgICAgICAgdmFyIGluc3RhbmNlID0gcmVmZXJlbmNlLl9fdnVlX187XG4gICAgICAgICAgaWYgKGluc3RhbmNlICYmIHR5cGVvZiBpbnN0YW5jZS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgaW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShwb3BwZXIsICdmb2N1c2luJywgdGhpcy5oYW5kbGVGb2N1cyk7XG4gICAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ2ZvY3Vzb3V0JywgdGhpcy5oYW5kbGVCbHVyKTtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocG9wcGVyLCAnZm9jdXNvdXQnLCB0aGlzLmhhbmRsZUJsdXIpO1xuICAgICAgfVxuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5ZG93bik7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2spO1xuICAgIH1cbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdjbGljaycsIHRoaXMuZG9Ub2dnbGUpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkoZG9jdW1lbnQsICdjbGljaycsIHRoaXMuaGFuZGxlRG9jdW1lbnRDbGljayk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRyaWdnZXIgPT09ICdob3ZlcicpIHtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHJlZmVyZW5jZSwgJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZU1vdXNlRW50ZXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocG9wcGVyLCAnbW91c2VlbnRlcicsIHRoaXMuaGFuZGxlTW91c2VFbnRlcik7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdtb3VzZWxlYXZlJywgdGhpcy5oYW5kbGVNb3VzZUxlYXZlKTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHBvcHBlciwgJ21vdXNlbGVhdmUnLCB0aGlzLmhhbmRsZU1vdXNlTGVhdmUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICBpZiAodGhpcy50YWJpbmRleCA8IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbRWxlbWVudCBXYXJuXVtQb3BvdmVyXWEgbmVnYXRpdmUgdGFpbmRleCBtZWFucyB0aGF0IHRoZSBlbGVtZW50IGNhbm5vdCBiZSBmb2N1c2VkIGJ5IHRhYiBrZXknKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWZlcmVuY2UucXVlcnlTZWxlY3RvcignaW5wdXQsIHRleHRhcmVhJykpIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnZm9jdXNpbicsIHRoaXMuZG9TaG93KTtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnZm9jdXNvdXQnLCB0aGlzLmRvQ2xvc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkocmVmZXJlbmNlLCAnbW91c2Vkb3duJywgdGhpcy5kb1Nob3cpO1xuICAgICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKShyZWZlcmVuY2UsICdtb3VzZXVwJywgdGhpcy5kb0Nsb3NlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gIH0sXG4gIGRlYWN0aXZhdGVkOiBmdW5jdGlvbiBkZWFjdGl2YXRlZCgpIHtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb1RvZ2dsZTogZnVuY3Rpb24gZG9Ub2dnbGUoKSB7XG4gICAgICB0aGlzLnNob3dQb3BwZXIgPSAhdGhpcy5zaG93UG9wcGVyO1xuICAgIH0sXG4gICAgZG9TaG93OiBmdW5jdGlvbiBkb1Nob3coKSB7XG4gICAgICB0aGlzLnNob3dQb3BwZXIgPSB0cnVlO1xuICAgIH0sXG4gICAgZG9DbG9zZTogZnVuY3Rpb24gZG9DbG9zZSgpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlRm9jdXM6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKCkge1xuICAgICAgT2JqZWN0KGRvbV9bXCJhZGRDbGFzc1wiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdmb2N1c2luZycpO1xuICAgICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2NsaWNrJyB8fCB0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHRoaXMuc2hvd1BvcHBlciA9IHRydWU7XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soKSB7XG4gICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7XG4gICAgfSxcbiAgICBoYW5kbGVCbHVyOiBmdW5jdGlvbiBoYW5kbGVCbHVyKCkge1xuICAgICAgT2JqZWN0KGRvbV9bXCJyZW1vdmVDbGFzc1wiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdmb2N1c2luZycpO1xuICAgICAgaWYgKHRoaXMudHJpZ2dlciA9PT0gJ2NsaWNrJyB8fCB0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHRoaXMuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlTW91c2VFbnRlcjogZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcigpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgaWYgKHRoaXMub3BlbkRlbGF5KSB7XG4gICAgICAgIHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnNob3dQb3BwZXIgPSB0cnVlO1xuICAgICAgICB9LCB0aGlzLm9wZW5EZWxheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dQb3BwZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlS2V5ZG93bjogZnVuY3Rpb24gaGFuZGxlS2V5ZG93bihldikge1xuICAgICAgaWYgKGV2LmtleUNvZGUgPT09IDI3ICYmIHRoaXMudHJpZ2dlciAhPT0gJ21hbnVhbCcpIHtcbiAgICAgICAgLy8gZXNjXG4gICAgICAgIHRoaXMuZG9DbG9zZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlTW91c2VMZWF2ZTogZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgaWYgKHRoaXMuY2xvc2VEZWxheSkge1xuICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5zaG93UG9wcGVyID0gZmFsc2U7XG4gICAgICAgIH0sIHRoaXMuY2xvc2VEZWxheSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZURvY3VtZW50Q2xpY2s6IGZ1bmN0aW9uIGhhbmRsZURvY3VtZW50Q2xpY2soZSkge1xuICAgICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlIHx8IHRoaXMuJHJlZnMucmVmZXJlbmNlO1xuICAgICAgdmFyIHBvcHBlciA9IHRoaXMucG9wcGVyIHx8IHRoaXMuJHJlZnMucG9wcGVyO1xuXG4gICAgICBpZiAoIXJlZmVyZW5jZSAmJiB0aGlzLiRyZWZzLndyYXBwZXIuY2hpbGRyZW4pIHtcbiAgICAgICAgcmVmZXJlbmNlID0gdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRyZWZzLndyYXBwZXIuY2hpbGRyZW5bMF07XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuJGVsIHx8ICFyZWZlcmVuY2UgfHwgdGhpcy4kZWwuY29udGFpbnMoZS50YXJnZXQpIHx8IHJlZmVyZW5jZS5jb250YWlucyhlLnRhcmdldCkgfHwgIXBvcHBlciB8fCBwb3BwZXIuY29udGFpbnMoZS50YXJnZXQpKSByZXR1cm47XG4gICAgICB0aGlzLnNob3dQb3BwZXIgPSBmYWxzZTtcbiAgICB9LFxuICAgIGhhbmRsZUFmdGVyRW50ZXI6IGZ1bmN0aW9uIGhhbmRsZUFmdGVyRW50ZXIoKSB7XG4gICAgICB0aGlzLiRlbWl0KCdhZnRlci1lbnRlcicpO1xuICAgIH0sXG4gICAgaGFuZGxlQWZ0ZXJMZWF2ZTogZnVuY3Rpb24gaGFuZGxlQWZ0ZXJMZWF2ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2FmdGVyLWxlYXZlJyk7XG4gICAgICB0aGlzLmRvRGVzdHJveSgpO1xuICAgIH0sXG4gICAgY2xlYW51cDogZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgIGlmICh0aGlzLm9wZW5EZWxheSB8fCB0aGlzLmNsb3NlRGVsYXkpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlO1xuXG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5kb1RvZ2dsZSk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNldXAnLCB0aGlzLmRvQ2xvc2UpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZWRvd24nLCB0aGlzLmRvU2hvdyk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ2ZvY3VzaW4nLCB0aGlzLmRvU2hvdyk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ2ZvY3Vzb3V0JywgdGhpcy5kb0Nsb3NlKTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2Vkb3duJywgdGhpcy5kb1Nob3cpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZXVwJywgdGhpcy5kb0Nsb3NlKTtcbiAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkocmVmZXJlbmNlLCAnbW91c2VsZWF2ZScsIHRoaXMuaGFuZGxlTW91c2VMZWF2ZSk7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ21vdXNlZW50ZXInLCB0aGlzLmhhbmRsZU1vdXNlRW50ZXIpO1xuICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShkb2N1bWVudCwgJ2NsaWNrJywgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG1haW52dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcG9wb3Zlci9zcmMvbWFpbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19tYWludnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3BvcG92ZXIvc3JjL21haW4udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1haW4gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL3NyYy9kaXJlY3RpdmUuanNcbnZhciBnZXRSZWZlcmVuY2UgPSBmdW5jdGlvbiBnZXRSZWZlcmVuY2UoZWwsIGJpbmRpbmcsIHZub2RlKSB7XG4gIHZhciBfcmVmID0gYmluZGluZy5leHByZXNzaW9uID8gYmluZGluZy52YWx1ZSA6IGJpbmRpbmcuYXJnO1xuICB2YXIgcG9wcGVyID0gdm5vZGUuY29udGV4dC4kcmVmc1tfcmVmXTtcbiAgaWYgKHBvcHBlcikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBvcHBlcikpIHtcbiAgICAgIHBvcHBlclswXS4kcmVmcy5yZWZlcmVuY2UgPSBlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wcGVyLiRyZWZzLnJlZmVyZW5jZSA9IGVsO1xuICAgIH1cbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgZGlyZWN0aXZlID0gKHtcbiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBnZXRSZWZlcmVuY2UoZWwsIGJpbmRpbmcsIHZub2RlKTtcbiAgfSxcbiAgaW5zZXJ0ZWQ6IGZ1bmN0aW9uIGluc2VydGVkKGVsLCBiaW5kaW5nLCB2bm9kZSkge1xuICAgIGdldFJlZmVyZW5jZShlbCwgYmluZGluZywgdm5vZGUpO1xuICB9XG59KTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJ2dWVcIlxudmFyIGV4dGVybmFsX3Z1ZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xudmFyIGV4dGVybmFsX3Z1ZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihleHRlcm5hbF92dWVfKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wb3BvdmVyL2luZGV4LmpzXG5cblxuXG5cbmV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEuZGlyZWN0aXZlKCdwb3BvdmVyJywgZGlyZWN0aXZlKTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbm1haW4uaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmRpcmVjdGl2ZSgncG9wb3ZlcicsIGRpcmVjdGl2ZSk7XG4gIFZ1ZS5jb21wb25lbnQobWFpbi5uYW1lLCBtYWluKTtcbn07XG5tYWluLmRpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcG9wb3ZlciA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKG1haW4pO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/popover.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/progress.js":
- /*!*************************************************!*\
- !*** ./node_modules/element-ui/lib/progress.js ***!
- \*************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 103);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 103:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-progress\",\n class: [\n \"el-progress--\" + _vm.type,\n _vm.status ? \"is-\" + _vm.status : \"\",\n {\n \"el-progress--without-text\": !_vm.showText,\n \"el-progress--text-inside\": _vm.textInside\n }\n ],\n attrs: {\n role: \"progressbar\",\n \"aria-valuenow\": _vm.percentage,\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\"\n }\n },\n [\n _vm.type === \"line\"\n ? _c(\"div\", { staticClass: \"el-progress-bar\" }, [\n _c(\n \"div\",\n {\n staticClass: \"el-progress-bar__outer\",\n style: { height: _vm.strokeWidth + \"px\" }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"el-progress-bar__inner\",\n style: _vm.barStyle\n },\n [\n _vm.showText && _vm.textInside\n ? _c(\n \"div\",\n { staticClass: \"el-progress-bar__innerText\" },\n [_vm._v(_vm._s(_vm.content))]\n )\n : _vm._e()\n ]\n )\n ]\n )\n ])\n : _c(\n \"div\",\n {\n staticClass: \"el-progress-circle\",\n style: { height: _vm.width + \"px\", width: _vm.width + \"px\" }\n },\n [\n _c(\"svg\", { attrs: { viewBox: \"0 0 100 100\" } }, [\n _c(\"path\", {\n staticClass: \"el-progress-circle__track\",\n style: _vm.trailPathStyle,\n attrs: {\n d: _vm.trackPath,\n stroke: \"#e5e9f2\",\n \"stroke-width\": _vm.relativeStrokeWidth,\n fill: \"none\"\n }\n }),\n _c(\"path\", {\n staticClass: \"el-progress-circle__path\",\n style: _vm.circlePathStyle,\n attrs: {\n d: _vm.trackPath,\n stroke: _vm.stroke,\n fill: \"none\",\n \"stroke-linecap\": _vm.strokeLinecap,\n \"stroke-width\": _vm.percentage ? _vm.relativeStrokeWidth : 0\n }\n })\n ])\n ]\n ),\n _vm.showText && !_vm.textInside\n ? _c(\n \"div\",\n {\n staticClass: \"el-progress__text\",\n style: { fontSize: _vm.progressTextSize + \"px\" }\n },\n [\n !_vm.status\n ? [_vm._v(_vm._s(_vm.content))]\n : _c(\"i\", { class: _vm.iconClass })\n ],\n 2\n )\n : _vm._e()\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=template&id=229ee406&\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/progress/src/progress.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n/* harmony default export */ var progressvue_type_script_lang_js_ = ({\n name: 'ElProgress',\n props: {\n type: {\n type: String,\n default: 'line',\n validator: function validator(val) {\n return ['line', 'circle', 'dashboard'].indexOf(val) > -1;\n }\n },\n percentage: {\n type: Number,\n default: 0,\n required: true,\n validator: function validator(val) {\n return val >= 0 && val <= 100;\n }\n },\n status: {\n type: String,\n validator: function validator(val) {\n return ['success', 'exception', 'warning'].indexOf(val) > -1;\n }\n },\n strokeWidth: {\n type: Number,\n default: 6\n },\n strokeLinecap: {\n type: String,\n default: 'round'\n },\n textInside: {\n type: Boolean,\n default: false\n },\n width: {\n type: Number,\n default: 126\n },\n showText: {\n type: Boolean,\n default: true\n },\n color: {\n type: [String, Array, Function],\n default: ''\n },\n format: Function\n },\n computed: {\n barStyle: function barStyle() {\n var style = {};\n style.width = this.percentage + '%';\n style.backgroundColor = this.getCurrentColor(this.percentage);\n return style;\n },\n relativeStrokeWidth: function relativeStrokeWidth() {\n return (this.strokeWidth / this.width * 100).toFixed(1);\n },\n radius: function radius() {\n if (this.type === 'circle' || this.type === 'dashboard') {\n return parseInt(50 - parseFloat(this.relativeStrokeWidth) / 2, 10);\n } else {\n return 0;\n }\n },\n trackPath: function trackPath() {\n var radius = this.radius;\n var isDashboard = this.type === 'dashboard';\n return '\\n M 50 50\\n m 0 ' + (isDashboard ? '' : '-') + radius + '\\n a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '-' : '') + radius * 2 + '\\n a ' + radius + ' ' + radius + ' 0 1 1 0 ' + (isDashboard ? '' : '-') + radius * 2 + '\\n ';\n },\n perimeter: function perimeter() {\n return 2 * Math.PI * this.radius;\n },\n rate: function rate() {\n return this.type === 'dashboard' ? 0.75 : 1;\n },\n strokeDashoffset: function strokeDashoffset() {\n var offset = -1 * this.perimeter * (1 - this.rate) / 2;\n return offset + 'px';\n },\n trailPathStyle: function trailPathStyle() {\n return {\n strokeDasharray: this.perimeter * this.rate + 'px, ' + this.perimeter + 'px',\n strokeDashoffset: this.strokeDashoffset\n };\n },\n circlePathStyle: function circlePathStyle() {\n return {\n strokeDasharray: this.perimeter * this.rate * (this.percentage / 100) + 'px, ' + this.perimeter + 'px',\n strokeDashoffset: this.strokeDashoffset,\n transition: 'stroke-dasharray 0.6s ease 0s, stroke 0.6s ease'\n };\n },\n stroke: function stroke() {\n var ret = void 0;\n if (this.color) {\n ret = this.getCurrentColor(this.percentage);\n } else {\n switch (this.status) {\n case 'success':\n ret = '#13ce66';\n break;\n case 'exception':\n ret = '#ff4949';\n break;\n case 'warning':\n ret = '#e6a23c';\n break;\n default:\n ret = '#20a0ff';\n }\n }\n return ret;\n },\n iconClass: function iconClass() {\n if (this.status === 'warning') {\n return 'el-icon-warning';\n }\n if (this.type === 'line') {\n return this.status === 'success' ? 'el-icon-circle-check' : 'el-icon-circle-close';\n } else {\n return this.status === 'success' ? 'el-icon-check' : 'el-icon-close';\n }\n },\n progressTextSize: function progressTextSize() {\n return this.type === 'line' ? 12 + this.strokeWidth * 0.4 : this.width * 0.111111 + 2;\n },\n content: function content() {\n if (typeof this.format === 'function') {\n return this.format(this.percentage) || '';\n } else {\n return this.percentage + '%';\n }\n }\n },\n methods: {\n getCurrentColor: function getCurrentColor(percentage) {\n if (typeof this.color === 'function') {\n return this.color(percentage);\n } else if (typeof this.color === 'string') {\n return this.color;\n } else {\n return this.getLevelColor(percentage);\n }\n },\n getLevelColor: function getLevelColor(percentage) {\n var colorArray = this.getColorArray().sort(function (a, b) {\n return a.percentage - b.percentage;\n });\n\n for (var i = 0; i < colorArray.length; i++) {\n if (colorArray[i].percentage > percentage) {\n return colorArray[i].color;\n }\n }\n return colorArray[colorArray.length - 1].color;\n },\n getColorArray: function getColorArray() {\n var color = this.color;\n var span = 100 / color.length;\n return color.map(function (seriesColor, index) {\n if (typeof seriesColor === 'string') {\n return {\n color: seriesColor,\n percentage: (index + 1) * span\n };\n }\n return seriesColor;\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_progressvue_type_script_lang_js_ = (progressvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/progress/src/progress.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_progressvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/progress/src/progress.vue\"\n/* harmony default export */ var progress = (component.exports);\n// CONCATENATED MODULE: ./packages/progress/index.js\n\n\n/* istanbul ignore next */\nprogress.install = function (Vue) {\n Vue.component(progress.name, progress);\n};\n\n/* harmony default export */ var packages_progress = __webpack_exports__[\"default\"] = (progress);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcHJvZ3Jlc3MuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcHJvZ3Jlc3MuanM/YzI4NCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDEwMyk7XG4vKioqKioqLyB9KVxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovICh7XG5cbi8qKiovIDA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcImFcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBub3JtYWxpemVDb21wb25lbnQ7IH0pO1xuLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUgLyogdnVlLWNsaSBvbmx5ICovXG4pIHtcbiAgLy8gVnVlLmV4dGVuZCBjb25zdHJ1Y3RvciBleHBvcnQgaW50ZXJvcFxuICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzY3JpcHRFeHBvcnRzID09PSAnZnVuY3Rpb24nXG4gICAgPyBzY3JpcHRFeHBvcnRzLm9wdGlvbnNcbiAgICA6IHNjcmlwdEV4cG9ydHNcblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMTAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyOWVlNDA2JlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzXCIsXG4gICAgICBjbGFzczogW1xuICAgICAgICBcImVsLXByb2dyZXNzLS1cIiArIF92bS50eXBlLFxuICAgICAgICBfdm0uc3RhdHVzID8gXCJpcy1cIiArIF92bS5zdGF0dXMgOiBcIlwiLFxuICAgICAgICB7XG4gICAgICAgICAgXCJlbC1wcm9ncmVzcy0td2l0aG91dC10ZXh0XCI6ICFfdm0uc2hvd1RleHQsXG4gICAgICAgICAgXCJlbC1wcm9ncmVzcy0tdGV4dC1pbnNpZGVcIjogX3ZtLnRleHRJbnNpZGVcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIHJvbGU6IFwicHJvZ3Jlc3NiYXJcIixcbiAgICAgICAgXCJhcmlhLXZhbHVlbm93XCI6IF92bS5wZXJjZW50YWdlLFxuICAgICAgICBcImFyaWEtdmFsdWVtaW5cIjogXCIwXCIsXG4gICAgICAgIFwiYXJpYS12YWx1ZW1heFwiOiBcIjEwMFwiXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBfdm0udHlwZSA9PT0gXCJsaW5lXCJcbiAgICAgICAgPyBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhclwiIH0sIFtcbiAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyX19vdXRlclwiLFxuICAgICAgICAgICAgICAgIHN0eWxlOiB7IGhlaWdodDogX3ZtLnN0cm9rZVdpZHRoICsgXCJweFwiIH1cbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtYmFyX19pbm5lclwiLFxuICAgICAgICAgICAgICAgICAgICBzdHlsZTogX3ZtLmJhclN0eWxlXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uc2hvd1RleHQgJiYgX3ZtLnRleHRJbnNpZGVcbiAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWJhcl9faW5uZXJUZXh0XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihfdm0uX3MoX3ZtLmNvbnRlbnQpKV1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApXG4gICAgICAgICAgXSlcbiAgICAgICAgOiBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXByb2dyZXNzLWNpcmNsZVwiLFxuICAgICAgICAgICAgICBzdHlsZTogeyBoZWlnaHQ6IF92bS53aWR0aCArIFwicHhcIiwgd2lkdGg6IF92bS53aWR0aCArIFwicHhcIiB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcInN2Z1wiLCB7IGF0dHJzOiB7IHZpZXdCb3g6IFwiMCAwIDEwMCAxMDBcIiB9IH0sIFtcbiAgICAgICAgICAgICAgICBfYyhcInBhdGhcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcHJvZ3Jlc3MtY2lyY2xlX190cmFja1wiLFxuICAgICAgICAgICAgICAgICAgc3R5bGU6IF92bS50cmFpbFBhdGhTdHlsZSxcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IF92bS50cmFja1BhdGgsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjZTVlOWYyXCIsXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCI6IF92bS5yZWxhdGl2ZVN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF9jKFwicGF0aFwiLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzcy1jaXJjbGVfX3BhdGhcIixcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiBfdm0uY2lyY2xlUGF0aFN0eWxlLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogX3ZtLnRyYWNrUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBfdm0uc3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2UtbGluZWNhcFwiOiBfdm0uc3Ryb2tlTGluZWNhcCxcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJva2Utd2lkdGhcIjogX3ZtLnBlcmNlbnRhZ2UgPyBfdm0ucmVsYXRpdmVTdHJva2VXaWR0aCA6IDBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICBfdm0uc2hvd1RleHQgJiYgIV92bS50ZXh0SW5zaWRlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1wcm9ncmVzc19fdGV4dFwiLFxuICAgICAgICAgICAgICBzdHlsZTogeyBmb250U2l6ZTogX3ZtLnByb2dyZXNzVGV4dFNpemUgKyBcInB4XCIgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgIV92bS5zdGF0dXNcbiAgICAgICAgICAgICAgICA/IFtfdm0uX3YoX3ZtLl9zKF92bS5jb250ZW50KSldXG4gICAgICAgICAgICAgICAgOiBfYyhcImlcIiwgeyBjbGFzczogX3ZtLmljb25DbGFzcyB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIDJcbiAgICAgICAgICApXG4gICAgICAgIDogX3ZtLl9lKClcbiAgICBdXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTIyOWVlNDA2JlxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcHJvZ3Jlc3N2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxQcm9ncmVzcycsXG4gIHByb3BzOiB7XG4gICAgdHlwZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2xpbmUnLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiBbJ2xpbmUnLCAnY2lyY2xlJywgJ2Rhc2hib2FyZCddLmluZGV4T2YodmFsKSA+IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgcGVyY2VudGFnZToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IodmFsKSB7XG4gICAgICAgIHJldHVybiB2YWwgPj0gMCAmJiB2YWwgPD0gMTAwO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RhdHVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgcmV0dXJuIFsnc3VjY2VzcycsICdleGNlcHRpb24nLCAnd2FybmluZyddLmluZGV4T2YodmFsKSA+IC0xO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3Ryb2tlV2lkdGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDZcbiAgICB9LFxuICAgIHN0cm9rZUxpbmVjYXA6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdyb3VuZCdcbiAgICB9LFxuICAgIHRleHRJbnNpZGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgd2lkdGg6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDEyNlxuICAgIH0sXG4gICAgc2hvd1RleHQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjb2xvcjoge1xuICAgICAgdHlwZTogW1N0cmluZywgQXJyYXksIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcbiAgICBmb3JtYXQ6IEZ1bmN0aW9uXG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgYmFyU3R5bGU6IGZ1bmN0aW9uIGJhclN0eWxlKCkge1xuICAgICAgdmFyIHN0eWxlID0ge307XG4gICAgICBzdHlsZS53aWR0aCA9IHRoaXMucGVyY2VudGFnZSArICclJztcbiAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZ2V0Q3VycmVudENvbG9yKHRoaXMucGVyY2VudGFnZSk7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSxcbiAgICByZWxhdGl2ZVN0cm9rZVdpZHRoOiBmdW5jdGlvbiByZWxhdGl2ZVN0cm9rZVdpZHRoKCkge1xuICAgICAgcmV0dXJuICh0aGlzLnN0cm9rZVdpZHRoIC8gdGhpcy53aWR0aCAqIDEwMCkudG9GaXhlZCgxKTtcbiAgICB9LFxuICAgIHJhZGl1czogZnVuY3Rpb24gcmFkaXVzKCkge1xuICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2NpcmNsZScgfHwgdGhpcy50eXBlID09PSAnZGFzaGJvYXJkJykge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQoNTAgLSBwYXJzZUZsb2F0KHRoaXMucmVsYXRpdmVTdHJva2VXaWR0aCkgLyAyLCAxMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9LFxuICAgIHRyYWNrUGF0aDogZnVuY3Rpb24gdHJhY2tQYXRoKCkge1xuICAgICAgdmFyIHJhZGl1cyA9IHRoaXMucmFkaXVzO1xuICAgICAgdmFyIGlzRGFzaGJvYXJkID0gdGhpcy50eXBlID09PSAnZGFzaGJvYXJkJztcbiAgICAgIHJldHVybiAnXFxuICAgICAgICBNIDUwIDUwXFxuICAgICAgICBtIDAgJyArIChpc0Rhc2hib2FyZCA/ICcnIDogJy0nKSArIHJhZGl1cyArICdcXG4gICAgICAgIGEgJyArIHJhZGl1cyArICcgJyArIHJhZGl1cyArICcgMCAxIDEgMCAnICsgKGlzRGFzaGJvYXJkID8gJy0nIDogJycpICsgcmFkaXVzICogMiArICdcXG4gICAgICAgIGEgJyArIHJhZGl1cyArICcgJyArIHJhZGl1cyArICcgMCAxIDEgMCAnICsgKGlzRGFzaGJvYXJkID8gJycgOiAnLScpICsgcmFkaXVzICogMiArICdcXG4gICAgICAgICc7XG4gICAgfSxcbiAgICBwZXJpbWV0ZXI6IGZ1bmN0aW9uIHBlcmltZXRlcigpIHtcbiAgICAgIHJldHVybiAyICogTWF0aC5QSSAqIHRoaXMucmFkaXVzO1xuICAgIH0sXG4gICAgcmF0ZTogZnVuY3Rpb24gcmF0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdkYXNoYm9hcmQnID8gMC43NSA6IDE7XG4gICAgfSxcbiAgICBzdHJva2VEYXNob2Zmc2V0OiBmdW5jdGlvbiBzdHJva2VEYXNob2Zmc2V0KCkge1xuICAgICAgdmFyIG9mZnNldCA9IC0xICogdGhpcy5wZXJpbWV0ZXIgKiAoMSAtIHRoaXMucmF0ZSkgLyAyO1xuICAgICAgcmV0dXJuIG9mZnNldCArICdweCc7XG4gICAgfSxcbiAgICB0cmFpbFBhdGhTdHlsZTogZnVuY3Rpb24gdHJhaWxQYXRoU3R5bGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHJva2VEYXNoYXJyYXk6IHRoaXMucGVyaW1ldGVyICogdGhpcy5yYXRlICsgJ3B4LCAnICsgdGhpcy5wZXJpbWV0ZXIgKyAncHgnLFxuICAgICAgICBzdHJva2VEYXNob2Zmc2V0OiB0aGlzLnN0cm9rZURhc2hvZmZzZXRcbiAgICAgIH07XG4gICAgfSxcbiAgICBjaXJjbGVQYXRoU3R5bGU6IGZ1bmN0aW9uIGNpcmNsZVBhdGhTdHlsZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0cm9rZURhc2hhcnJheTogdGhpcy5wZXJpbWV0ZXIgKiB0aGlzLnJhdGUgKiAodGhpcy5wZXJjZW50YWdlIC8gMTAwKSArICdweCwgJyArIHRoaXMucGVyaW1ldGVyICsgJ3B4JyxcbiAgICAgICAgc3Ryb2tlRGFzaG9mZnNldDogdGhpcy5zdHJva2VEYXNob2Zmc2V0LFxuICAgICAgICB0cmFuc2l0aW9uOiAnc3Ryb2tlLWRhc2hhcnJheSAwLjZzIGVhc2UgMHMsIHN0cm9rZSAwLjZzIGVhc2UnXG4gICAgICB9O1xuICAgIH0sXG4gICAgc3Ryb2tlOiBmdW5jdGlvbiBzdHJva2UoKSB7XG4gICAgICB2YXIgcmV0ID0gdm9pZCAwO1xuICAgICAgaWYgKHRoaXMuY29sb3IpIHtcbiAgICAgICAgcmV0ID0gdGhpcy5nZXRDdXJyZW50Q29sb3IodGhpcy5wZXJjZW50YWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zdGF0dXMpIHtcbiAgICAgICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgICAgIHJldCA9ICcjMTNjZTY2JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2V4Y2VwdGlvbic6XG4gICAgICAgICAgICByZXQgPSAnI2ZmNDk0OSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgICAgIHJldCA9ICcjZTZhMjNjJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXQgPSAnIzIwYTBmZic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcbiAgICBpY29uQ2xhc3M6IGZ1bmN0aW9uIGljb25DbGFzcygpIHtcbiAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gJ3dhcm5pbmcnKSB7XG4gICAgICAgIHJldHVybiAnZWwtaWNvbi13YXJuaW5nJztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICdsaW5lJykge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09ICdzdWNjZXNzJyA/ICdlbC1pY29uLWNpcmNsZS1jaGVjaycgOiAnZWwtaWNvbi1jaXJjbGUtY2xvc2UnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSAnc3VjY2VzcycgPyAnZWwtaWNvbi1jaGVjaycgOiAnZWwtaWNvbi1jbG9zZSc7XG4gICAgICB9XG4gICAgfSxcbiAgICBwcm9ncmVzc1RleHRTaXplOiBmdW5jdGlvbiBwcm9ncmVzc1RleHRTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2xpbmUnID8gMTIgKyB0aGlzLnN0cm9rZVdpZHRoICogMC40IDogdGhpcy53aWR0aCAqIDAuMTExMTExICsgMjtcbiAgICB9LFxuICAgIGNvbnRlbnQ6IGZ1bmN0aW9uIGNvbnRlbnQoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdCh0aGlzLnBlcmNlbnRhZ2UpIHx8ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyY2VudGFnZSArICclJztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDdXJyZW50Q29sb3I6IGZ1bmN0aW9uIGdldEN1cnJlbnRDb2xvcihwZXJjZW50YWdlKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29sb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3IocGVyY2VudGFnZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldExldmVsQ29sb3IocGVyY2VudGFnZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRMZXZlbENvbG9yOiBmdW5jdGlvbiBnZXRMZXZlbENvbG9yKHBlcmNlbnRhZ2UpIHtcbiAgICAgIHZhciBjb2xvckFycmF5ID0gdGhpcy5nZXRDb2xvckFycmF5KCkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYS5wZXJjZW50YWdlIC0gYi5wZXJjZW50YWdlO1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29sb3JBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29sb3JBcnJheVtpXS5wZXJjZW50YWdlID4gcGVyY2VudGFnZSkge1xuICAgICAgICAgIHJldHVybiBjb2xvckFycmF5W2ldLmNvbG9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sb3JBcnJheVtjb2xvckFycmF5Lmxlbmd0aCAtIDFdLmNvbG9yO1xuICAgIH0sXG4gICAgZ2V0Q29sb3JBcnJheTogZnVuY3Rpb24gZ2V0Q29sb3JBcnJheSgpIHtcbiAgICAgIHZhciBjb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICB2YXIgc3BhbiA9IDEwMCAvIGNvbG9yLmxlbmd0aDtcbiAgICAgIHJldHVybiBjb2xvci5tYXAoZnVuY3Rpb24gKHNlcmllc0NvbG9yLCBpbmRleCkge1xuICAgICAgICBpZiAodHlwZW9mIHNlcmllc0NvbG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb2xvcjogc2VyaWVzQ29sb3IsXG4gICAgICAgICAgICBwZXJjZW50YWdlOiAoaW5kZXggKyAxKSAqIHNwYW5cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXJpZXNDb2xvcjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3Byb2dyZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHByb2dyZXNzdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1xudmFyIGNvbXBvbmVudE5vcm1hbGl6ZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3Byb2dyZXNzL3NyYy9wcm9ncmVzcy52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19wcm9ncmVzc3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAoZmFsc2UpIHsgdmFyIGFwaTsgfVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9wcm9ncmVzcy9zcmMvcHJvZ3Jlc3MudnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHByb2dyZXNzID0gKGNvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcHJvZ3Jlc3MvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xucHJvZ3Jlc3MuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHtcbiAgVnVlLmNvbXBvbmVudChwcm9ncmVzcy5uYW1lLCBwcm9ncmVzcyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19wcm9ncmVzcyA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKHByb2dyZXNzKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/progress.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/radio.js":
- /*!**********************************************!*\
- !*** ./node_modules/element-ui/lib/radio.js ***!
- \**********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 87);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 87:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"label\",\n {\n staticClass: \"el-radio\",\n class: [\n _vm.border && _vm.radioSize ? \"el-radio--\" + _vm.radioSize : \"\",\n { \"is-disabled\": _vm.isDisabled },\n { \"is-focus\": _vm.focus },\n { \"is-bordered\": _vm.border },\n { \"is-checked\": _vm.model === _vm.label }\n ],\n attrs: {\n role: \"radio\",\n \"aria-checked\": _vm.model === _vm.label,\n \"aria-disabled\": _vm.isDisabled,\n tabindex: _vm.tabIndex\n },\n on: {\n keydown: function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"space\", 32, $event.key, [\" \", \"Spacebar\"])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.model = _vm.isDisabled ? _vm.model : _vm.label\n }\n }\n },\n [\n _c(\n \"span\",\n {\n staticClass: \"el-radio__input\",\n class: {\n \"is-disabled\": _vm.isDisabled,\n \"is-checked\": _vm.model === _vm.label\n }\n },\n [\n _c(\"span\", { staticClass: \"el-radio__inner\" }),\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.model,\n expression: \"model\"\n }\n ],\n ref: \"radio\",\n staticClass: \"el-radio__original\",\n attrs: {\n type: \"radio\",\n \"aria-hidden\": \"true\",\n name: _vm.name,\n disabled: _vm.isDisabled,\n tabindex: \"-1\",\n autocomplete: \"off\"\n },\n domProps: {\n value: _vm.label,\n checked: _vm._q(_vm.model, _vm.label)\n },\n on: {\n focus: function($event) {\n _vm.focus = true\n },\n blur: function($event) {\n _vm.focus = false\n },\n change: [\n function($event) {\n _vm.model = _vm.label\n },\n _vm.handleChange\n ]\n }\n })\n ]\n ),\n _c(\n \"span\",\n {\n staticClass: \"el-radio__label\",\n on: {\n keydown: function($event) {\n $event.stopPropagation()\n }\n }\n },\n [\n _vm._t(\"default\"),\n !_vm.$slots.default ? [_vm._v(_vm._s(_vm.label))] : _vm._e()\n ],\n 2\n )\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=template&id=69cd6268&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(4);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/radio/src/radio.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var radiovue_type_script_lang_js_ = ({\n name: 'ElRadio',\n\n mixins: [emitter_default.a],\n\n inject: {\n elForm: {\n default: ''\n },\n\n elFormItem: {\n default: ''\n }\n },\n\n componentName: 'ElRadio',\n\n props: {\n value: {},\n label: {},\n disabled: Boolean,\n name: String,\n border: Boolean,\n size: String\n },\n\n data: function data() {\n return {\n focus: false\n };\n },\n\n computed: {\n isGroup: function isGroup() {\n var parent = this.$parent;\n while (parent) {\n if (parent.$options.componentName !== 'ElRadioGroup') {\n parent = parent.$parent;\n } else {\n this._radioGroup = parent;\n return true;\n }\n }\n return false;\n },\n\n model: {\n get: function get() {\n return this.isGroup ? this._radioGroup.value : this.value;\n },\n set: function set(val) {\n if (this.isGroup) {\n this.dispatch('ElRadioGroup', 'input', [val]);\n } else {\n this.$emit('input', val);\n }\n this.$refs.radio && (this.$refs.radio.checked = this.model === this.label);\n }\n },\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n radioSize: function radioSize() {\n var temRadioSize = this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n return this.isGroup ? this._radioGroup.radioGroupSize || temRadioSize : temRadioSize;\n },\n isDisabled: function isDisabled() {\n return this.isGroup ? this._radioGroup.disabled || this.disabled || (this.elForm || {}).disabled : this.disabled || (this.elForm || {}).disabled;\n },\n tabIndex: function tabIndex() {\n return this.isDisabled || this.isGroup && this.model !== this.label ? -1 : 0;\n }\n },\n\n methods: {\n handleChange: function handleChange() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.$emit('change', _this.model);\n _this.isGroup && _this.dispatch('ElRadioGroup', 'handleChange', _this.model);\n });\n }\n }\n});\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_radiovue_type_script_lang_js_ = (radiovue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/radio/src/radio.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_radiovue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/radio/src/radio.vue\"\n/* harmony default export */ var src_radio = (component.exports);\n// CONCATENATED MODULE: ./packages/radio/index.js\n\n\n/* istanbul ignore next */\nsrc_radio.install = function (Vue) {\n Vue.component(src_radio.name, src_radio);\n};\n\n/* harmony default export */ var packages_radio = __webpack_exports__[\"default\"] = (src_radio);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcmFkaW8uanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvcmFkaW8uanM/ZjQ5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9XG4vKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdGk6IG1vZHVsZUlkLFxuLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuLyoqKioqKi8gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3Rcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbi8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbi8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiL2Rpc3QvXCI7XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDg3KTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDg3OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTY5Y2Q2MjY4JlxudmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImxhYmVsXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9cIixcbiAgICAgIGNsYXNzOiBbXG4gICAgICAgIF92bS5ib3JkZXIgJiYgX3ZtLnJhZGlvU2l6ZSA/IFwiZWwtcmFkaW8tLVwiICsgX3ZtLnJhZGlvU2l6ZSA6IFwiXCIsXG4gICAgICAgIHsgXCJpcy1kaXNhYmxlZFwiOiBfdm0uaXNEaXNhYmxlZCB9LFxuICAgICAgICB7IFwiaXMtZm9jdXNcIjogX3ZtLmZvY3VzIH0sXG4gICAgICAgIHsgXCJpcy1ib3JkZXJlZFwiOiBfdm0uYm9yZGVyIH0sXG4gICAgICAgIHsgXCJpcy1jaGVja2VkXCI6IF92bS5tb2RlbCA9PT0gX3ZtLmxhYmVsIH1cbiAgICAgIF0sXG4gICAgICBhdHRyczoge1xuICAgICAgICByb2xlOiBcInJhZGlvXCIsXG4gICAgICAgIFwiYXJpYS1jaGVja2VkXCI6IF92bS5tb2RlbCA9PT0gX3ZtLmxhYmVsLFxuICAgICAgICBcImFyaWEtZGlzYWJsZWRcIjogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgIHRhYmluZGV4OiBfdm0udGFiSW5kZXhcbiAgICAgIH0sXG4gICAgICBvbjoge1xuICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInNwYWNlXCIsIDMyLCAkZXZlbnQua2V5LCBbXCIgXCIsIFwiU3BhY2ViYXJcIl0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIF92bS5tb2RlbCA9IF92bS5pc0Rpc2FibGVkID8gX3ZtLm1vZGVsIDogX3ZtLmxhYmVsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvX19pbnB1dFwiLFxuICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICBcImlzLWRpc2FibGVkXCI6IF92bS5pc0Rpc2FibGVkLFxuICAgICAgICAgICAgXCJpcy1jaGVja2VkXCI6IF92bS5tb2RlbCA9PT0gX3ZtLmxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9fX2lubmVyXCIgfSksXG4gICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IF92bS5tb2RlbCxcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIm1vZGVsXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlZjogXCJyYWRpb1wiLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiZWwtcmFkaW9fX29yaWdpbmFsXCIsXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB0eXBlOiBcInJhZGlvXCIsXG4gICAgICAgICAgICAgIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgIG5hbWU6IF92bS5uYW1lLFxuICAgICAgICAgICAgICBkaXNhYmxlZDogX3ZtLmlzRGlzYWJsZWQsXG4gICAgICAgICAgICAgIHRhYmluZGV4OiBcIi0xXCIsXG4gICAgICAgICAgICAgIGF1dG9jb21wbGV0ZTogXCJvZmZcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRvbVByb3BzOiB7XG4gICAgICAgICAgICAgIHZhbHVlOiBfdm0ubGFiZWwsXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IF92bS5fcShfdm0ubW9kZWwsIF92bS5sYWJlbClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgX3ZtLmZvY3VzID0gdHJ1ZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBfdm0uZm9jdXMgPSBmYWxzZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjaGFuZ2U6IFtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgIF92bS5tb2RlbCA9IF92bS5sYWJlbFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgX3ZtLmhhbmRsZUNoYW5nZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgXVxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcInNwYW5cIixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXJhZGlvX19sYWJlbFwiLFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBrZXlkb3duOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKSxcbiAgICAgICAgICAhX3ZtLiRzbG90cy5kZWZhdWx0ID8gW192bS5fdihfdm0uX3MoX3ZtLmxhYmVsKSldIDogX3ZtLl9lKClcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKVxuICAgIF1cbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NjljZDYyNjgmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9yYWRpby9zcmMvcmFkaW8udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgcmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoe1xuICBuYW1lOiAnRWxSYWRpbycsXG5cbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmFdLFxuXG4gIGluamVjdDoge1xuICAgIGVsRm9ybToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9LFxuXG4gICAgZWxGb3JtSXRlbToge1xuICAgICAgZGVmYXVsdDogJydcbiAgICB9XG4gIH0sXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsUmFkaW8nLFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHt9LFxuICAgIGxhYmVsOiB7fSxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBuYW1lOiBTdHJpbmcsXG4gICAgYm9yZGVyOiBCb29sZWFuLFxuICAgIHNpemU6IFN0cmluZ1xuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvY3VzOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0dyb3VwOiBmdW5jdGlvbiBpc0dyb3VwKCkge1xuICAgICAgdmFyIHBhcmVudCA9IHRoaXMuJHBhcmVudDtcbiAgICAgIHdoaWxlIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKHBhcmVudC4kb3B0aW9ucy5jb21wb25lbnROYW1lICE9PSAnRWxSYWRpb0dyb3VwJykge1xuICAgICAgICAgIHBhcmVudCA9IHBhcmVudC4kcGFyZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3JhZGlvR3JvdXAgPSBwYXJlbnQ7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuXG4gICAgbW9kZWw6IHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5fcmFkaW9Hcm91cC52YWx1ZSA6IHRoaXMudmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsKSB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXApIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbFJhZGlvR3JvdXAnLCAnaW5wdXQnLCBbdmFsXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuJHJlZnMucmFkaW8gJiYgKHRoaXMuJHJlZnMucmFkaW8uY2hlY2tlZCA9IHRoaXMubW9kZWwgPT09IHRoaXMubGFiZWwpO1xuICAgICAgfVxuICAgIH0sXG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICByYWRpb1NpemU6IGZ1bmN0aW9uIHJhZGlvU2l6ZSgpIHtcbiAgICAgIHZhciB0ZW1SYWRpb1NpemUgPSB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgICByZXR1cm4gdGhpcy5pc0dyb3VwID8gdGhpcy5fcmFkaW9Hcm91cC5yYWRpb0dyb3VwU2l6ZSB8fCB0ZW1SYWRpb1NpemUgOiB0ZW1SYWRpb1NpemU7XG4gICAgfSxcbiAgICBpc0Rpc2FibGVkOiBmdW5jdGlvbiBpc0Rpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNHcm91cCA/IHRoaXMuX3JhZGlvR3JvdXAuZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkIDogdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgdGFiSW5kZXg6IGZ1bmN0aW9uIHRhYkluZGV4KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZCB8fCB0aGlzLmlzR3JvdXAgJiYgdGhpcy5tb2RlbCAhPT0gdGhpcy5sYWJlbCA/IC0xIDogMDtcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy4kZW1pdCgnY2hhbmdlJywgX3RoaXMubW9kZWwpO1xuICAgICAgICBfdGhpcy5pc0dyb3VwICYmIF90aGlzLmRpc3BhdGNoKCdFbFJhZGlvR3JvdXAnLCAnaGFuZGxlQ2hhbmdlJywgX3RoaXMubW9kZWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfcmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAocmFkaW92dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vc3JjL3JhZGlvLnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIGNvbXBvbmVudCA9IE9iamVjdChjb21wb25lbnROb3JtYWxpemVyW1wiYVwiIC8qIGRlZmF1bHQgKi9dKShcbiAgc3JjX3JhZGlvdnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3JhZGlvL3NyYy9yYWRpby52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3JhZGlvID0gKGNvbXBvbmVudC5leHBvcnRzKTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvcmFkaW8vaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX3JhZGlvLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQoc3JjX3JhZGlvLm5hbWUsIHNyY19yYWRpbyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19yYWRpbyA9IF9fd2VicGFja19leHBvcnRzX19bXCJkZWZhdWx0XCJdID0gKHNyY19yYWRpbyk7XG5cbi8qKiovIH0pXG5cbi8qKioqKiovIH0pOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/radio.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/scrollbar.js":
- /*!**************************************************!*\
- !*** ./node_modules/element-ui/lib/scrollbar.js ***!
- \**************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 131);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 131:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/resize-event\"\nvar resize_event_ = __webpack_require__(16);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scrollbar-width\"\nvar scrollbar_width_ = __webpack_require__(38);\nvar scrollbar_width_default = /*#__PURE__*/__webpack_require__.n(scrollbar_width_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(3);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __webpack_require__(2);\n\n// CONCATENATED MODULE: ./packages/scrollbar/src/util.js\nvar BAR_MAP = {\n vertical: {\n offset: 'offsetHeight',\n scroll: 'scrollTop',\n scrollSize: 'scrollHeight',\n size: 'height',\n key: 'vertical',\n axis: 'Y',\n client: 'clientY',\n direction: 'top'\n },\n horizontal: {\n offset: 'offsetWidth',\n scroll: 'scrollLeft',\n scrollSize: 'scrollWidth',\n size: 'width',\n key: 'horizontal',\n axis: 'X',\n client: 'clientX',\n direction: 'left'\n }\n};\n\nfunction renderThumbStyle(_ref) {\n var move = _ref.move,\n size = _ref.size,\n bar = _ref.bar;\n\n var style = {};\n var translate = 'translate' + bar.axis + '(' + move + '%)';\n\n style[bar.size] = size;\n style.transform = translate;\n style.msTransform = translate;\n style.webkitTransform = translate;\n\n return style;\n};\n// CONCATENATED MODULE: ./packages/scrollbar/src/bar.js\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var src_bar = ({\n name: 'Bar',\n\n props: {\n vertical: Boolean,\n size: String,\n move: Number\n },\n\n computed: {\n bar: function bar() {\n return BAR_MAP[this.vertical ? 'vertical' : 'horizontal'];\n },\n wrap: function wrap() {\n return this.$parent.wrap;\n }\n },\n\n render: function render(h) {\n var size = this.size,\n move = this.move,\n bar = this.bar;\n\n\n return h(\n 'div',\n {\n 'class': ['el-scrollbar__bar', 'is-' + bar.key],\n on: {\n 'mousedown': this.clickTrackHandler\n }\n },\n [h('div', {\n ref: 'thumb',\n 'class': 'el-scrollbar__thumb',\n on: {\n 'mousedown': this.clickThumbHandler\n },\n\n style: renderThumbStyle({ size: size, move: move, bar: bar }) })]\n );\n },\n\n\n methods: {\n clickThumbHandler: function clickThumbHandler(e) {\n // prevent click event of right button\n if (e.ctrlKey || e.button === 2) {\n return;\n }\n this.startDrag(e);\n this[this.bar.axis] = e.currentTarget[this.bar.offset] - (e[this.bar.client] - e.currentTarget.getBoundingClientRect()[this.bar.direction]);\n },\n clickTrackHandler: function clickTrackHandler(e) {\n var offset = Math.abs(e.target.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]);\n var thumbHalf = this.$refs.thumb[this.bar.offset] / 2;\n var thumbPositionPercentage = (offset - thumbHalf) * 100 / this.$el[this.bar.offset];\n\n this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n },\n startDrag: function startDrag(e) {\n e.stopImmediatePropagation();\n this.cursorDown = true;\n\n Object(dom_[\"on\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n Object(dom_[\"on\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n document.onselectstart = function () {\n return false;\n };\n },\n mouseMoveDocumentHandler: function mouseMoveDocumentHandler(e) {\n if (this.cursorDown === false) return;\n var prevPage = this[this.bar.axis];\n\n if (!prevPage) return;\n\n var offset = (this.$el.getBoundingClientRect()[this.bar.direction] - e[this.bar.client]) * -1;\n var thumbClickPosition = this.$refs.thumb[this.bar.offset] - prevPage;\n var thumbPositionPercentage = (offset - thumbClickPosition) * 100 / this.$el[this.bar.offset];\n\n this.wrap[this.bar.scroll] = thumbPositionPercentage * this.wrap[this.bar.scrollSize] / 100;\n },\n mouseUpDocumentHandler: function mouseUpDocumentHandler(e) {\n this.cursorDown = false;\n this[this.bar.axis] = 0;\n Object(dom_[\"off\"])(document, 'mousemove', this.mouseMoveDocumentHandler);\n document.onselectstart = null;\n }\n },\n\n destroyed: function destroyed() {\n Object(dom_[\"off\"])(document, 'mouseup', this.mouseUpDocumentHandler);\n }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/src/main.js\n// reference https://github.com/noeldelgado/gemini-scrollbar/blob/master/index.js\n\n\n\n\n\n\n/* istanbul ignore next */\n/* harmony default export */ var main = ({\n name: 'ElScrollbar',\n\n components: { Bar: src_bar },\n\n props: {\n native: Boolean,\n wrapStyle: {},\n wrapClass: {},\n viewClass: {},\n viewStyle: {},\n noresize: Boolean, // 如果 container 尺寸不会发生变化,最好设置它可以优化性能\n tag: {\n type: String,\n default: 'div'\n }\n },\n\n data: function data() {\n return {\n sizeWidth: '0',\n sizeHeight: '0',\n moveX: 0,\n moveY: 0\n };\n },\n\n\n computed: {\n wrap: function wrap() {\n return this.$refs.wrap;\n }\n },\n\n render: function render(h) {\n var gutter = scrollbar_width_default()();\n var style = this.wrapStyle;\n\n if (gutter) {\n var gutterWith = '-' + gutter + 'px';\n var gutterStyle = 'margin-bottom: ' + gutterWith + '; margin-right: ' + gutterWith + ';';\n\n if (Array.isArray(this.wrapStyle)) {\n style = Object(util_[\"toObject\"])(this.wrapStyle);\n style.marginRight = style.marginBottom = gutterWith;\n } else if (typeof this.wrapStyle === 'string') {\n style += gutterStyle;\n } else {\n style = gutterStyle;\n }\n }\n var view = h(this.tag, {\n class: ['el-scrollbar__view', this.viewClass],\n style: this.viewStyle,\n ref: 'resize'\n }, this.$slots.default);\n var wrap = h(\n 'div',\n {\n ref: 'wrap',\n style: style,\n on: {\n 'scroll': this.handleScroll\n },\n\n 'class': [this.wrapClass, 'el-scrollbar__wrap', gutter ? '' : 'el-scrollbar__wrap--hidden-default'] },\n [[view]]\n );\n var nodes = void 0;\n\n if (!this.native) {\n nodes = [wrap, h(src_bar, {\n attrs: {\n move: this.moveX,\n size: this.sizeWidth }\n }), h(src_bar, {\n attrs: {\n vertical: true,\n move: this.moveY,\n size: this.sizeHeight }\n })];\n } else {\n nodes = [h(\n 'div',\n {\n ref: 'wrap',\n 'class': [this.wrapClass, 'el-scrollbar__wrap'],\n style: style },\n [[view]]\n )];\n }\n return h('div', { class: 'el-scrollbar' }, nodes);\n },\n\n\n methods: {\n handleScroll: function handleScroll() {\n var wrap = this.wrap;\n\n this.moveY = wrap.scrollTop * 100 / wrap.clientHeight;\n this.moveX = wrap.scrollLeft * 100 / wrap.clientWidth;\n },\n update: function update() {\n var heightPercentage = void 0,\n widthPercentage = void 0;\n var wrap = this.wrap;\n if (!wrap) return;\n\n heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n widthPercentage = wrap.clientWidth * 100 / wrap.scrollWidth;\n\n this.sizeHeight = heightPercentage < 100 ? heightPercentage + '%' : '';\n this.sizeWidth = widthPercentage < 100 ? widthPercentage + '%' : '';\n }\n },\n\n mounted: function mounted() {\n if (this.native) return;\n this.$nextTick(this.update);\n !this.noresize && Object(resize_event_[\"addResizeListener\"])(this.$refs.resize, this.update);\n },\n beforeDestroy: function beforeDestroy() {\n if (this.native) return;\n !this.noresize && Object(resize_event_[\"removeResizeListener\"])(this.$refs.resize, this.update);\n }\n});\n// CONCATENATED MODULE: ./packages/scrollbar/index.js\n\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n Vue.component(main.name, main);\n};\n\n/* harmony default export */ var scrollbar = __webpack_exports__[\"default\"] = (main);\n\n/***/ }),\n\n/***/ 16:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/resize-event */ \"./node_modules/element-ui/lib/utils/resize-event.js\");\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 38:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scrollbar-width */ \"./node_modules/element-ui/lib/utils/scrollbar-width.js\");\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3Njcm9sbGJhci5qcz8xNGU5Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMxKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMTMxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudFwiXG52YXIgcmVzaXplX2V2ZW50XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoXCJcbnZhciBzY3JvbGxiYXJfd2lkdGhfID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XG52YXIgc2Nyb2xsYmFyX3dpZHRoX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKHNjcm9sbGJhcl93aWR0aF8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiXG52YXIgdXRpbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvZG9tXCJcbnZhciBkb21fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvc3JjL3V0aWwuanNcbnZhciBCQVJfTUFQID0ge1xuICB2ZXJ0aWNhbDoge1xuICAgIG9mZnNldDogJ29mZnNldEhlaWdodCcsXG4gICAgc2Nyb2xsOiAnc2Nyb2xsVG9wJyxcbiAgICBzY3JvbGxTaXplOiAnc2Nyb2xsSGVpZ2h0JyxcbiAgICBzaXplOiAnaGVpZ2h0JyxcbiAgICBrZXk6ICd2ZXJ0aWNhbCcsXG4gICAgYXhpczogJ1knLFxuICAgIGNsaWVudDogJ2NsaWVudFknLFxuICAgIGRpcmVjdGlvbjogJ3RvcCdcbiAgfSxcbiAgaG9yaXpvbnRhbDoge1xuICAgIG9mZnNldDogJ29mZnNldFdpZHRoJyxcbiAgICBzY3JvbGw6ICdzY3JvbGxMZWZ0JyxcbiAgICBzY3JvbGxTaXplOiAnc2Nyb2xsV2lkdGgnLFxuICAgIHNpemU6ICd3aWR0aCcsXG4gICAga2V5OiAnaG9yaXpvbnRhbCcsXG4gICAgYXhpczogJ1gnLFxuICAgIGNsaWVudDogJ2NsaWVudFgnLFxuICAgIGRpcmVjdGlvbjogJ2xlZnQnXG4gIH1cbn07XG5cbmZ1bmN0aW9uIHJlbmRlclRodW1iU3R5bGUoX3JlZikge1xuICB2YXIgbW92ZSA9IF9yZWYubW92ZSxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBiYXIgPSBfcmVmLmJhcjtcblxuICB2YXIgc3R5bGUgPSB7fTtcbiAgdmFyIHRyYW5zbGF0ZSA9ICd0cmFuc2xhdGUnICsgYmFyLmF4aXMgKyAnKCcgKyBtb3ZlICsgJyUpJztcblxuICBzdHlsZVtiYXIuc2l6ZV0gPSBzaXplO1xuICBzdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG4gIHN0eWxlLm1zVHJhbnNmb3JtID0gdHJhbnNsYXRlO1xuICBzdHlsZS53ZWJraXRUcmFuc2Zvcm0gPSB0cmFuc2xhdGU7XG5cbiAgcmV0dXJuIHN0eWxlO1xufTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2Nyb2xsYmFyL3NyYy9iYXIuanNcblxuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfYmFyID0gKHtcbiAgbmFtZTogJ0JhcicsXG5cbiAgcHJvcHM6IHtcbiAgICB2ZXJ0aWNhbDogQm9vbGVhbixcbiAgICBzaXplOiBTdHJpbmcsXG4gICAgbW92ZTogTnVtYmVyXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBiYXI6IGZ1bmN0aW9uIGJhcigpIHtcbiAgICAgIHJldHVybiBCQVJfTUFQW3RoaXMudmVydGljYWwgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnXTtcbiAgICB9LFxuICAgIHdyYXA6IGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50LndyYXA7XG4gICAgfVxuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSxcbiAgICAgICAgbW92ZSA9IHRoaXMubW92ZSxcbiAgICAgICAgYmFyID0gdGhpcy5iYXI7XG5cblxuICAgIHJldHVybiBoKFxuICAgICAgJ2RpdicsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6IFsnZWwtc2Nyb2xsYmFyX19iYXInLCAnaXMtJyArIGJhci5rZXldLFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdtb3VzZWRvd24nOiB0aGlzLmNsaWNrVHJhY2tIYW5kbGVyXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbaCgnZGl2Jywge1xuICAgICAgICByZWY6ICd0aHVtYicsXG4gICAgICAgICdjbGFzcyc6ICdlbC1zY3JvbGxiYXJfX3RodW1iJyxcbiAgICAgICAgb246IHtcbiAgICAgICAgICAnbW91c2Vkb3duJzogdGhpcy5jbGlja1RodW1iSGFuZGxlclxuICAgICAgICB9LFxuXG4gICAgICAgIHN0eWxlOiByZW5kZXJUaHVtYlN0eWxlKHsgc2l6ZTogc2l6ZSwgbW92ZTogbW92ZSwgYmFyOiBiYXIgfSkgfSldXG4gICAgKTtcbiAgfSxcblxuXG4gIG1ldGhvZHM6IHtcbiAgICBjbGlja1RodW1iSGFuZGxlcjogZnVuY3Rpb24gY2xpY2tUaHVtYkhhbmRsZXIoZSkge1xuICAgICAgLy8gcHJldmVudCBjbGljayBldmVudCBvZiByaWdodCBidXR0b25cbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5idXR0b24gPT09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zdGFydERyYWcoZSk7XG4gICAgICB0aGlzW3RoaXMuYmFyLmF4aXNdID0gZS5jdXJyZW50VGFyZ2V0W3RoaXMuYmFyLm9mZnNldF0gLSAoZVt0aGlzLmJhci5jbGllbnRdIC0gZS5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0pO1xuICAgIH0sXG4gICAgY2xpY2tUcmFja0hhbmRsZXI6IGZ1bmN0aW9uIGNsaWNrVHJhY2tIYW5kbGVyKGUpIHtcbiAgICAgIHZhciBvZmZzZXQgPSBNYXRoLmFicyhlLnRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0aGlzLmJhci5kaXJlY3Rpb25dIC0gZVt0aGlzLmJhci5jbGllbnRdKTtcbiAgICAgIHZhciB0aHVtYkhhbGYgPSB0aGlzLiRyZWZzLnRodW1iW3RoaXMuYmFyLm9mZnNldF0gLyAyO1xuICAgICAgdmFyIHRodW1iUG9zaXRpb25QZXJjZW50YWdlID0gKG9mZnNldCAtIHRodW1iSGFsZikgKiAxMDAgLyB0aGlzLiRlbFt0aGlzLmJhci5vZmZzZXRdO1xuXG4gICAgICB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsXSA9IHRodW1iUG9zaXRpb25QZXJjZW50YWdlICogdGhpcy53cmFwW3RoaXMuYmFyLnNjcm9sbFNpemVdIC8gMTAwO1xuICAgIH0sXG4gICAgc3RhcnREcmFnOiBmdW5jdGlvbiBzdGFydERyYWcoZSkge1xuICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMuY3Vyc29yRG93biA9IHRydWU7XG5cbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKGRvY3VtZW50LCAnbW91c2Vtb3ZlJywgdGhpcy5tb3VzZU1vdmVEb2N1bWVudEhhbmRsZXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5tb3VzZVVwRG9jdW1lbnRIYW5kbGVyKTtcbiAgICAgIGRvY3VtZW50Lm9uc2VsZWN0c3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBtb3VzZU1vdmVEb2N1bWVudEhhbmRsZXI6IGZ1bmN0aW9uIG1vdXNlTW92ZURvY3VtZW50SGFuZGxlcihlKSB7XG4gICAgICBpZiAodGhpcy5jdXJzb3JEb3duID09PSBmYWxzZSkgcmV0dXJuO1xuICAgICAgdmFyIHByZXZQYWdlID0gdGhpc1t0aGlzLmJhci5heGlzXTtcblxuICAgICAgaWYgKCFwcmV2UGFnZSkgcmV0dXJuO1xuXG4gICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3RoaXMuYmFyLmRpcmVjdGlvbl0gLSBlW3RoaXMuYmFyLmNsaWVudF0pICogLTE7XG4gICAgICB2YXIgdGh1bWJDbGlja1Bvc2l0aW9uID0gdGhpcy4kcmVmcy50aHVtYlt0aGlzLmJhci5vZmZzZXRdIC0gcHJldlBhZ2U7XG4gICAgICB2YXIgdGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UgPSAob2Zmc2V0IC0gdGh1bWJDbGlja1Bvc2l0aW9uKSAqIDEwMCAvIHRoaXMuJGVsW3RoaXMuYmFyLm9mZnNldF07XG5cbiAgICAgIHRoaXMud3JhcFt0aGlzLmJhci5zY3JvbGxdID0gdGh1bWJQb3NpdGlvblBlcmNlbnRhZ2UgKiB0aGlzLndyYXBbdGhpcy5iYXIuc2Nyb2xsU2l6ZV0gLyAxMDA7XG4gICAgfSxcbiAgICBtb3VzZVVwRG9jdW1lbnRIYW5kbGVyOiBmdW5jdGlvbiBtb3VzZVVwRG9jdW1lbnRIYW5kbGVyKGUpIHtcbiAgICAgIHRoaXMuY3Vyc29yRG93biA9IGZhbHNlO1xuICAgICAgdGhpc1t0aGlzLmJhci5heGlzXSA9IDA7XG4gICAgICBPYmplY3QoZG9tX1tcIm9mZlwiXSkoZG9jdW1lbnQsICdtb3VzZW1vdmUnLCB0aGlzLm1vdXNlTW92ZURvY3VtZW50SGFuZGxlcik7XG4gICAgICBkb2N1bWVudC5vbnNlbGVjdHN0YXJ0ID0gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKGRvY3VtZW50LCAnbW91c2V1cCcsIHRoaXMubW91c2VVcERvY3VtZW50SGFuZGxlcik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvc3JjL21haW4uanNcbi8vIHJlZmVyZW5jZSBodHRwczovL2dpdGh1Yi5jb20vbm9lbGRlbGdhZG8vZ2VtaW5pLXNjcm9sbGJhci9ibG9iL21hc3Rlci9pbmRleC5qc1xuXG5cblxuXG5cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG1haW4gPSAoe1xuICBuYW1lOiAnRWxTY3JvbGxiYXInLFxuXG4gIGNvbXBvbmVudHM6IHsgQmFyOiBzcmNfYmFyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBuYXRpdmU6IEJvb2xlYW4sXG4gICAgd3JhcFN0eWxlOiB7fSxcbiAgICB3cmFwQ2xhc3M6IHt9LFxuICAgIHZpZXdDbGFzczoge30sXG4gICAgdmlld1N0eWxlOiB7fSxcbiAgICBub3Jlc2l6ZTogQm9vbGVhbiwgLy8g5aaC5p6cIGNvbnRhaW5lciDlsLrlr7jkuI3kvJrlj5HnlJ/lj5jljJbvvIzmnIDlpb3orr7nva7lroPlj6/ku6XkvJjljJbmgKfog71cbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdkaXYnXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpemVXaWR0aDogJzAnLFxuICAgICAgc2l6ZUhlaWdodDogJzAnLFxuICAgICAgbW92ZVg6IDAsXG4gICAgICBtb3ZlWTogMFxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHdyYXA6IGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy53cmFwO1xuICAgIH1cbiAgfSxcblxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoKSB7XG4gICAgdmFyIGd1dHRlciA9IHNjcm9sbGJhcl93aWR0aF9kZWZhdWx0KCkoKTtcbiAgICB2YXIgc3R5bGUgPSB0aGlzLndyYXBTdHlsZTtcblxuICAgIGlmIChndXR0ZXIpIHtcbiAgICAgIHZhciBndXR0ZXJXaXRoID0gJy0nICsgZ3V0dGVyICsgJ3B4JztcbiAgICAgIHZhciBndXR0ZXJTdHlsZSA9ICdtYXJnaW4tYm90dG9tOiAnICsgZ3V0dGVyV2l0aCArICc7IG1hcmdpbi1yaWdodDogJyArIGd1dHRlcldpdGggKyAnOyc7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMud3JhcFN0eWxlKSkge1xuICAgICAgICBzdHlsZSA9IE9iamVjdCh1dGlsX1tcInRvT2JqZWN0XCJdKSh0aGlzLndyYXBTdHlsZSk7XG4gICAgICAgIHN0eWxlLm1hcmdpblJpZ2h0ID0gc3R5bGUubWFyZ2luQm90dG9tID0gZ3V0dGVyV2l0aDtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMud3JhcFN0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgICBzdHlsZSArPSBndXR0ZXJTdHlsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlID0gZ3V0dGVyU3R5bGU7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciB2aWV3ID0gaCh0aGlzLnRhZywge1xuICAgICAgY2xhc3M6IFsnZWwtc2Nyb2xsYmFyX192aWV3JywgdGhpcy52aWV3Q2xhc3NdLFxuICAgICAgc3R5bGU6IHRoaXMudmlld1N0eWxlLFxuICAgICAgcmVmOiAncmVzaXplJ1xuICAgIH0sIHRoaXMuJHNsb3RzLmRlZmF1bHQpO1xuICAgIHZhciB3cmFwID0gaChcbiAgICAgICdkaXYnLFxuICAgICAge1xuICAgICAgICByZWY6ICd3cmFwJyxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdzY3JvbGwnOiB0aGlzLmhhbmRsZVNjcm9sbFxuICAgICAgICB9LFxuXG4gICAgICAgICdjbGFzcyc6IFt0aGlzLndyYXBDbGFzcywgJ2VsLXNjcm9sbGJhcl9fd3JhcCcsIGd1dHRlciA/ICcnIDogJ2VsLXNjcm9sbGJhcl9fd3JhcC0taGlkZGVuLWRlZmF1bHQnXSB9LFxuICAgICAgW1t2aWV3XV1cbiAgICApO1xuICAgIHZhciBub2RlcyA9IHZvaWQgMDtcblxuICAgIGlmICghdGhpcy5uYXRpdmUpIHtcbiAgICAgIG5vZGVzID0gW3dyYXAsIGgoc3JjX2Jhciwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIG1vdmU6IHRoaXMubW92ZVgsXG4gICAgICAgICAgc2l6ZTogdGhpcy5zaXplV2lkdGggfVxuICAgICAgfSksIGgoc3JjX2Jhciwge1xuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIHZlcnRpY2FsOiB0cnVlLFxuICAgICAgICAgIG1vdmU6IHRoaXMubW92ZVksXG4gICAgICAgICAgc2l6ZTogdGhpcy5zaXplSGVpZ2h0IH1cbiAgICAgIH0pXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZXMgPSBbaChcbiAgICAgICAgJ2RpdicsXG4gICAgICAgIHtcbiAgICAgICAgICByZWY6ICd3cmFwJyxcbiAgICAgICAgICAnY2xhc3MnOiBbdGhpcy53cmFwQ2xhc3MsICdlbC1zY3JvbGxiYXJfX3dyYXAnXSxcbiAgICAgICAgICBzdHlsZTogc3R5bGUgfSxcbiAgICAgICAgW1t2aWV3XV1cbiAgICAgICldO1xuICAgIH1cbiAgICByZXR1cm4gaCgnZGl2JywgeyBjbGFzczogJ2VsLXNjcm9sbGJhcicgfSwgbm9kZXMpO1xuICB9LFxuXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZVNjcm9sbDogZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuICAgICAgdmFyIHdyYXAgPSB0aGlzLndyYXA7XG5cbiAgICAgIHRoaXMubW92ZVkgPSB3cmFwLnNjcm9sbFRvcCAqIDEwMCAvIHdyYXAuY2xpZW50SGVpZ2h0O1xuICAgICAgdGhpcy5tb3ZlWCA9IHdyYXAuc2Nyb2xsTGVmdCAqIDEwMCAvIHdyYXAuY2xpZW50V2lkdGg7XG4gICAgfSxcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHZhciBoZWlnaHRQZXJjZW50YWdlID0gdm9pZCAwLFxuICAgICAgICAgIHdpZHRoUGVyY2VudGFnZSA9IHZvaWQgMDtcbiAgICAgIHZhciB3cmFwID0gdGhpcy53cmFwO1xuICAgICAgaWYgKCF3cmFwKSByZXR1cm47XG5cbiAgICAgIGhlaWdodFBlcmNlbnRhZ2UgPSB3cmFwLmNsaWVudEhlaWdodCAqIDEwMCAvIHdyYXAuc2Nyb2xsSGVpZ2h0O1xuICAgICAgd2lkdGhQZXJjZW50YWdlID0gd3JhcC5jbGllbnRXaWR0aCAqIDEwMCAvIHdyYXAuc2Nyb2xsV2lkdGg7XG5cbiAgICAgIHRoaXMuc2l6ZUhlaWdodCA9IGhlaWdodFBlcmNlbnRhZ2UgPCAxMDAgPyBoZWlnaHRQZXJjZW50YWdlICsgJyUnIDogJyc7XG4gICAgICB0aGlzLnNpemVXaWR0aCA9IHdpZHRoUGVyY2VudGFnZSA8IDEwMCA/IHdpZHRoUGVyY2VudGFnZSArICclJyA6ICcnO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLm5hdGl2ZSkgcmV0dXJuO1xuICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlKTtcbiAgICAhdGhpcy5ub3Jlc2l6ZSAmJiBPYmplY3QocmVzaXplX2V2ZW50X1tcImFkZFJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRyZWZzLnJlc2l6ZSwgdGhpcy51cGRhdGUpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIGlmICh0aGlzLm5hdGl2ZSkgcmV0dXJuO1xuICAgICF0aGlzLm5vcmVzaXplICYmIE9iamVjdChyZXNpemVfZXZlbnRfW1wicmVtb3ZlUmVzaXplTGlzdGVuZXJcIl0pKHRoaXMuJHJlZnMucmVzaXplLCB0aGlzLnVwZGF0ZSk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zY3JvbGxiYXIvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xubWFpbi5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KG1haW4ubmFtZSwgbWFpbik7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzY3JvbGxiYXIgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChtYWluKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE2OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9yZXNpemUtZXZlbnRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9kb21cIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbGJhci13aWR0aFwiKTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/scrollbar.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/select.js":
- /*!***********************************************!*\
- !*** ./node_modules/element-ui/lib/select.js ***!
- \***********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 61);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 10:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/input */ \"./node_modules/element-ui/lib/input.js\");\n\n/***/ }),\n\n/***/ 12:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/clickoutside */ \"./node_modules/element-ui/lib/utils/clickoutside.js\");\n\n/***/ }),\n\n/***/ 15:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/scrollbar */ \"./node_modules/element-ui/lib/scrollbar.js\");\n\n/***/ }),\n\n/***/ 16:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/resize-event */ \"./node_modules/element-ui/lib/utils/resize-event.js\");\n\n/***/ }),\n\n/***/ 18:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce/debounce */ \"./node_modules/throttle-debounce/debounce.js\");\n\n/***/ }),\n\n/***/ 21:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/shared */ \"./node_modules/element-ui/lib/utils/shared.js\");\n\n/***/ }),\n\n/***/ 22:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/focus */ \"./node_modules/element-ui/lib/mixins/focus.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 31:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/scroll-into-view */ \"./node_modules/element-ui/lib/utils/scroll-into-view.js\");\n\n/***/ }),\n\n/***/ 33:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=template&id=7a44c642&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"li\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible,\n expression: \"visible\"\n }\n ],\n staticClass: \"el-select-dropdown__item\",\n class: {\n selected: _vm.itemSelected,\n \"is-disabled\": _vm.disabled || _vm.groupDisabled || _vm.limitReached,\n hover: _vm.hover\n },\n on: {\n mouseenter: _vm.hoverItem,\n click: function($event) {\n $event.stopPropagation()\n return _vm.selectOptionClick($event)\n }\n }\n },\n [_vm._t(\"default\", [_c(\"span\", [_vm._v(_vm._s(_vm.currentLabel))])])],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=template&id=7a44c642&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(4);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(3);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/option.vue?vue&type=script&lang=js&\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ var optionvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a],\n\n name: 'ElOption',\n\n componentName: 'ElOption',\n\n inject: ['select'],\n\n props: {\n value: {\n required: true\n },\n label: [String, Number],\n created: Boolean,\n disabled: {\n type: Boolean,\n default: false\n }\n },\n\n data: function data() {\n return {\n index: -1,\n groupDisabled: false,\n visible: true,\n hitState: false,\n hover: false\n };\n },\n\n\n computed: {\n isObject: function isObject() {\n return Object.prototype.toString.call(this.value).toLowerCase() === '[object object]';\n },\n currentLabel: function currentLabel() {\n return this.label || (this.isObject ? '' : this.value);\n },\n currentValue: function currentValue() {\n return this.value || this.label || '';\n },\n itemSelected: function itemSelected() {\n if (!this.select.multiple) {\n return this.isEqual(this.value, this.select.value);\n } else {\n return this.contains(this.select.value, this.value);\n }\n },\n limitReached: function limitReached() {\n if (this.select.multiple) {\n return !this.itemSelected && (this.select.value || []).length >= this.select.multipleLimit && this.select.multipleLimit > 0;\n } else {\n return false;\n }\n }\n },\n\n watch: {\n currentLabel: function currentLabel() {\n if (!this.created && !this.select.remote) this.dispatch('ElSelect', 'setSelected');\n },\n value: function value(val, oldVal) {\n var _select = this.select,\n remote = _select.remote,\n valueKey = _select.valueKey;\n\n if (!this.created && !remote) {\n if (valueKey && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' && (typeof oldVal === 'undefined' ? 'undefined' : _typeof(oldVal)) === 'object' && val[valueKey] === oldVal[valueKey]) {\n return;\n }\n this.dispatch('ElSelect', 'setSelected');\n }\n }\n },\n\n methods: {\n isEqual: function isEqual(a, b) {\n if (!this.isObject) {\n return a === b;\n } else {\n var valueKey = this.select.valueKey;\n return Object(util_[\"getValueByPath\"])(a, valueKey) === Object(util_[\"getValueByPath\"])(b, valueKey);\n }\n },\n contains: function contains() {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var target = arguments[1];\n\n if (!this.isObject) {\n return arr && arr.indexOf(target) > -1;\n } else {\n var valueKey = this.select.valueKey;\n return arr && arr.some(function (item) {\n return Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(target, valueKey);\n });\n }\n },\n handleGroupDisabled: function handleGroupDisabled(val) {\n this.groupDisabled = val;\n },\n hoverItem: function hoverItem() {\n if (!this.disabled && !this.groupDisabled) {\n this.select.hoverIndex = this.select.options.indexOf(this);\n }\n },\n selectOptionClick: function selectOptionClick() {\n if (this.disabled !== true && this.groupDisabled !== true) {\n this.dispatch('ElSelect', 'handleOptionClick', [this, true]);\n }\n },\n queryChange: function queryChange(query) {\n this.visible = new RegExp(Object(util_[\"escapeRegexpString\"])(query), 'i').test(this.currentLabel) || this.created;\n if (!this.visible) {\n this.select.filteredOptionsCount--;\n }\n }\n },\n\n created: function created() {\n this.select.options.push(this);\n this.select.cachedOptions.push(this);\n this.select.optionsCount++;\n this.select.filteredOptionsCount++;\n\n this.$on('queryChange', this.queryChange);\n this.$on('handleGroupDisabled', this.handleGroupDisabled);\n },\n beforeDestroy: function beforeDestroy() {\n var _select2 = this.select,\n selected = _select2.selected,\n multiple = _select2.multiple;\n\n var selectedOptions = multiple ? selected : [selected];\n var index = this.select.cachedOptions.indexOf(this);\n var selectedIndex = selectedOptions.indexOf(this);\n\n // if option is not selected, remove it from cache\n if (index > -1 && selectedIndex < 0) {\n this.select.cachedOptions.splice(index, 1);\n }\n this.select.onOptionDestroy(this.select.options.indexOf(this));\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/option.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_optionvue_type_script_lang_js_ = (optionvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/select/src/option.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_optionvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/select/src/option.vue\"\n/* harmony default export */ var src_option = __webpack_exports__[\"a\"] = (component.exports);\n\n/***/ }),\n\n/***/ 37:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/tag */ \"./node_modules/element-ui/lib/tag.js\");\n\n/***/ }),\n\n/***/ 4:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/emitter */ \"./node_modules/element-ui/lib/mixins/emitter.js\");\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vue-popper */ \"./node_modules/element-ui/lib/utils/vue-popper.js\");\n\n/***/ }),\n\n/***/ 6:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/mixins/locale */ \"./node_modules/element-ui/lib/mixins/locale.js\");\n\n/***/ }),\n\n/***/ 61:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n directives: [\n {\n name: \"clickoutside\",\n rawName: \"v-clickoutside\",\n value: _vm.handleClose,\n expression: \"handleClose\"\n }\n ],\n staticClass: \"el-select\",\n class: [_vm.selectSize ? \"el-select--\" + _vm.selectSize : \"\"],\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.toggleMenu($event)\n }\n }\n },\n [\n _vm.multiple\n ? _c(\n \"div\",\n {\n ref: \"tags\",\n staticClass: \"el-select__tags\",\n style: { \"max-width\": _vm.inputWidth - 32 + \"px\", width: \"100%\" }\n },\n [\n _vm.collapseTags && _vm.selected.length\n ? _c(\n \"span\",\n [\n _c(\n \"el-tag\",\n {\n attrs: {\n closable: !_vm.selectDisabled,\n size: _vm.collapseTagSize,\n hit: _vm.selected[0].hitState,\n type: \"info\",\n \"disable-transitions\": \"\"\n },\n on: {\n close: function($event) {\n _vm.deleteTag($event, _vm.selected[0])\n }\n }\n },\n [\n _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n _vm._v(_vm._s(_vm.selected[0].currentLabel))\n ])\n ]\n ),\n _vm.selected.length > 1\n ? _c(\n \"el-tag\",\n {\n attrs: {\n closable: false,\n size: _vm.collapseTagSize,\n type: \"info\",\n \"disable-transitions\": \"\"\n }\n },\n [\n _c(\n \"span\",\n { staticClass: \"el-select__tags-text\" },\n [_vm._v(\"+ \" + _vm._s(_vm.selected.length - 1))]\n )\n ]\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n !_vm.collapseTags\n ? _c(\n \"transition-group\",\n { on: { \"after-leave\": _vm.resetInputHeight } },\n _vm._l(_vm.selected, function(item) {\n return _c(\n \"el-tag\",\n {\n key: _vm.getValueKey(item),\n attrs: {\n closable: !_vm.selectDisabled,\n size: _vm.collapseTagSize,\n hit: item.hitState,\n type: \"info\",\n \"disable-transitions\": \"\"\n },\n on: {\n close: function($event) {\n _vm.deleteTag($event, item)\n }\n }\n },\n [\n _c(\"span\", { staticClass: \"el-select__tags-text\" }, [\n _vm._v(_vm._s(item.currentLabel))\n ])\n ]\n )\n }),\n 1\n )\n : _vm._e(),\n _vm.filterable\n ? _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.query,\n expression: \"query\"\n }\n ],\n ref: \"input\",\n staticClass: \"el-select__input\",\n class: [_vm.selectSize ? \"is-\" + _vm.selectSize : \"\"],\n style: {\n \"flex-grow\": \"1\",\n width: _vm.inputLength / (_vm.inputWidth - 32) + \"%\",\n \"max-width\": _vm.inputWidth - 42 + \"px\"\n },\n attrs: {\n type: \"text\",\n disabled: _vm.selectDisabled,\n autocomplete: _vm.autoComplete || _vm.autocomplete\n },\n domProps: { value: _vm.query },\n on: {\n focus: _vm.handleFocus,\n blur: function($event) {\n _vm.softFocus = false\n },\n keyup: _vm.managePlaceholder,\n keydown: [\n _vm.resetInputState,\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.handleNavigate(\"next\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.preventDefault()\n _vm.handleNavigate(\"prev\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"enter\",\n 13,\n $event.key,\n \"Enter\"\n )\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.selectOption($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n \"Esc\",\n \"Escape\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.visible = false\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k(\n $event.keyCode,\n \"delete\",\n [8, 46],\n $event.key,\n [\"Backspace\", \"Delete\", \"Del\"]\n )\n ) {\n return null\n }\n return _vm.deletePrevTag($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n _vm.visible = false\n }\n ],\n compositionstart: _vm.handleComposition,\n compositionupdate: _vm.handleComposition,\n compositionend: _vm.handleComposition,\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.query = $event.target.value\n },\n _vm.debouncedQueryChange\n ]\n }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _c(\n \"el-input\",\n {\n ref: \"reference\",\n class: { \"is-focus\": _vm.visible },\n attrs: {\n type: \"text\",\n placeholder: _vm.currentPlaceholder,\n name: _vm.name,\n id: _vm.id,\n autocomplete: _vm.autoComplete || _vm.autocomplete,\n size: _vm.selectSize,\n disabled: _vm.selectDisabled,\n readonly: _vm.readonly,\n \"validate-event\": false,\n tabindex: _vm.multiple && _vm.filterable ? \"-1\" : null\n },\n on: {\n focus: _vm.handleFocus,\n blur: _vm.handleBlur,\n input: _vm.debouncedOnInputChange,\n compositionstart: _vm.handleComposition,\n compositionupdate: _vm.handleComposition,\n compositionend: _vm.handleComposition\n },\n nativeOn: {\n keydown: [\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"down\", 40, $event.key, [\n \"Down\",\n \"ArrowDown\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.handleNavigate(\"next\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"up\", 38, $event.key, [\n \"Up\",\n \"ArrowUp\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.handleNavigate(\"prev\")\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"enter\", 13, $event.key, \"Enter\")\n ) {\n return null\n }\n $event.preventDefault()\n return _vm.selectOption($event)\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"esc\", 27, $event.key, [\n \"Esc\",\n \"Escape\"\n ])\n ) {\n return null\n }\n $event.stopPropagation()\n $event.preventDefault()\n _vm.visible = false\n },\n function($event) {\n if (\n !(\"button\" in $event) &&\n _vm._k($event.keyCode, \"tab\", 9, $event.key, \"Tab\")\n ) {\n return null\n }\n _vm.visible = false\n }\n ],\n mouseenter: function($event) {\n _vm.inputHovering = true\n },\n mouseleave: function($event) {\n _vm.inputHovering = false\n }\n },\n model: {\n value: _vm.selectedLabel,\n callback: function($$v) {\n _vm.selectedLabel = $$v\n },\n expression: \"selectedLabel\"\n }\n },\n [\n _vm.$slots.prefix\n ? _c(\"template\", { slot: \"prefix\" }, [_vm._t(\"prefix\")], 2)\n : _vm._e(),\n _c(\"template\", { slot: \"suffix\" }, [\n _c(\"i\", {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: !_vm.showClose,\n expression: \"!showClose\"\n }\n ],\n class: [\n \"el-select__caret\",\n \"el-input__icon\",\n \"el-icon-\" + _vm.iconClass\n ]\n }),\n _vm.showClose\n ? _c(\"i\", {\n staticClass:\n \"el-select__caret el-input__icon el-icon-circle-close\",\n on: { click: _vm.handleClearClick }\n })\n : _vm._e()\n ])\n ],\n 2\n ),\n _c(\n \"transition\",\n {\n attrs: { name: \"el-zoom-in-top\" },\n on: {\n \"before-enter\": _vm.handleMenuEnter,\n \"after-leave\": _vm.doDestroy\n }\n },\n [\n _c(\n \"el-select-menu\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.visible && _vm.emptyText !== false,\n expression: \"visible && emptyText !== false\"\n }\n ],\n ref: \"popper\",\n attrs: { \"append-to-body\": _vm.popperAppendToBody }\n },\n [\n _c(\n \"el-scrollbar\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.options.length > 0 && !_vm.loading,\n expression: \"options.length > 0 && !loading\"\n }\n ],\n ref: \"scrollbar\",\n class: {\n \"is-empty\":\n !_vm.allowCreate &&\n _vm.query &&\n _vm.filteredOptionsCount === 0\n },\n attrs: {\n tag: \"ul\",\n \"wrap-class\": \"el-select-dropdown__wrap\",\n \"view-class\": \"el-select-dropdown__list\"\n }\n },\n [\n _vm.showNewOption\n ? _c(\"el-option\", {\n attrs: { value: _vm.query, created: \"\" }\n })\n : _vm._e(),\n _vm._t(\"default\")\n ],\n 2\n ),\n _vm.emptyText &&\n (!_vm.allowCreate ||\n _vm.loading ||\n (_vm.allowCreate && _vm.options.length === 0))\n ? [\n _vm.$slots.empty\n ? _vm._t(\"empty\")\n : _c(\"p\", { staticClass: \"el-select-dropdown__empty\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(_vm.emptyText) +\n \"\\n \"\n )\n ])\n ]\n : _vm._e()\n ],\n 2\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=template&id=0e4aade6&\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/emitter\"\nvar emitter_ = __webpack_require__(4);\nvar emitter_default = /*#__PURE__*/__webpack_require__.n(emitter_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/focus\"\nvar focus_ = __webpack_require__(22);\nvar focus_default = /*#__PURE__*/__webpack_require__.n(focus_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/mixins/locale\"\nvar locale_ = __webpack_require__(6);\nvar locale_default = /*#__PURE__*/__webpack_require__.n(locale_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/input\"\nvar input_ = __webpack_require__(10);\nvar input_default = /*#__PURE__*/__webpack_require__.n(input_);\n\n// CONCATENATED MODULE: ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\nvar select_dropdownvue_type_template_id_06828748_render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"el-select-dropdown el-popper\",\n class: [{ \"is-multiple\": _vm.$parent.multiple }, _vm.popperClass],\n style: { minWidth: _vm.minWidth }\n },\n [_vm._t(\"default\")],\n 2\n )\n}\nvar select_dropdownvue_type_template_id_06828748_staticRenderFns = []\nselect_dropdownvue_type_template_id_06828748_render._withStripped = true\n\n\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=template&id=06828748&\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __webpack_require__(5);\nvar vue_popper_default = /*#__PURE__*/__webpack_require__.n(vue_popper_);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n/* harmony default export */ var select_dropdownvue_type_script_lang_js_ = ({\n name: 'ElSelectDropdown',\n\n componentName: 'ElSelectDropdown',\n\n mixins: [vue_popper_default.a],\n\n props: {\n placement: {\n default: 'bottom-start'\n },\n\n boundariesPadding: {\n default: 0\n },\n\n popperOptions: {\n default: function _default() {\n return {\n gpuAcceleration: false\n };\n }\n },\n\n visibleArrow: {\n default: true\n },\n\n appendToBody: {\n type: Boolean,\n default: true\n }\n },\n\n data: function data() {\n return {\n minWidth: ''\n };\n },\n\n\n computed: {\n popperClass: function popperClass() {\n return this.$parent.popperClass;\n }\n },\n\n watch: {\n '$parent.inputWidth': function $parentInputWidth() {\n this.minWidth = this.$parent.$el.getBoundingClientRect().width + 'px';\n }\n },\n\n mounted: function mounted() {\n var _this = this;\n\n this.referenceElm = this.$parent.$refs.reference.$el;\n this.$parent.popperElm = this.popperElm = this.$el;\n this.$on('updatePopper', function () {\n if (_this.$parent.visible) _this.updatePopper();\n });\n this.$on('destroyPopper', this.destroyPopper);\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_select_dropdownvue_type_script_lang_js_ = (select_dropdownvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/select/src/select-dropdown.vue\n\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_select_dropdownvue_type_script_lang_js_,\n select_dropdownvue_type_template_id_06828748_render,\n select_dropdownvue_type_template_id_06828748_staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/select/src/select-dropdown.vue\"\n/* harmony default export */ var select_dropdown = (component.exports);\n// EXTERNAL MODULE: ./packages/select/src/option.vue + 4 modules\nvar src_option = __webpack_require__(33);\n\n// EXTERNAL MODULE: external \"element-ui/lib/tag\"\nvar tag_ = __webpack_require__(37);\nvar tag_default = /*#__PURE__*/__webpack_require__.n(tag_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/scrollbar\"\nvar scrollbar_ = __webpack_require__(15);\nvar scrollbar_default = /*#__PURE__*/__webpack_require__.n(scrollbar_);\n\n// EXTERNAL MODULE: external \"throttle-debounce/debounce\"\nvar debounce_ = __webpack_require__(18);\nvar debounce_default = /*#__PURE__*/__webpack_require__.n(debounce_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/clickoutside\"\nvar clickoutside_ = __webpack_require__(12);\nvar clickoutside_default = /*#__PURE__*/__webpack_require__.n(clickoutside_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/resize-event\"\nvar resize_event_ = __webpack_require__(16);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/scroll-into-view\"\nvar scroll_into_view_ = __webpack_require__(31);\nvar scroll_into_view_default = /*#__PURE__*/__webpack_require__.n(scroll_into_view_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(3);\n\n// CONCATENATED MODULE: ./packages/select/src/navigation-mixin.js\n/* harmony default export */ var navigation_mixin = ({\n data: function data() {\n return {\n hoverOption: -1\n };\n },\n\n\n computed: {\n optionsAllDisabled: function optionsAllDisabled() {\n return this.options.filter(function (option) {\n return option.visible;\n }).every(function (option) {\n return option.disabled;\n });\n }\n },\n\n watch: {\n hoverIndex: function hoverIndex(val) {\n var _this = this;\n\n if (typeof val === 'number' && val > -1) {\n this.hoverOption = this.options[val] || {};\n }\n this.options.forEach(function (option) {\n option.hover = _this.hoverOption === option;\n });\n }\n },\n\n methods: {\n navigateOptions: function navigateOptions(direction) {\n var _this2 = this;\n\n if (!this.visible) {\n this.visible = true;\n return;\n }\n if (this.options.length === 0 || this.filteredOptionsCount === 0) return;\n if (!this.optionsAllDisabled) {\n if (direction === 'next') {\n this.hoverIndex++;\n if (this.hoverIndex === this.options.length) {\n this.hoverIndex = 0;\n }\n } else if (direction === 'prev') {\n this.hoverIndex--;\n if (this.hoverIndex < 0) {\n this.hoverIndex = this.options.length - 1;\n }\n }\n var option = this.options[this.hoverIndex];\n if (option.disabled === true || option.groupDisabled === true || !option.visible) {\n this.navigateOptions(direction);\n }\n this.$nextTick(function () {\n return _this2.scrollToOption(_this2.hoverOption);\n });\n }\n }\n }\n});\n// EXTERNAL MODULE: external \"element-ui/lib/utils/shared\"\nvar shared_ = __webpack_require__(21);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/select/src/select.vue?vue&type=script&lang=js&\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ var selectvue_type_script_lang_js_ = ({\n mixins: [emitter_default.a, locale_default.a, focus_default()('reference'), navigation_mixin],\n\n name: 'ElSelect',\n\n componentName: 'ElSelect',\n\n inject: {\n elForm: {\n default: ''\n },\n\n elFormItem: {\n default: ''\n }\n },\n\n provide: function provide() {\n return {\n 'select': this\n };\n },\n\n\n computed: {\n _elFormItemSize: function _elFormItemSize() {\n return (this.elFormItem || {}).elFormItemSize;\n },\n readonly: function readonly() {\n return !this.filterable || this.multiple || !Object(util_[\"isIE\"])() && !Object(util_[\"isEdge\"])() && !this.visible;\n },\n showClose: function showClose() {\n var hasValue = this.multiple ? Array.isArray(this.value) && this.value.length > 0 : this.value !== undefined && this.value !== null && this.value !== '';\n var criteria = this.clearable && !this.selectDisabled && this.inputHovering && hasValue;\n return criteria;\n },\n iconClass: function iconClass() {\n return this.remote && this.filterable ? '' : this.visible ? 'arrow-up is-reverse' : 'arrow-up';\n },\n debounce: function debounce() {\n return this.remote ? 300 : 0;\n },\n emptyText: function emptyText() {\n if (this.loading) {\n return this.loadingText || this.t('el.select.loading');\n } else {\n if (this.remote && this.query === '' && this.options.length === 0) return false;\n if (this.filterable && this.query && this.options.length > 0 && this.filteredOptionsCount === 0) {\n return this.noMatchText || this.t('el.select.noMatch');\n }\n if (this.options.length === 0) {\n return this.noDataText || this.t('el.select.noData');\n }\n }\n return null;\n },\n showNewOption: function showNewOption() {\n var _this = this;\n\n var hasExistingOption = this.options.filter(function (option) {\n return !option.created;\n }).some(function (option) {\n return option.currentLabel === _this.query;\n });\n return this.filterable && this.allowCreate && this.query !== '' && !hasExistingOption;\n },\n selectSize: function selectSize() {\n return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;\n },\n selectDisabled: function selectDisabled() {\n return this.disabled || (this.elForm || {}).disabled;\n },\n collapseTagSize: function collapseTagSize() {\n return ['small', 'mini'].indexOf(this.selectSize) > -1 ? 'mini' : 'small';\n },\n propPlaceholder: function propPlaceholder() {\n return typeof this.placeholder !== 'undefined' ? this.placeholder : this.t('el.select.placeholder');\n }\n },\n\n components: {\n ElInput: input_default.a,\n ElSelectMenu: select_dropdown,\n ElOption: src_option[\"a\" /* default */],\n ElTag: tag_default.a,\n ElScrollbar: scrollbar_default.a\n },\n\n directives: { Clickoutside: clickoutside_default.a },\n\n props: {\n name: String,\n id: String,\n value: {\n required: true\n },\n autocomplete: {\n type: String,\n default: 'off'\n },\n /** @Deprecated in next major version */\n autoComplete: {\n type: String,\n validator: function validator(val) {\n false && false;\n return true;\n }\n },\n automaticDropdown: Boolean,\n size: String,\n disabled: Boolean,\n clearable: Boolean,\n filterable: Boolean,\n allowCreate: Boolean,\n loading: Boolean,\n popperClass: String,\n remote: Boolean,\n loadingText: String,\n noMatchText: String,\n noDataText: String,\n remoteMethod: Function,\n filterMethod: Function,\n multiple: Boolean,\n multipleLimit: {\n type: Number,\n default: 0\n },\n placeholder: {\n type: String,\n required: false\n },\n defaultFirstOption: Boolean,\n reserveKeyword: Boolean,\n valueKey: {\n type: String,\n default: 'value'\n },\n collapseTags: Boolean,\n popperAppendToBody: {\n type: Boolean,\n default: true\n }\n },\n\n data: function data() {\n return {\n options: [],\n cachedOptions: [],\n createdLabel: null,\n createdSelected: false,\n selected: this.multiple ? [] : {},\n inputLength: 20,\n inputWidth: 0,\n initialInputHeight: 0,\n cachedPlaceHolder: '',\n optionsCount: 0,\n filteredOptionsCount: 0,\n visible: false,\n softFocus: false,\n selectedLabel: '',\n hoverIndex: -1,\n query: '',\n previousQuery: null,\n inputHovering: false,\n currentPlaceholder: '',\n menuVisibleOnFocus: false,\n isOnComposition: false,\n isSilentBlur: false\n };\n },\n\n\n watch: {\n selectDisabled: function selectDisabled() {\n var _this2 = this;\n\n this.$nextTick(function () {\n _this2.resetInputHeight();\n });\n },\n propPlaceholder: function propPlaceholder(val) {\n this.cachedPlaceHolder = this.currentPlaceholder = val;\n },\n value: function value(val, oldVal) {\n if (this.multiple) {\n this.resetInputHeight();\n if (val && val.length > 0 || this.$refs.input && this.query !== '') {\n this.currentPlaceholder = '';\n } else {\n this.currentPlaceholder = this.cachedPlaceHolder;\n }\n if (this.filterable && !this.reserveKeyword) {\n this.query = '';\n this.handleQueryChange(this.query);\n }\n }\n this.setSelected();\n if (this.filterable && !this.multiple) {\n this.inputLength = 20;\n }\n if (!Object(util_[\"valueEquals\"])(val, oldVal)) {\n this.dispatch('ElFormItem', 'el.form.change', val);\n }\n },\n visible: function visible(val) {\n var _this3 = this;\n\n if (!val) {\n this.broadcast('ElSelectDropdown', 'destroyPopper');\n if (this.$refs.input) {\n this.$refs.input.blur();\n }\n this.query = '';\n this.previousQuery = null;\n this.selectedLabel = '';\n this.inputLength = 20;\n this.menuVisibleOnFocus = false;\n this.resetHoverIndex();\n this.$nextTick(function () {\n if (_this3.$refs.input && _this3.$refs.input.value === '' && _this3.selected.length === 0) {\n _this3.currentPlaceholder = _this3.cachedPlaceHolder;\n }\n });\n if (!this.multiple) {\n if (this.selected) {\n if (this.filterable && this.allowCreate && this.createdSelected && this.createdLabel) {\n this.selectedLabel = this.createdLabel;\n } else {\n this.selectedLabel = this.selected.currentLabel;\n }\n if (this.filterable) this.query = this.selectedLabel;\n }\n\n if (this.filterable) {\n this.currentPlaceholder = this.cachedPlaceHolder;\n }\n }\n } else {\n this.broadcast('ElSelectDropdown', 'updatePopper');\n if (this.filterable) {\n this.query = this.remote ? '' : this.selectedLabel;\n this.handleQueryChange(this.query);\n if (this.multiple) {\n this.$refs.input.focus();\n } else {\n if (!this.remote) {\n this.broadcast('ElOption', 'queryChange', '');\n this.broadcast('ElOptionGroup', 'queryChange');\n }\n\n if (this.selectedLabel) {\n this.currentPlaceholder = this.selectedLabel;\n this.selectedLabel = '';\n }\n }\n }\n }\n this.$emit('visible-change', val);\n },\n options: function options() {\n var _this4 = this;\n\n if (this.$isServer) return;\n this.$nextTick(function () {\n _this4.broadcast('ElSelectDropdown', 'updatePopper');\n });\n if (this.multiple) {\n this.resetInputHeight();\n }\n var inputs = this.$el.querySelectorAll('input');\n if ([].indexOf.call(inputs, document.activeElement) === -1) {\n this.setSelected();\n }\n if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n this.checkDefaultFirstOption();\n }\n }\n },\n\n methods: {\n handleNavigate: function handleNavigate(direction) {\n if (this.isOnComposition) return;\n\n this.navigateOptions(direction);\n },\n handleComposition: function handleComposition(event) {\n var _this5 = this;\n\n var text = event.target.value;\n if (event.type === 'compositionend') {\n this.isOnComposition = false;\n this.$nextTick(function (_) {\n return _this5.handleQueryChange(text);\n });\n } else {\n var lastCharacter = text[text.length - 1] || '';\n this.isOnComposition = !Object(shared_[\"isKorean\"])(lastCharacter);\n }\n },\n handleQueryChange: function handleQueryChange(val) {\n var _this6 = this;\n\n if (this.previousQuery === val || this.isOnComposition) return;\n if (this.previousQuery === null && (typeof this.filterMethod === 'function' || typeof this.remoteMethod === 'function')) {\n this.previousQuery = val;\n return;\n }\n this.previousQuery = val;\n this.$nextTick(function () {\n if (_this6.visible) _this6.broadcast('ElSelectDropdown', 'updatePopper');\n });\n this.hoverIndex = -1;\n if (this.multiple && this.filterable) {\n this.$nextTick(function () {\n var length = _this6.$refs.input.value.length * 15 + 20;\n _this6.inputLength = _this6.collapseTags ? Math.min(50, length) : length;\n _this6.managePlaceholder();\n _this6.resetInputHeight();\n });\n }\n if (this.remote && typeof this.remoteMethod === 'function') {\n this.hoverIndex = -1;\n this.remoteMethod(val);\n } else if (typeof this.filterMethod === 'function') {\n this.filterMethod(val);\n this.broadcast('ElOptionGroup', 'queryChange');\n } else {\n this.filteredOptionsCount = this.optionsCount;\n this.broadcast('ElOption', 'queryChange', val);\n this.broadcast('ElOptionGroup', 'queryChange');\n }\n if (this.defaultFirstOption && (this.filterable || this.remote) && this.filteredOptionsCount) {\n this.checkDefaultFirstOption();\n }\n },\n scrollToOption: function scrollToOption(option) {\n var target = Array.isArray(option) && option[0] ? option[0].$el : option.$el;\n if (this.$refs.popper && target) {\n var menu = this.$refs.popper.$el.querySelector('.el-select-dropdown__wrap');\n scroll_into_view_default()(menu, target);\n }\n this.$refs.scrollbar && this.$refs.scrollbar.handleScroll();\n },\n handleMenuEnter: function handleMenuEnter() {\n var _this7 = this;\n\n this.$nextTick(function () {\n return _this7.scrollToOption(_this7.selected);\n });\n },\n emitChange: function emitChange(val) {\n if (!Object(util_[\"valueEquals\"])(this.value, val)) {\n this.$emit('change', val);\n }\n },\n getOption: function getOption(value) {\n var option = void 0;\n var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n var isNull = Object.prototype.toString.call(value).toLowerCase() === '[object null]';\n var isUndefined = Object.prototype.toString.call(value).toLowerCase() === '[object undefined]';\n\n for (var i = this.cachedOptions.length - 1; i >= 0; i--) {\n var cachedOption = this.cachedOptions[i];\n var isEqual = isObject ? Object(util_[\"getValueByPath\"])(cachedOption.value, this.valueKey) === Object(util_[\"getValueByPath\"])(value, this.valueKey) : cachedOption.value === value;\n if (isEqual) {\n option = cachedOption;\n break;\n }\n }\n if (option) return option;\n var label = !isObject && !isNull && !isUndefined ? String(value) : '';\n var newOption = {\n value: value,\n currentLabel: label\n };\n if (this.multiple) {\n newOption.hitState = false;\n }\n return newOption;\n },\n setSelected: function setSelected() {\n var _this8 = this;\n\n if (!this.multiple) {\n var option = this.getOption(this.value);\n if (option.created) {\n this.createdLabel = option.currentLabel;\n this.createdSelected = true;\n } else {\n this.createdSelected = false;\n }\n this.selectedLabel = option.currentLabel;\n this.selected = option;\n if (this.filterable) this.query = this.selectedLabel;\n return;\n }\n var result = [];\n if (Array.isArray(this.value)) {\n this.value.forEach(function (value) {\n result.push(_this8.getOption(value));\n });\n }\n this.selected = result;\n this.$nextTick(function () {\n _this8.resetInputHeight();\n });\n },\n handleFocus: function handleFocus(event) {\n if (!this.softFocus) {\n if (this.automaticDropdown || this.filterable) {\n if (this.filterable && !this.visible) {\n this.menuVisibleOnFocus = true;\n }\n this.visible = true;\n }\n this.$emit('focus', event);\n } else {\n this.softFocus = false;\n }\n },\n blur: function blur() {\n this.visible = false;\n this.$refs.reference.blur();\n },\n handleBlur: function handleBlur(event) {\n var _this9 = this;\n\n setTimeout(function () {\n if (_this9.isSilentBlur) {\n _this9.isSilentBlur = false;\n } else {\n _this9.$emit('blur', event);\n }\n }, 50);\n this.softFocus = false;\n },\n handleClearClick: function handleClearClick(event) {\n this.deleteSelected(event);\n },\n doDestroy: function doDestroy() {\n this.$refs.popper && this.$refs.popper.doDestroy();\n },\n handleClose: function handleClose() {\n this.visible = false;\n },\n toggleLastOptionHitState: function toggleLastOptionHitState(hit) {\n if (!Array.isArray(this.selected)) return;\n var option = this.selected[this.selected.length - 1];\n if (!option) return;\n\n if (hit === true || hit === false) {\n option.hitState = hit;\n return hit;\n }\n\n option.hitState = !option.hitState;\n return option.hitState;\n },\n deletePrevTag: function deletePrevTag(e) {\n if (e.target.value.length <= 0 && !this.toggleLastOptionHitState()) {\n var value = this.value.slice();\n value.pop();\n this.$emit('input', value);\n this.emitChange(value);\n }\n },\n managePlaceholder: function managePlaceholder() {\n if (this.currentPlaceholder !== '') {\n this.currentPlaceholder = this.$refs.input.value ? '' : this.cachedPlaceHolder;\n }\n },\n resetInputState: function resetInputState(e) {\n if (e.keyCode !== 8) this.toggleLastOptionHitState(false);\n this.inputLength = this.$refs.input.value.length * 15 + 20;\n this.resetInputHeight();\n },\n resetInputHeight: function resetInputHeight() {\n var _this10 = this;\n\n if (this.collapseTags && !this.filterable) return;\n this.$nextTick(function () {\n if (!_this10.$refs.reference) return;\n var inputChildNodes = _this10.$refs.reference.$el.childNodes;\n var input = [].filter.call(inputChildNodes, function (item) {\n return item.tagName === 'INPUT';\n })[0];\n var tags = _this10.$refs.tags;\n var tagsHeight = tags ? Math.round(tags.getBoundingClientRect().height) : 0;\n var sizeInMap = _this10.initialInputHeight || 40;\n input.style.height = _this10.selected.length === 0 ? sizeInMap + 'px' : Math.max(tags ? tagsHeight + (tagsHeight > sizeInMap ? 6 : 0) : 0, sizeInMap) + 'px';\n if (_this10.visible && _this10.emptyText !== false) {\n _this10.broadcast('ElSelectDropdown', 'updatePopper');\n }\n });\n },\n resetHoverIndex: function resetHoverIndex() {\n var _this11 = this;\n\n setTimeout(function () {\n if (!_this11.multiple) {\n _this11.hoverIndex = _this11.options.indexOf(_this11.selected);\n } else {\n if (_this11.selected.length > 0) {\n _this11.hoverIndex = Math.min.apply(null, _this11.selected.map(function (item) {\n return _this11.options.indexOf(item);\n }));\n } else {\n _this11.hoverIndex = -1;\n }\n }\n }, 300);\n },\n handleOptionSelect: function handleOptionSelect(option, byClick) {\n var _this12 = this;\n\n if (this.multiple) {\n var value = (this.value || []).slice();\n var optionIndex = this.getValueIndex(value, option.value);\n if (optionIndex > -1) {\n value.splice(optionIndex, 1);\n } else if (this.multipleLimit <= 0 || value.length < this.multipleLimit) {\n value.push(option.value);\n }\n this.$emit('input', value);\n this.emitChange(value);\n if (option.created) {\n this.query = '';\n this.handleQueryChange('');\n this.inputLength = 20;\n }\n if (this.filterable) this.$refs.input.focus();\n } else {\n this.$emit('input', option.value);\n this.emitChange(option.value);\n this.visible = false;\n }\n this.isSilentBlur = byClick;\n this.setSoftFocus();\n if (this.visible) return;\n this.$nextTick(function () {\n _this12.scrollToOption(option);\n });\n },\n setSoftFocus: function setSoftFocus() {\n this.softFocus = true;\n var input = this.$refs.input || this.$refs.reference;\n if (input) {\n input.focus();\n }\n },\n getValueIndex: function getValueIndex() {\n var arr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var value = arguments[1];\n\n var isObject = Object.prototype.toString.call(value).toLowerCase() === '[object object]';\n if (!isObject) {\n return arr.indexOf(value);\n } else {\n var valueKey = this.valueKey;\n var index = -1;\n arr.some(function (item, i) {\n if (Object(util_[\"getValueByPath\"])(item, valueKey) === Object(util_[\"getValueByPath\"])(value, valueKey)) {\n index = i;\n return true;\n }\n return false;\n });\n return index;\n }\n },\n toggleMenu: function toggleMenu() {\n if (!this.selectDisabled) {\n if (this.menuVisibleOnFocus) {\n this.menuVisibleOnFocus = false;\n } else {\n this.visible = !this.visible;\n }\n if (this.visible) {\n (this.$refs.input || this.$refs.reference).focus();\n }\n }\n },\n selectOption: function selectOption() {\n if (!this.visible) {\n this.toggleMenu();\n } else {\n if (this.options[this.hoverIndex]) {\n this.handleOptionSelect(this.options[this.hoverIndex]);\n }\n }\n },\n deleteSelected: function deleteSelected(event) {\n event.stopPropagation();\n var value = this.multiple ? [] : '';\n this.$emit('input', value);\n this.emitChange(value);\n this.visible = false;\n this.$emit('clear');\n },\n deleteTag: function deleteTag(event, tag) {\n var index = this.selected.indexOf(tag);\n if (index > -1 && !this.selectDisabled) {\n var value = this.value.slice();\n value.splice(index, 1);\n this.$emit('input', value);\n this.emitChange(value);\n this.$emit('remove-tag', tag.value);\n }\n event.stopPropagation();\n },\n onInputChange: function onInputChange() {\n if (this.filterable && this.query !== this.selectedLabel) {\n this.query = this.selectedLabel;\n this.handleQueryChange(this.query);\n }\n },\n onOptionDestroy: function onOptionDestroy(index) {\n if (index > -1) {\n this.optionsCount--;\n this.filteredOptionsCount--;\n this.options.splice(index, 1);\n }\n },\n resetInputWidth: function resetInputWidth() {\n this.inputWidth = this.$refs.reference.$el.getBoundingClientRect().width;\n },\n handleResize: function handleResize() {\n this.resetInputWidth();\n if (this.multiple) this.resetInputHeight();\n },\n checkDefaultFirstOption: function checkDefaultFirstOption() {\n this.hoverIndex = -1;\n // highlight the created option\n var hasCreated = false;\n for (var i = this.options.length - 1; i >= 0; i--) {\n if (this.options[i].created) {\n hasCreated = true;\n this.hoverIndex = i;\n break;\n }\n }\n if (hasCreated) return;\n for (var _i = 0; _i !== this.options.length; ++_i) {\n var option = this.options[_i];\n if (this.query) {\n // highlight first options that passes the filter\n if (!option.disabled && !option.groupDisabled && option.visible) {\n this.hoverIndex = _i;\n break;\n }\n } else {\n // highlight currently selected option\n if (option.itemSelected) {\n this.hoverIndex = _i;\n break;\n }\n }\n }\n },\n getValueKey: function getValueKey(item) {\n if (Object.prototype.toString.call(item.value).toLowerCase() !== '[object object]') {\n return item.value;\n } else {\n return Object(util_[\"getValueByPath\"])(item.value, this.valueKey);\n }\n }\n },\n\n created: function created() {\n var _this13 = this;\n\n this.cachedPlaceHolder = this.currentPlaceholder = this.propPlaceholder;\n if (this.multiple && !Array.isArray(this.value)) {\n this.$emit('input', []);\n }\n if (!this.multiple && Array.isArray(this.value)) {\n this.$emit('input', '');\n }\n\n this.debouncedOnInputChange = debounce_default()(this.debounce, function () {\n _this13.onInputChange();\n });\n\n this.debouncedQueryChange = debounce_default()(this.debounce, function (e) {\n _this13.handleQueryChange(e.target.value);\n });\n\n this.$on('handleOptionClick', this.handleOptionSelect);\n this.$on('setSelected', this.setSelected);\n },\n mounted: function mounted() {\n var _this14 = this;\n\n if (this.multiple && Array.isArray(this.value) && this.value.length > 0) {\n this.currentPlaceholder = '';\n }\n Object(resize_event_[\"addResizeListener\"])(this.$el, this.handleResize);\n\n var reference = this.$refs.reference;\n if (reference && reference.$el) {\n var sizeMap = {\n medium: 36,\n small: 32,\n mini: 28\n };\n var input = reference.$el.querySelector('input');\n this.initialInputHeight = input.getBoundingClientRect().height || sizeMap[this.selectSize];\n }\n if (this.remote && this.multiple) {\n this.resetInputHeight();\n }\n this.$nextTick(function () {\n if (reference && reference.$el) {\n _this14.inputWidth = reference.$el.getBoundingClientRect().width;\n }\n });\n this.setSelected();\n },\n beforeDestroy: function beforeDestroy() {\n if (this.$el && this.handleResize) Object(resize_event_[\"removeResizeListener\"])(this.$el, this.handleResize);\n }\n});\n// CONCATENATED MODULE: ./packages/select/src/select.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_selectvue_type_script_lang_js_ = (selectvue_type_script_lang_js_); \n// CONCATENATED MODULE: ./packages/select/src/select.vue\n\n\n\n\n\n/* normalize component */\n\nvar select_component = Object(componentNormalizer[\"a\" /* default */])(\n src_selectvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var select_api; }\nselect_component.options.__file = \"packages/select/src/select.vue\"\n/* harmony default export */ var src_select = (select_component.exports);\n// CONCATENATED MODULE: ./packages/select/index.js\n\n\n/* istanbul ignore next */\nsrc_select.install = function (Vue) {\n Vue.component(src_select.name, src_select);\n};\n\n/* harmony default export */ var packages_select = __webpack_exports__[\"default\"] = (src_select);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvc2VsZWN0LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3NlbGVjdC5qcz80ZTRiIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNjEpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXCJhXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gbm9ybWFsaXplQ29tcG9uZW50OyB9KTtcbi8qIGdsb2JhbHMgX19WVUVfU1NSX0NPTlRFWFRfXyAqL1xuXG4vLyBJTVBPUlRBTlQ6IERvIE5PVCB1c2UgRVMyMDE1IGZlYXR1cmVzIGluIHRoaXMgZmlsZSAoZXhjZXB0IGZvciBtb2R1bGVzKS5cbi8vIFRoaXMgbW9kdWxlIGlzIGEgcnVudGltZSB1dGlsaXR5IGZvciBjbGVhbmVyIGNvbXBvbmVudCBtb2R1bGUgb3V0cHV0IGFuZCB3aWxsXG4vLyBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgd2VicGFjayB1c2VyIGJ1bmRsZS5cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tcG9uZW50IChcbiAgc2NyaXB0RXhwb3J0cyxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZ1bmN0aW9uYWxUZW1wbGF0ZSxcbiAgaW5qZWN0U3R5bGVzLFxuICBzY29wZUlkLFxuICBtb2R1bGVJZGVudGlmaWVyLCAvKiBzZXJ2ZXIgb25seSAqL1xuICBzaGFkb3dNb2RlIC8qIHZ1ZS1jbGkgb25seSAqL1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gcmVuZGVyIGZ1bmN0aW9uc1xuICBpZiAocmVuZGVyKSB7XG4gICAgb3B0aW9ucy5yZW5kZXIgPSByZW5kZXJcbiAgICBvcHRpb25zLnN0YXRpY1JlbmRlckZucyA9IHN0YXRpY1JlbmRlckZuc1xuICAgIG9wdGlvbnMuX2NvbXBpbGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gZnVuY3Rpb25hbCB0ZW1wbGF0ZVxuICBpZiAoZnVuY3Rpb25hbFRlbXBsYXRlKSB7XG4gICAgb3B0aW9ucy5mdW5jdGlvbmFsID0gdHJ1ZVxuICB9XG5cbiAgLy8gc2NvcGVkSWRcbiAgaWYgKHNjb3BlSWQpIHtcbiAgICBvcHRpb25zLl9zY29wZUlkID0gJ2RhdGEtdi0nICsgc2NvcGVJZFxuICB9XG5cbiAgdmFyIGhvb2tcbiAgaWYgKG1vZHVsZUlkZW50aWZpZXIpIHsgLy8gc2VydmVyIGJ1aWxkXG4gICAgaG9vayA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgICAvLyAyLjMgaW5qZWN0aW9uXG4gICAgICBjb250ZXh0ID1cbiAgICAgICAgY29udGV4dCB8fCAvLyBjYWNoZWQgY2FsbFxuICAgICAgICAodGhpcy4kdm5vZGUgJiYgdGhpcy4kdm5vZGUuc3NyQ29udGV4dCkgfHwgLy8gc3RhdGVmdWxcbiAgICAgICAgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50LiR2bm9kZSAmJiB0aGlzLnBhcmVudC4kdm5vZGUuc3NyQ29udGV4dCkgLy8gZnVuY3Rpb25hbFxuICAgICAgLy8gMi4yIHdpdGggcnVuSW5OZXdDb250ZXh0OiB0cnVlXG4gICAgICBpZiAoIWNvbnRleHQgJiYgdHlwZW9mIF9fVlVFX1NTUl9DT05URVhUX18gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnRleHQgPSBfX1ZVRV9TU1JfQ09OVEVYVF9fXG4gICAgICB9XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHN0eWxlc1xuICAgICAgaWYgKGluamVjdFN0eWxlcykge1xuICAgICAgICBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCBjb250ZXh0KVxuICAgICAgfVxuICAgICAgLy8gcmVnaXN0ZXIgY29tcG9uZW50IG1vZHVsZSBpZGVudGlmaWVyIGZvciBhc3luYyBjaHVuayBpbmZlcnJlbmNlXG4gICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cykge1xuICAgICAgICBjb250ZXh0Ll9yZWdpc3RlcmVkQ29tcG9uZW50cy5hZGQobW9kdWxlSWRlbnRpZmllcilcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gdXNlZCBieSBzc3IgaW4gY2FzZSBjb21wb25lbnQgaXMgY2FjaGVkIGFuZCBiZWZvcmVDcmVhdGVcbiAgICAvLyBuZXZlciBnZXRzIGNhbGxlZFxuICAgIG9wdGlvbnMuX3NzclJlZ2lzdGVyID0gaG9va1xuICB9IGVsc2UgaWYgKGluamVjdFN0eWxlcykge1xuICAgIGhvb2sgPSBzaGFkb3dNb2RlXG4gICAgICA/IGZ1bmN0aW9uICgpIHsgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgdGhpcy4kcm9vdC4kb3B0aW9ucy5zaGFkb3dSb290KSB9XG4gICAgICA6IGluamVjdFN0eWxlc1xuICB9XG5cbiAgaWYgKGhvb2spIHtcbiAgICBpZiAob3B0aW9ucy5mdW5jdGlvbmFsKSB7XG4gICAgICAvLyBmb3IgdGVtcGxhdGUtb25seSBob3QtcmVsb2FkIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSByZW5kZXIgZm4gZG9lc24ndFxuICAgICAgLy8gZ28gdGhyb3VnaCB0aGUgbm9ybWFsaXplclxuICAgICAgb3B0aW9ucy5faW5qZWN0U3R5bGVzID0gaG9va1xuICAgICAgLy8gcmVnaXN0ZXIgZm9yIGZ1bmN0aW9hbCBjb21wb25lbnQgaW4gdnVlIGZpbGVcbiAgICAgIHZhciBvcmlnaW5hbFJlbmRlciA9IG9wdGlvbnMucmVuZGVyXG4gICAgICBvcHRpb25zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcldpdGhTdHlsZUluamVjdGlvbiAoaCwgY29udGV4dCkge1xuICAgICAgICBob29rLmNhbGwoY29udGV4dClcbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsUmVuZGVyKGgsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgcmVnaXN0cmF0aW9uIGFzIGJlZm9yZUNyZWF0ZSBob29rXG4gICAgICB2YXIgZXhpc3RpbmcgPSBvcHRpb25zLmJlZm9yZUNyZWF0ZVxuICAgICAgb3B0aW9ucy5iZWZvcmVDcmVhdGUgPSBleGlzdGluZ1xuICAgICAgICA/IFtdLmNvbmNhdChleGlzdGluZywgaG9vaylcbiAgICAgICAgOiBbaG9va11cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGV4cG9ydHM6IHNjcmlwdEV4cG9ydHMsXG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9XG59XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDEwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi9pbnB1dFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDEyOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9jbGlja291dHNpZGVcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAxNTpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvc2Nyb2xsYmFyXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMTY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0aHJvdHRsZS1kZWJvdW5jZS9kZWJvdW5jZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDIxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9zaGFyZWRcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAyMjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2ZvY3VzXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDMxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3XCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gMzM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YTQ0YzY0MiZcbnZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXG4gICAgXCJsaVwiLFxuICAgIHtcbiAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgdmFsdWU6IF92bS52aXNpYmxlLFxuICAgICAgICAgIGV4cHJlc3Npb246IFwidmlzaWJsZVwiXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZHJvcGRvd25fX2l0ZW1cIixcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIHNlbGVjdGVkOiBfdm0uaXRlbVNlbGVjdGVkLFxuICAgICAgICBcImlzLWRpc2FibGVkXCI6IF92bS5kaXNhYmxlZCB8fCBfdm0uZ3JvdXBEaXNhYmxlZCB8fCBfdm0ubGltaXRSZWFjaGVkLFxuICAgICAgICBob3ZlcjogX3ZtLmhvdmVyXG4gICAgICB9LFxuICAgICAgb246IHtcbiAgICAgICAgbW91c2VlbnRlcjogX3ZtLmhvdmVySXRlbSxcbiAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIHJldHVybiBfdm0uc2VsZWN0T3B0aW9uQ2xpY2soJGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbX3ZtLl90KFwiZGVmYXVsdFwiLCBbX2MoXCJzcGFuXCIsIFtfdm0uX3YoX3ZtLl9zKF92bS5jdXJyZW50TGFiZWwpKV0pXSldLFxuICAgIDJcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtdXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD03YTQ0YzY0MiZcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL21peGlucy9lbWl0dGVyXCJcbnZhciBlbWl0dGVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG52YXIgZW1pdHRlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihlbWl0dGVyXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy91dGlsXCJcbnZhciB1dGlsXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIG9wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG1peGluczogW2VtaXR0ZXJfZGVmYXVsdC5hXSxcblxuICBuYW1lOiAnRWxPcHRpb24nLFxuXG4gIGNvbXBvbmVudE5hbWU6ICdFbE9wdGlvbicsXG5cbiAgaW5qZWN0OiBbJ3NlbGVjdCddLFxuXG4gIHByb3BzOiB7XG4gICAgdmFsdWU6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBsYWJlbDogW1N0cmluZywgTnVtYmVyXSxcbiAgICBjcmVhdGVkOiBCb29sZWFuLFxuICAgIGRpc2FibGVkOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5kZXg6IC0xLFxuICAgICAgZ3JvdXBEaXNhYmxlZDogZmFsc2UsXG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgaGl0U3RhdGU6IGZhbHNlLFxuICAgICAgaG92ZXI6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNPYmplY3Q6IGZ1bmN0aW9uIGlzT2JqZWN0KCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0aGlzLnZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBvYmplY3RdJztcbiAgICB9LFxuICAgIGN1cnJlbnRMYWJlbDogZnVuY3Rpb24gY3VycmVudExhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMubGFiZWwgfHwgKHRoaXMuaXNPYmplY3QgPyAnJyA6IHRoaXMudmFsdWUpO1xuICAgIH0sXG4gICAgY3VycmVudFZhbHVlOiBmdW5jdGlvbiBjdXJyZW50VmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB0aGlzLmxhYmVsIHx8ICcnO1xuICAgIH0sXG4gICAgaXRlbVNlbGVjdGVkOiBmdW5jdGlvbiBpdGVtU2VsZWN0ZWQoKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0Lm11bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRXF1YWwodGhpcy52YWx1ZSwgdGhpcy5zZWxlY3QudmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnModGhpcy5zZWxlY3QudmFsdWUsIHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbGltaXRSZWFjaGVkOiBmdW5jdGlvbiBsaW1pdFJlYWNoZWQoKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLml0ZW1TZWxlY3RlZCAmJiAodGhpcy5zZWxlY3QudmFsdWUgfHwgW10pLmxlbmd0aCA+PSB0aGlzLnNlbGVjdC5tdWx0aXBsZUxpbWl0ICYmIHRoaXMuc2VsZWN0Lm11bHRpcGxlTGltaXQgPiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGN1cnJlbnRMYWJlbDogZnVuY3Rpb24gY3VycmVudExhYmVsKCkge1xuICAgICAgaWYgKCF0aGlzLmNyZWF0ZWQgJiYgIXRoaXMuc2VsZWN0LnJlbW90ZSkgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnc2V0U2VsZWN0ZWQnKTtcbiAgICB9LFxuICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSh2YWwsIG9sZFZhbCkge1xuICAgICAgdmFyIF9zZWxlY3QgPSB0aGlzLnNlbGVjdCxcbiAgICAgICAgICByZW1vdGUgPSBfc2VsZWN0LnJlbW90ZSxcbiAgICAgICAgICB2YWx1ZUtleSA9IF9zZWxlY3QudmFsdWVLZXk7XG5cbiAgICAgIGlmICghdGhpcy5jcmVhdGVkICYmICFyZW1vdGUpIHtcbiAgICAgICAgaWYgKHZhbHVlS2V5ICYmICh0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih2YWwpKSA9PT0gJ29iamVjdCcgJiYgKHR5cGVvZiBvbGRWYWwgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG9sZFZhbCkpID09PSAnb2JqZWN0JyAmJiB2YWxbdmFsdWVLZXldID09PSBvbGRWYWxbdmFsdWVLZXldKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlzcGF0Y2goJ0VsU2VsZWN0JywgJ3NldFNlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0VxdWFsOiBmdW5jdGlvbiBpc0VxdWFsKGEsIGIpIHtcbiAgICAgIGlmICghdGhpcy5pc09iamVjdCkge1xuICAgICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB2YWx1ZUtleSA9IHRoaXMuc2VsZWN0LnZhbHVlS2V5O1xuICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGEsIHZhbHVlS2V5KSA9PT0gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGIsIHZhbHVlS2V5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNvbnRhaW5zOiBmdW5jdGlvbiBjb250YWlucygpIHtcbiAgICAgIHZhciBhcnIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICAgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgaWYgKCF0aGlzLmlzT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBhcnIgJiYgYXJyLmluZGV4T2YodGFyZ2V0KSA+IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlS2V5ID0gdGhpcy5zZWxlY3QudmFsdWVLZXk7XG4gICAgICAgIHJldHVybiBhcnIgJiYgYXJyLnNvbWUoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKGl0ZW0sIHZhbHVlS2V5KSA9PT0gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKHRhcmdldCwgdmFsdWVLZXkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGhhbmRsZUdyb3VwRGlzYWJsZWQ6IGZ1bmN0aW9uIGhhbmRsZUdyb3VwRGlzYWJsZWQodmFsKSB7XG4gICAgICB0aGlzLmdyb3VwRGlzYWJsZWQgPSB2YWw7XG4gICAgfSxcbiAgICBob3Zlckl0ZW06IGZ1bmN0aW9uIGhvdmVySXRlbSgpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5ncm91cERpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LmhvdmVySW5kZXggPSB0aGlzLnNlbGVjdC5vcHRpb25zLmluZGV4T2YodGhpcyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3RPcHRpb25DbGljazogZnVuY3Rpb24gc2VsZWN0T3B0aW9uQ2xpY2soKSB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiB0aGlzLmdyb3VwRGlzYWJsZWQgIT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCgnRWxTZWxlY3QnLCAnaGFuZGxlT3B0aW9uQ2xpY2snLCBbdGhpcywgdHJ1ZV0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgcXVlcnlDaGFuZ2U6IGZ1bmN0aW9uIHF1ZXJ5Q2hhbmdlKHF1ZXJ5KSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBuZXcgUmVnRXhwKE9iamVjdCh1dGlsX1tcImVzY2FwZVJlZ2V4cFN0cmluZ1wiXSkocXVlcnkpLCAnaScpLnRlc3QodGhpcy5jdXJyZW50TGFiZWwpIHx8IHRoaXMuY3JlYXRlZDtcbiAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0LmZpbHRlcmVkT3B0aW9uc0NvdW50LS07XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zZWxlY3Qub3B0aW9ucy5wdXNoKHRoaXMpO1xuICAgIHRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMucHVzaCh0aGlzKTtcbiAgICB0aGlzLnNlbGVjdC5vcHRpb25zQ291bnQrKztcbiAgICB0aGlzLnNlbGVjdC5maWx0ZXJlZE9wdGlvbnNDb3VudCsrO1xuXG4gICAgdGhpcy4kb24oJ3F1ZXJ5Q2hhbmdlJywgdGhpcy5xdWVyeUNoYW5nZSk7XG4gICAgdGhpcy4kb24oJ2hhbmRsZUdyb3VwRGlzYWJsZWQnLCB0aGlzLmhhbmRsZUdyb3VwRGlzYWJsZWQpO1xuICB9LFxuICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkge1xuICAgIHZhciBfc2VsZWN0MiA9IHRoaXMuc2VsZWN0LFxuICAgICAgICBzZWxlY3RlZCA9IF9zZWxlY3QyLnNlbGVjdGVkLFxuICAgICAgICBtdWx0aXBsZSA9IF9zZWxlY3QyLm11bHRpcGxlO1xuXG4gICAgdmFyIHNlbGVjdGVkT3B0aW9ucyA9IG11bHRpcGxlID8gc2VsZWN0ZWQgOiBbc2VsZWN0ZWRdO1xuICAgIHZhciBpbmRleCA9IHRoaXMuc2VsZWN0LmNhY2hlZE9wdGlvbnMuaW5kZXhPZih0aGlzKTtcbiAgICB2YXIgc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkT3B0aW9ucy5pbmRleE9mKHRoaXMpO1xuXG4gICAgLy8gaWYgb3B0aW9uIGlzIG5vdCBzZWxlY3RlZCwgcmVtb3ZlIGl0IGZyb20gY2FjaGVcbiAgICBpZiAoaW5kZXggPiAtMSAmJiBzZWxlY3RlZEluZGV4IDwgMCkge1xuICAgICAgdGhpcy5zZWxlY3QuY2FjaGVkT3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdC5vbk9wdGlvbkRlc3Ryb3kodGhpcy5zZWxlY3Qub3B0aW9ucy5pbmRleE9mKHRoaXMpKTtcbiAgfVxufSk7XG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbiAvKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzcmNfb3B0aW9udnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKG9wdGlvbnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyk7IFxuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcbnZhciBjb21wb25lbnROb3JtYWxpemVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL29wdGlvbi52dWVcblxuXG5cblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5cbnZhciBjb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19vcHRpb252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBhcGk7IH1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwicGFja2FnZXMvc2VsZWN0L3NyYy9vcHRpb24udnVlXCJcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19vcHRpb24gPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiYVwiXSA9IChjb21wb25lbnQuZXhwb3J0cyk7XG5cbi8qKiovIH0pLFxuXG4vKioqLyAzNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvdGFnXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2VtaXR0ZXJcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy92dWUtcG9wcGVyXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNjpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDYxOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cInVzZSBzdHJpY3RcIjtcbl9fd2VicGFja19yZXF1aXJlX18ucihfX3dlYnBhY2tfZXhwb3J0c19fKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGU0YWFkZTYmXG52YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAge1xuICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJjbGlja291dHNpZGVcIixcbiAgICAgICAgICByYXdOYW1lOiBcInYtY2xpY2tvdXRzaWRlXCIsXG4gICAgICAgICAgdmFsdWU6IF92bS5oYW5kbGVDbG9zZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBcImhhbmRsZUNsb3NlXCJcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdFwiLFxuICAgICAgY2xhc3M6IFtfdm0uc2VsZWN0U2l6ZSA/IFwiZWwtc2VsZWN0LS1cIiArIF92bS5zZWxlY3RTaXplIDogXCJcIl0sXG4gICAgICBvbjoge1xuICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgcmV0dXJuIF92bS50b2dnbGVNZW51KCRldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX3ZtLm11bHRpcGxlXG4gICAgICAgID8gX2MoXG4gICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZWY6IFwidGFnc1wiLFxuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX3RhZ3NcIixcbiAgICAgICAgICAgICAgc3R5bGU6IHsgXCJtYXgtd2lkdGhcIjogX3ZtLmlucHV0V2lkdGggLSAzMiArIFwicHhcIiwgd2lkdGg6IFwiMTAwJVwiIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF92bS5jb2xsYXBzZVRhZ3MgJiYgX3ZtLnNlbGVjdGVkLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVsLXRhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NhYmxlOiAhX3ZtLnNlbGVjdERpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6IF92bS5jb2xsYXBzZVRhZ1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0OiBfdm0uc2VsZWN0ZWRbMF0uaGl0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlLXRyYW5zaXRpb25zXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGVsZXRlVGFnKCRldmVudCwgX3ZtLnNlbGVjdGVkWzBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiZWwtc2VsZWN0X190YWdzLXRleHRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KF92bS5fcyhfdm0uc2VsZWN0ZWRbMF0uY3VycmVudExhYmVsKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgIF92bS5zZWxlY3RlZC5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/IF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZWwtdGFnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBfdm0uY29sbGFwc2VUYWdTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlLXRyYW5zaXRpb25zXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX3RhZ3MtdGV4dFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCIrIFwiICsgX3ZtLl9zKF92bS5zZWxlY3RlZC5sZW5ndGggLSAxKSldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAhX3ZtLmNvbGxhcHNlVGFnc1xuICAgICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICAgIFwidHJhbnNpdGlvbi1ncm91cFwiLFxuICAgICAgICAgICAgICAgICAgICB7IG9uOiB7IFwiYWZ0ZXItbGVhdmVcIjogX3ZtLnJlc2V0SW5wdXRIZWlnaHQgfSB9LFxuICAgICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLnNlbGVjdGVkLCBmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbC10YWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBfdm0uZ2V0VmFsdWVLZXkoaXRlbSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2FibGU6ICFfdm0uc2VsZWN0RGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogX3ZtLmNvbGxhcHNlVGFnU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXQ6IGl0ZW0uaGl0U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXNhYmxlLXRyYW5zaXRpb25zXCI6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZTogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uZGVsZXRlVGFnKCRldmVudCwgaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdF9fdGFncy10ZXh0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihfdm0uX3MoaXRlbS5jdXJyZW50TGFiZWwpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICBfdm0uZmlsdGVyYWJsZVxuICAgICAgICAgICAgICAgID8gX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0ucXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInF1ZXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIHJlZjogXCJpbnB1dFwiLFxuICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3RfX2lucHV0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzOiBbX3ZtLnNlbGVjdFNpemUgPyBcImlzLVwiICsgX3ZtLnNlbGVjdFNpemUgOiBcIlwiXSxcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICBcImZsZXgtZ3Jvd1wiOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogX3ZtLmlucHV0TGVuZ3RoIC8gKF92bS5pbnB1dFdpZHRoIC0gMzIpICsgXCIlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgXCJtYXgtd2lkdGhcIjogX3ZtLmlucHV0V2lkdGggLSA0MiArIFwicHhcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBfdm0uc2VsZWN0RGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlOiBfdm0uYXV0b0NvbXBsZXRlIHx8IF92bS5hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IF92bS5xdWVyeSB9LFxuICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgIGZvY3VzOiBfdm0uaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdm0uc29mdEZvY3VzID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIGtleXVwOiBfdm0ubWFuYWdlUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLnJlc2V0SW5wdXRTdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZG93blwiLCA0MCwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJEb3duXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkFycm93RG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uaGFuZGxlTmF2aWdhdGUoXCJuZXh0XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJ1cFwiLCAzOCwgJGV2ZW50LmtleSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJBcnJvd1VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5oYW5kbGVOYXZpZ2F0ZShcInByZXZcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImVudGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVudGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5zZWxlY3RPcHRpb24oJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwiZXNjXCIsIDI3LCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkVzY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJFc2NhcGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LmtleUNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzgsIDQ2XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXCJCYWNrc3BhY2VcIiwgXCJEZWxldGVcIiwgXCJEZWxcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5kZWxldGVQcmV2VGFnKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInRhYlwiLCA5LCAkZXZlbnQua2V5LCBcIlRhYlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS52aXNpYmxlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uc3RhcnQ6IF92bS5oYW5kbGVDb21wb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGlvbnVwZGF0ZTogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uZW5kOiBfdm0uaGFuZGxlQ29tcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0ucXVlcnkgPSAkZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLmRlYm91bmNlZFF1ZXJ5Q2hhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAxXG4gICAgICAgICAgKVxuICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgX2MoXG4gICAgICAgIFwiZWwtaW5wdXRcIixcbiAgICAgICAge1xuICAgICAgICAgIHJlZjogXCJyZWZlcmVuY2VcIixcbiAgICAgICAgICBjbGFzczogeyBcImlzLWZvY3VzXCI6IF92bS52aXNpYmxlIH0sXG4gICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IF92bS5jdXJyZW50UGxhY2Vob2xkZXIsXG4gICAgICAgICAgICBuYW1lOiBfdm0ubmFtZSxcbiAgICAgICAgICAgIGlkOiBfdm0uaWQsXG4gICAgICAgICAgICBhdXRvY29tcGxldGU6IF92bS5hdXRvQ29tcGxldGUgfHwgX3ZtLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgICAgIHNpemU6IF92bS5zZWxlY3RTaXplLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IF92bS5zZWxlY3REaXNhYmxlZCxcbiAgICAgICAgICAgIHJlYWRvbmx5OiBfdm0ucmVhZG9ubHksXG4gICAgICAgICAgICBcInZhbGlkYXRlLWV2ZW50XCI6IGZhbHNlLFxuICAgICAgICAgICAgdGFiaW5kZXg6IF92bS5tdWx0aXBsZSAmJiBfdm0uZmlsdGVyYWJsZSA/IFwiLTFcIiA6IG51bGxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBmb2N1czogX3ZtLmhhbmRsZUZvY3VzLFxuICAgICAgICAgICAgYmx1cjogX3ZtLmhhbmRsZUJsdXIsXG4gICAgICAgICAgICBpbnB1dDogX3ZtLmRlYm91bmNlZE9uSW5wdXRDaGFuZ2UsXG4gICAgICAgICAgICBjb21wb3NpdGlvbnN0YXJ0OiBfdm0uaGFuZGxlQ29tcG9zaXRpb24sXG4gICAgICAgICAgICBjb21wb3NpdGlvbnVwZGF0ZTogX3ZtLmhhbmRsZUNvbXBvc2l0aW9uLFxuICAgICAgICAgICAgY29tcG9zaXRpb25lbmQ6IF92bS5oYW5kbGVDb21wb3NpdGlvblxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmF0aXZlT246IHtcbiAgICAgICAgICAgIGtleWRvd246IFtcbiAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJkb3duXCIsIDQwLCAkZXZlbnQua2V5LCBbXG4gICAgICAgICAgICAgICAgICAgIFwiRG93blwiLFxuICAgICAgICAgICAgICAgICAgICBcIkFycm93RG93blwiXG4gICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgICBfdm0uaGFuZGxlTmF2aWdhdGUoXCJuZXh0XCIpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICEoXCJidXR0b25cIiBpbiAkZXZlbnQpICYmXG4gICAgICAgICAgICAgICAgICBfdm0uX2soJGV2ZW50LmtleUNvZGUsIFwidXBcIiwgMzgsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgXCJVcFwiLFxuICAgICAgICAgICAgICAgICAgICBcIkFycm93VXBcIlxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgX3ZtLmhhbmRsZU5hdmlnYXRlKFwicHJldlwiKVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcImVudGVyXCIsIDEzLCAkZXZlbnQua2V5LCBcIkVudGVyXCIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgIHJldHVybiBfdm0uc2VsZWN0T3B0aW9uKCRldmVudClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgIShcImJ1dHRvblwiIGluICRldmVudCkgJiZcbiAgICAgICAgICAgICAgICAgIF92bS5faygkZXZlbnQua2V5Q29kZSwgXCJlc2NcIiwgMjcsICRldmVudC5rZXksIFtcbiAgICAgICAgICAgICAgICAgICAgXCJFc2NcIixcbiAgICAgICAgICAgICAgICAgICAgXCJFc2NhcGVcIlxuICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgX3ZtLnZpc2libGUgPSBmYWxzZVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAhKFwiYnV0dG9uXCIgaW4gJGV2ZW50KSAmJlxuICAgICAgICAgICAgICAgICAgX3ZtLl9rKCRldmVudC5rZXlDb2RlLCBcInRhYlwiLCA5LCAkZXZlbnQua2V5LCBcIlRhYlwiKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3ZtLnZpc2libGUgPSBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbW91c2VlbnRlcjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgIF92bS5pbnB1dEhvdmVyaW5nID0gdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vdXNlbGVhdmU6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICBfdm0uaW5wdXRIb3ZlcmluZyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgdmFsdWU6IF92bS5zZWxlY3RlZExhYmVsLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKCQkdikge1xuICAgICAgICAgICAgICBfdm0uc2VsZWN0ZWRMYWJlbCA9ICQkdlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4cHJlc3Npb246IFwic2VsZWN0ZWRMYWJlbFwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX3ZtLiRzbG90cy5wcmVmaXhcbiAgICAgICAgICAgID8gX2MoXCJ0ZW1wbGF0ZVwiLCB7IHNsb3Q6IFwicHJlZml4XCIgfSwgW192bS5fdChcInByZWZpeFwiKV0sIDIpXG4gICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgIF9jKFwidGVtcGxhdGVcIiwgeyBzbG90OiBcInN1ZmZpeFwiIH0sIFtcbiAgICAgICAgICAgIF9jKFwiaVwiLCB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogIV92bS5zaG93Q2xvc2UsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIiFzaG93Q2xvc2VcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY2xhc3M6IFtcbiAgICAgICAgICAgICAgICBcImVsLXNlbGVjdF9fY2FyZXRcIixcbiAgICAgICAgICAgICAgICBcImVsLWlucHV0X19pY29uXCIsXG4gICAgICAgICAgICAgICAgXCJlbC1pY29uLVwiICsgX3ZtLmljb25DbGFzc1xuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF92bS5zaG93Q2xvc2VcbiAgICAgICAgICAgICAgPyBfYyhcImlcIiwge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6XG4gICAgICAgICAgICAgICAgICAgIFwiZWwtc2VsZWN0X19jYXJldCBlbC1pbnB1dF9faWNvbiBlbC1pY29uLWNpcmNsZS1jbG9zZVwiLFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5oYW5kbGVDbGVhckNsaWNrIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXSlcbiAgICAgICAgXSxcbiAgICAgICAgMlxuICAgICAgKSxcbiAgICAgIF9jKFxuICAgICAgICBcInRyYW5zaXRpb25cIixcbiAgICAgICAge1xuICAgICAgICAgIGF0dHJzOiB7IG5hbWU6IFwiZWwtem9vbS1pbi10b3BcIiB9LFxuICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICBcImJlZm9yZS1lbnRlclwiOiBfdm0uaGFuZGxlTWVudUVudGVyLFxuICAgICAgICAgICAgXCJhZnRlci1sZWF2ZVwiOiBfdm0uZG9EZXN0cm95XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImVsLXNlbGVjdC1tZW51XCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogX3ZtLnZpc2libGUgJiYgX3ZtLmVtcHR5VGV4dCAhPT0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpc2libGUgJiYgZW1wdHlUZXh0ICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZWY6IFwicG9wcGVyXCIsXG4gICAgICAgICAgICAgIGF0dHJzOiB7IFwiYXBwZW5kLXRvLWJvZHlcIjogX3ZtLnBvcHBlckFwcGVuZFRvQm9keSB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImVsLXNjcm9sbGJhclwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1zaG93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS5vcHRpb25zLmxlbmd0aCA+IDAgJiYgIV92bS5sb2FkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwib3B0aW9ucy5sZW5ndGggPiAwICYmICFsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIHJlZjogXCJzY3JvbGxiYXJcIixcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiB7XG4gICAgICAgICAgICAgICAgICAgIFwiaXMtZW1wdHlcIjpcbiAgICAgICAgICAgICAgICAgICAgICAhX3ZtLmFsbG93Q3JlYXRlICYmXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLnF1ZXJ5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgX3ZtLmZpbHRlcmVkT3B0aW9uc0NvdW50ID09PSAwXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGFnOiBcInVsXCIsXG4gICAgICAgICAgICAgICAgICAgIFwid3JhcC1jbGFzc1wiOiBcImVsLXNlbGVjdC1kcm9wZG93bl9fd3JhcFwiLFxuICAgICAgICAgICAgICAgICAgICBcInZpZXctY2xhc3NcIjogXCJlbC1zZWxlY3QtZHJvcGRvd25fX2xpc3RcIlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgX3ZtLnNob3dOZXdPcHRpb25cbiAgICAgICAgICAgICAgICAgICAgPyBfYyhcImVsLW9wdGlvblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyB2YWx1ZTogX3ZtLnF1ZXJ5LCBjcmVhdGVkOiBcIlwiIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IF92bS5fZSgpLFxuICAgICAgICAgICAgICAgICAgX3ZtLl90KFwiZGVmYXVsdFwiKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBfdm0uZW1wdHlUZXh0ICYmXG4gICAgICAgICAgICAgICghX3ZtLmFsbG93Q3JlYXRlIHx8XG4gICAgICAgICAgICAgICAgX3ZtLmxvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAoX3ZtLmFsbG93Q3JlYXRlICYmIF92bS5vcHRpb25zLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgIF92bS4kc2xvdHMuZW1wdHlcbiAgICAgICAgICAgICAgICAgICAgICA/IF92bS5fdChcImVtcHR5XCIpXG4gICAgICAgICAgICAgICAgICAgICAgOiBfYyhcInBcIiwgeyBzdGF0aWNDbGFzczogXCJlbC1zZWxlY3QtZHJvcGRvd25fX2VtcHR5XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXG4gICAgICAgICAgXCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9zKF92bS5lbXB0eVRleHQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxuICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogX3ZtLl9lKClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAyXG4gICAgICAgICAgKVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSxcbiAgICAxXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MGU0YWFkZTYmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi9taXhpbnMvZW1pdHRlclwiXG52YXIgZW1pdHRlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xudmFyIGVtaXR0ZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZW1pdHRlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2ZvY3VzXCJcbnZhciBmb2N1c18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKTtcbnZhciBmb2N1c19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihmb2N1c18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvbWl4aW5zL2xvY2FsZVwiXG52YXIgbG9jYWxlXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XG52YXIgbG9jYWxlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGxvY2FsZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvaW5wdXRcIlxudmFyIGlucHV0XyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xudmFyIGlucHV0X2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGlucHV0Xyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTA2ODI4NzQ4JlxudmFyIHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ODI4NzQ4X3JlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcImRpdlwiLFxuICAgIHtcbiAgICAgIHN0YXRpY0NsYXNzOiBcImVsLXNlbGVjdC1kcm9wZG93biBlbC1wb3BwZXJcIixcbiAgICAgIGNsYXNzOiBbeyBcImlzLW11bHRpcGxlXCI6IF92bS4kcGFyZW50Lm11bHRpcGxlIH0sIF92bS5wb3BwZXJDbGFzc10sXG4gICAgICBzdHlsZTogeyBtaW5XaWR0aDogX3ZtLm1pbldpZHRoIH1cbiAgICB9LFxuICAgIFtfdm0uX3QoXCJkZWZhdWx0XCIpXSxcbiAgICAyXG4gIClcbn1cbnZhciBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9zdGF0aWNSZW5kZXJGbnMgPSBbXVxuc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfdGVtcGxhdGVfaWRfMDY4Mjg3NDhfcmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MDY4Mjg3NDgmXG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy92dWUtcG9wcGVyXCJcbnZhciB2dWVfcG9wcGVyXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XG52YXIgdnVlX3BvcHBlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih2dWVfcG9wcGVyXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIhLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWI/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFNlbGVjdERyb3Bkb3duJyxcblxuICBjb21wb25lbnROYW1lOiAnRWxTZWxlY3REcm9wZG93bicsXG5cbiAgbWl4aW5zOiBbdnVlX3BvcHBlcl9kZWZhdWx0LmFdLFxuXG4gIHByb3BzOiB7XG4gICAgcGxhY2VtZW50OiB7XG4gICAgICBkZWZhdWx0OiAnYm90dG9tLXN0YXJ0J1xuICAgIH0sXG5cbiAgICBib3VuZGFyaWVzUGFkZGluZzoge1xuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG5cbiAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBncHVBY2NlbGVyYXRpb246IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIHZpc2libGVBcnJvdzoge1xuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG5cbiAgICBhcHBlbmRUb0JvZHk6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1pbldpZHRoOiAnJ1xuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIHBvcHBlckNsYXNzOiBmdW5jdGlvbiBwb3BwZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRwYXJlbnQucG9wcGVyQ2xhc3M7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJyRwYXJlbnQuaW5wdXRXaWR0aCc6IGZ1bmN0aW9uICRwYXJlbnRJbnB1dFdpZHRoKCkge1xuICAgICAgdGhpcy5taW5XaWR0aCA9IHRoaXMuJHBhcmVudC4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKyAncHgnO1xuICAgIH1cbiAgfSxcblxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMuJHBhcmVudC4kcmVmcy5yZWZlcmVuY2UuJGVsO1xuICAgIHRoaXMuJHBhcmVudC5wb3BwZXJFbG0gPSB0aGlzLnBvcHBlckVsbSA9IHRoaXMuJGVsO1xuICAgIHRoaXMuJG9uKCd1cGRhdGVQb3BwZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuJHBhcmVudC52aXNpYmxlKSBfdGhpcy51cGRhdGVQb3BwZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLiRvbignZGVzdHJveVBvcHBlcicsIHRoaXMuZGVzdHJveVBvcHBlcik7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC1kcm9wZG93bi52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3NlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9IChzZWxlY3RfZHJvcGRvd252dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QtZHJvcGRvd24udnVlXG5cblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfc2VsZWN0X2Ryb3Bkb3dudnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICBzZWxlY3RfZHJvcGRvd252dWVfdHlwZV90ZW1wbGF0ZV9pZF8wNjgyODc0OF9yZW5kZXIsXG4gIHNlbGVjdF9kcm9wZG93bnZ1ZV90eXBlX3RlbXBsYXRlX2lkXzA2ODI4NzQ4X3N0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LWRyb3Bkb3duLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBzZWxlY3RfZHJvcGRvd24gPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvb3B0aW9uLnZ1ZSArIDQgbW9kdWxlc1xudmFyIHNyY19vcHRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3RhZ1wiXG52YXIgdGFnXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xudmFyIHRhZ19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih0YWdfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcImVsZW1lbnQtdWkvbGliL3Njcm9sbGJhclwiXG52YXIgc2Nyb2xsYmFyXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xudmFyIHNjcm9sbGJhcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihzY3JvbGxiYXJfKTtcblxuLy8gRVhURVJOQUwgTU9EVUxFOiBleHRlcm5hbCBcInRocm90dGxlLWRlYm91bmNlL2RlYm91bmNlXCJcbnZhciBkZWJvdW5jZV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcbnZhciBkZWJvdW5jZV9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihkZWJvdW5jZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlXCJcbnZhciBjbGlja291dHNpZGVfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XG52YXIgY2xpY2tvdXRzaWRlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNsaWNrb3V0c2lkZV8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvcmVzaXplLWV2ZW50XCJcbnZhciByZXNpemVfZXZlbnRfID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3XCJcbnZhciBzY3JvbGxfaW50b192aWV3XyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xudmFyIHNjcm9sbF9pbnRvX3ZpZXdfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc2Nyb2xsX2ludG9fdmlld18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiXG52YXIgdXRpbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvbmF2aWdhdGlvbi1taXhpbi5qc1xuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbmF2aWdhdGlvbl9taXhpbiA9ICh7XG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhvdmVyT3B0aW9uOiAtMVxuICAgIH07XG4gIH0sXG5cblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnNBbGxEaXNhYmxlZDogZnVuY3Rpb24gb3B0aW9uc0FsbERpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24gKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gb3B0aW9uLnZpc2libGU7XG4gICAgICB9KS5ldmVyeShmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiBvcHRpb24uZGlzYWJsZWQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBob3ZlckluZGV4OiBmdW5jdGlvbiBob3ZlckluZGV4KHZhbCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmIHZhbCA+IC0xKSB7XG4gICAgICAgIHRoaXMuaG92ZXJPcHRpb24gPSB0aGlzLm9wdGlvbnNbdmFsXSB8fCB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgb3B0aW9uLmhvdmVyID0gX3RoaXMuaG92ZXJPcHRpb24gPT09IG9wdGlvbjtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbmF2aWdhdGVPcHRpb25zOiBmdW5jdGlvbiBuYXZpZ2F0ZU9wdGlvbnMoZGlyZWN0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgaWYgKCF0aGlzLnZpc2libGUpIHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDAgfHwgdGhpcy5maWx0ZXJlZE9wdGlvbnNDb3VudCA9PT0gMCkgcmV0dXJuO1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnNBbGxEaXNhYmxlZCkge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnbmV4dCcpIHtcbiAgICAgICAgICB0aGlzLmhvdmVySW5kZXgrKztcbiAgICAgICAgICBpZiAodGhpcy5ob3ZlckluZGV4ID09PSB0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICAgIHRoaXMuaG92ZXJJbmRleC0tO1xuICAgICAgICAgIGlmICh0aGlzLmhvdmVySW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmhvdmVySW5kZXggPSB0aGlzLm9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9wdGlvbiA9IHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdO1xuICAgICAgICBpZiAob3B0aW9uLmRpc2FibGVkID09PSB0cnVlIHx8IG9wdGlvbi5ncm91cERpc2FibGVkID09PSB0cnVlIHx8ICFvcHRpb24udmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMubmF2aWdhdGVPcHRpb25zKGRpcmVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuc2Nyb2xsVG9PcHRpb24oX3RoaXMyLmhvdmVyT3B0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9zaGFyZWRcIlxudmFyIHNoYXJlZF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcblxuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYiEuL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYj8/dnVlLWxvYWRlci1vcHRpb25zIS4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfID0gKHtcbiAgbWl4aW5zOiBbZW1pdHRlcl9kZWZhdWx0LmEsIGxvY2FsZV9kZWZhdWx0LmEsIGZvY3VzX2RlZmF1bHQoKSgncmVmZXJlbmNlJyksIG5hdmlnYXRpb25fbWl4aW5dLFxuXG4gIG5hbWU6ICdFbFNlbGVjdCcsXG5cbiAgY29tcG9uZW50TmFtZTogJ0VsU2VsZWN0JyxcblxuICBpbmplY3Q6IHtcbiAgICBlbEZvcm06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfSxcblxuICAgIGVsRm9ybUl0ZW06IHtcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIHByb3ZpZGU6IGZ1bmN0aW9uIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdzZWxlY3QnOiB0aGlzXG4gICAgfTtcbiAgfSxcblxuXG4gIGNvbXB1dGVkOiB7XG4gICAgX2VsRm9ybUl0ZW1TaXplOiBmdW5jdGlvbiBfZWxGb3JtSXRlbVNpemUoKSB7XG4gICAgICByZXR1cm4gKHRoaXMuZWxGb3JtSXRlbSB8fCB7fSkuZWxGb3JtSXRlbVNpemU7XG4gICAgfSxcbiAgICByZWFkb25seTogZnVuY3Rpb24gcmVhZG9ubHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuZmlsdGVyYWJsZSB8fCB0aGlzLm11bHRpcGxlIHx8ICFPYmplY3QodXRpbF9bXCJpc0lFXCJdKSgpICYmICFPYmplY3QodXRpbF9bXCJpc0VkZ2VcIl0pKCkgJiYgIXRoaXMudmlzaWJsZTtcbiAgICB9LFxuICAgIHNob3dDbG9zZTogZnVuY3Rpb24gc2hvd0Nsb3NlKCkge1xuICAgICAgdmFyIGhhc1ZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwIDogdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gJyc7XG4gICAgICB2YXIgY3JpdGVyaWEgPSB0aGlzLmNsZWFyYWJsZSAmJiAhdGhpcy5zZWxlY3REaXNhYmxlZCAmJiB0aGlzLmlucHV0SG92ZXJpbmcgJiYgaGFzVmFsdWU7XG4gICAgICByZXR1cm4gY3JpdGVyaWE7XG4gICAgfSxcbiAgICBpY29uQ2xhc3M6IGZ1bmN0aW9uIGljb25DbGFzcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbW90ZSAmJiB0aGlzLmZpbHRlcmFibGUgPyAnJyA6IHRoaXMudmlzaWJsZSA/ICdhcnJvdy11cCBpcy1yZXZlcnNlJyA6ICdhcnJvdy11cCc7XG4gICAgfSxcbiAgICBkZWJvdW5jZTogZnVuY3Rpb24gZGVib3VuY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1vdGUgPyAzMDAgOiAwO1xuICAgIH0sXG4gICAgZW1wdHlUZXh0OiBmdW5jdGlvbiBlbXB0eVRleHQoKSB7XG4gICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdUZXh0IHx8IHRoaXMudCgnZWwuc2VsZWN0LmxvYWRpbmcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnJlbW90ZSAmJiB0aGlzLnF1ZXJ5ID09PSAnJyAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUgJiYgdGhpcy5xdWVyeSAmJiB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCAmJiB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubm9NYXRjaFRleHQgfHwgdGhpcy50KCdlbC5zZWxlY3Qubm9NYXRjaCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubm9EYXRhVGV4dCB8fCB0aGlzLnQoJ2VsLnNlbGVjdC5ub0RhdGEnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBzaG93TmV3T3B0aW9uOiBmdW5jdGlvbiBzaG93TmV3T3B0aW9uKCkge1xuICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgdmFyIGhhc0V4aXN0aW5nT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbHRlcihmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgIHJldHVybiAhb3B0aW9uLmNyZWF0ZWQ7XG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChvcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbi5jdXJyZW50TGFiZWwgPT09IF90aGlzLnF1ZXJ5O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJhYmxlICYmIHRoaXMuYWxsb3dDcmVhdGUgJiYgdGhpcy5xdWVyeSAhPT0gJycgJiYgIWhhc0V4aXN0aW5nT3B0aW9uO1xuICAgIH0sXG4gICAgc2VsZWN0U2l6ZTogZnVuY3Rpb24gc2VsZWN0U2l6ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpemUgfHwgdGhpcy5fZWxGb3JtSXRlbVNpemUgfHwgKHRoaXMuJEVMRU1FTlQgfHwge30pLnNpemU7XG4gICAgfSxcbiAgICBzZWxlY3REaXNhYmxlZDogZnVuY3Rpb24gc2VsZWN0RGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCAodGhpcy5lbEZvcm0gfHwge30pLmRpc2FibGVkO1xuICAgIH0sXG4gICAgY29sbGFwc2VUYWdTaXplOiBmdW5jdGlvbiBjb2xsYXBzZVRhZ1NpemUoKSB7XG4gICAgICByZXR1cm4gWydzbWFsbCcsICdtaW5pJ10uaW5kZXhPZih0aGlzLnNlbGVjdFNpemUpID4gLTEgPyAnbWluaScgOiAnc21hbGwnO1xuICAgIH0sXG4gICAgcHJvcFBsYWNlaG9sZGVyOiBmdW5jdGlvbiBwcm9wUGxhY2Vob2xkZXIoKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGxhY2Vob2xkZXIgIT09ICd1bmRlZmluZWQnID8gdGhpcy5wbGFjZWhvbGRlciA6IHRoaXMudCgnZWwuc2VsZWN0LnBsYWNlaG9sZGVyJyk7XG4gICAgfVxuICB9LFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFbElucHV0OiBpbnB1dF9kZWZhdWx0LmEsXG4gICAgRWxTZWxlY3RNZW51OiBzZWxlY3RfZHJvcGRvd24sXG4gICAgRWxPcHRpb246IHNyY19vcHRpb25bXCJhXCIgLyogZGVmYXVsdCAqL10sXG4gICAgRWxUYWc6IHRhZ19kZWZhdWx0LmEsXG4gICAgRWxTY3JvbGxiYXI6IHNjcm9sbGJhcl9kZWZhdWx0LmFcbiAgfSxcblxuICBkaXJlY3RpdmVzOiB7IENsaWNrb3V0c2lkZTogY2xpY2tvdXRzaWRlX2RlZmF1bHQuYSB9LFxuXG4gIHByb3BzOiB7XG4gICAgbmFtZTogU3RyaW5nLFxuICAgIGlkOiBTdHJpbmcsXG4gICAgdmFsdWU6IHtcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBhdXRvY29tcGxldGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdvZmYnXG4gICAgfSxcbiAgICAvKiogQERlcHJlY2F0ZWQgaW4gbmV4dCBtYWpvciB2ZXJzaW9uICovXG4gICAgYXV0b0NvbXBsZXRlOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcih2YWwpIHtcbiAgICAgICAgIGZhbHNlICYmIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGF1dG9tYXRpY0Ryb3Bkb3duOiBCb29sZWFuLFxuICAgIHNpemU6IFN0cmluZyxcbiAgICBkaXNhYmxlZDogQm9vbGVhbixcbiAgICBjbGVhcmFibGU6IEJvb2xlYW4sXG4gICAgZmlsdGVyYWJsZTogQm9vbGVhbixcbiAgICBhbGxvd0NyZWF0ZTogQm9vbGVhbixcbiAgICBsb2FkaW5nOiBCb29sZWFuLFxuICAgIHBvcHBlckNsYXNzOiBTdHJpbmcsXG4gICAgcmVtb3RlOiBCb29sZWFuLFxuICAgIGxvYWRpbmdUZXh0OiBTdHJpbmcsXG4gICAgbm9NYXRjaFRleHQ6IFN0cmluZyxcbiAgICBub0RhdGFUZXh0OiBTdHJpbmcsXG4gICAgcmVtb3RlTWV0aG9kOiBGdW5jdGlvbixcbiAgICBmaWx0ZXJNZXRob2Q6IEZ1bmN0aW9uLFxuICAgIG11bHRpcGxlOiBCb29sZWFuLFxuICAgIG11bHRpcGxlTGltaXQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIHBsYWNlaG9sZGVyOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIGRlZmF1bHRGaXJzdE9wdGlvbjogQm9vbGVhbixcbiAgICByZXNlcnZlS2V5d29yZDogQm9vbGVhbixcbiAgICB2YWx1ZUtleToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ3ZhbHVlJ1xuICAgIH0sXG4gICAgY29sbGFwc2VUYWdzOiBCb29sZWFuLFxuICAgIHBvcHBlckFwcGVuZFRvQm9keToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3B0aW9uczogW10sXG4gICAgICBjYWNoZWRPcHRpb25zOiBbXSxcbiAgICAgIGNyZWF0ZWRMYWJlbDogbnVsbCxcbiAgICAgIGNyZWF0ZWRTZWxlY3RlZDogZmFsc2UsXG4gICAgICBzZWxlY3RlZDogdGhpcy5tdWx0aXBsZSA/IFtdIDoge30sXG4gICAgICBpbnB1dExlbmd0aDogMjAsXG4gICAgICBpbnB1dFdpZHRoOiAwLFxuICAgICAgaW5pdGlhbElucHV0SGVpZ2h0OiAwLFxuICAgICAgY2FjaGVkUGxhY2VIb2xkZXI6ICcnLFxuICAgICAgb3B0aW9uc0NvdW50OiAwLFxuICAgICAgZmlsdGVyZWRPcHRpb25zQ291bnQ6IDAsXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgIHNvZnRGb2N1czogZmFsc2UsXG4gICAgICBzZWxlY3RlZExhYmVsOiAnJyxcbiAgICAgIGhvdmVySW5kZXg6IC0xLFxuICAgICAgcXVlcnk6ICcnLFxuICAgICAgcHJldmlvdXNRdWVyeTogbnVsbCxcbiAgICAgIGlucHV0SG92ZXJpbmc6IGZhbHNlLFxuICAgICAgY3VycmVudFBsYWNlaG9sZGVyOiAnJyxcbiAgICAgIG1lbnVWaXNpYmxlT25Gb2N1czogZmFsc2UsXG4gICAgICBpc09uQ29tcG9zaXRpb246IGZhbHNlLFxuICAgICAgaXNTaWxlbnRCbHVyOiBmYWxzZVxuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHNlbGVjdERpc2FibGVkOiBmdW5jdGlvbiBzZWxlY3REaXNhYmxlZCgpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByb3BQbGFjZWhvbGRlcjogZnVuY3Rpb24gcHJvcFBsYWNlaG9sZGVyKHZhbCkge1xuICAgICAgdGhpcy5jYWNoZWRQbGFjZUhvbGRlciA9IHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdmFsO1xuICAgIH0sXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHZhbCwgb2xkVmFsKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLnJlc2V0SW5wdXRIZWlnaHQoKTtcbiAgICAgICAgaWYgKHZhbCAmJiB2YWwubGVuZ3RoID4gMCB8fCB0aGlzLiRyZWZzLmlucHV0ICYmIHRoaXMucXVlcnkgIT09ICcnKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMuY2FjaGVkUGxhY2VIb2xkZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiAhdGhpcy5yZXNlcnZlS2V5d29yZCkge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlKHRoaXMucXVlcnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldFNlbGVjdGVkKCk7XG4gICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmICF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMuaW5wdXRMZW5ndGggPSAyMDtcbiAgICAgIH1cbiAgICAgIGlmICghT2JqZWN0KHV0aWxfW1widmFsdWVFcXVhbHNcIl0pKHZhbCwgb2xkVmFsKSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoKCdFbEZvcm1JdGVtJywgJ2VsLmZvcm0uY2hhbmdlJywgdmFsKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHZpc2libGU6IGZ1bmN0aW9uIHZpc2libGUodmFsKSB7XG4gICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAnZGVzdHJveVBvcHBlcicpO1xuICAgICAgICBpZiAodGhpcy4kcmVmcy5pbnB1dCkge1xuICAgICAgICAgIHRoaXMuJHJlZnMuaW5wdXQuYmx1cigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5wcmV2aW91c1F1ZXJ5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gJyc7XG4gICAgICAgIHRoaXMuaW5wdXRMZW5ndGggPSAyMDtcbiAgICAgICAgdGhpcy5tZW51VmlzaWJsZU9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldEhvdmVySW5kZXgoKTtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChfdGhpczMuJHJlZnMuaW5wdXQgJiYgX3RoaXMzLiRyZWZzLmlucHV0LnZhbHVlID09PSAnJyAmJiBfdGhpczMuc2VsZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBfdGhpczMuY3VycmVudFBsYWNlaG9sZGVyID0gX3RoaXMzLmNhY2hlZFBsYWNlSG9sZGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmIHRoaXMuYWxsb3dDcmVhdGUgJiYgdGhpcy5jcmVhdGVkU2VsZWN0ZWQgJiYgdGhpcy5jcmVhdGVkTGFiZWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsID0gdGhpcy5jcmVhdGVkTGFiZWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSB0aGlzLnNlbGVjdGVkLmN1cnJlbnRMYWJlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHRoaXMucXVlcnkgPSB0aGlzLnNlbGVjdGVkTGFiZWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGxhY2Vob2xkZXIgPSB0aGlzLmNhY2hlZFBsYWNlSG9sZGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5yZW1vdGUgPyAnJyA6IHRoaXMuc2VsZWN0ZWRMYWJlbDtcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlKHRoaXMucXVlcnkpO1xuICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLiRyZWZzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ3F1ZXJ5Q2hhbmdlJywgJycpO1xuICAgICAgICAgICAgICB0aGlzLmJyb2FkY2FzdCgnRWxPcHRpb25Hcm91cCcsICdxdWVyeUNoYW5nZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZExhYmVsKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdGhpcy5zZWxlY3RlZExhYmVsO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuJGVtaXQoJ3Zpc2libGUtY2hhbmdlJywgdmFsKTtcbiAgICB9LFxuICAgIG9wdGlvbnM6IGZ1bmN0aW9uIG9wdGlvbnMoKSB7XG4gICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgaWYgKHRoaXMuJGlzU2VydmVyKSByZXR1cm47XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzNC5icm9hZGNhc3QoJ0VsU2VsZWN0RHJvcGRvd24nLCAndXBkYXRlUG9wcGVyJyk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgICAgfVxuICAgICAgdmFyIGlucHV0cyA9IHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0Jyk7XG4gICAgICBpZiAoW10uaW5kZXhPZi5jYWxsKGlucHV0cywgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgPT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbiAmJiAodGhpcy5maWx0ZXJhYmxlIHx8IHRoaXMucmVtb3RlKSAmJiB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50KSB7XG4gICAgICAgIHRoaXMuY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZU5hdmlnYXRlOiBmdW5jdGlvbiBoYW5kbGVOYXZpZ2F0ZShkaXJlY3Rpb24pIHtcbiAgICAgIGlmICh0aGlzLmlzT25Db21wb3NpdGlvbikgcmV0dXJuO1xuXG4gICAgICB0aGlzLm5hdmlnYXRlT3B0aW9ucyhkaXJlY3Rpb24pO1xuICAgIH0sXG4gICAgaGFuZGxlQ29tcG9zaXRpb246IGZ1bmN0aW9uIGhhbmRsZUNvbXBvc2l0aW9uKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgdmFyIHRleHQgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJykge1xuICAgICAgICB0aGlzLmlzT25Db21wb3NpdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykge1xuICAgICAgICAgIHJldHVybiBfdGhpczUuaGFuZGxlUXVlcnlDaGFuZ2UodGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGxhc3RDaGFyYWN0ZXIgPSB0ZXh0W3RleHQubGVuZ3RoIC0gMV0gfHwgJyc7XG4gICAgICAgIHRoaXMuaXNPbkNvbXBvc2l0aW9uID0gIU9iamVjdChzaGFyZWRfW1wiaXNLb3JlYW5cIl0pKGxhc3RDaGFyYWN0ZXIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlUXVlcnlDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVF1ZXJ5Q2hhbmdlKHZhbCkge1xuICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLnByZXZpb3VzUXVlcnkgPT09IHZhbCB8fCB0aGlzLmlzT25Db21wb3NpdGlvbikgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNRdWVyeSA9PT0gbnVsbCAmJiAodHlwZW9mIHRoaXMuZmlsdGVyTWV0aG9kID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB0aGlzLnJlbW90ZU1ldGhvZCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1F1ZXJ5ID0gdmFsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnByZXZpb3VzUXVlcnkgPSB2YWw7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczYudmlzaWJsZSkgX3RoaXM2LmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsICd1cGRhdGVQb3BwZXInKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ob3ZlckluZGV4ID0gLTE7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmZpbHRlcmFibGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBsZW5ndGggPSBfdGhpczYuJHJlZnMuaW5wdXQudmFsdWUubGVuZ3RoICogMTUgKyAyMDtcbiAgICAgICAgICBfdGhpczYuaW5wdXRMZW5ndGggPSBfdGhpczYuY29sbGFwc2VUYWdzID8gTWF0aC5taW4oNTAsIGxlbmd0aCkgOiBsZW5ndGg7XG4gICAgICAgICAgX3RoaXM2Lm1hbmFnZVBsYWNlaG9sZGVyKCk7XG4gICAgICAgICAgX3RoaXM2LnJlc2V0SW5wdXRIZWlnaHQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yZW1vdGUgJiYgdHlwZW9mIHRoaXMucmVtb3RlTWV0aG9kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLnJlbW90ZU1ldGhvZCh2YWwpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5maWx0ZXJNZXRob2QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJNZXRob2QodmFsKTtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uR3JvdXAnLCAncXVlcnlDaGFuZ2UnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zQ291bnQgPSB0aGlzLm9wdGlvbnNDb3VudDtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uJywgJ3F1ZXJ5Q2hhbmdlJywgdmFsKTtcbiAgICAgICAgdGhpcy5icm9hZGNhc3QoJ0VsT3B0aW9uR3JvdXAnLCAncXVlcnlDaGFuZ2UnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRlZmF1bHRGaXJzdE9wdGlvbiAmJiAodGhpcy5maWx0ZXJhYmxlIHx8IHRoaXMucmVtb3RlKSAmJiB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50KSB7XG4gICAgICAgIHRoaXMuY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNjcm9sbFRvT3B0aW9uOiBmdW5jdGlvbiBzY3JvbGxUb09wdGlvbihvcHRpb24pIHtcbiAgICAgIHZhciB0YXJnZXQgPSBBcnJheS5pc0FycmF5KG9wdGlvbikgJiYgb3B0aW9uWzBdID8gb3B0aW9uWzBdLiRlbCA6IG9wdGlvbi4kZWw7XG4gICAgICBpZiAodGhpcy4kcmVmcy5wb3BwZXIgJiYgdGFyZ2V0KSB7XG4gICAgICAgIHZhciBtZW51ID0gdGhpcy4kcmVmcy5wb3BwZXIuJGVsLnF1ZXJ5U2VsZWN0b3IoJy5lbC1zZWxlY3QtZHJvcGRvd25fX3dyYXAnKTtcbiAgICAgICAgc2Nyb2xsX2ludG9fdmlld19kZWZhdWx0KCkobWVudSwgdGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuJHJlZnMuc2Nyb2xsYmFyICYmIHRoaXMuJHJlZnMuc2Nyb2xsYmFyLmhhbmRsZVNjcm9sbCgpO1xuICAgIH0sXG4gICAgaGFuZGxlTWVudUVudGVyOiBmdW5jdGlvbiBoYW5kbGVNZW51RW50ZXIoKSB7XG4gICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXM3LnNjcm9sbFRvT3B0aW9uKF90aGlzNy5zZWxlY3RlZCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGVtaXRDaGFuZ2U6IGZ1bmN0aW9uIGVtaXRDaGFuZ2UodmFsKSB7XG4gICAgICBpZiAoIU9iamVjdCh1dGlsX1tcInZhbHVlRXF1YWxzXCJdKSh0aGlzLnZhbHVlLCB2YWwpKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRPcHRpb246IGZ1bmN0aW9uIGdldE9wdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG9wdGlvbiA9IHZvaWQgMDtcbiAgICAgIHZhciBpc09iamVjdCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkudG9Mb3dlckNhc2UoKSA9PT0gJ1tvYmplY3Qgb2JqZWN0XSc7XG4gICAgICB2YXIgaXNOdWxsID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09PSAnW29iamVjdCBudWxsXSc7XG4gICAgICB2YXIgaXNVbmRlZmluZWQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IHVuZGVmaW5lZF0nO1xuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5jYWNoZWRPcHRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIHZhciBjYWNoZWRPcHRpb24gPSB0aGlzLmNhY2hlZE9wdGlvbnNbaV07XG4gICAgICAgIHZhciBpc0VxdWFsID0gaXNPYmplY3QgPyBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoY2FjaGVkT3B0aW9uLnZhbHVlLCB0aGlzLnZhbHVlS2V5KSA9PT0gT2JqZWN0KHV0aWxfW1wiZ2V0VmFsdWVCeVBhdGhcIl0pKHZhbHVlLCB0aGlzLnZhbHVlS2V5KSA6IGNhY2hlZE9wdGlvbi52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgIGlmIChpc0VxdWFsKSB7XG4gICAgICAgICAgb3B0aW9uID0gY2FjaGVkT3B0aW9uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9uKSByZXR1cm4gb3B0aW9uO1xuICAgICAgdmFyIGxhYmVsID0gIWlzT2JqZWN0ICYmICFpc051bGwgJiYgIWlzVW5kZWZpbmVkID8gU3RyaW5nKHZhbHVlKSA6ICcnO1xuICAgICAgdmFyIG5ld09wdGlvbiA9IHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBjdXJyZW50TGFiZWw6IGxhYmVsXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgbmV3T3B0aW9uLmhpdFN0YXRlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3T3B0aW9uO1xuICAgIH0sXG4gICAgc2V0U2VsZWN0ZWQ6IGZ1bmN0aW9uIHNldFNlbGVjdGVkKCkge1xuICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB2YXIgb3B0aW9uID0gdGhpcy5nZXRPcHRpb24odGhpcy52YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb24uY3JlYXRlZCkge1xuICAgICAgICAgIHRoaXMuY3JlYXRlZExhYmVsID0gb3B0aW9uLmN1cnJlbnRMYWJlbDtcbiAgICAgICAgICB0aGlzLmNyZWF0ZWRTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVkU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWwgPSBvcHRpb24uY3VycmVudExhYmVsO1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gb3B0aW9uO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlKSB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWxlY3RlZExhYmVsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgICB0aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goX3RoaXM4LmdldE9wdGlvbih2YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSByZXN1bHQ7XG4gICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzOC5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkge1xuICAgICAgaWYgKCF0aGlzLnNvZnRGb2N1cykge1xuICAgICAgICBpZiAodGhpcy5hdXRvbWF0aWNEcm9wZG93biB8fCB0aGlzLmZpbHRlcmFibGUpIHtcbiAgICAgICAgICBpZiAodGhpcy5maWx0ZXJhYmxlICYmICF0aGlzLnZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMubWVudVZpc2libGVPbkZvY3VzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiRlbWl0KCdmb2N1cycsIGV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc29mdEZvY3VzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBibHVyOiBmdW5jdGlvbiBibHVyKCkge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLiRyZWZzLnJlZmVyZW5jZS5ibHVyKCk7XG4gICAgfSxcbiAgICBoYW5kbGVCbHVyOiBmdW5jdGlvbiBoYW5kbGVCbHVyKGV2ZW50KSB7XG4gICAgICB2YXIgX3RoaXM5ID0gdGhpcztcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpczkuaXNTaWxlbnRCbHVyKSB7XG4gICAgICAgICAgX3RoaXM5LmlzU2lsZW50Qmx1ciA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzOS4kZW1pdCgnYmx1cicsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSwgNTApO1xuICAgICAgdGhpcy5zb2Z0Rm9jdXMgPSBmYWxzZTtcbiAgICB9LFxuICAgIGhhbmRsZUNsZWFyQ2xpY2s6IGZ1bmN0aW9uIGhhbmRsZUNsZWFyQ2xpY2soZXZlbnQpIHtcbiAgICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWQoZXZlbnQpO1xuICAgIH0sXG4gICAgZG9EZXN0cm95OiBmdW5jdGlvbiBkb0Rlc3Ryb3koKSB7XG4gICAgICB0aGlzLiRyZWZzLnBvcHBlciAmJiB0aGlzLiRyZWZzLnBvcHBlci5kb0Rlc3Ryb3koKTtcbiAgICB9LFxuICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiBoYW5kbGVDbG9zZSgpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgIH0sXG4gICAgdG9nZ2xlTGFzdE9wdGlvbkhpdFN0YXRlOiBmdW5jdGlvbiB0b2dnbGVMYXN0T3B0aW9uSGl0U3RhdGUoaGl0KSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZCkpIHJldHVybjtcbiAgICAgIHZhciBvcHRpb24gPSB0aGlzLnNlbGVjdGVkW3RoaXMuc2VsZWN0ZWQubGVuZ3RoIC0gMV07XG4gICAgICBpZiAoIW9wdGlvbikgcmV0dXJuO1xuXG4gICAgICBpZiAoaGl0ID09PSB0cnVlIHx8IGhpdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgb3B0aW9uLmhpdFN0YXRlID0gaGl0O1xuICAgICAgICByZXR1cm4gaGl0O1xuICAgICAgfVxuXG4gICAgICBvcHRpb24uaGl0U3RhdGUgPSAhb3B0aW9uLmhpdFN0YXRlO1xuICAgICAgcmV0dXJuIG9wdGlvbi5oaXRTdGF0ZTtcbiAgICB9LFxuICAgIGRlbGV0ZVByZXZUYWc6IGZ1bmN0aW9uIGRlbGV0ZVByZXZUYWcoZSkge1xuICAgICAgaWYgKGUudGFyZ2V0LnZhbHVlLmxlbmd0aCA8PSAwICYmICF0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZSgpKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcbiAgICAgICAgdmFsdWUucG9wKCk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsdWUpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UodmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgbWFuYWdlUGxhY2Vob2xkZXI6IGZ1bmN0aW9uIG1hbmFnZVBsYWNlaG9sZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFBsYWNlaG9sZGVyICE9PSAnJykge1xuICAgICAgICB0aGlzLmN1cnJlbnRQbGFjZWhvbGRlciA9IHRoaXMuJHJlZnMuaW5wdXQudmFsdWUgPyAnJyA6IHRoaXMuY2FjaGVkUGxhY2VIb2xkZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNldElucHV0U3RhdGU6IGZ1bmN0aW9uIHJlc2V0SW5wdXRTdGF0ZShlKSB7XG4gICAgICBpZiAoZS5rZXlDb2RlICE9PSA4KSB0aGlzLnRvZ2dsZUxhc3RPcHRpb25IaXRTdGF0ZShmYWxzZSk7XG4gICAgICB0aGlzLmlucHV0TGVuZ3RoID0gdGhpcy4kcmVmcy5pbnB1dC52YWx1ZS5sZW5ndGggKiAxNSArIDIwO1xuICAgICAgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgfSxcbiAgICByZXNldElucHV0SGVpZ2h0OiBmdW5jdGlvbiByZXNldElucHV0SGVpZ2h0KCkge1xuICAgICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy5jb2xsYXBzZVRhZ3MgJiYgIXRoaXMuZmlsdGVyYWJsZSkgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIV90aGlzMTAuJHJlZnMucmVmZXJlbmNlKSByZXR1cm47XG4gICAgICAgIHZhciBpbnB1dENoaWxkTm9kZXMgPSBfdGhpczEwLiRyZWZzLnJlZmVyZW5jZS4kZWwuY2hpbGROb2RlcztcbiAgICAgICAgdmFyIGlucHV0ID0gW10uZmlsdGVyLmNhbGwoaW5wdXRDaGlsZE5vZGVzLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnRhZ05hbWUgPT09ICdJTlBVVCc7XG4gICAgICAgIH0pWzBdO1xuICAgICAgICB2YXIgdGFncyA9IF90aGlzMTAuJHJlZnMudGFncztcbiAgICAgICAgdmFyIHRhZ3NIZWlnaHQgPSB0YWdzID8gTWF0aC5yb3VuZCh0YWdzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgOiAwO1xuICAgICAgICB2YXIgc2l6ZUluTWFwID0gX3RoaXMxMC5pbml0aWFsSW5wdXRIZWlnaHQgfHwgNDA7XG4gICAgICAgIGlucHV0LnN0eWxlLmhlaWdodCA9IF90aGlzMTAuc2VsZWN0ZWQubGVuZ3RoID09PSAwID8gc2l6ZUluTWFwICsgJ3B4JyA6IE1hdGgubWF4KHRhZ3MgPyB0YWdzSGVpZ2h0ICsgKHRhZ3NIZWlnaHQgPiBzaXplSW5NYXAgPyA2IDogMCkgOiAwLCBzaXplSW5NYXApICsgJ3B4JztcbiAgICAgICAgaWYgKF90aGlzMTAudmlzaWJsZSAmJiBfdGhpczEwLmVtcHR5VGV4dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBfdGhpczEwLmJyb2FkY2FzdCgnRWxTZWxlY3REcm9wZG93bicsICd1cGRhdGVQb3BwZXInKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICByZXNldEhvdmVySW5kZXg6IGZ1bmN0aW9uIHJlc2V0SG92ZXJJbmRleCgpIHtcbiAgICAgIHZhciBfdGhpczExID0gdGhpcztcblxuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghX3RoaXMxMS5tdWx0aXBsZSkge1xuICAgICAgICAgIF90aGlzMTEuaG92ZXJJbmRleCA9IF90aGlzMTEub3B0aW9ucy5pbmRleE9mKF90aGlzMTEuc2VsZWN0ZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChfdGhpczExLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIF90aGlzMTEuaG92ZXJJbmRleCA9IE1hdGgubWluLmFwcGx5KG51bGwsIF90aGlzMTEuc2VsZWN0ZWQubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczExLm9wdGlvbnMuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3RoaXMxMS5ob3ZlckluZGV4ID0gLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCAzMDApO1xuICAgIH0sXG4gICAgaGFuZGxlT3B0aW9uU2VsZWN0OiBmdW5jdGlvbiBoYW5kbGVPcHRpb25TZWxlY3Qob3B0aW9uLCBieUNsaWNrKSB7XG4gICAgICB2YXIgX3RoaXMxMiA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9ICh0aGlzLnZhbHVlIHx8IFtdKS5zbGljZSgpO1xuICAgICAgICB2YXIgb3B0aW9uSW5kZXggPSB0aGlzLmdldFZhbHVlSW5kZXgodmFsdWUsIG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb25JbmRleCA+IC0xKSB7XG4gICAgICAgICAgdmFsdWUuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm11bHRpcGxlTGltaXQgPD0gMCB8fCB2YWx1ZS5sZW5ndGggPCB0aGlzLm11bHRpcGxlTGltaXQpIHtcbiAgICAgICAgICB2YWx1ZS5wdXNoKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSh2YWx1ZSk7XG4gICAgICAgIGlmIChvcHRpb24uY3JlYXRlZCkge1xuICAgICAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgICAgICB0aGlzLmhhbmRsZVF1ZXJ5Q2hhbmdlKCcnKTtcbiAgICAgICAgICB0aGlzLmlucHV0TGVuZ3RoID0gMjA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSkgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCBvcHRpb24udmFsdWUpO1xuICAgICAgICB0aGlzLmVtaXRDaGFuZ2Uob3B0aW9uLnZhbHVlKTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmlzU2lsZW50Qmx1ciA9IGJ5Q2xpY2s7XG4gICAgICB0aGlzLnNldFNvZnRGb2N1cygpO1xuICAgICAgaWYgKHRoaXMudmlzaWJsZSkgcmV0dXJuO1xuICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczEyLnNjcm9sbFRvT3B0aW9uKG9wdGlvbik7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHNldFNvZnRGb2N1czogZnVuY3Rpb24gc2V0U29mdEZvY3VzKCkge1xuICAgICAgdGhpcy5zb2Z0Rm9jdXMgPSB0cnVlO1xuICAgICAgdmFyIGlucHV0ID0gdGhpcy4kcmVmcy5pbnB1dCB8fCB0aGlzLiRyZWZzLnJlZmVyZW5jZTtcbiAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VmFsdWVJbmRleDogZnVuY3Rpb24gZ2V0VmFsdWVJbmRleCgpIHtcbiAgICAgIHZhciBhcnIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzWzFdO1xuXG4gICAgICB2YXIgaXNPYmplY3QgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpLnRvTG93ZXJDYXNlKCkgPT09ICdbb2JqZWN0IG9iamVjdF0nO1xuICAgICAgaWYgKCFpc09iamVjdCkge1xuICAgICAgICByZXR1cm4gYXJyLmluZGV4T2YodmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlS2V5ID0gdGhpcy52YWx1ZUtleTtcbiAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgIGFyci5zb21lKGZ1bmN0aW9uIChpdGVtLCBpKSB7XG4gICAgICAgICAgaWYgKE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKShpdGVtLCB2YWx1ZUtleSkgPT09IE9iamVjdCh1dGlsX1tcImdldFZhbHVlQnlQYXRoXCJdKSh2YWx1ZSwgdmFsdWVLZXkpKSB7XG4gICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9nZ2xlTWVudTogZnVuY3Rpb24gdG9nZ2xlTWVudSgpIHtcbiAgICAgIGlmICghdGhpcy5zZWxlY3REaXNhYmxlZCkge1xuICAgICAgICBpZiAodGhpcy5tZW51VmlzaWJsZU9uRm9jdXMpIHtcbiAgICAgICAgICB0aGlzLm1lbnVWaXNpYmxlT25Gb2N1cyA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmlzaWJsZSA9ICF0aGlzLnZpc2libGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlzaWJsZSkge1xuICAgICAgICAgICh0aGlzLiRyZWZzLmlucHV0IHx8IHRoaXMuJHJlZnMucmVmZXJlbmNlKS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBzZWxlY3RPcHRpb246IGZ1bmN0aW9uIHNlbGVjdE9wdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlTWVudSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uc1t0aGlzLmhvdmVySW5kZXhdKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVPcHRpb25TZWxlY3QodGhpcy5vcHRpb25zW3RoaXMuaG92ZXJJbmRleF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBkZWxldGVTZWxlY3RlZDogZnVuY3Rpb24gZGVsZXRlU2VsZWN0ZWQoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdmFyIHZhbHVlID0gdGhpcy5tdWx0aXBsZSA/IFtdIDogJyc7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbHVlKTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSh2YWx1ZSk7XG4gICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuJGVtaXQoJ2NsZWFyJyk7XG4gICAgfSxcbiAgICBkZWxldGVUYWc6IGZ1bmN0aW9uIGRlbGV0ZVRhZyhldmVudCwgdGFnKSB7XG4gICAgICB2YXIgaW5kZXggPSB0aGlzLnNlbGVjdGVkLmluZGV4T2YodGFnKTtcbiAgICAgIGlmIChpbmRleCA+IC0xICYmICF0aGlzLnNlbGVjdERpc2FibGVkKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUuc2xpY2UoKTtcbiAgICAgICAgdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3JlbW92ZS10YWcnLCB0YWcudmFsdWUpO1xuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBvbklucHV0Q2hhbmdlOiBmdW5jdGlvbiBvbklucHV0Q2hhbmdlKCkge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyYWJsZSAmJiB0aGlzLnF1ZXJ5ICE9PSB0aGlzLnNlbGVjdGVkTGFiZWwpIHtcbiAgICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuc2VsZWN0ZWRMYWJlbDtcbiAgICAgICAgdGhpcy5oYW5kbGVRdWVyeUNoYW5nZSh0aGlzLnF1ZXJ5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uT3B0aW9uRGVzdHJveTogZnVuY3Rpb24gb25PcHRpb25EZXN0cm95KGluZGV4KSB7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3VudC0tO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0NvdW50LS07XG4gICAgICAgIHRoaXMub3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVzZXRJbnB1dFdpZHRoOiBmdW5jdGlvbiByZXNldElucHV0V2lkdGgoKSB7XG4gICAgICB0aGlzLmlucHV0V2lkdGggPSB0aGlzLiRyZWZzLnJlZmVyZW5jZS4kZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfSxcbiAgICBoYW5kbGVSZXNpemU6IGZ1bmN0aW9uIGhhbmRsZVJlc2l6ZSgpIHtcbiAgICAgIHRoaXMucmVzZXRJbnB1dFdpZHRoKCk7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkgdGhpcy5yZXNldElucHV0SGVpZ2h0KCk7XG4gICAgfSxcbiAgICBjaGVja0RlZmF1bHRGaXJzdE9wdGlvbjogZnVuY3Rpb24gY2hlY2tEZWZhdWx0Rmlyc3RPcHRpb24oKSB7XG4gICAgICB0aGlzLmhvdmVySW5kZXggPSAtMTtcbiAgICAgIC8vIGhpZ2hsaWdodCB0aGUgY3JlYXRlZCBvcHRpb25cbiAgICAgIHZhciBoYXNDcmVhdGVkID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy5vcHRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnNbaV0uY3JlYXRlZCkge1xuICAgICAgICAgIGhhc0NyZWF0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChoYXNDcmVhdGVkKSByZXR1cm47XG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pICE9PSB0aGlzLm9wdGlvbnMubGVuZ3RoOyArK19pKSB7XG4gICAgICAgIHZhciBvcHRpb24gPSB0aGlzLm9wdGlvbnNbX2ldO1xuICAgICAgICBpZiAodGhpcy5xdWVyeSkge1xuICAgICAgICAgIC8vIGhpZ2hsaWdodCBmaXJzdCBvcHRpb25zIHRoYXQgcGFzc2VzIHRoZSBmaWx0ZXJcbiAgICAgICAgICBpZiAoIW9wdGlvbi5kaXNhYmxlZCAmJiAhb3B0aW9uLmdyb3VwRGlzYWJsZWQgJiYgb3B0aW9uLnZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IF9pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGhpZ2hsaWdodCBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uXG4gICAgICAgICAgaWYgKG9wdGlvbi5pdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaG92ZXJJbmRleCA9IF9pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBnZXRWYWx1ZUtleTogZnVuY3Rpb24gZ2V0VmFsdWVLZXkoaXRlbSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVtLnZhbHVlKS50b0xvd2VyQ2FzZSgpICE9PSAnW29iamVjdCBvYmplY3RdJykge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QodXRpbF9bXCJnZXRWYWx1ZUJ5UGF0aFwiXSkoaXRlbS52YWx1ZSwgdGhpcy52YWx1ZUtleSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7XG4gICAgdmFyIF90aGlzMTMgPSB0aGlzO1xuXG4gICAgdGhpcy5jYWNoZWRQbGFjZUhvbGRlciA9IHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gdGhpcy5wcm9wUGxhY2Vob2xkZXI7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgIUFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgW10pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy4kZW1pdCgnaW5wdXQnLCAnJyk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWJvdW5jZWRPbklucHV0Q2hhbmdlID0gZGVib3VuY2VfZGVmYXVsdCgpKHRoaXMuZGVib3VuY2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMTMub25JbnB1dENoYW5nZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kZWJvdW5jZWRRdWVyeUNoYW5nZSA9IGRlYm91bmNlX2RlZmF1bHQoKSh0aGlzLmRlYm91bmNlLCBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMxMy5oYW5kbGVRdWVyeUNoYW5nZShlLnRhcmdldC52YWx1ZSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRvbignaGFuZGxlT3B0aW9uQ2xpY2snLCB0aGlzLmhhbmRsZU9wdGlvblNlbGVjdCk7XG4gICAgdGhpcy4kb24oJ3NldFNlbGVjdGVkJywgdGhpcy5zZXRTZWxlY3RlZCk7XG4gIH0sXG4gIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7XG4gICAgdmFyIF90aGlzMTQgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBsYWNlaG9sZGVyID0gJyc7XG4gICAgfVxuICAgIE9iamVjdChyZXNpemVfZXZlbnRfW1wiYWRkUmVzaXplTGlzdGVuZXJcIl0pKHRoaXMuJGVsLCB0aGlzLmhhbmRsZVJlc2l6ZSk7XG5cbiAgICB2YXIgcmVmZXJlbmNlID0gdGhpcy4kcmVmcy5yZWZlcmVuY2U7XG4gICAgaWYgKHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuJGVsKSB7XG4gICAgICB2YXIgc2l6ZU1hcCA9IHtcbiAgICAgICAgbWVkaXVtOiAzNixcbiAgICAgICAgc21hbGw6IDMyLFxuICAgICAgICBtaW5pOiAyOFxuICAgICAgfTtcbiAgICAgIHZhciBpbnB1dCA9IHJlZmVyZW5jZS4kZWwucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcbiAgICAgIHRoaXMuaW5pdGlhbElucHV0SGVpZ2h0ID0gaW5wdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IHx8IHNpemVNYXBbdGhpcy5zZWxlY3RTaXplXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVtb3RlICYmIHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMucmVzZXRJbnB1dEhlaWdodCgpO1xuICAgIH1cbiAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAocmVmZXJlbmNlICYmIHJlZmVyZW5jZS4kZWwpIHtcbiAgICAgICAgX3RoaXMxNC5pbnB1dFdpZHRoID0gcmVmZXJlbmNlLiRlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnNldFNlbGVjdGVkKCk7XG4gIH0sXG4gIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuJGVsICYmIHRoaXMuaGFuZGxlUmVzaXplKSBPYmplY3QocmVzaXplX2V2ZW50X1tcInJlbW92ZVJlc2l6ZUxpc3RlbmVyXCJdKSh0aGlzLiRlbCwgdGhpcy5oYW5kbGVSZXNpemUpO1xuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvc2VsZWN0L3NyYy9zZWxlY3QudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlxuIC8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHNyY19zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18gPSAoc2VsZWN0dnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfKTsgXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3BhY2thZ2VzL3NlbGVjdC9zcmMvc2VsZWN0LnZ1ZVxuXG5cblxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cblxudmFyIHNlbGVjdF9jb21wb25lbnQgPSBPYmplY3QoY29tcG9uZW50Tm9ybWFsaXplcltcImFcIiAvKiBkZWZhdWx0ICovXSkoXG4gIHNyY19zZWxlY3R2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18sXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKGZhbHNlKSB7IHZhciBzZWxlY3RfYXBpOyB9XG5zZWxlY3RfY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJwYWNrYWdlcy9zZWxlY3Qvc3JjL3NlbGVjdC52dWVcIlxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3NlbGVjdCA9IChzZWxlY3RfY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy9zZWxlY3QvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuc3JjX3NlbGVjdC5pbnN0YWxsID0gZnVuY3Rpb24gKFZ1ZSkge1xuICBWdWUuY29tcG9uZW50KHNyY19zZWxlY3QubmFtZSwgc3JjX3NlbGVjdCk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc19zZWxlY3QgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChzcmNfc2VsZWN0KTtcblxuLyoqKi8gfSlcblxuLyoqKioqKi8gfSk7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/select.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/tag.js":
- /*!********************************************!*\
- !*** ./node_modules/element-ui/lib/tag.js ***!
- \********************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 130);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return normalizeComponent; });\n/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nfunction normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n\n\n/***/ }),\n\n/***/ 130:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// CONCATENATED MODULE: ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib??vue-loader-options!./packages/tag/src/tag.vue?vue&type=script&lang=js&\n\n/* harmony default export */ var tagvue_type_script_lang_js_ = ({\n name: 'ElTag',\n props: {\n text: String,\n closable: Boolean,\n type: String,\n hit: Boolean,\n disableTransitions: Boolean,\n color: String,\n size: String,\n effect: {\n type: String,\n default: 'light',\n validator: function validator(val) {\n return ['dark', 'light', 'plain'].indexOf(val) !== -1;\n }\n }\n },\n methods: {\n handleClose: function handleClose(event) {\n event.stopPropagation();\n this.$emit('close', event);\n },\n handleClick: function handleClick(event) {\n this.$emit('click', event);\n }\n },\n computed: {\n tagSize: function tagSize() {\n return this.size || (this.$ELEMENT || {}).size;\n }\n },\n render: function render(h) {\n var type = this.type,\n tagSize = this.tagSize,\n hit = this.hit,\n effect = this.effect;\n\n var classes = ['el-tag', type ? 'el-tag--' + type : '', tagSize ? 'el-tag--' + tagSize : '', effect ? 'el-tag--' + effect : '', hit && 'is-hit'];\n var tagEl = h(\n 'span',\n {\n 'class': classes,\n style: { backgroundColor: this.color },\n on: {\n 'click': this.handleClick\n }\n },\n [this.$slots.default, this.closable && h('i', { 'class': 'el-tag__close el-icon-close', on: {\n 'click': this.handleClose\n }\n })]\n );\n\n return this.disableTransitions ? tagEl : h(\n 'transition',\n {\n attrs: { name: 'el-zoom-in-center' }\n },\n [tagEl]\n );\n }\n});\n// CONCATENATED MODULE: ./packages/tag/src/tag.vue?vue&type=script&lang=js&\n /* harmony default export */ var src_tagvue_type_script_lang_js_ = (tagvue_type_script_lang_js_); \n// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js\nvar componentNormalizer = __webpack_require__(0);\n\n// CONCATENATED MODULE: ./packages/tag/src/tag.vue\nvar render, staticRenderFns\n\n\n\n\n/* normalize component */\n\nvar component = Object(componentNormalizer[\"a\" /* default */])(\n src_tagvue_type_script_lang_js_,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"packages/tag/src/tag.vue\"\n/* harmony default export */ var tag = (component.exports);\n// CONCATENATED MODULE: ./packages/tag/index.js\n\n\n/* istanbul ignore next */\ntag.install = function (Vue) {\n Vue.component(tag.name, tag);\n};\n\n/* harmony default export */ var packages_tag = __webpack_exports__[\"default\"] = (tag);\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGFnLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3RhZy5qcz84YmJjIl0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID1cbi8qKioqKiovIChmdW5jdGlvbihtb2R1bGVzKSB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbi8qKioqKiovIFx0XHRcdGV4cG9ydHM6IHt9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbi8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4vKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuLyoqKioqKi8gXHR9XG4vKioqKioqL1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4vKioqKioqLyBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4vKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4vKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbi8qKioqKiovIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4vKioqKioqLyBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuLyoqKioqKi8gXHRcdHJldHVybiBucztcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbi8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4vKioqKioqLyBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvZGlzdC9cIjtcbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTMwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKHtcblxuLyoqKi8gMDpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXCJ1c2Ugc3RyaWN0XCI7XG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFwiYVwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIG5vcm1hbGl6ZUNvbXBvbmVudDsgfSk7XG4vKiBnbG9iYWxzIF9fVlVFX1NTUl9DT05URVhUX18gKi9cblxuLy8gSU1QT1JUQU5UOiBEbyBOT1QgdXNlIEVTMjAxNSBmZWF0dXJlcyBpbiB0aGlzIGZpbGUgKGV4Y2VwdCBmb3IgbW9kdWxlcykuXG4vLyBUaGlzIG1vZHVsZSBpcyBhIHJ1bnRpbWUgdXRpbGl0eSBmb3IgY2xlYW5lciBjb21wb25lbnQgbW9kdWxlIG91dHB1dCBhbmQgd2lsbFxuLy8gYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHdlYnBhY2sgdXNlciBidW5kbGUuXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbXBvbmVudCAoXG4gIHNjcmlwdEV4cG9ydHMsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmdW5jdGlvbmFsVGVtcGxhdGUsXG4gIGluamVjdFN0eWxlcyxcbiAgc2NvcGVJZCxcbiAgbW9kdWxlSWRlbnRpZmllciwgLyogc2VydmVyIG9ubHkgKi9cbiAgc2hhZG93TW9kZSAvKiB2dWUtY2xpIG9ubHkgKi9cbikge1xuICAvLyBWdWUuZXh0ZW5kIGNvbnN0cnVjdG9yIGV4cG9ydCBpbnRlcm9wXG4gIHZhciBvcHRpb25zID0gdHlwZW9mIHNjcmlwdEV4cG9ydHMgPT09ICdmdW5jdGlvbidcbiAgICA/IHNjcmlwdEV4cG9ydHMub3B0aW9uc1xuICAgIDogc2NyaXB0RXhwb3J0c1xuXG4gIC8vIHJlbmRlciBmdW5jdGlvbnNcbiAgaWYgKHJlbmRlcikge1xuICAgIG9wdGlvbnMucmVuZGVyID0gcmVuZGVyXG4gICAgb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnMgPSBzdGF0aWNSZW5kZXJGbnNcbiAgICBvcHRpb25zLl9jb21waWxlZCA9IHRydWVcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uYWwgdGVtcGxhdGVcbiAgaWYgKGZ1bmN0aW9uYWxUZW1wbGF0ZSkge1xuICAgIG9wdGlvbnMuZnVuY3Rpb25hbCA9IHRydWVcbiAgfVxuXG4gIC8vIHNjb3BlZElkXG4gIGlmIChzY29wZUlkKSB7XG4gICAgb3B0aW9ucy5fc2NvcGVJZCA9ICdkYXRhLXYtJyArIHNjb3BlSWRcbiAgfVxuXG4gIHZhciBob29rXG4gIGlmIChtb2R1bGVJZGVudGlmaWVyKSB7IC8vIHNlcnZlciBidWlsZFxuICAgIGhvb2sgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgLy8gMi4zIGluamVjdGlvblxuICAgICAgY29udGV4dCA9XG4gICAgICAgIGNvbnRleHQgfHwgLy8gY2FjaGVkIGNhbGxcbiAgICAgICAgKHRoaXMuJHZub2RlICYmIHRoaXMuJHZub2RlLnNzckNvbnRleHQpIHx8IC8vIHN0YXRlZnVsXG4gICAgICAgICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC4kdm5vZGUgJiYgdGhpcy5wYXJlbnQuJHZub2RlLnNzckNvbnRleHQpIC8vIGZ1bmN0aW9uYWxcbiAgICAgIC8vIDIuMiB3aXRoIHJ1bkluTmV3Q29udGV4dDogdHJ1ZVxuICAgICAgaWYgKCFjb250ZXh0ICYmIHR5cGVvZiBfX1ZVRV9TU1JfQ09OVEVYVF9fICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb250ZXh0ID0gX19WVUVfU1NSX0NPTlRFWFRfX1xuICAgICAgfVxuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCBzdHlsZXNcbiAgICAgIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICAgICAgaW5qZWN0U3R5bGVzLmNhbGwodGhpcywgY29udGV4dClcbiAgICAgIH1cbiAgICAgIC8vIHJlZ2lzdGVyIGNvbXBvbmVudCBtb2R1bGUgaWRlbnRpZmllciBmb3IgYXN5bmMgY2h1bmsgaW5mZXJyZW5jZVxuICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMpIHtcbiAgICAgICAgY29udGV4dC5fcmVnaXN0ZXJlZENvbXBvbmVudHMuYWRkKG1vZHVsZUlkZW50aWZpZXIpXG4gICAgICB9XG4gICAgfVxuICAgIC8vIHVzZWQgYnkgc3NyIGluIGNhc2UgY29tcG9uZW50IGlzIGNhY2hlZCBhbmQgYmVmb3JlQ3JlYXRlXG4gICAgLy8gbmV2ZXIgZ2V0cyBjYWxsZWRcbiAgICBvcHRpb25zLl9zc3JSZWdpc3RlciA9IGhvb2tcbiAgfSBlbHNlIGlmIChpbmplY3RTdHlsZXMpIHtcbiAgICBob29rID0gc2hhZG93TW9kZVxuICAgICAgPyBmdW5jdGlvbiAoKSB7IGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIHRoaXMuJHJvb3QuJG9wdGlvbnMuc2hhZG93Um9vdCkgfVxuICAgICAgOiBpbmplY3RTdHlsZXNcbiAgfVxuXG4gIGlmIChob29rKSB7XG4gICAgaWYgKG9wdGlvbnMuZnVuY3Rpb25hbCkge1xuICAgICAgLy8gZm9yIHRlbXBsYXRlLW9ubHkgaG90LXJlbG9hZCBiZWNhdXNlIGluIHRoYXQgY2FzZSB0aGUgcmVuZGVyIGZuIGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRocm91Z2ggdGhlIG5vcm1hbGl6ZXJcbiAgICAgIG9wdGlvbnMuX2luamVjdFN0eWxlcyA9IGhvb2tcbiAgICAgIC8vIHJlZ2lzdGVyIGZvciBmdW5jdGlvYWwgY29tcG9uZW50IGluIHZ1ZSBmaWxlXG4gICAgICB2YXIgb3JpZ2luYWxSZW5kZXIgPSBvcHRpb25zLnJlbmRlclxuICAgICAgb3B0aW9ucy5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXJXaXRoU3R5bGVJbmplY3Rpb24gKGgsIGNvbnRleHQpIHtcbiAgICAgICAgaG9vay5jYWxsKGNvbnRleHQpXG4gICAgICAgIHJldHVybiBvcmlnaW5hbFJlbmRlcihoLCBjb250ZXh0KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmplY3QgY29tcG9uZW50IHJlZ2lzdHJhdGlvbiBhcyBiZWZvcmVDcmVhdGUgaG9va1xuICAgICAgdmFyIGV4aXN0aW5nID0gb3B0aW9ucy5iZWZvcmVDcmVhdGVcbiAgICAgIG9wdGlvbnMuYmVmb3JlQ3JlYXRlID0gZXhpc3RpbmdcbiAgICAgICAgPyBbXS5jb25jYXQoZXhpc3RpbmcsIGhvb2spXG4gICAgICAgIDogW2hvb2tdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBleHBvcnRzOiBzY3JpcHRFeHBvcnRzLFxuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfVxufVxuXG5cbi8qKiovIH0pLFxuXG4vKioqLyAxMzA6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliIS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRhZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh7XG4gIG5hbWU6ICdFbFRhZycsXG4gIHByb3BzOiB7XG4gICAgdGV4dDogU3RyaW5nLFxuICAgIGNsb3NhYmxlOiBCb29sZWFuLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgICBoaXQ6IEJvb2xlYW4sXG4gICAgZGlzYWJsZVRyYW5zaXRpb25zOiBCb29sZWFuLFxuICAgIGNvbG9yOiBTdHJpbmcsXG4gICAgc2l6ZTogU3RyaW5nLFxuICAgIGVmZmVjdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2xpZ2h0JyxcbiAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24gdmFsaWRhdG9yKHZhbCkge1xuICAgICAgICByZXR1cm4gWydkYXJrJywgJ2xpZ2h0JywgJ3BsYWluJ10uaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gaGFuZGxlQ2xvc2UoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy4kZW1pdCgnY2xvc2UnLCBldmVudCk7XG4gICAgfSxcbiAgICBoYW5kbGVDbGljazogZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ2NsaWNrJywgZXZlbnQpO1xuICAgIH1cbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWdTaXplOiBmdW5jdGlvbiB0YWdTaXplKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2l6ZSB8fCAodGhpcy4kRUxFTUVOVCB8fCB7fSkuc2l6ZTtcbiAgICB9XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgdHlwZSA9IHRoaXMudHlwZSxcbiAgICAgICAgdGFnU2l6ZSA9IHRoaXMudGFnU2l6ZSxcbiAgICAgICAgaGl0ID0gdGhpcy5oaXQsXG4gICAgICAgIGVmZmVjdCA9IHRoaXMuZWZmZWN0O1xuXG4gICAgdmFyIGNsYXNzZXMgPSBbJ2VsLXRhZycsIHR5cGUgPyAnZWwtdGFnLS0nICsgdHlwZSA6ICcnLCB0YWdTaXplID8gJ2VsLXRhZy0tJyArIHRhZ1NpemUgOiAnJywgZWZmZWN0ID8gJ2VsLXRhZy0tJyArIGVmZmVjdCA6ICcnLCBoaXQgJiYgJ2lzLWhpdCddO1xuICAgIHZhciB0YWdFbCA9IGgoXG4gICAgICAnc3BhbicsXG4gICAgICB7XG4gICAgICAgICdjbGFzcyc6IGNsYXNzZXMsXG4gICAgICAgIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogdGhpcy5jb2xvciB9LFxuICAgICAgICBvbjoge1xuICAgICAgICAgICdjbGljayc6IHRoaXMuaGFuZGxlQ2xpY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFt0aGlzLiRzbG90cy5kZWZhdWx0LCB0aGlzLmNsb3NhYmxlICYmIGgoJ2knLCB7ICdjbGFzcyc6ICdlbC10YWdfX2Nsb3NlIGVsLWljb24tY2xvc2UnLCBvbjoge1xuICAgICAgICAgICdjbGljayc6IHRoaXMuaGFuZGxlQ2xvc2VcbiAgICAgICAgfVxuICAgICAgfSldXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmRpc2FibGVUcmFuc2l0aW9ucyA/IHRhZ0VsIDogaChcbiAgICAgICd0cmFuc2l0aW9uJyxcbiAgICAgIHtcbiAgICAgICAgYXR0cnM6IHsgbmFtZTogJ2VsLXpvb20taW4tY2VudGVyJyB9XG4gICAgICB9LFxuICAgICAgW3RhZ0VsXVxuICAgICk7XG4gIH1cbn0pO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvc3JjL3RhZy52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXG4gLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgc3JjX3RhZ3Z1ZV90eXBlX3NjcmlwdF9sYW5nX2pzXyA9ICh0YWd2dWVfdHlwZV9zY3JpcHRfbGFuZ19qc18pOyBcbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXG52YXIgY29tcG9uZW50Tm9ybWFsaXplciA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdGFnL3NyYy90YWcudnVlXG52YXIgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnNcblxuXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuXG52YXIgY29tcG9uZW50ID0gT2JqZWN0KGNvbXBvbmVudE5vcm1hbGl6ZXJbXCJhXCIgLyogZGVmYXVsdCAqL10pKFxuICBzcmNfdGFndnVlX3R5cGVfc2NyaXB0X2xhbmdfanNfLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChmYWxzZSkgeyB2YXIgYXBpOyB9XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcInBhY2thZ2VzL3RhZy9zcmMvdGFnLnZ1ZVwiXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciB0YWcgPSAoY29tcG9uZW50LmV4cG9ydHMpO1xuLy8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9wYWNrYWdlcy90YWcvaW5kZXguanNcblxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudGFnLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQodGFnLm5hbWUsIHRhZyk7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBwYWNrYWdlc190YWcgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9ICh0YWcpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/tag.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf":
- /*!*************************************************************************!*\
- !*** ./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf ***!
- \*************************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports = __webpack_require__.p + \"static/fonts/element-icons.732389de.ttf\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvZm9udHMvZWxlbWVudC1pY29ucy50dGYuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvZm9udHMvZWxlbWVudC1pY29ucy50dGY/ZjYwZSJdLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJzdGF0aWMvZm9udHMvZWxlbWVudC1pY29ucy43MzIzODlkZS50dGZcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.ttf\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff":
- /*!**************************************************************************!*\
- !*** ./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff ***!
- \**************************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports = __webpack_require__.p + \"static/fonts/element-icons.535877f5.woff\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvZm9udHMvZWxlbWVudC1pY29ucy53b2ZmLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3RoZW1lLWNoYWxrL2ZvbnRzL2VsZW1lbnQtaWNvbnMud29mZj9jNzg0Il0sInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcInN0YXRpYy9mb250cy9lbGVtZW50LWljb25zLjUzNTg3N2Y1LndvZmZcIjsiXSwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/theme-chalk/fonts/element-icons.woff\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/theme-chalk/index.css":
- /*!***********************************************************!*\
- !*** ./node_modules/element-ui/lib/theme-chalk/index.css ***!
- \***********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = __webpack_require__(/*! !../../../css-loader??ref--6-oneOf-3-1!../../../postcss-loader/src??ref--6-oneOf-3-2!./index.css */ \"./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/element-ui/lib/theme-chalk/index.css\");\nif(content.__esModule) content = content.default;\nif(typeof content === 'string') content = [[module.i, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = __webpack_require__(/*! ../../../vue-style-loader/lib/addStylesClient.js */ \"./node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"0a795a8e\", content, false, {\"sourceMap\":false,\"shadowMode\":false});\n// Hot Module Replacement\nif(true) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(/*! !../../../css-loader??ref--6-oneOf-3-1!../../../postcss-loader/src??ref--6-oneOf-3-2!./index.css */ \"./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/element-ui/lib/theme-chalk/index.css\", function() {\n var newContent = __webpack_require__(/*! !../../../css-loader??ref--6-oneOf-3-1!../../../postcss-loader/src??ref--6-oneOf-3-2!./index.css */ \"./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/element-ui/lib/theme-chalk/index.css\");\n if(newContent.__esModule) newContent = newContent.default;\n if(typeof newContent === 'string') newContent = [[module.i, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdGhlbWUtY2hhbGsvaW5kZXguY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3RoZW1lLWNoYWxrL2luZGV4LmNzcz9kMTMxIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHN0eWxlLWxvYWRlcjogQWRkcyBzb21lIGNzcyB0byB0aGUgRE9NIGJ5IGFkZGluZyBhIDxzdHlsZT4gdGFnXG5cbi8vIGxvYWQgdGhlIHN0eWxlc1xudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi8uLi9jc3MtbG9hZGVyL2luZGV4LmpzPz9yZWYtLTYtb25lT2YtMy0xIS4uLy4uLy4uL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMiEuL2luZGV4LmNzc1wiKTtcbmlmKGNvbnRlbnQuX19lc01vZHVsZSkgY29udGVudCA9IGNvbnRlbnQuZGVmYXVsdDtcbmlmKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykgY29udGVudCA9IFtbbW9kdWxlLmlkLCBjb250ZW50LCAnJ11dO1xuaWYoY29udGVudC5sb2NhbHMpIG1vZHVsZS5leHBvcnRzID0gY29udGVudC5sb2NhbHM7XG4vLyBhZGQgdGhlIHN0eWxlcyB0byB0aGUgRE9NXG52YXIgYWRkID0gcmVxdWlyZShcIiEuLi8uLi8uLi92dWUtc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXNDbGllbnQuanNcIikuZGVmYXVsdFxudmFyIHVwZGF0ZSA9IGFkZChcIjBhNzk1YThlXCIsIGNvbnRlbnQsIGZhbHNlLCB7XCJzb3VyY2VNYXBcIjpmYWxzZSxcInNoYWRvd01vZGVcIjpmYWxzZX0pO1xuLy8gSG90IE1vZHVsZSBSZXBsYWNlbWVudFxuaWYobW9kdWxlLmhvdCkge1xuIC8vIFdoZW4gdGhlIHN0eWxlcyBjaGFuZ2UsIHVwZGF0ZSB0aGUgPHN0eWxlPiB0YWdzXG4gaWYoIWNvbnRlbnQubG9jYWxzKSB7XG4gICBtb2R1bGUuaG90LmFjY2VwdChcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMSEuLi8uLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tNi1vbmVPZi0zLTIhLi9pbmRleC5jc3NcIiwgZnVuY3Rpb24oKSB7XG4gICAgIHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9pbmRleC5qcz8/cmVmLS02LW9uZU9mLTMtMSEuLi8uLi8uLi9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/P3JlZi0tNi1vbmVPZi0zLTIhLi9pbmRleC5jc3NcIik7XG4gICAgIGlmKG5ld0NvbnRlbnQuX19lc01vZHVsZSkgbmV3Q29udGVudCA9IG5ld0NvbnRlbnQuZGVmYXVsdDtcbiAgICAgaWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG4gICAgIHVwZGF0ZShuZXdDb250ZW50KTtcbiAgIH0pO1xuIH1cbiAvLyBXaGVuIHRoZSBtb2R1bGUgaXMgZGlzcG9zZWQsIHJlbW92ZSB0aGUgPHN0eWxlPiB0YWdzXG4gbW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/theme-chalk/index.css\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/tooltip.js":
- /*!************************************************!*\
- !*** ./node_modules/element-ui/lib/tooltip.js ***!
- \************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- eval("module.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/dist/\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 136);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 136:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/vue-popper\"\nvar vue_popper_ = __webpack_require__(5);\nvar vue_popper_default = /*#__PURE__*/__webpack_require__.n(vue_popper_);\n\n// EXTERNAL MODULE: external \"throttle-debounce/debounce\"\nvar debounce_ = __webpack_require__(18);\nvar debounce_default = /*#__PURE__*/__webpack_require__.n(debounce_);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/dom\"\nvar dom_ = __webpack_require__(2);\n\n// EXTERNAL MODULE: external \"element-ui/lib/utils/util\"\nvar util_ = __webpack_require__(3);\n\n// EXTERNAL MODULE: external \"vue\"\nvar external_vue_ = __webpack_require__(7);\nvar external_vue_default = /*#__PURE__*/__webpack_require__.n(external_vue_);\n\n// CONCATENATED MODULE: ./packages/tooltip/src/main.js\n\n\n\n\n\n\n/* harmony default export */ var main = ({\n name: 'ElTooltip',\n\n mixins: [vue_popper_default.a],\n\n props: {\n openDelay: {\n type: Number,\n default: 0\n },\n disabled: Boolean,\n manual: Boolean,\n effect: {\n type: String,\n default: 'dark'\n },\n arrowOffset: {\n type: Number,\n default: 0\n },\n popperClass: String,\n content: String,\n visibleArrow: {\n default: true\n },\n transition: {\n type: String,\n default: 'el-fade-in-linear'\n },\n popperOptions: {\n default: function _default() {\n return {\n boundariesPadding: 10,\n gpuAcceleration: false\n };\n }\n },\n enterable: {\n type: Boolean,\n default: true\n },\n hideAfter: {\n type: Number,\n default: 0\n },\n tabindex: {\n type: Number,\n default: 0\n }\n },\n\n data: function data() {\n return {\n tooltipId: 'el-tooltip-' + Object(util_[\"generateId\"])(),\n timeoutPending: null,\n focusing: false\n };\n },\n beforeCreate: function beforeCreate() {\n var _this = this;\n\n if (this.$isServer) return;\n\n this.popperVM = new external_vue_default.a({\n data: { node: '' },\n render: function render(h) {\n return this.node;\n }\n }).$mount();\n\n this.debounceClose = debounce_default()(200, function () {\n return _this.handleClosePopper();\n });\n },\n render: function render(h) {\n var _this2 = this;\n\n if (this.popperVM) {\n this.popperVM.node = h(\n 'transition',\n {\n attrs: {\n name: this.transition\n },\n on: {\n 'afterLeave': this.doDestroy\n }\n },\n [h(\n 'div',\n {\n on: {\n 'mouseleave': function mouseleave() {\n _this2.setExpectedState(false);_this2.debounceClose();\n },\n 'mouseenter': function mouseenter() {\n _this2.setExpectedState(true);\n }\n },\n\n ref: 'popper',\n attrs: { role: 'tooltip',\n id: this.tooltipId,\n 'aria-hidden': this.disabled || !this.showPopper ? 'true' : 'false'\n },\n directives: [{\n name: 'show',\n value: !this.disabled && this.showPopper\n }],\n\n 'class': ['el-tooltip__popper', 'is-' + this.effect, this.popperClass] },\n [this.$slots.content || this.content]\n )]\n );\n }\n\n var firstElement = this.getFirstElement();\n if (!firstElement) return null;\n\n var data = firstElement.data = firstElement.data || {};\n data.staticClass = this.addTooltipClass(data.staticClass);\n\n return firstElement;\n },\n mounted: function mounted() {\n var _this3 = this;\n\n this.referenceElm = this.$el;\n if (this.$el.nodeType === 1) {\n this.$el.setAttribute('aria-describedby', this.tooltipId);\n this.$el.setAttribute('tabindex', this.tabindex);\n Object(dom_[\"on\"])(this.referenceElm, 'mouseenter', this.show);\n Object(dom_[\"on\"])(this.referenceElm, 'mouseleave', this.hide);\n Object(dom_[\"on\"])(this.referenceElm, 'focus', function () {\n if (!_this3.$slots.default || !_this3.$slots.default.length) {\n _this3.handleFocus();\n return;\n }\n var instance = _this3.$slots.default[0].componentInstance;\n if (instance && instance.focus) {\n instance.focus();\n } else {\n _this3.handleFocus();\n }\n });\n Object(dom_[\"on\"])(this.referenceElm, 'blur', this.handleBlur);\n Object(dom_[\"on\"])(this.referenceElm, 'click', this.removeFocusing);\n }\n // fix issue https://github.com/ElemeFE/element/issues/14424\n if (this.value && this.popperVM) {\n this.popperVM.$nextTick(function () {\n if (_this3.value) {\n _this3.updatePopper();\n }\n });\n }\n },\n\n watch: {\n focusing: function focusing(val) {\n if (val) {\n Object(dom_[\"addClass\"])(this.referenceElm, 'focusing');\n } else {\n Object(dom_[\"removeClass\"])(this.referenceElm, 'focusing');\n }\n }\n },\n methods: {\n show: function show() {\n this.setExpectedState(true);\n this.handleShowPopper();\n },\n hide: function hide() {\n this.setExpectedState(false);\n this.debounceClose();\n },\n handleFocus: function handleFocus() {\n this.focusing = true;\n this.show();\n },\n handleBlur: function handleBlur() {\n this.focusing = false;\n this.hide();\n },\n removeFocusing: function removeFocusing() {\n this.focusing = false;\n },\n addTooltipClass: function addTooltipClass(prev) {\n if (!prev) {\n return 'el-tooltip';\n } else {\n return 'el-tooltip ' + prev.replace('el-tooltip', '');\n }\n },\n handleShowPopper: function handleShowPopper() {\n var _this4 = this;\n\n if (!this.expectedState || this.manual) return;\n clearTimeout(this.timeout);\n this.timeout = setTimeout(function () {\n _this4.showPopper = true;\n }, this.openDelay);\n\n if (this.hideAfter > 0) {\n this.timeoutPending = setTimeout(function () {\n _this4.showPopper = false;\n }, this.hideAfter);\n }\n },\n handleClosePopper: function handleClosePopper() {\n if (this.enterable && this.expectedState || this.manual) return;\n clearTimeout(this.timeout);\n\n if (this.timeoutPending) {\n clearTimeout(this.timeoutPending);\n }\n this.showPopper = false;\n\n if (this.disabled) {\n this.doDestroy();\n }\n },\n setExpectedState: function setExpectedState(expectedState) {\n if (expectedState === false) {\n clearTimeout(this.timeoutPending);\n }\n this.expectedState = expectedState;\n },\n getFirstElement: function getFirstElement() {\n var slots = this.$slots.default;\n if (!Array.isArray(slots)) return null;\n var element = null;\n for (var index = 0; index < slots.length; index++) {\n if (slots[index] && slots[index].tag) {\n element = slots[index];\n };\n }\n return element;\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.popperVM && this.popperVM.$destroy();\n },\n destroyed: function destroyed() {\n var reference = this.referenceElm;\n if (reference.nodeType === 1) {\n Object(dom_[\"off\"])(reference, 'mouseenter', this.show);\n Object(dom_[\"off\"])(reference, 'mouseleave', this.hide);\n Object(dom_[\"off\"])(reference, 'focus', this.handleFocus);\n Object(dom_[\"off\"])(reference, 'blur', this.handleBlur);\n Object(dom_[\"off\"])(reference, 'click', this.removeFocusing);\n }\n }\n});\n// CONCATENATED MODULE: ./packages/tooltip/index.js\n\n\n/* istanbul ignore next */\nmain.install = function (Vue) {\n Vue.component(main.name, main);\n};\n\n/* harmony default export */ var tooltip = __webpack_exports__[\"default\"] = (main);\n\n/***/ }),\n\n/***/ 18:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! throttle-debounce/debounce */ \"./node_modules/throttle-debounce/debounce.js\");\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\n/***/ }),\n\n/***/ 3:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\n/***/ }),\n\n/***/ 5:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! element-ui/lib/utils/vue-popper */ \"./node_modules/element-ui/lib/utils/vue-popper.js\");\n\n/***/ }),\n\n/***/ 7:\n/***/ (function(module, exports) {\n\nmodule.exports = __webpack_require__(/*! vue */ \"vue\");\n\n/***/ })\n\n/******/ });//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdG9vbHRpcC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi90b29sdGlwLmpzPzI5OWMiXSwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPVxuLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqL1xuLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGw6IGZhbHNlLFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovXG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbi8qKioqKiovIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbi8qKioqKiovIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuLyoqKioqKi8gXHRcdH1cbi8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbi8qKioqKiovIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4vKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbi8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4vKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuLyoqKioqKi8gXHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4vKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4vKioqKioqLyBcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIi9kaXN0L1wiO1xuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMzYpO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoe1xuXG4vKioqLyAxMzY6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlclwiXG52YXIgdnVlX3BvcHBlcl8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xudmFyIHZ1ZV9wb3BwZXJfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4odnVlX3BvcHBlcl8pO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwidGhyb3R0bGUtZGVib3VuY2UvZGVib3VuY2VcIlxudmFyIGRlYm91bmNlXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xudmFyIGRlYm91bmNlX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGRlYm91bmNlXyk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogZXh0ZXJuYWwgXCJlbGVtZW50LXVpL2xpYi91dGlscy9kb21cIlxudmFyIGRvbV8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwiZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbFwiXG52YXIgdXRpbF8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xuXG4vLyBFWFRFUk5BTCBNT0RVTEU6IGV4dGVybmFsIFwidnVlXCJcbnZhciBleHRlcm5hbF92dWVfID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcbnZhciBleHRlcm5hbF92dWVfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oZXh0ZXJuYWxfdnVlXyk7XG5cbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdG9vbHRpcC9zcmMvbWFpbi5qc1xuXG5cblxuXG5cblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgbWFpbiA9ICh7XG4gIG5hbWU6ICdFbFRvb2x0aXAnLFxuXG4gIG1peGluczogW3Z1ZV9wb3BwZXJfZGVmYXVsdC5hXSxcblxuICBwcm9wczoge1xuICAgIG9wZW5EZWxheToge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IEJvb2xlYW4sXG4gICAgbWFudWFsOiBCb29sZWFuLFxuICAgIGVmZmVjdDoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RhcmsnXG4gICAgfSxcbiAgICBhcnJvd09mZnNldDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH0sXG4gICAgcG9wcGVyQ2xhc3M6IFN0cmluZyxcbiAgICBjb250ZW50OiBTdHJpbmcsXG4gICAgdmlzaWJsZUFycm93OiB7XG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICB0cmFuc2l0aW9uOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZWwtZmFkZS1pbi1saW5lYXInXG4gICAgfSxcbiAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBib3VuZGFyaWVzUGFkZGluZzogMTAsXG4gICAgICAgICAgZ3B1QWNjZWxlcmF0aW9uOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sXG4gICAgZW50ZXJhYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgaGlkZUFmdGVyOiB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBkZWZhdWx0OiAwXG4gICAgfSxcbiAgICB0YWJpbmRleDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH1cbiAgfSxcblxuICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0b29sdGlwSWQ6ICdlbC10b29sdGlwLScgKyBPYmplY3QodXRpbF9bXCJnZW5lcmF0ZUlkXCJdKSgpLFxuICAgICAgdGltZW91dFBlbmRpbmc6IG51bGwsXG4gICAgICBmb2N1c2luZzogZmFsc2VcbiAgICB9O1xuICB9LFxuICBiZWZvcmVDcmVhdGU6IGZ1bmN0aW9uIGJlZm9yZUNyZWF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgaWYgKHRoaXMuJGlzU2VydmVyKSByZXR1cm47XG5cbiAgICB0aGlzLnBvcHBlclZNID0gbmV3IGV4dGVybmFsX3Z1ZV9kZWZhdWx0LmEoe1xuICAgICAgZGF0YTogeyBub2RlOiAnJyB9LFxuICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2RlO1xuICAgICAgfVxuICAgIH0pLiRtb3VudCgpO1xuXG4gICAgdGhpcy5kZWJvdW5jZUNsb3NlID0gZGVib3VuY2VfZGVmYXVsdCgpKDIwMCwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUNsb3NlUG9wcGVyKCk7XG4gICAgfSk7XG4gIH0sXG4gIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIGlmICh0aGlzLnBvcHBlclZNKSB7XG4gICAgICB0aGlzLnBvcHBlclZNLm5vZGUgPSBoKFxuICAgICAgICAndHJhbnNpdGlvbicsXG4gICAgICAgIHtcbiAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy50cmFuc2l0aW9uXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgJ2FmdGVyTGVhdmUnOiB0aGlzLmRvRGVzdHJveVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgW2goXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgJ21vdXNlbGVhdmUnOiBmdW5jdGlvbiBtb3VzZWxlYXZlKCkge1xuICAgICAgICAgICAgICAgIF90aGlzMi5zZXRFeHBlY3RlZFN0YXRlKGZhbHNlKTtfdGhpczIuZGVib3VuY2VDbG9zZSgpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAnbW91c2VlbnRlcic6IGZ1bmN0aW9uIG1vdXNlZW50ZXIoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLnNldEV4cGVjdGVkU3RhdGUodHJ1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHJlZjogJ3BvcHBlcicsXG4gICAgICAgICAgICBhdHRyczogeyByb2xlOiAndG9vbHRpcCcsXG4gICAgICAgICAgICAgIGlkOiB0aGlzLnRvb2x0aXBJZCxcbiAgICAgICAgICAgICAgJ2FyaWEtaGlkZGVuJzogdGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5zaG93UG9wcGVyID8gJ3RydWUnIDogJ2ZhbHNlJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFt7XG4gICAgICAgICAgICAgIG5hbWU6ICdzaG93JyxcbiAgICAgICAgICAgICAgdmFsdWU6ICF0aGlzLmRpc2FibGVkICYmIHRoaXMuc2hvd1BvcHBlclxuICAgICAgICAgICAgfV0sXG5cbiAgICAgICAgICAgICdjbGFzcyc6IFsnZWwtdG9vbHRpcF9fcG9wcGVyJywgJ2lzLScgKyB0aGlzLmVmZmVjdCwgdGhpcy5wb3BwZXJDbGFzc10gfSxcbiAgICAgICAgICBbdGhpcy4kc2xvdHMuY29udGVudCB8fCB0aGlzLmNvbnRlbnRdXG4gICAgICAgICldXG4gICAgICApO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVsZW1lbnQgPSB0aGlzLmdldEZpcnN0RWxlbWVudCgpO1xuICAgIGlmICghZmlyc3RFbGVtZW50KSByZXR1cm4gbnVsbDtcblxuICAgIHZhciBkYXRhID0gZmlyc3RFbGVtZW50LmRhdGEgPSBmaXJzdEVsZW1lbnQuZGF0YSB8fCB7fTtcbiAgICBkYXRhLnN0YXRpY0NsYXNzID0gdGhpcy5hZGRUb29sdGlwQ2xhc3MoZGF0YS5zdGF0aWNDbGFzcyk7XG5cbiAgICByZXR1cm4gZmlyc3RFbGVtZW50O1xuICB9LFxuICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdGhpcy5yZWZlcmVuY2VFbG0gPSB0aGlzLiRlbDtcbiAgICBpZiAodGhpcy4kZWwubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgIHRoaXMuJGVsLnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRoaXMudG9vbHRpcElkKTtcbiAgICAgIHRoaXMuJGVsLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCB0aGlzLnRhYmluZGV4KTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnbW91c2VlbnRlcicsIHRoaXMuc2hvdyk7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ21vdXNlbGVhdmUnLCB0aGlzLmhpZGUpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvblwiXSkodGhpcy5yZWZlcmVuY2VFbG0sICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFfdGhpczMuJHNsb3RzLmRlZmF1bHQgfHwgIV90aGlzMy4kc2xvdHMuZGVmYXVsdC5sZW5ndGgpIHtcbiAgICAgICAgICBfdGhpczMuaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGluc3RhbmNlID0gX3RoaXMzLiRzbG90cy5kZWZhdWx0WzBdLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuZm9jdXMpIHtcbiAgICAgICAgICBpbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIF90aGlzMy5oYW5kbGVGb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIE9iamVjdChkb21fW1wib25cIl0pKHRoaXMucmVmZXJlbmNlRWxtLCAnYmx1cicsIHRoaXMuaGFuZGxlQmx1cik7XG4gICAgICBPYmplY3QoZG9tX1tcIm9uXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2NsaWNrJywgdGhpcy5yZW1vdmVGb2N1c2luZyk7XG4gICAgfVxuICAgIC8vIGZpeCBpc3N1ZSBodHRwczovL2dpdGh1Yi5jb20vRWxlbWVGRS9lbGVtZW50L2lzc3Vlcy8xNDQyNFxuICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMucG9wcGVyVk0pIHtcbiAgICAgIHRoaXMucG9wcGVyVk0uJG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzMy52YWx1ZSkge1xuICAgICAgICAgIF90aGlzMy51cGRhdGVQb3BwZXIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNpbmc6IGZ1bmN0aW9uIGZvY3VzaW5nKHZhbCkge1xuICAgICAgaWYgKHZhbCkge1xuICAgICAgICBPYmplY3QoZG9tX1tcImFkZENsYXNzXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBPYmplY3QoZG9tX1tcInJlbW92ZUNsYXNzXCJdKSh0aGlzLnJlZmVyZW5jZUVsbSwgJ2ZvY3VzaW5nJyk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgc2hvdzogZnVuY3Rpb24gc2hvdygpIHtcbiAgICAgIHRoaXMuc2V0RXhwZWN0ZWRTdGF0ZSh0cnVlKTtcbiAgICAgIHRoaXMuaGFuZGxlU2hvd1BvcHBlcigpO1xuICAgIH0sXG4gICAgaGlkZTogZnVuY3Rpb24gaGlkZSgpIHtcbiAgICAgIHRoaXMuc2V0RXhwZWN0ZWRTdGF0ZShmYWxzZSk7XG4gICAgICB0aGlzLmRlYm91bmNlQ2xvc2UoKTtcbiAgICB9LFxuICAgIGhhbmRsZUZvY3VzOiBmdW5jdGlvbiBoYW5kbGVGb2N1cygpIHtcbiAgICAgIHRoaXMuZm9jdXNpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zaG93KCk7XG4gICAgfSxcbiAgICBoYW5kbGVCbHVyOiBmdW5jdGlvbiBoYW5kbGVCbHVyKCkge1xuICAgICAgdGhpcy5mb2N1c2luZyA9IGZhbHNlO1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSxcbiAgICByZW1vdmVGb2N1c2luZzogZnVuY3Rpb24gcmVtb3ZlRm9jdXNpbmcoKSB7XG4gICAgICB0aGlzLmZvY3VzaW5nID0gZmFsc2U7XG4gICAgfSxcbiAgICBhZGRUb29sdGlwQ2xhc3M6IGZ1bmN0aW9uIGFkZFRvb2x0aXBDbGFzcyhwcmV2KSB7XG4gICAgICBpZiAoIXByZXYpIHtcbiAgICAgICAgcmV0dXJuICdlbC10b29sdGlwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnZWwtdG9vbHRpcCAnICsgcHJldi5yZXBsYWNlKCdlbC10b29sdGlwJywgJycpO1xuICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlU2hvd1BvcHBlcjogZnVuY3Rpb24gaGFuZGxlU2hvd1BvcHBlcigpIHtcbiAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICBpZiAoIXRoaXMuZXhwZWN0ZWRTdGF0ZSB8fCB0aGlzLm1hbnVhbCkgcmV0dXJuO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXM0LnNob3dQb3BwZXIgPSB0cnVlO1xuICAgICAgfSwgdGhpcy5vcGVuRGVsYXkpO1xuXG4gICAgICBpZiAodGhpcy5oaWRlQWZ0ZXIgPiAwKSB7XG4gICAgICAgIHRoaXMudGltZW91dFBlbmRpbmcgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczQuc2hvd1BvcHBlciA9IGZhbHNlO1xuICAgICAgICB9LCB0aGlzLmhpZGVBZnRlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBoYW5kbGVDbG9zZVBvcHBlcjogZnVuY3Rpb24gaGFuZGxlQ2xvc2VQb3BwZXIoKSB7XG4gICAgICBpZiAodGhpcy5lbnRlcmFibGUgJiYgdGhpcy5leHBlY3RlZFN0YXRlIHx8IHRoaXMubWFudWFsKSByZXR1cm47XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblxuICAgICAgaWYgKHRoaXMudGltZW91dFBlbmRpbmcpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFBlbmRpbmcpO1xuICAgICAgfVxuICAgICAgdGhpcy5zaG93UG9wcGVyID0gZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZG9EZXN0cm95KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBzZXRFeHBlY3RlZFN0YXRlOiBmdW5jdGlvbiBzZXRFeHBlY3RlZFN0YXRlKGV4cGVjdGVkU3RhdGUpIHtcbiAgICAgIGlmIChleHBlY3RlZFN0YXRlID09PSBmYWxzZSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0UGVuZGluZyk7XG4gICAgICB9XG4gICAgICB0aGlzLmV4cGVjdGVkU3RhdGUgPSBleHBlY3RlZFN0YXRlO1xuICAgIH0sXG4gICAgZ2V0Rmlyc3RFbGVtZW50OiBmdW5jdGlvbiBnZXRGaXJzdEVsZW1lbnQoKSB7XG4gICAgICB2YXIgc2xvdHMgPSB0aGlzLiRzbG90cy5kZWZhdWx0O1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHNsb3RzKSkgcmV0dXJuIG51bGw7XG4gICAgICB2YXIgZWxlbWVudCA9IG51bGw7XG4gICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgc2xvdHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGlmIChzbG90c1tpbmRleF0gJiYgc2xvdHNbaW5kZXhdLnRhZykge1xuICAgICAgICAgIGVsZW1lbnQgPSBzbG90c1tpbmRleF07XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLnBvcHBlclZNICYmIHRoaXMucG9wcGVyVk0uJGRlc3Ryb3koKTtcbiAgfSxcbiAgZGVzdHJveWVkOiBmdW5jdGlvbiBkZXN0cm95ZWQoKSB7XG4gICAgdmFyIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtO1xuICAgIGlmIChyZWZlcmVuY2Uubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZWVudGVyJywgdGhpcy5zaG93KTtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdtb3VzZWxlYXZlJywgdGhpcy5oaWRlKTtcbiAgICAgIE9iamVjdChkb21fW1wib2ZmXCJdKShyZWZlcmVuY2UsICdmb2N1cycsIHRoaXMuaGFuZGxlRm9jdXMpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ2JsdXInLCB0aGlzLmhhbmRsZUJsdXIpO1xuICAgICAgT2JqZWN0KGRvbV9bXCJvZmZcIl0pKHJlZmVyZW5jZSwgJ2NsaWNrJywgdGhpcy5yZW1vdmVGb2N1c2luZyk7XG4gICAgfVxuICB9XG59KTtcbi8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vcGFja2FnZXMvdG9vbHRpcC9pbmRleC5qc1xuXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5tYWluLmluc3RhbGwgPSBmdW5jdGlvbiAoVnVlKSB7XG4gIFZ1ZS5jb21wb25lbnQobWFpbi5uYW1lLCBtYWluKTtcbn07XG5cbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gdmFyIHRvb2x0aXAgPSBfX3dlYnBhY2tfZXhwb3J0c19fW1wiZGVmYXVsdFwiXSA9IChtYWluKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDE4OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0aHJvdHRsZS1kZWJvdW5jZS9kZWJvdW5jZVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDI6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL2RvbVwiKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDM6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWxcIik7XG5cbi8qKiovIH0pLFxuXG4vKioqLyA1OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJlbGVtZW50LXVpL2xpYi91dGlscy92dWUtcG9wcGVyXCIpO1xuXG4vKioqLyB9KSxcblxuLyoqKi8gNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidnVlXCIpO1xuXG4vKioqLyB9KVxuXG4vKioqKioqLyB9KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/tooltip.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/transitions/collapse-transition.js":
- /*!************************************************************************!*\
- !*** ./node_modules/element-ui/lib/transitions/collapse-transition.js ***!
- \************************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _dom = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Transition = function () {\n function Transition() {\n _classCallCheck(this, Transition);\n }\n\n Transition.prototype.beforeEnter = function beforeEnter(el) {\n (0, _dom.addClass)(el, 'collapse-transition');\n if (!el.dataset) el.dataset = {};\n\n el.dataset.oldPaddingTop = el.style.paddingTop;\n el.dataset.oldPaddingBottom = el.style.paddingBottom;\n\n el.style.height = '0';\n el.style.paddingTop = 0;\n el.style.paddingBottom = 0;\n };\n\n Transition.prototype.enter = function enter(el) {\n el.dataset.oldOverflow = el.style.overflow;\n if (el.scrollHeight !== 0) {\n el.style.height = el.scrollHeight + 'px';\n el.style.paddingTop = el.dataset.oldPaddingTop;\n el.style.paddingBottom = el.dataset.oldPaddingBottom;\n } else {\n el.style.height = '';\n el.style.paddingTop = el.dataset.oldPaddingTop;\n el.style.paddingBottom = el.dataset.oldPaddingBottom;\n }\n\n el.style.overflow = 'hidden';\n };\n\n Transition.prototype.afterEnter = function afterEnter(el) {\n // for safari: remove class then reset height is necessary\n (0, _dom.removeClass)(el, 'collapse-transition');\n el.style.height = '';\n el.style.overflow = el.dataset.oldOverflow;\n };\n\n Transition.prototype.beforeLeave = function beforeLeave(el) {\n if (!el.dataset) el.dataset = {};\n el.dataset.oldPaddingTop = el.style.paddingTop;\n el.dataset.oldPaddingBottom = el.style.paddingBottom;\n el.dataset.oldOverflow = el.style.overflow;\n\n el.style.height = el.scrollHeight + 'px';\n el.style.overflow = 'hidden';\n };\n\n Transition.prototype.leave = function leave(el) {\n if (el.scrollHeight !== 0) {\n // for safari: add class after set height, or it will jump to zero height suddenly, weired\n (0, _dom.addClass)(el, 'collapse-transition');\n el.style.height = 0;\n el.style.paddingTop = 0;\n el.style.paddingBottom = 0;\n }\n };\n\n Transition.prototype.afterLeave = function afterLeave(el) {\n (0, _dom.removeClass)(el, 'collapse-transition');\n el.style.height = '';\n el.style.overflow = el.dataset.oldOverflow;\n el.style.paddingTop = el.dataset.oldPaddingTop;\n el.style.paddingBottom = el.dataset.oldPaddingBottom;\n };\n\n return Transition;\n}();\n\nexports.default = {\n name: 'ElCollapseTransition',\n functional: true,\n render: function render(h, _ref) {\n var children = _ref.children;\n\n var data = {\n on: new Transition()\n };\n\n return h('transition', data, children);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdHJhbnNpdGlvbnMvY29sbGFwc2UtdHJhbnNpdGlvbi5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi90cmFuc2l0aW9ucy9jb2xsYXBzZS10cmFuc2l0aW9uLmpzPzU0ODgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2RvbSA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL2RvbScpO1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG52YXIgVHJhbnNpdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gVHJhbnNpdGlvbigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNpdGlvbik7XG4gIH1cblxuICBUcmFuc2l0aW9uLnByb3RvdHlwZS5iZWZvcmVFbnRlciA9IGZ1bmN0aW9uIGJlZm9yZUVudGVyKGVsKSB7XG4gICAgKDAsIF9kb20uYWRkQ2xhc3MpKGVsLCAnY29sbGFwc2UtdHJhbnNpdGlvbicpO1xuICAgIGlmICghZWwuZGF0YXNldCkgZWwuZGF0YXNldCA9IHt9O1xuXG4gICAgZWwuZGF0YXNldC5vbGRQYWRkaW5nVG9wID0gZWwuc3R5bGUucGFkZGluZ1RvcDtcbiAgICBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b20gPSBlbC5zdHlsZS5wYWRkaW5nQm90dG9tO1xuXG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJzAnO1xuICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSAwO1xuICAgIGVsLnN0eWxlLnBhZGRpbmdCb3R0b20gPSAwO1xuICB9O1xuXG4gIFRyYW5zaXRpb24ucHJvdG90eXBlLmVudGVyID0gZnVuY3Rpb24gZW50ZXIoZWwpIHtcbiAgICBlbC5kYXRhc2V0Lm9sZE92ZXJmbG93ID0gZWwuc3R5bGUub3ZlcmZsb3c7XG4gICAgaWYgKGVsLnNjcm9sbEhlaWdodCAhPT0gMCkge1xuICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0ICsgJ3B4JztcbiAgICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdUb3A7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nQm90dG9tID0gZWwuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdUb3A7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nQm90dG9tID0gZWwuZGF0YXNldC5vbGRQYWRkaW5nQm90dG9tO1xuICAgIH1cblxuICAgIGVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gIH07XG5cbiAgVHJhbnNpdGlvbi5wcm90b3R5cGUuYWZ0ZXJFbnRlciA9IGZ1bmN0aW9uIGFmdGVyRW50ZXIoZWwpIHtcbiAgICAvLyBmb3Igc2FmYXJpOiByZW1vdmUgY2xhc3MgdGhlbiByZXNldCBoZWlnaHQgaXMgbmVjZXNzYXJ5XG4gICAgKDAsIF9kb20ucmVtb3ZlQ2xhc3MpKGVsLCAnY29sbGFwc2UtdHJhbnNpdGlvbicpO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9ICcnO1xuICAgIGVsLnN0eWxlLm92ZXJmbG93ID0gZWwuZGF0YXNldC5vbGRPdmVyZmxvdztcbiAgfTtcblxuICBUcmFuc2l0aW9uLnByb3RvdHlwZS5iZWZvcmVMZWF2ZSA9IGZ1bmN0aW9uIGJlZm9yZUxlYXZlKGVsKSB7XG4gICAgaWYgKCFlbC5kYXRhc2V0KSBlbC5kYXRhc2V0ID0ge307XG4gICAgZWwuZGF0YXNldC5vbGRQYWRkaW5nVG9wID0gZWwuc3R5bGUucGFkZGluZ1RvcDtcbiAgICBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdCb3R0b20gPSBlbC5zdHlsZS5wYWRkaW5nQm90dG9tO1xuICAgIGVsLmRhdGFzZXQub2xkT3ZlcmZsb3cgPSBlbC5zdHlsZS5vdmVyZmxvdztcblxuICAgIGVsLnN0eWxlLmhlaWdodCA9IGVsLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgfTtcblxuICBUcmFuc2l0aW9uLnByb3RvdHlwZS5sZWF2ZSA9IGZ1bmN0aW9uIGxlYXZlKGVsKSB7XG4gICAgaWYgKGVsLnNjcm9sbEhlaWdodCAhPT0gMCkge1xuICAgICAgLy8gZm9yIHNhZmFyaTogYWRkIGNsYXNzIGFmdGVyIHNldCBoZWlnaHQsIG9yIGl0IHdpbGwganVtcCB0byB6ZXJvIGhlaWdodCBzdWRkZW5seSwgd2VpcmVkXG4gICAgICAoMCwgX2RvbS5hZGRDbGFzcykoZWwsICdjb2xsYXBzZS10cmFuc2l0aW9uJyk7XG4gICAgICBlbC5zdHlsZS5oZWlnaHQgPSAwO1xuICAgICAgZWwuc3R5bGUucGFkZGluZ1RvcCA9IDA7XG4gICAgICBlbC5zdHlsZS5wYWRkaW5nQm90dG9tID0gMDtcbiAgICB9XG4gIH07XG5cbiAgVHJhbnNpdGlvbi5wcm90b3R5cGUuYWZ0ZXJMZWF2ZSA9IGZ1bmN0aW9uIGFmdGVyTGVhdmUoZWwpIHtcbiAgICAoMCwgX2RvbS5yZW1vdmVDbGFzcykoZWwsICdjb2xsYXBzZS10cmFuc2l0aW9uJyk7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3cgPSBlbC5kYXRhc2V0Lm9sZE92ZXJmbG93O1xuICAgIGVsLnN0eWxlLnBhZGRpbmdUb3AgPSBlbC5kYXRhc2V0Lm9sZFBhZGRpbmdUb3A7XG4gICAgZWwuc3R5bGUucGFkZGluZ0JvdHRvbSA9IGVsLmRhdGFzZXQub2xkUGFkZGluZ0JvdHRvbTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oKTtcblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBuYW1lOiAnRWxDb2xsYXBzZVRyYW5zaXRpb24nLFxuICBmdW5jdGlvbmFsOiB0cnVlLFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoLCBfcmVmKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcblxuICAgIHZhciBkYXRhID0ge1xuICAgICAgb246IG5ldyBUcmFuc2l0aW9uKClcbiAgICB9O1xuXG4gICAgcmV0dXJuIGgoJ3RyYW5zaXRpb24nLCBkYXRhLCBjaGlsZHJlbik7XG4gIH1cbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/transitions/collapse-transition.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/after-leave.js":
- /*!**********************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/after-leave.js ***!
- \**********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nexports.default = function (instance, callback) {\n var speed = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 300;\n var once = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (!instance || !callback) throw new Error('instance & callback is required');\n var called = false;\n var afterLeaveCallback = function afterLeaveCallback() {\n if (called) return;\n called = true;\n if (callback) {\n callback.apply(null, arguments);\n }\n };\n if (once) {\n instance.$once('after-leave', afterLeaveCallback);\n } else {\n instance.$on('after-leave', afterLeaveCallback);\n }\n setTimeout(function () {\n afterLeaveCallback();\n }, speed + 100);\n};\n\n; /**\n * Bind after-leave event for vue instance. Make sure after-leave is called in any browsers.\n *\n * @param {Vue} instance Vue instance.\n * @param {Function} callback callback of after-leave event\n * @param {Number} speed the speed of transition, default value is 300ms\n * @param {Boolean} once weather bind after-leave once. default value is false.\n *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvYWZ0ZXItbGVhdmUuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvYWZ0ZXItbGVhdmUuanM/YzU2YSJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgY2FsbGJhY2spIHtcbiAgdmFyIHNwZWVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiAzMDA7XG4gIHZhciBvbmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBmYWxzZTtcblxuICBpZiAoIWluc3RhbmNlIHx8ICFjYWxsYmFjaykgdGhyb3cgbmV3IEVycm9yKCdpbnN0YW5jZSAmIGNhbGxiYWNrIGlzIHJlcXVpcmVkJyk7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgdmFyIGFmdGVyTGVhdmVDYWxsYmFjayA9IGZ1bmN0aW9uIGFmdGVyTGVhdmVDYWxsYmFjaygpIHtcbiAgICBpZiAoY2FsbGVkKSByZXR1cm47XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9O1xuICBpZiAob25jZSkge1xuICAgIGluc3RhbmNlLiRvbmNlKCdhZnRlci1sZWF2ZScsIGFmdGVyTGVhdmVDYWxsYmFjayk7XG4gIH0gZWxzZSB7XG4gICAgaW5zdGFuY2UuJG9uKCdhZnRlci1sZWF2ZScsIGFmdGVyTGVhdmVDYWxsYmFjayk7XG4gIH1cbiAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgYWZ0ZXJMZWF2ZUNhbGxiYWNrKCk7XG4gIH0sIHNwZWVkICsgMTAwKTtcbn07XG5cbjsgLyoqXG4gICAqIEJpbmQgYWZ0ZXItbGVhdmUgZXZlbnQgZm9yIHZ1ZSBpbnN0YW5jZS4gTWFrZSBzdXJlIGFmdGVyLWxlYXZlIGlzIGNhbGxlZCBpbiBhbnkgYnJvd3NlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7VnVlfSBpbnN0YW5jZSBWdWUgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGNhbGxiYWNrIG9mIGFmdGVyLWxlYXZlIGV2ZW50XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBzcGVlZCB0aGUgc3BlZWQgb2YgdHJhbnNpdGlvbiwgZGVmYXVsdCB2YWx1ZSBpcyAzMDBtc1xuICAgKiBAcGFyYW0ge0Jvb2xlYW59IG9uY2Ugd2VhdGhlciBiaW5kIGFmdGVyLWxlYXZlIG9uY2UuIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2UuXG4gICAqLyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/after-leave.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/aria-dialog.js":
- /*!**********************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/aria-dialog.js ***!
- \**********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _ariaUtils = __webpack_require__(/*! ./aria-utils */ \"./node_modules/element-ui/lib/utils/aria-utils.js\");\n\nvar _ariaUtils2 = _interopRequireDefault(_ariaUtils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * @constructor\n * @desc Dialog object providing modal focus management.\n *\n * Assumptions: The element serving as the dialog container is present in the\n * DOM and hidden. The dialog container has role='dialog'.\n *\n * @param dialogId\n * The ID of the element serving as the dialog container.\n * @param focusAfterClosed\n * Either the DOM node or the ID of the DOM node to focus when the\n * dialog closes.\n * @param focusFirst\n * Optional parameter containing either the DOM node or the ID of the\n * DOM node to focus when the dialog opens. If not specified, the\n * first focusable element in the dialog will receive focus.\n */\nvar aria = aria || {};\nvar tabEvent;\n\naria.Dialog = function (dialog, focusAfterClosed, focusFirst) {\n var _this = this;\n\n this.dialogNode = dialog;\n if (this.dialogNode === null || this.dialogNode.getAttribute('role') !== 'dialog') {\n throw new Error('Dialog() requires a DOM element with ARIA role of dialog.');\n }\n\n if (typeof focusAfterClosed === 'string') {\n this.focusAfterClosed = document.getElementById(focusAfterClosed);\n } else if ((typeof focusAfterClosed === 'undefined' ? 'undefined' : _typeof(focusAfterClosed)) === 'object') {\n this.focusAfterClosed = focusAfterClosed;\n } else {\n this.focusAfterClosed = null;\n }\n\n if (typeof focusFirst === 'string') {\n this.focusFirst = document.getElementById(focusFirst);\n } else if ((typeof focusFirst === 'undefined' ? 'undefined' : _typeof(focusFirst)) === 'object') {\n this.focusFirst = focusFirst;\n } else {\n this.focusFirst = null;\n }\n\n if (this.focusFirst) {\n this.focusFirst.focus();\n } else {\n _ariaUtils2.default.focusFirstDescendant(this.dialogNode);\n }\n\n this.lastFocus = document.activeElement;\n tabEvent = function tabEvent(e) {\n _this.trapFocus(e);\n };\n this.addListeners();\n};\n\naria.Dialog.prototype.addListeners = function () {\n document.addEventListener('focus', tabEvent, true);\n};\n\naria.Dialog.prototype.removeListeners = function () {\n document.removeEventListener('focus', tabEvent, true);\n};\n\naria.Dialog.prototype.closeDialog = function () {\n var _this2 = this;\n\n this.removeListeners();\n if (this.focusAfterClosed) {\n setTimeout(function () {\n _this2.focusAfterClosed.focus();\n });\n }\n};\n\naria.Dialog.prototype.trapFocus = function (event) {\n if (_ariaUtils2.default.IgnoreUtilFocusChanges) {\n return;\n }\n if (this.dialogNode.contains(event.target)) {\n this.lastFocus = event.target;\n } else {\n _ariaUtils2.default.focusFirstDescendant(this.dialogNode);\n if (this.lastFocus === document.activeElement) {\n _ariaUtils2.default.focusLastDescendant(this.dialogNode);\n }\n this.lastFocus = document.activeElement;\n }\n};\n\nexports.default = aria.Dialog;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS1kaWFsb2cuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS1kaWFsb2cuanM/NzIyZiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9hcmlhVXRpbHMgPSByZXF1aXJlKCcuL2FyaWEtdXRpbHMnKTtcblxudmFyIF9hcmlhVXRpbHMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfYXJpYVV0aWxzKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLyoqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBkZXNjIERpYWxvZyBvYmplY3QgcHJvdmlkaW5nIG1vZGFsIGZvY3VzIG1hbmFnZW1lbnQuXG4gKlxuICogQXNzdW1wdGlvbnM6IFRoZSBlbGVtZW50IHNlcnZpbmcgYXMgdGhlIGRpYWxvZyBjb250YWluZXIgaXMgcHJlc2VudCBpbiB0aGVcbiAqIERPTSBhbmQgaGlkZGVuLiBUaGUgZGlhbG9nIGNvbnRhaW5lciBoYXMgcm9sZT0nZGlhbG9nJy5cbiAqXG4gKiBAcGFyYW0gZGlhbG9nSWRcbiAqICAgICAgICAgIFRoZSBJRCBvZiB0aGUgZWxlbWVudCBzZXJ2aW5nIGFzIHRoZSBkaWFsb2cgY29udGFpbmVyLlxuICogQHBhcmFtIGZvY3VzQWZ0ZXJDbG9zZWRcbiAqICAgICAgICAgIEVpdGhlciB0aGUgRE9NIG5vZGUgb3IgdGhlIElEIG9mIHRoZSBET00gbm9kZSB0byBmb2N1cyB3aGVuIHRoZVxuICogICAgICAgICAgZGlhbG9nIGNsb3Nlcy5cbiAqIEBwYXJhbSBmb2N1c0ZpcnN0XG4gKiAgICAgICAgICBPcHRpb25hbCBwYXJhbWV0ZXIgY29udGFpbmluZyBlaXRoZXIgdGhlIERPTSBub2RlIG9yIHRoZSBJRCBvZiB0aGVcbiAqICAgICAgICAgIERPTSBub2RlIHRvIGZvY3VzIHdoZW4gdGhlIGRpYWxvZyBvcGVucy4gSWYgbm90IHNwZWNpZmllZCwgdGhlXG4gKiAgICAgICAgICBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBpbiB0aGUgZGlhbG9nIHdpbGwgcmVjZWl2ZSBmb2N1cy5cbiAqL1xudmFyIGFyaWEgPSBhcmlhIHx8IHt9O1xudmFyIHRhYkV2ZW50O1xuXG5hcmlhLkRpYWxvZyA9IGZ1bmN0aW9uIChkaWFsb2csIGZvY3VzQWZ0ZXJDbG9zZWQsIGZvY3VzRmlyc3QpIHtcbiAgdmFyIF90aGlzID0gdGhpcztcblxuICB0aGlzLmRpYWxvZ05vZGUgPSBkaWFsb2c7XG4gIGlmICh0aGlzLmRpYWxvZ05vZGUgPT09IG51bGwgfHwgdGhpcy5kaWFsb2dOb2RlLmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAnZGlhbG9nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlhbG9nKCkgcmVxdWlyZXMgYSBET00gZWxlbWVudCB3aXRoIEFSSUEgcm9sZSBvZiBkaWFsb2cuJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIGZvY3VzQWZ0ZXJDbG9zZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgdGhpcy5mb2N1c0FmdGVyQ2xvc2VkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9jdXNBZnRlckNsb3NlZCk7XG4gIH0gZWxzZSBpZiAoKHR5cGVvZiBmb2N1c0FmdGVyQ2xvc2VkID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihmb2N1c0FmdGVyQ2xvc2VkKSkgPT09ICdvYmplY3QnKSB7XG4gICAgdGhpcy5mb2N1c0FmdGVyQ2xvc2VkID0gZm9jdXNBZnRlckNsb3NlZDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmZvY3VzQWZ0ZXJDbG9zZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBmb2N1c0ZpcnN0ID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuZm9jdXNGaXJzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvY3VzRmlyc3QpO1xuICB9IGVsc2UgaWYgKCh0eXBlb2YgZm9jdXNGaXJzdCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoZm9jdXNGaXJzdCkpID09PSAnb2JqZWN0Jykge1xuICAgIHRoaXMuZm9jdXNGaXJzdCA9IGZvY3VzRmlyc3Q7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5mb2N1c0ZpcnN0ID0gbnVsbDtcbiAgfVxuXG4gIGlmICh0aGlzLmZvY3VzRmlyc3QpIHtcbiAgICB0aGlzLmZvY3VzRmlyc3QuZm9jdXMoKTtcbiAgfSBlbHNlIHtcbiAgICBfYXJpYVV0aWxzMi5kZWZhdWx0LmZvY3VzRmlyc3REZXNjZW5kYW50KHRoaXMuZGlhbG9nTm9kZSk7XG4gIH1cblxuICB0aGlzLmxhc3RGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gIHRhYkV2ZW50ID0gZnVuY3Rpb24gdGFiRXZlbnQoZSkge1xuICAgIF90aGlzLnRyYXBGb2N1cyhlKTtcbiAgfTtcbiAgdGhpcy5hZGRMaXN0ZW5lcnMoKTtcbn07XG5cbmFyaWEuRGlhbG9nLnByb3RvdHlwZS5hZGRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGFiRXZlbnQsIHRydWUpO1xufTtcblxuYXJpYS5EaWFsb2cucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0YWJFdmVudCwgdHJ1ZSk7XG59O1xuXG5hcmlhLkRpYWxvZy5wcm90b3R5cGUuY2xvc2VEaWFsb2cgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gIGlmICh0aGlzLmZvY3VzQWZ0ZXJDbG9zZWQpIHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5mb2N1c0FmdGVyQ2xvc2VkLmZvY3VzKCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmFyaWEuRGlhbG9nLnByb3RvdHlwZS50cmFwRm9jdXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgaWYgKF9hcmlhVXRpbHMyLmRlZmF1bHQuSWdub3JlVXRpbEZvY3VzQ2hhbmdlcykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodGhpcy5kaWFsb2dOb2RlLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICB0aGlzLmxhc3RGb2N1cyA9IGV2ZW50LnRhcmdldDtcbiAgfSBlbHNlIHtcbiAgICBfYXJpYVV0aWxzMi5kZWZhdWx0LmZvY3VzRmlyc3REZXNjZW5kYW50KHRoaXMuZGlhbG9nTm9kZSk7XG4gICAgaWYgKHRoaXMubGFzdEZvY3VzID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICBfYXJpYVV0aWxzMi5kZWZhdWx0LmZvY3VzTGFzdERlc2NlbmRhbnQodGhpcy5kaWFsb2dOb2RlKTtcbiAgICB9XG4gICAgdGhpcy5sYXN0Rm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICB9XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBhcmlhLkRpYWxvZzsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/aria-dialog.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/aria-utils.js":
- /*!*********************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/aria-utils.js ***!
- \*********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nvar aria = aria || {};\n\naria.Utils = aria.Utils || {};\n\n/**\n * @desc Set focus on descendant nodes until the first focusable element is\n * found.\n * @param element\n * DOM node for which to find the first focusable descendant.\n * @returns\n * true if a focusable element is found and focus is set.\n */\naria.Utils.focusFirstDescendant = function (element) {\n for (var i = 0; i < element.childNodes.length; i++) {\n var child = element.childNodes[i];\n if (aria.Utils.attemptFocus(child) || aria.Utils.focusFirstDescendant(child)) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @desc Find the last descendant node that is focusable.\n * @param element\n * DOM node for which to find the last focusable descendant.\n * @returns\n * true if a focusable element is found and focus is set.\n */\n\naria.Utils.focusLastDescendant = function (element) {\n for (var i = element.childNodes.length - 1; i >= 0; i--) {\n var child = element.childNodes[i];\n if (aria.Utils.attemptFocus(child) || aria.Utils.focusLastDescendant(child)) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * @desc Set Attempt to set focus on the current node.\n * @param element\n * The node to attempt to focus on.\n * @returns\n * true if element is focused.\n */\naria.Utils.attemptFocus = function (element) {\n if (!aria.Utils.isFocusable(element)) {\n return false;\n }\n aria.Utils.IgnoreUtilFocusChanges = true;\n try {\n element.focus();\n } catch (e) {}\n aria.Utils.IgnoreUtilFocusChanges = false;\n return document.activeElement === element;\n};\n\naria.Utils.isFocusable = function (element) {\n if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute('tabIndex') !== null) {\n return true;\n }\n\n if (element.disabled) {\n return false;\n }\n\n switch (element.nodeName) {\n case 'A':\n return !!element.href && element.rel !== 'ignore';\n case 'INPUT':\n return element.type !== 'hidden' && element.type !== 'file';\n case 'BUTTON':\n case 'SELECT':\n case 'TEXTAREA':\n return true;\n default:\n return false;\n }\n};\n\n/**\n * 触发一个事件\n * mouseenter, mouseleave, mouseover, keyup, change, click 等\n * @param {Element} elm\n * @param {String} name\n * @param {*} opts\n */\naria.Utils.triggerEvent = function (elm, name) {\n var eventName = void 0;\n\n if (/^mouse|click/.test(name)) {\n eventName = 'MouseEvents';\n } else if (/^key/.test(name)) {\n eventName = 'KeyboardEvent';\n } else {\n eventName = 'HTMLEvents';\n }\n var evt = document.createEvent(eventName);\n\n for (var _len = arguments.length, opts = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n opts[_key - 2] = arguments[_key];\n }\n\n evt.initEvent.apply(evt, [name].concat(opts));\n elm.dispatchEvent ? elm.dispatchEvent(evt) : elm.fireEvent('on' + name, evt);\n\n return elm;\n};\n\naria.Utils.keys = {\n tab: 9,\n enter: 13,\n space: 32,\n left: 37,\n up: 38,\n right: 39,\n down: 40,\n esc: 27\n};\n\nexports.default = aria.Utils;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvYXJpYS11dGlscy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9hcmlhLXV0aWxzLmpzP2U0NTIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGFyaWEgPSBhcmlhIHx8IHt9O1xuXG5hcmlhLlV0aWxzID0gYXJpYS5VdGlscyB8fCB7fTtcblxuLyoqXG4gKiBAZGVzYyBTZXQgZm9jdXMgb24gZGVzY2VuZGFudCBub2RlcyB1bnRpbCB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgaXNcbiAqICAgICAgIGZvdW5kLlxuICogQHBhcmFtIGVsZW1lbnRcbiAqICAgICAgICAgIERPTSBub2RlIGZvciB3aGljaCB0byBmaW5kIHRoZSBmaXJzdCBmb2N1c2FibGUgZGVzY2VuZGFudC5cbiAqIEByZXR1cm5zXG4gKiAgdHJ1ZSBpZiBhIGZvY3VzYWJsZSBlbGVtZW50IGlzIGZvdW5kIGFuZCBmb2N1cyBpcyBzZXQuXG4gKi9cbmFyaWEuVXRpbHMuZm9jdXNGaXJzdERlc2NlbmRhbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjaGlsZCA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBpZiAoYXJpYS5VdGlscy5hdHRlbXB0Rm9jdXMoY2hpbGQpIHx8IGFyaWEuVXRpbHMuZm9jdXNGaXJzdERlc2NlbmRhbnQoY2hpbGQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiBAZGVzYyBGaW5kIHRoZSBsYXN0IGRlc2NlbmRhbnQgbm9kZSB0aGF0IGlzIGZvY3VzYWJsZS5cbiAqIEBwYXJhbSBlbGVtZW50XG4gKiAgICAgICAgICBET00gbm9kZSBmb3Igd2hpY2ggdG8gZmluZCB0aGUgbGFzdCBmb2N1c2FibGUgZGVzY2VuZGFudC5cbiAqIEByZXR1cm5zXG4gKiAgdHJ1ZSBpZiBhIGZvY3VzYWJsZSBlbGVtZW50IGlzIGZvdW5kIGFuZCBmb2N1cyBpcyBzZXQuXG4gKi9cblxuYXJpYS5VdGlscy5mb2N1c0xhc3REZXNjZW5kYW50ID0gZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgZm9yICh2YXIgaSA9IGVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIHZhciBjaGlsZCA9IGVsZW1lbnQuY2hpbGROb2Rlc1tpXTtcbiAgICBpZiAoYXJpYS5VdGlscy5hdHRlbXB0Rm9jdXMoY2hpbGQpIHx8IGFyaWEuVXRpbHMuZm9jdXNMYXN0RGVzY2VuZGFudChjaGlsZCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG4vKipcbiAqIEBkZXNjIFNldCBBdHRlbXB0IHRvIHNldCBmb2N1cyBvbiB0aGUgY3VycmVudCBub2RlLlxuICogQHBhcmFtIGVsZW1lbnRcbiAqICAgICAgICAgIFRoZSBub2RlIHRvIGF0dGVtcHQgdG8gZm9jdXMgb24uXG4gKiBAcmV0dXJuc1xuICogIHRydWUgaWYgZWxlbWVudCBpcyBmb2N1c2VkLlxuICovXG5hcmlhLlV0aWxzLmF0dGVtcHRGb2N1cyA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGlmICghYXJpYS5VdGlscy5pc0ZvY3VzYWJsZShlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBhcmlhLlV0aWxzLklnbm9yZVV0aWxGb2N1c0NoYW5nZXMgPSB0cnVlO1xuICB0cnkge1xuICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgfSBjYXRjaCAoZSkge31cbiAgYXJpYS5VdGlscy5JZ25vcmVVdGlsRm9jdXNDaGFuZ2VzID0gZmFsc2U7XG4gIHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlbGVtZW50O1xufTtcblxuYXJpYS5VdGlscy5pc0ZvY3VzYWJsZSA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnRhYkluZGV4ID4gMCB8fCBlbGVtZW50LnRhYkluZGV4ID09PSAwICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJJbmRleCcpICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoZWxlbWVudC5kaXNhYmxlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAoZWxlbWVudC5ub2RlTmFtZSkge1xuICAgIGNhc2UgJ0EnOlxuICAgICAgcmV0dXJuICEhZWxlbWVudC5ocmVmICYmIGVsZW1lbnQucmVsICE9PSAnaWdub3JlJztcbiAgICBjYXNlICdJTlBVVCc6XG4gICAgICByZXR1cm4gZWxlbWVudC50eXBlICE9PSAnaGlkZGVuJyAmJiBlbGVtZW50LnR5cGUgIT09ICdmaWxlJztcbiAgICBjYXNlICdCVVRUT04nOlxuICAgIGNhc2UgJ1NFTEVDVCc6XG4gICAgY2FzZSAnVEVYVEFSRUEnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiDop6blj5HkuIDkuKrkuovku7ZcbiAqIG1vdXNlZW50ZXIsIG1vdXNlbGVhdmUsIG1vdXNlb3Zlciwga2V5dXAsIGNoYW5nZSwgY2xpY2sg562JXG4gKiBAcGFyYW0gIHtFbGVtZW50fSBlbG1cbiAqIEBwYXJhbSAge1N0cmluZ30gbmFtZVxuICogQHBhcmFtICB7Kn0gb3B0c1xuICovXG5hcmlhLlV0aWxzLnRyaWdnZXJFdmVudCA9IGZ1bmN0aW9uIChlbG0sIG5hbWUpIHtcbiAgdmFyIGV2ZW50TmFtZSA9IHZvaWQgMDtcblxuICBpZiAoL15tb3VzZXxjbGljay8udGVzdChuYW1lKSkge1xuICAgIGV2ZW50TmFtZSA9ICdNb3VzZUV2ZW50cyc7XG4gIH0gZWxzZSBpZiAoL15rZXkvLnRlc3QobmFtZSkpIHtcbiAgICBldmVudE5hbWUgPSAnS2V5Ym9hcmRFdmVudCc7XG4gIH0gZWxzZSB7XG4gICAgZXZlbnROYW1lID0gJ0hUTUxFdmVudHMnO1xuICB9XG4gIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChldmVudE5hbWUpO1xuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvcHRzID0gQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIG9wdHNbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgZXZ0LmluaXRFdmVudC5hcHBseShldnQsIFtuYW1lXS5jb25jYXQob3B0cykpO1xuICBlbG0uZGlzcGF0Y2hFdmVudCA/IGVsbS5kaXNwYXRjaEV2ZW50KGV2dCkgOiBlbG0uZmlyZUV2ZW50KCdvbicgKyBuYW1lLCBldnQpO1xuXG4gIHJldHVybiBlbG07XG59O1xuXG5hcmlhLlV0aWxzLmtleXMgPSB7XG4gIHRhYjogOSxcbiAgZW50ZXI6IDEzLFxuICBzcGFjZTogMzIsXG4gIGxlZnQ6IDM3LFxuICB1cDogMzgsXG4gIHJpZ2h0OiAzOSxcbiAgZG93bjogNDAsXG4gIGVzYzogMjdcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGFyaWEuVXRpbHM7Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/aria-utils.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/clickoutside.js":
- /*!***********************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/clickoutside.js ***!
- \***********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _dom = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar nodeList = [];\nvar ctx = '@@clickoutsideContext';\n\nvar startClick = void 0;\nvar seed = 0;\n\n!_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mousedown', function (e) {\n return startClick = e;\n});\n\n!_vue2.default.prototype.$isServer && (0, _dom.on)(document, 'mouseup', function (e) {\n nodeList.forEach(function (node) {\n return node[ctx].documentHandler(e, startClick);\n });\n});\n\nfunction createDocumentHandler(el, binding, vnode) {\n return function () {\n var mouseup = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var mousedown = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n if (!vnode || !vnode.context || !mouseup.target || !mousedown.target || el.contains(mouseup.target) || el.contains(mousedown.target) || el === mouseup.target || vnode.context.popperElm && (vnode.context.popperElm.contains(mouseup.target) || vnode.context.popperElm.contains(mousedown.target))) return;\n\n if (binding.expression && el[ctx].methodName && vnode.context[el[ctx].methodName]) {\n vnode.context[el[ctx].methodName]();\n } else {\n el[ctx].bindingFn && el[ctx].bindingFn();\n }\n };\n}\n\n/**\n * v-clickoutside\n * @desc 点击元素外面才会触发的事件\n * @example\n * ```vue\n * <div v-element-clickoutside=\"handleClose\">\n * ```\n */\nexports.default = {\n bind: function bind(el, binding, vnode) {\n nodeList.push(el);\n var id = seed++;\n el[ctx] = {\n id: id,\n documentHandler: createDocumentHandler(el, binding, vnode),\n methodName: binding.expression,\n bindingFn: binding.value\n };\n },\n update: function update(el, binding, vnode) {\n el[ctx].documentHandler = createDocumentHandler(el, binding, vnode);\n el[ctx].methodName = binding.expression;\n el[ctx].bindingFn = binding.value;\n },\n unbind: function unbind(el) {\n var len = nodeList.length;\n\n for (var i = 0; i < len; i++) {\n if (nodeList[i][ctx].id === el[ctx].id) {\n nodeList.splice(i, 1);\n break;\n }\n }\n delete el[ctx];\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvY2xpY2tvdXRzaWRlLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL2NsaWNrb3V0c2lkZS5qcz80MTdmIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxudmFyIF9kb20gPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9kb20nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIG5vZGVMaXN0ID0gW107XG52YXIgY3R4ID0gJ0BAY2xpY2tvdXRzaWRlQ29udGV4dCc7XG5cbnZhciBzdGFydENsaWNrID0gdm9pZCAwO1xudmFyIHNlZWQgPSAwO1xuXG4hX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyICYmICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ21vdXNlZG93bicsIGZ1bmN0aW9uIChlKSB7XG4gIHJldHVybiBzdGFydENsaWNrID0gZTtcbn0pO1xuXG4hX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyICYmICgwLCBfZG9tLm9uKShkb2N1bWVudCwgJ21vdXNldXAnLCBmdW5jdGlvbiAoZSkge1xuICBub2RlTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIG5vZGVbY3R4XS5kb2N1bWVudEhhbmRsZXIoZSwgc3RhcnRDbGljayk7XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZURvY3VtZW50SGFuZGxlcihlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbW91c2V1cCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgdmFyIG1vdXNlZG93biA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgICBpZiAoIXZub2RlIHx8ICF2bm9kZS5jb250ZXh0IHx8ICFtb3VzZXVwLnRhcmdldCB8fCAhbW91c2Vkb3duLnRhcmdldCB8fCBlbC5jb250YWlucyhtb3VzZXVwLnRhcmdldCkgfHwgZWwuY29udGFpbnMobW91c2Vkb3duLnRhcmdldCkgfHwgZWwgPT09IG1vdXNldXAudGFyZ2V0IHx8IHZub2RlLmNvbnRleHQucG9wcGVyRWxtICYmICh2bm9kZS5jb250ZXh0LnBvcHBlckVsbS5jb250YWlucyhtb3VzZXVwLnRhcmdldCkgfHwgdm5vZGUuY29udGV4dC5wb3BwZXJFbG0uY29udGFpbnMobW91c2Vkb3duLnRhcmdldCkpKSByZXR1cm47XG5cbiAgICBpZiAoYmluZGluZy5leHByZXNzaW9uICYmIGVsW2N0eF0ubWV0aG9kTmFtZSAmJiB2bm9kZS5jb250ZXh0W2VsW2N0eF0ubWV0aG9kTmFtZV0pIHtcbiAgICAgIHZub2RlLmNvbnRleHRbZWxbY3R4XS5tZXRob2ROYW1lXSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbFtjdHhdLmJpbmRpbmdGbiAmJiBlbFtjdHhdLmJpbmRpbmdGbigpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiB2LWNsaWNrb3V0c2lkZVxuICogQGRlc2Mg54K55Ye75YWD57Sg5aSW6Z2i5omN5Lya6Kem5Y+R55qE5LqL5Lu2XG4gKiBAZXhhbXBsZVxuICogYGBgdnVlXG4gKiA8ZGl2IHYtZWxlbWVudC1jbGlja291dHNpZGU9XCJoYW5kbGVDbG9zZVwiPlxuICogYGBgXG4gKi9cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgYmluZDogZnVuY3Rpb24gYmluZChlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBub2RlTGlzdC5wdXNoKGVsKTtcbiAgICB2YXIgaWQgPSBzZWVkKys7XG4gICAgZWxbY3R4XSA9IHtcbiAgICAgIGlkOiBpZCxcbiAgICAgIGRvY3VtZW50SGFuZGxlcjogY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGVsLCBiaW5kaW5nLCB2bm9kZSksXG4gICAgICBtZXRob2ROYW1lOiBiaW5kaW5nLmV4cHJlc3Npb24sXG4gICAgICBiaW5kaW5nRm46IGJpbmRpbmcudmFsdWVcbiAgICB9O1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShlbCwgYmluZGluZywgdm5vZGUpIHtcbiAgICBlbFtjdHhdLmRvY3VtZW50SGFuZGxlciA9IGNyZWF0ZURvY3VtZW50SGFuZGxlcihlbCwgYmluZGluZywgdm5vZGUpO1xuICAgIGVsW2N0eF0ubWV0aG9kTmFtZSA9IGJpbmRpbmcuZXhwcmVzc2lvbjtcbiAgICBlbFtjdHhdLmJpbmRpbmdGbiA9IGJpbmRpbmcudmFsdWU7XG4gIH0sXG4gIHVuYmluZDogZnVuY3Rpb24gdW5iaW5kKGVsKSB7XG4gICAgdmFyIGxlbiA9IG5vZGVMaXN0Lmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChub2RlTGlzdFtpXVtjdHhdLmlkID09PSBlbFtjdHhdLmlkKSB7XG4gICAgICAgIG5vZGVMaXN0LnNwbGljZShpLCAxKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSBlbFtjdHhdO1xuICB9XG59OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/clickoutside.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/date-util.js":
- /*!********************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/date-util.js ***!
- \********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.validateRangeInOneMonth = exports.extractTimeFormat = exports.extractDateFormat = exports.nextYear = exports.prevYear = exports.nextMonth = exports.prevMonth = exports.changeYearMonthAndClampDate = exports.timeWithinRange = exports.limitTimeRange = exports.clearMilliseconds = exports.clearTime = exports.modifyWithTimeString = exports.modifyTime = exports.modifyDate = exports.range = exports.getRangeMinutes = exports.getMonthDays = exports.getPrevMonthLastDays = exports.getRangeHours = exports.getWeekNumber = exports.getStartDateOfMonth = exports.nextDate = exports.prevDate = exports.getFirstDayOfMonth = exports.getDayCountOfYear = exports.getDayCountOfMonth = exports.parseDate = exports.formatDate = exports.isDateObject = exports.isDate = exports.toDate = exports.getI18nSettings = undefined;\n\nvar _date = __webpack_require__(/*! element-ui/lib/utils/date */ \"./node_modules/element-ui/lib/utils/date.js\");\n\nvar _date2 = _interopRequireDefault(_date);\n\nvar _locale = __webpack_require__(/*! element-ui/lib/locale */ \"./node_modules/element-ui/lib/locale/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar weeks = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\nvar months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];\n\nvar newArray = function newArray(start, end) {\n var result = [];\n for (var i = start; i <= end; i++) {\n result.push(i);\n }\n return result;\n};\n\nvar getI18nSettings = exports.getI18nSettings = function getI18nSettings() {\n return {\n dayNamesShort: weeks.map(function (week) {\n return (0, _locale.t)('el.datepicker.weeks.' + week);\n }),\n dayNames: weeks.map(function (week) {\n return (0, _locale.t)('el.datepicker.weeks.' + week);\n }),\n monthNamesShort: months.map(function (month) {\n return (0, _locale.t)('el.datepicker.months.' + month);\n }),\n monthNames: months.map(function (month, index) {\n return (0, _locale.t)('el.datepicker.month' + (index + 1));\n }),\n amPm: ['am', 'pm']\n };\n};\n\nvar toDate = exports.toDate = function toDate(date) {\n return isDate(date) ? new Date(date) : null;\n};\n\nvar isDate = exports.isDate = function isDate(date) {\n if (date === null || date === undefined) return false;\n if (isNaN(new Date(date).getTime())) return false;\n if (Array.isArray(date)) return false; // deal with `new Date([ new Date() ]) -> new Date()`\n return true;\n};\n\nvar isDateObject = exports.isDateObject = function isDateObject(val) {\n return val instanceof Date;\n};\n\nvar formatDate = exports.formatDate = function formatDate(date, format) {\n date = toDate(date);\n if (!date) return '';\n return _date2.default.format(date, format || 'yyyy-MM-dd', getI18nSettings());\n};\n\nvar parseDate = exports.parseDate = function parseDate(string, format) {\n return _date2.default.parse(string, format || 'yyyy-MM-dd', getI18nSettings());\n};\n\nvar getDayCountOfMonth = exports.getDayCountOfMonth = function getDayCountOfMonth(year, month) {\n if (month === 3 || month === 5 || month === 8 || month === 10) {\n return 30;\n }\n\n if (month === 1) {\n if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) {\n return 29;\n } else {\n return 28;\n }\n }\n\n return 31;\n};\n\nvar getDayCountOfYear = exports.getDayCountOfYear = function getDayCountOfYear(year) {\n var isLeapYear = year % 400 === 0 || year % 100 !== 0 && year % 4 === 0;\n return isLeapYear ? 366 : 365;\n};\n\nvar getFirstDayOfMonth = exports.getFirstDayOfMonth = function getFirstDayOfMonth(date) {\n var temp = new Date(date.getTime());\n temp.setDate(1);\n return temp.getDay();\n};\n\n// see: https://stackoverflow.com/questions/3674539/incrementing-a-date-in-javascript\n// {prev, next} Date should work for Daylight Saving Time\n// Adding 24 * 60 * 60 * 1000 does not work in the above scenario\nvar prevDate = exports.prevDate = function prevDate(date) {\n var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() - amount);\n};\n\nvar nextDate = exports.nextDate = function nextDate(date) {\n var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n return new Date(date.getFullYear(), date.getMonth(), date.getDate() + amount);\n};\n\nvar getStartDateOfMonth = exports.getStartDateOfMonth = function getStartDateOfMonth(year, month) {\n var result = new Date(year, month, 1);\n var day = result.getDay();\n\n if (day === 0) {\n return prevDate(result, 7);\n } else {\n return prevDate(result, day);\n }\n};\n\nvar getWeekNumber = exports.getWeekNumber = function getWeekNumber(src) {\n if (!isDate(src)) return null;\n var date = new Date(src.getTime());\n date.setHours(0, 0, 0, 0);\n // Thursday in current week decides the year.\n date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);\n // January 4 is always in week 1.\n var week1 = new Date(date.getFullYear(), 0, 4);\n // Adjust to Thursday in week 1 and count number of weeks from date to week 1.\n // Rounding should be fine for Daylight Saving Time. Its shift should never be more than 12 hours.\n return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7);\n};\n\nvar getRangeHours = exports.getRangeHours = function getRangeHours(ranges) {\n var hours = [];\n var disabledHours = [];\n\n (ranges || []).forEach(function (range) {\n var value = range.map(function (date) {\n return date.getHours();\n });\n\n disabledHours = disabledHours.concat(newArray(value[0], value[1]));\n });\n\n if (disabledHours.length) {\n for (var i = 0; i < 24; i++) {\n hours[i] = disabledHours.indexOf(i) === -1;\n }\n } else {\n for (var _i = 0; _i < 24; _i++) {\n hours[_i] = false;\n }\n }\n\n return hours;\n};\n\nvar getPrevMonthLastDays = exports.getPrevMonthLastDays = function getPrevMonthLastDays(date, amount) {\n if (amount <= 0) return [];\n var temp = new Date(date.getTime());\n temp.setDate(0);\n var lastDay = temp.getDate();\n return range(amount).map(function (_, index) {\n return lastDay - (amount - index - 1);\n });\n};\n\nvar getMonthDays = exports.getMonthDays = function getMonthDays(date) {\n var temp = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n var days = temp.getDate();\n return range(days).map(function (_, index) {\n return index + 1;\n });\n};\n\nfunction setRangeData(arr, start, end, value) {\n for (var i = start; i < end; i++) {\n arr[i] = value;\n }\n}\n\nvar getRangeMinutes = exports.getRangeMinutes = function getRangeMinutes(ranges, hour) {\n var minutes = new Array(60);\n\n if (ranges.length > 0) {\n ranges.forEach(function (range) {\n var start = range[0];\n var end = range[1];\n var startHour = start.getHours();\n var startMinute = start.getMinutes();\n var endHour = end.getHours();\n var endMinute = end.getMinutes();\n if (startHour === hour && endHour !== hour) {\n setRangeData(minutes, startMinute, 60, true);\n } else if (startHour === hour && endHour === hour) {\n setRangeData(minutes, startMinute, endMinute + 1, true);\n } else if (startHour !== hour && endHour === hour) {\n setRangeData(minutes, 0, endMinute + 1, true);\n } else if (startHour < hour && endHour > hour) {\n setRangeData(minutes, 0, 60, true);\n }\n });\n } else {\n setRangeData(minutes, 0, 60, true);\n }\n return minutes;\n};\n\nvar range = exports.range = function range(n) {\n // see https://stackoverflow.com/questions/3746725/create-a-javascript-array-containing-1-n\n return Array.apply(null, { length: n }).map(function (_, n) {\n return n;\n });\n};\n\nvar modifyDate = exports.modifyDate = function modifyDate(date, y, m, d) {\n return new Date(y, m, d, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n};\n\nvar modifyTime = exports.modifyTime = function modifyTime(date, h, m, s) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), h, m, s, date.getMilliseconds());\n};\n\nvar modifyWithTimeString = exports.modifyWithTimeString = function modifyWithTimeString(date, time) {\n if (date == null || !time) {\n return date;\n }\n time = parseDate(time, 'HH:mm:ss');\n return modifyTime(date, time.getHours(), time.getMinutes(), time.getSeconds());\n};\n\nvar clearTime = exports.clearTime = function clearTime(date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate());\n};\n\nvar clearMilliseconds = exports.clearMilliseconds = function clearMilliseconds(date) {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), 0);\n};\n\nvar limitTimeRange = exports.limitTimeRange = function limitTimeRange(date, ranges) {\n var format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'HH:mm:ss';\n\n // TODO: refactory a more elegant solution\n if (ranges.length === 0) return date;\n var normalizeDate = function normalizeDate(date) {\n return _date2.default.parse(_date2.default.format(date, format), format);\n };\n var ndate = normalizeDate(date);\n var nranges = ranges.map(function (range) {\n return range.map(normalizeDate);\n });\n if (nranges.some(function (nrange) {\n return ndate >= nrange[0] && ndate <= nrange[1];\n })) return date;\n\n var minDate = nranges[0][0];\n var maxDate = nranges[0][0];\n\n nranges.forEach(function (nrange) {\n minDate = new Date(Math.min(nrange[0], minDate));\n maxDate = new Date(Math.max(nrange[1], minDate));\n });\n\n var ret = ndate < minDate ? minDate : maxDate;\n // preserve Year/Month/Date\n return modifyDate(ret, date.getFullYear(), date.getMonth(), date.getDate());\n};\n\nvar timeWithinRange = exports.timeWithinRange = function timeWithinRange(date, selectableRange, format) {\n var limitedDate = limitTimeRange(date, selectableRange, format);\n return limitedDate.getTime() === date.getTime();\n};\n\nvar changeYearMonthAndClampDate = exports.changeYearMonthAndClampDate = function changeYearMonthAndClampDate(date, year, month) {\n // clamp date to the number of days in `year`, `month`\n // eg: (2010-1-31, 2010, 2) => 2010-2-28\n var monthDate = Math.min(date.getDate(), getDayCountOfMonth(year, month));\n return modifyDate(date, year, month, monthDate);\n};\n\nvar prevMonth = exports.prevMonth = function prevMonth(date) {\n var year = date.getFullYear();\n var month = date.getMonth();\n return month === 0 ? changeYearMonthAndClampDate(date, year - 1, 11) : changeYearMonthAndClampDate(date, year, month - 1);\n};\n\nvar nextMonth = exports.nextMonth = function nextMonth(date) {\n var year = date.getFullYear();\n var month = date.getMonth();\n return month === 11 ? changeYearMonthAndClampDate(date, year + 1, 0) : changeYearMonthAndClampDate(date, year, month + 1);\n};\n\nvar prevYear = exports.prevYear = function prevYear(date) {\n var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n var year = date.getFullYear();\n var month = date.getMonth();\n return changeYearMonthAndClampDate(date, year - amount, month);\n};\n\nvar nextYear = exports.nextYear = function nextYear(date) {\n var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n\n var year = date.getFullYear();\n var month = date.getMonth();\n return changeYearMonthAndClampDate(date, year + amount, month);\n};\n\nvar extractDateFormat = exports.extractDateFormat = function extractDateFormat(format) {\n return format.replace(/\\W?m{1,2}|\\W?ZZ/g, '').replace(/\\W?h{1,2}|\\W?s{1,3}|\\W?a/gi, '').trim();\n};\n\nvar extractTimeFormat = exports.extractTimeFormat = function extractTimeFormat(format) {\n return format.replace(/\\W?D{1,2}|\\W?Do|\\W?d{1,4}|\\W?M{1,4}|\\W?y{2,4}/g, '').trim();\n};\n\nvar validateRangeInOneMonth = exports.validateRangeInOneMonth = function validateRangeInOneMonth(start, end) {\n return start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear();\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS11dGlsLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL2RhdGUtdXRpbC5qcz9kOTQwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMudmFsaWRhdGVSYW5nZUluT25lTW9udGggPSBleHBvcnRzLmV4dHJhY3RUaW1lRm9ybWF0ID0gZXhwb3J0cy5leHRyYWN0RGF0ZUZvcm1hdCA9IGV4cG9ydHMubmV4dFllYXIgPSBleHBvcnRzLnByZXZZZWFyID0gZXhwb3J0cy5uZXh0TW9udGggPSBleHBvcnRzLnByZXZNb250aCA9IGV4cG9ydHMuY2hhbmdlWWVhck1vbnRoQW5kQ2xhbXBEYXRlID0gZXhwb3J0cy50aW1lV2l0aGluUmFuZ2UgPSBleHBvcnRzLmxpbWl0VGltZVJhbmdlID0gZXhwb3J0cy5jbGVhck1pbGxpc2Vjb25kcyA9IGV4cG9ydHMuY2xlYXJUaW1lID0gZXhwb3J0cy5tb2RpZnlXaXRoVGltZVN0cmluZyA9IGV4cG9ydHMubW9kaWZ5VGltZSA9IGV4cG9ydHMubW9kaWZ5RGF0ZSA9IGV4cG9ydHMucmFuZ2UgPSBleHBvcnRzLmdldFJhbmdlTWludXRlcyA9IGV4cG9ydHMuZ2V0TW9udGhEYXlzID0gZXhwb3J0cy5nZXRQcmV2TW9udGhMYXN0RGF5cyA9IGV4cG9ydHMuZ2V0UmFuZ2VIb3VycyA9IGV4cG9ydHMuZ2V0V2Vla051bWJlciA9IGV4cG9ydHMuZ2V0U3RhcnREYXRlT2ZNb250aCA9IGV4cG9ydHMubmV4dERhdGUgPSBleHBvcnRzLnByZXZEYXRlID0gZXhwb3J0cy5nZXRGaXJzdERheU9mTW9udGggPSBleHBvcnRzLmdldERheUNvdW50T2ZZZWFyID0gZXhwb3J0cy5nZXREYXlDb3VudE9mTW9udGggPSBleHBvcnRzLnBhcnNlRGF0ZSA9IGV4cG9ydHMuZm9ybWF0RGF0ZSA9IGV4cG9ydHMuaXNEYXRlT2JqZWN0ID0gZXhwb3J0cy5pc0RhdGUgPSBleHBvcnRzLnRvRGF0ZSA9IGV4cG9ydHMuZ2V0STE4blNldHRpbmdzID0gdW5kZWZpbmVkO1xuXG52YXIgX2RhdGUgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi91dGlscy9kYXRlJyk7XG5cbnZhciBfZGF0ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9kYXRlKTtcblxudmFyIF9sb2NhbGUgPSByZXF1aXJlKCdlbGVtZW50LXVpL2xpYi9sb2NhbGUnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIHdlZWtzID0gWydzdW4nLCAnbW9uJywgJ3R1ZScsICd3ZWQnLCAndGh1JywgJ2ZyaScsICdzYXQnXTtcbnZhciBtb250aHMgPSBbJ2phbicsICdmZWInLCAnbWFyJywgJ2FwcicsICdtYXknLCAnanVuJywgJ2p1bCcsICdhdWcnLCAnc2VwJywgJ29jdCcsICdub3YnLCAnZGVjJ107XG5cbnZhciBuZXdBcnJheSA9IGZ1bmN0aW9uIG5ld0FycmF5KHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICByZXN1bHQucHVzaChpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGdldEkxOG5TZXR0aW5ncyA9IGV4cG9ydHMuZ2V0STE4blNldHRpbmdzID0gZnVuY3Rpb24gZ2V0STE4blNldHRpbmdzKCkge1xuICByZXR1cm4ge1xuICAgIGRheU5hbWVzU2hvcnQ6IHdlZWtzLm1hcChmdW5jdGlvbiAod2Vlaykge1xuICAgICAgcmV0dXJuICgwLCBfbG9jYWxlLnQpKCdlbC5kYXRlcGlja2VyLndlZWtzLicgKyB3ZWVrKTtcbiAgICB9KSxcbiAgICBkYXlOYW1lczogd2Vla3MubWFwKGZ1bmN0aW9uICh3ZWVrKSB7XG4gICAgICByZXR1cm4gKDAsIF9sb2NhbGUudCkoJ2VsLmRhdGVwaWNrZXIud2Vla3MuJyArIHdlZWspO1xuICAgIH0pLFxuICAgIG1vbnRoTmFtZXNTaG9ydDogbW9udGhzLm1hcChmdW5jdGlvbiAobW9udGgpIHtcbiAgICAgIHJldHVybiAoMCwgX2xvY2FsZS50KSgnZWwuZGF0ZXBpY2tlci5tb250aHMuJyArIG1vbnRoKTtcbiAgICB9KSxcbiAgICBtb250aE5hbWVzOiBtb250aHMubWFwKGZ1bmN0aW9uIChtb250aCwgaW5kZXgpIHtcbiAgICAgIHJldHVybiAoMCwgX2xvY2FsZS50KSgnZWwuZGF0ZXBpY2tlci5tb250aCcgKyAoaW5kZXggKyAxKSk7XG4gICAgfSksXG4gICAgYW1QbTogWydhbScsICdwbSddXG4gIH07XG59O1xuXG52YXIgdG9EYXRlID0gZXhwb3J0cy50b0RhdGUgPSBmdW5jdGlvbiB0b0RhdGUoZGF0ZSkge1xuICByZXR1cm4gaXNEYXRlKGRhdGUpID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsO1xufTtcblxudmFyIGlzRGF0ZSA9IGV4cG9ydHMuaXNEYXRlID0gZnVuY3Rpb24gaXNEYXRlKGRhdGUpIHtcbiAgaWYgKGRhdGUgPT09IG51bGwgfHwgZGF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGlmIChpc05hTihuZXcgRGF0ZShkYXRlKS5nZXRUaW1lKCkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBcnJheS5pc0FycmF5KGRhdGUpKSByZXR1cm4gZmFsc2U7IC8vIGRlYWwgd2l0aCBgbmV3IERhdGUoWyBuZXcgRGF0ZSgpIF0pIC0+IG5ldyBEYXRlKClgXG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIGlzRGF0ZU9iamVjdCA9IGV4cG9ydHMuaXNEYXRlT2JqZWN0ID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsIGluc3RhbmNlb2YgRGF0ZTtcbn07XG5cbnZhciBmb3JtYXREYXRlID0gZXhwb3J0cy5mb3JtYXREYXRlID0gZnVuY3Rpb24gZm9ybWF0RGF0ZShkYXRlLCBmb3JtYXQpIHtcbiAgZGF0ZSA9IHRvRGF0ZShkYXRlKTtcbiAgaWYgKCFkYXRlKSByZXR1cm4gJyc7XG4gIHJldHVybiBfZGF0ZTIuZGVmYXVsdC5mb3JtYXQoZGF0ZSwgZm9ybWF0IHx8ICd5eXl5LU1NLWRkJywgZ2V0STE4blNldHRpbmdzKCkpO1xufTtcblxudmFyIHBhcnNlRGF0ZSA9IGV4cG9ydHMucGFyc2VEYXRlID0gZnVuY3Rpb24gcGFyc2VEYXRlKHN0cmluZywgZm9ybWF0KSB7XG4gIHJldHVybiBfZGF0ZTIuZGVmYXVsdC5wYXJzZShzdHJpbmcsIGZvcm1hdCB8fCAneXl5eS1NTS1kZCcsIGdldEkxOG5TZXR0aW5ncygpKTtcbn07XG5cbnZhciBnZXREYXlDb3VudE9mTW9udGggPSBleHBvcnRzLmdldERheUNvdW50T2ZNb250aCA9IGZ1bmN0aW9uIGdldERheUNvdW50T2ZNb250aCh5ZWFyLCBtb250aCkge1xuICBpZiAobW9udGggPT09IDMgfHwgbW9udGggPT09IDUgfHwgbW9udGggPT09IDggfHwgbW9udGggPT09IDEwKSB7XG4gICAgcmV0dXJuIDMwO1xuICB9XG5cbiAgaWYgKG1vbnRoID09PSAxKSB7XG4gICAgaWYgKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDI5O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMjg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIDMxO1xufTtcblxudmFyIGdldERheUNvdW50T2ZZZWFyID0gZXhwb3J0cy5nZXREYXlDb3VudE9mWWVhciA9IGZ1bmN0aW9uIGdldERheUNvdW50T2ZZZWFyKHllYXIpIHtcbiAgdmFyIGlzTGVhcFllYXIgPSB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSAxMDAgIT09IDAgJiYgeWVhciAlIDQgPT09IDA7XG4gIHJldHVybiBpc0xlYXBZZWFyID8gMzY2IDogMzY1O1xufTtcblxudmFyIGdldEZpcnN0RGF5T2ZNb250aCA9IGV4cG9ydHMuZ2V0Rmlyc3REYXlPZk1vbnRoID0gZnVuY3Rpb24gZ2V0Rmlyc3REYXlPZk1vbnRoKGRhdGUpIHtcbiAgdmFyIHRlbXAgPSBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSk7XG4gIHRlbXAuc2V0RGF0ZSgxKTtcbiAgcmV0dXJuIHRlbXAuZ2V0RGF5KCk7XG59O1xuXG4vLyBzZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM2NzQ1MzkvaW5jcmVtZW50aW5nLWEtZGF0ZS1pbi1qYXZhc2NyaXB0XG4vLyB7cHJldiwgbmV4dH0gRGF0ZSBzaG91bGQgd29yayBmb3IgRGF5bGlnaHQgU2F2aW5nIFRpbWVcbi8vIEFkZGluZyAyNCAqIDYwICogNjAgKiAxMDAwIGRvZXMgbm90IHdvcmsgaW4gdGhlIGFib3ZlIHNjZW5hcmlvXG52YXIgcHJldkRhdGUgPSBleHBvcnRzLnByZXZEYXRlID0gZnVuY3Rpb24gcHJldkRhdGUoZGF0ZSkge1xuICB2YXIgYW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuXG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkgLSBhbW91bnQpO1xufTtcblxudmFyIG5leHREYXRlID0gZXhwb3J0cy5uZXh0RGF0ZSA9IGZ1bmN0aW9uIG5leHREYXRlKGRhdGUpIHtcbiAgdmFyIGFtb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcblxuICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgYW1vdW50KTtcbn07XG5cbnZhciBnZXRTdGFydERhdGVPZk1vbnRoID0gZXhwb3J0cy5nZXRTdGFydERhdGVPZk1vbnRoID0gZnVuY3Rpb24gZ2V0U3RhcnREYXRlT2ZNb250aCh5ZWFyLCBtb250aCkge1xuICB2YXIgcmVzdWx0ID0gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xuICB2YXIgZGF5ID0gcmVzdWx0LmdldERheSgpO1xuXG4gIGlmIChkYXkgPT09IDApIHtcbiAgICByZXR1cm4gcHJldkRhdGUocmVzdWx0LCA3KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldkRhdGUocmVzdWx0LCBkYXkpO1xuICB9XG59O1xuXG52YXIgZ2V0V2Vla051bWJlciA9IGV4cG9ydHMuZ2V0V2Vla051bWJlciA9IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoc3JjKSB7XG4gIGlmICghaXNEYXRlKHNyYykpIHJldHVybiBudWxsO1xuICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHNyYy5nZXRUaW1lKCkpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAvLyBUaHVyc2RheSBpbiBjdXJyZW50IHdlZWsgZGVjaWRlcyB0aGUgeWVhci5cbiAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyAtIChkYXRlLmdldERheSgpICsgNikgJSA3KTtcbiAgLy8gSmFudWFyeSA0IGlzIGFsd2F5cyBpbiB3ZWVrIDEuXG4gIHZhciB3ZWVrMSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG4gIC8vIEFkanVzdCB0byBUaHVyc2RheSBpbiB3ZWVrIDEgYW5kIGNvdW50IG51bWJlciBvZiB3ZWVrcyBmcm9tIGRhdGUgdG8gd2VlayAxLlxuICAvLyBSb3VuZGluZyBzaG91bGQgYmUgZmluZSBmb3IgRGF5bGlnaHQgU2F2aW5nIFRpbWUuIEl0cyBzaGlmdCBzaG91bGQgbmV2ZXIgYmUgbW9yZSB0aGFuIDEyIGhvdXJzLlxuICByZXR1cm4gMSArIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtIDMgKyAod2VlazEuZ2V0RGF5KCkgKyA2KSAlIDcpIC8gNyk7XG59O1xuXG52YXIgZ2V0UmFuZ2VIb3VycyA9IGV4cG9ydHMuZ2V0UmFuZ2VIb3VycyA9IGZ1bmN0aW9uIGdldFJhbmdlSG91cnMocmFuZ2VzKSB7XG4gIHZhciBob3VycyA9IFtdO1xuICB2YXIgZGlzYWJsZWRIb3VycyA9IFtdO1xuXG4gIChyYW5nZXMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKHJhbmdlKSB7XG4gICAgdmFyIHZhbHVlID0gcmFuZ2UubWFwKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xuICAgIH0pO1xuXG4gICAgZGlzYWJsZWRIb3VycyA9IGRpc2FibGVkSG91cnMuY29uY2F0KG5ld0FycmF5KHZhbHVlWzBdLCB2YWx1ZVsxXSkpO1xuICB9KTtcblxuICBpZiAoZGlzYWJsZWRIb3Vycy5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgIGhvdXJzW2ldID0gZGlzYWJsZWRIb3Vycy5pbmRleE9mKGkpID09PSAtMTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IDI0OyBfaSsrKSB7XG4gICAgICBob3Vyc1tfaV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaG91cnM7XG59O1xuXG52YXIgZ2V0UHJldk1vbnRoTGFzdERheXMgPSBleHBvcnRzLmdldFByZXZNb250aExhc3REYXlzID0gZnVuY3Rpb24gZ2V0UHJldk1vbnRoTGFzdERheXMoZGF0ZSwgYW1vdW50KSB7XG4gIGlmIChhbW91bnQgPD0gMCkgcmV0dXJuIFtdO1xuICB2YXIgdGVtcCA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTtcbiAgdGVtcC5zZXREYXRlKDApO1xuICB2YXIgbGFzdERheSA9IHRlbXAuZ2V0RGF0ZSgpO1xuICByZXR1cm4gcmFuZ2UoYW1vdW50KS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgcmV0dXJuIGxhc3REYXkgLSAoYW1vdW50IC0gaW5kZXggLSAxKTtcbiAgfSk7XG59O1xuXG52YXIgZ2V0TW9udGhEYXlzID0gZXhwb3J0cy5nZXRNb250aERheXMgPSBmdW5jdGlvbiBnZXRNb250aERheXMoZGF0ZSkge1xuICB2YXIgdGVtcCA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpICsgMSwgMCk7XG4gIHZhciBkYXlzID0gdGVtcC5nZXREYXRlKCk7XG4gIHJldHVybiByYW5nZShkYXlzKS5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7XG4gICAgcmV0dXJuIGluZGV4ICsgMTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBzZXRSYW5nZURhdGEoYXJyLCBzdGFydCwgZW5kLCB2YWx1ZSkge1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykge1xuICAgIGFycltpXSA9IHZhbHVlO1xuICB9XG59XG5cbnZhciBnZXRSYW5nZU1pbnV0ZXMgPSBleHBvcnRzLmdldFJhbmdlTWludXRlcyA9IGZ1bmN0aW9uIGdldFJhbmdlTWludXRlcyhyYW5nZXMsIGhvdXIpIHtcbiAgdmFyIG1pbnV0ZXMgPSBuZXcgQXJyYXkoNjApO1xuXG4gIGlmIChyYW5nZXMubGVuZ3RoID4gMCkge1xuICAgIHJhbmdlcy5mb3JFYWNoKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgdmFyIHN0YXJ0ID0gcmFuZ2VbMF07XG4gICAgICB2YXIgZW5kID0gcmFuZ2VbMV07XG4gICAgICB2YXIgc3RhcnRIb3VyID0gc3RhcnQuZ2V0SG91cnMoKTtcbiAgICAgIHZhciBzdGFydE1pbnV0ZSA9IHN0YXJ0LmdldE1pbnV0ZXMoKTtcbiAgICAgIHZhciBlbmRIb3VyID0gZW5kLmdldEhvdXJzKCk7XG4gICAgICB2YXIgZW5kTWludXRlID0gZW5kLmdldE1pbnV0ZXMoKTtcbiAgICAgIGlmIChzdGFydEhvdXIgPT09IGhvdXIgJiYgZW5kSG91ciAhPT0gaG91cikge1xuICAgICAgICBzZXRSYW5nZURhdGEobWludXRlcywgc3RhcnRNaW51dGUsIDYwLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnRIb3VyID09PSBob3VyICYmIGVuZEhvdXIgPT09IGhvdXIpIHtcbiAgICAgICAgc2V0UmFuZ2VEYXRhKG1pbnV0ZXMsIHN0YXJ0TWludXRlLCBlbmRNaW51dGUgKyAxLCB0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnRIb3VyICE9PSBob3VyICYmIGVuZEhvdXIgPT09IGhvdXIpIHtcbiAgICAgICAgc2V0UmFuZ2VEYXRhKG1pbnV0ZXMsIDAsIGVuZE1pbnV0ZSArIDEsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChzdGFydEhvdXIgPCBob3VyICYmIGVuZEhvdXIgPiBob3VyKSB7XG4gICAgICAgIHNldFJhbmdlRGF0YShtaW51dGVzLCAwLCA2MCwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgc2V0UmFuZ2VEYXRhKG1pbnV0ZXMsIDAsIDYwLCB0cnVlKTtcbiAgfVxuICByZXR1cm4gbWludXRlcztcbn07XG5cbnZhciByYW5nZSA9IGV4cG9ydHMucmFuZ2UgPSBmdW5jdGlvbiByYW5nZShuKSB7XG4gIC8vIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNzQ2NzI1L2NyZWF0ZS1hLWphdmFzY3JpcHQtYXJyYXktY29udGFpbmluZy0xLW5cbiAgcmV0dXJuIEFycmF5LmFwcGx5KG51bGwsIHsgbGVuZ3RoOiBuIH0pLm1hcChmdW5jdGlvbiAoXywgbikge1xuICAgIHJldHVybiBuO1xuICB9KTtcbn07XG5cbnZhciBtb2RpZnlEYXRlID0gZXhwb3J0cy5tb2RpZnlEYXRlID0gZnVuY3Rpb24gbW9kaWZ5RGF0ZShkYXRlLCB5LCBtLCBkKSB7XG4gIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSwgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG59O1xuXG52YXIgbW9kaWZ5VGltZSA9IGV4cG9ydHMubW9kaWZ5VGltZSA9IGZ1bmN0aW9uIG1vZGlmeVRpbWUoZGF0ZSwgaCwgbSwgcykge1xuICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBoLCBtLCBzLCBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbn07XG5cbnZhciBtb2RpZnlXaXRoVGltZVN0cmluZyA9IGV4cG9ydHMubW9kaWZ5V2l0aFRpbWVTdHJpbmcgPSBmdW5jdGlvbiBtb2RpZnlXaXRoVGltZVN0cmluZyhkYXRlLCB0aW1lKSB7XG4gIGlmIChkYXRlID09IG51bGwgfHwgIXRpbWUpIHtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICB0aW1lID0gcGFyc2VEYXRlKHRpbWUsICdISDptbTpzcycpO1xuICByZXR1cm4gbW9kaWZ5VGltZShkYXRlLCB0aW1lLmdldEhvdXJzKCksIHRpbWUuZ2V0TWludXRlcygpLCB0aW1lLmdldFNlY29uZHMoKSk7XG59O1xuXG52YXIgY2xlYXJUaW1lID0gZXhwb3J0cy5jbGVhclRpbWUgPSBmdW5jdGlvbiBjbGVhclRpbWUoZGF0ZSkge1xuICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbn07XG5cbnZhciBjbGVhck1pbGxpc2Vjb25kcyA9IGV4cG9ydHMuY2xlYXJNaWxsaXNlY29uZHMgPSBmdW5jdGlvbiBjbGVhck1pbGxpc2Vjb25kcyhkYXRlKSB7XG4gIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpLCAwKTtcbn07XG5cbnZhciBsaW1pdFRpbWVSYW5nZSA9IGV4cG9ydHMubGltaXRUaW1lUmFuZ2UgPSBmdW5jdGlvbiBsaW1pdFRpbWVSYW5nZShkYXRlLCByYW5nZXMpIHtcbiAgdmFyIGZvcm1hdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogJ0hIOm1tOnNzJztcblxuICAvLyBUT0RPOiByZWZhY3RvcnkgYSBtb3JlIGVsZWdhbnQgc29sdXRpb25cbiAgaWYgKHJhbmdlcy5sZW5ndGggPT09IDApIHJldHVybiBkYXRlO1xuICB2YXIgbm9ybWFsaXplRGF0ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZURhdGUoZGF0ZSkge1xuICAgIHJldHVybiBfZGF0ZTIuZGVmYXVsdC5wYXJzZShfZGF0ZTIuZGVmYXVsdC5mb3JtYXQoZGF0ZSwgZm9ybWF0KSwgZm9ybWF0KTtcbiAgfTtcbiAgdmFyIG5kYXRlID0gbm9ybWFsaXplRGF0ZShkYXRlKTtcbiAgdmFyIG5yYW5nZXMgPSByYW5nZXMubWFwKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgIHJldHVybiByYW5nZS5tYXAobm9ybWFsaXplRGF0ZSk7XG4gIH0pO1xuICBpZiAobnJhbmdlcy5zb21lKGZ1bmN0aW9uIChucmFuZ2UpIHtcbiAgICByZXR1cm4gbmRhdGUgPj0gbnJhbmdlWzBdICYmIG5kYXRlIDw9IG5yYW5nZVsxXTtcbiAgfSkpIHJldHVybiBkYXRlO1xuXG4gIHZhciBtaW5EYXRlID0gbnJhbmdlc1swXVswXTtcbiAgdmFyIG1heERhdGUgPSBucmFuZ2VzWzBdWzBdO1xuXG4gIG5yYW5nZXMuZm9yRWFjaChmdW5jdGlvbiAobnJhbmdlKSB7XG4gICAgbWluRGF0ZSA9IG5ldyBEYXRlKE1hdGgubWluKG5yYW5nZVswXSwgbWluRGF0ZSkpO1xuICAgIG1heERhdGUgPSBuZXcgRGF0ZShNYXRoLm1heChucmFuZ2VbMV0sIG1pbkRhdGUpKTtcbiAgfSk7XG5cbiAgdmFyIHJldCA9IG5kYXRlIDwgbWluRGF0ZSA/IG1pbkRhdGUgOiBtYXhEYXRlO1xuICAvLyBwcmVzZXJ2ZSBZZWFyL01vbnRoL0RhdGVcbiAgcmV0dXJuIG1vZGlmeURhdGUocmV0LCBkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xufTtcblxudmFyIHRpbWVXaXRoaW5SYW5nZSA9IGV4cG9ydHMudGltZVdpdGhpblJhbmdlID0gZnVuY3Rpb24gdGltZVdpdGhpblJhbmdlKGRhdGUsIHNlbGVjdGFibGVSYW5nZSwgZm9ybWF0KSB7XG4gIHZhciBsaW1pdGVkRGF0ZSA9IGxpbWl0VGltZVJhbmdlKGRhdGUsIHNlbGVjdGFibGVSYW5nZSwgZm9ybWF0KTtcbiAgcmV0dXJuIGxpbWl0ZWREYXRlLmdldFRpbWUoKSA9PT0gZGF0ZS5nZXRUaW1lKCk7XG59O1xuXG52YXIgY2hhbmdlWWVhck1vbnRoQW5kQ2xhbXBEYXRlID0gZXhwb3J0cy5jaGFuZ2VZZWFyTW9udGhBbmRDbGFtcERhdGUgPSBmdW5jdGlvbiBjaGFuZ2VZZWFyTW9udGhBbmRDbGFtcERhdGUoZGF0ZSwgeWVhciwgbW9udGgpIHtcbiAgLy8gY2xhbXAgZGF0ZSB0byB0aGUgbnVtYmVyIG9mIGRheXMgaW4gYHllYXJgLCBgbW9udGhgXG4gIC8vIGVnOiAoMjAxMC0xLTMxLCAyMDEwLCAyKSA9PiAyMDEwLTItMjhcbiAgdmFyIG1vbnRoRGF0ZSA9IE1hdGgubWluKGRhdGUuZ2V0RGF0ZSgpLCBnZXREYXlDb3VudE9mTW9udGgoeWVhciwgbW9udGgpKTtcbiAgcmV0dXJuIG1vZGlmeURhdGUoZGF0ZSwgeWVhciwgbW9udGgsIG1vbnRoRGF0ZSk7XG59O1xuXG52YXIgcHJldk1vbnRoID0gZXhwb3J0cy5wcmV2TW9udGggPSBmdW5jdGlvbiBwcmV2TW9udGgoZGF0ZSkge1xuICB2YXIgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgdmFyIG1vbnRoID0gZGF0ZS5nZXRNb250aCgpO1xuICByZXR1cm4gbW9udGggPT09IDAgPyBjaGFuZ2VZZWFyTW9udGhBbmRDbGFtcERhdGUoZGF0ZSwgeWVhciAtIDEsIDExKSA6IGNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZShkYXRlLCB5ZWFyLCBtb250aCAtIDEpO1xufTtcblxudmFyIG5leHRNb250aCA9IGV4cG9ydHMubmV4dE1vbnRoID0gZnVuY3Rpb24gbmV4dE1vbnRoKGRhdGUpIHtcbiAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHZhciBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgcmV0dXJuIG1vbnRoID09PSAxMSA/IGNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZShkYXRlLCB5ZWFyICsgMSwgMCkgOiBjaGFuZ2VZZWFyTW9udGhBbmRDbGFtcERhdGUoZGF0ZSwgeWVhciwgbW9udGggKyAxKTtcbn07XG5cbnZhciBwcmV2WWVhciA9IGV4cG9ydHMucHJldlllYXIgPSBmdW5jdGlvbiBwcmV2WWVhcihkYXRlKSB7XG4gIHZhciBhbW91bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDE7XG5cbiAgdmFyIHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gIHZhciBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTtcbiAgcmV0dXJuIGNoYW5nZVllYXJNb250aEFuZENsYW1wRGF0ZShkYXRlLCB5ZWFyIC0gYW1vdW50LCBtb250aCk7XG59O1xuXG52YXIgbmV4dFllYXIgPSBleHBvcnRzLm5leHRZZWFyID0gZnVuY3Rpb24gbmV4dFllYXIoZGF0ZSkge1xuICB2YXIgYW1vdW50ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAxO1xuXG4gIHZhciB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICB2YXIgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7XG4gIHJldHVybiBjaGFuZ2VZZWFyTW9udGhBbmRDbGFtcERhdGUoZGF0ZSwgeWVhciArIGFtb3VudCwgbW9udGgpO1xufTtcblxudmFyIGV4dHJhY3REYXRlRm9ybWF0ID0gZXhwb3J0cy5leHRyYWN0RGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIGV4dHJhY3REYXRlRm9ybWF0KGZvcm1hdCkge1xuICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1xcVz9tezEsMn18XFxXP1paL2csICcnKS5yZXBsYWNlKC9cXFc/aHsxLDJ9fFxcVz9zezEsM318XFxXP2EvZ2ksICcnKS50cmltKCk7XG59O1xuXG52YXIgZXh0cmFjdFRpbWVGb3JtYXQgPSBleHBvcnRzLmV4dHJhY3RUaW1lRm9ybWF0ID0gZnVuY3Rpb24gZXh0cmFjdFRpbWVGb3JtYXQoZm9ybWF0KSB7XG4gIHJldHVybiBmb3JtYXQucmVwbGFjZSgvXFxXP0R7MSwyfXxcXFc/RG98XFxXP2R7MSw0fXxcXFc/TXsxLDR9fFxcVz95ezIsNH0vZywgJycpLnRyaW0oKTtcbn07XG5cbnZhciB2YWxpZGF0ZVJhbmdlSW5PbmVNb250aCA9IGV4cG9ydHMudmFsaWRhdGVSYW5nZUluT25lTW9udGggPSBmdW5jdGlvbiB2YWxpZGF0ZVJhbmdlSW5PbmVNb250aChzdGFydCwgZW5kKSB7XG4gIHJldHVybiBzdGFydC5nZXRNb250aCgpID09PSBlbmQuZ2V0TW9udGgoKSAmJiBzdGFydC5nZXRGdWxsWWVhcigpID09PSBlbmQuZ2V0RnVsbFllYXIoKTtcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/date-util.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/date.js":
- /*!***************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/date.js ***!
- \***************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("var __WEBPACK_AMD_DEFINE_RESULT__;\n\n/* Modified from https://github.com/taylorhakes/fecha\n *\n * The MIT License (MIT)\n *\n * Copyright (c) 2015 Taylor Hakes\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/*eslint-disable*/\n// 把 YYYY-MM-DD 改成了 yyyy-MM-dd\n(function (main) {\n 'use strict';\n\n /**\n * Parse or format dates\n * @class fecha\n */\n\n var fecha = {};\n var token = /d{1,4}|M{1,4}|yy(?:yy)?|S{1,3}|Do|ZZ|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g;\n var twoDigits = '\\\\d\\\\d?';\n var threeDigits = '\\\\d{3}';\n var fourDigits = '\\\\d{4}';\n var word = '[^\\\\s]+';\n var literal = /\\[([^]*?)\\]/gm;\n var noop = function noop() {};\n\n function regexEscape(str) {\n return str.replace(/[|\\\\{()[^$+*?.-]/g, '\\\\$&');\n }\n\n function shorten(arr, sLen) {\n var newArr = [];\n for (var i = 0, len = arr.length; i < len; i++) {\n newArr.push(arr[i].substr(0, sLen));\n }\n return newArr;\n }\n\n function monthUpdate(arrName) {\n return function (d, v, i18n) {\n var index = i18n[arrName].indexOf(v.charAt(0).toUpperCase() + v.substr(1).toLowerCase());\n if (~index) {\n d.month = index;\n }\n };\n }\n\n function pad(val, len) {\n val = String(val);\n len = len || 2;\n while (val.length < len) {\n val = '0' + val;\n }\n return val;\n }\n\n var dayNames = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n var monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\n var monthNamesShort = shorten(monthNames, 3);\n var dayNamesShort = shorten(dayNames, 3);\n fecha.i18n = {\n dayNamesShort: dayNamesShort,\n dayNames: dayNames,\n monthNamesShort: monthNamesShort,\n monthNames: monthNames,\n amPm: ['am', 'pm'],\n DoFn: function DoFn(D) {\n return D + ['th', 'st', 'nd', 'rd'][D % 10 > 3 ? 0 : (D - D % 10 !== 10) * D % 10];\n }\n };\n\n var formatFlags = {\n D: function D(dateObj) {\n return dateObj.getDay();\n },\n DD: function DD(dateObj) {\n return pad(dateObj.getDay());\n },\n Do: function Do(dateObj, i18n) {\n return i18n.DoFn(dateObj.getDate());\n },\n d: function d(dateObj) {\n return dateObj.getDate();\n },\n dd: function dd(dateObj) {\n return pad(dateObj.getDate());\n },\n ddd: function ddd(dateObj, i18n) {\n return i18n.dayNamesShort[dateObj.getDay()];\n },\n dddd: function dddd(dateObj, i18n) {\n return i18n.dayNames[dateObj.getDay()];\n },\n M: function M(dateObj) {\n return dateObj.getMonth() + 1;\n },\n MM: function MM(dateObj) {\n return pad(dateObj.getMonth() + 1);\n },\n MMM: function MMM(dateObj, i18n) {\n return i18n.monthNamesShort[dateObj.getMonth()];\n },\n MMMM: function MMMM(dateObj, i18n) {\n return i18n.monthNames[dateObj.getMonth()];\n },\n yy: function yy(dateObj) {\n return pad(String(dateObj.getFullYear()), 4).substr(2);\n },\n yyyy: function yyyy(dateObj) {\n return pad(dateObj.getFullYear(), 4);\n },\n h: function h(dateObj) {\n return dateObj.getHours() % 12 || 12;\n },\n hh: function hh(dateObj) {\n return pad(dateObj.getHours() % 12 || 12);\n },\n H: function H(dateObj) {\n return dateObj.getHours();\n },\n HH: function HH(dateObj) {\n return pad(dateObj.getHours());\n },\n m: function m(dateObj) {\n return dateObj.getMinutes();\n },\n mm: function mm(dateObj) {\n return pad(dateObj.getMinutes());\n },\n s: function s(dateObj) {\n return dateObj.getSeconds();\n },\n ss: function ss(dateObj) {\n return pad(dateObj.getSeconds());\n },\n S: function S(dateObj) {\n return Math.round(dateObj.getMilliseconds() / 100);\n },\n SS: function SS(dateObj) {\n return pad(Math.round(dateObj.getMilliseconds() / 10), 2);\n },\n SSS: function SSS(dateObj) {\n return pad(dateObj.getMilliseconds(), 3);\n },\n a: function a(dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0] : i18n.amPm[1];\n },\n A: function A(dateObj, i18n) {\n return dateObj.getHours() < 12 ? i18n.amPm[0].toUpperCase() : i18n.amPm[1].toUpperCase();\n },\n ZZ: function ZZ(dateObj) {\n var o = dateObj.getTimezoneOffset();\n return (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4);\n }\n };\n\n var parseFlags = {\n d: [twoDigits, function (d, v) {\n d.day = v;\n }],\n Do: [twoDigits + word, function (d, v) {\n d.day = parseInt(v, 10);\n }],\n M: [twoDigits, function (d, v) {\n d.month = v - 1;\n }],\n yy: [twoDigits, function (d, v) {\n var da = new Date(),\n cent = +('' + da.getFullYear()).substr(0, 2);\n d.year = '' + (v > 68 ? cent - 1 : cent) + v;\n }],\n h: [twoDigits, function (d, v) {\n d.hour = v;\n }],\n m: [twoDigits, function (d, v) {\n d.minute = v;\n }],\n s: [twoDigits, function (d, v) {\n d.second = v;\n }],\n yyyy: [fourDigits, function (d, v) {\n d.year = v;\n }],\n S: ['\\\\d', function (d, v) {\n d.millisecond = v * 100;\n }],\n SS: ['\\\\d{2}', function (d, v) {\n d.millisecond = v * 10;\n }],\n SSS: [threeDigits, function (d, v) {\n d.millisecond = v;\n }],\n D: [twoDigits, noop],\n ddd: [word, noop],\n MMM: [word, monthUpdate('monthNamesShort')],\n MMMM: [word, monthUpdate('monthNames')],\n a: [word, function (d, v, i18n) {\n var val = v.toLowerCase();\n if (val === i18n.amPm[0]) {\n d.isPm = false;\n } else if (val === i18n.amPm[1]) {\n d.isPm = true;\n }\n }],\n ZZ: ['[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z', function (d, v) {\n var parts = (v + '').match(/([+-]|\\d\\d)/gi),\n minutes;\n\n if (parts) {\n minutes = +(parts[1] * 60) + parseInt(parts[2], 10);\n d.timezoneOffset = parts[0] === '+' ? minutes : -minutes;\n }\n }]\n };\n parseFlags.dd = parseFlags.d;\n parseFlags.dddd = parseFlags.ddd;\n parseFlags.DD = parseFlags.D;\n parseFlags.mm = parseFlags.m;\n parseFlags.hh = parseFlags.H = parseFlags.HH = parseFlags.h;\n parseFlags.MM = parseFlags.M;\n parseFlags.ss = parseFlags.s;\n parseFlags.A = parseFlags.a;\n\n // Some common format strings\n fecha.masks = {\n default: 'ddd MMM dd yyyy HH:mm:ss',\n shortDate: 'M/D/yy',\n mediumDate: 'MMM d, yyyy',\n longDate: 'MMMM d, yyyy',\n fullDate: 'dddd, MMMM d, yyyy',\n shortTime: 'HH:mm',\n mediumTime: 'HH:mm:ss',\n longTime: 'HH:mm:ss.SSS'\n };\n\n /***\n * Format a date\n * @method format\n * @param {Date|number} dateObj\n * @param {string} mask Format of the date, i.e. 'mm-dd-yy' or 'shortDate'\n */\n fecha.format = function (dateObj, mask, i18nSettings) {\n var i18n = i18nSettings || fecha.i18n;\n\n if (typeof dateObj === 'number') {\n dateObj = new Date(dateObj);\n }\n\n if (Object.prototype.toString.call(dateObj) !== '[object Date]' || isNaN(dateObj.getTime())) {\n throw new Error('Invalid Date in fecha.format');\n }\n\n mask = fecha.masks[mask] || mask || fecha.masks['default'];\n\n var literals = [];\n\n // Make literals inactive by replacing them with ??\n mask = mask.replace(literal, function ($0, $1) {\n literals.push($1);\n return '@@@';\n });\n // Apply formatting rules\n mask = mask.replace(token, function ($0) {\n return $0 in formatFlags ? formatFlags[$0](dateObj, i18n) : $0.slice(1, $0.length - 1);\n });\n // Inline literal values back into the formatted value\n return mask.replace(/@@@/g, function () {\n return literals.shift();\n });\n };\n\n /**\n * Parse a date string into an object, changes - into /\n * @method parse\n * @param {string} dateStr Date string\n * @param {string} format Date parse format\n * @returns {Date|boolean}\n */\n fecha.parse = function (dateStr, format, i18nSettings) {\n var i18n = i18nSettings || fecha.i18n;\n\n if (typeof format !== 'string') {\n throw new Error('Invalid format in fecha.parse');\n }\n\n format = fecha.masks[format] || format;\n\n // Avoid regular expression denial of service, fail early for really long strings\n // https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS\n if (dateStr.length > 1000) {\n return null;\n }\n\n var dateInfo = {};\n var parseInfo = [];\n var literals = [];\n format = format.replace(literal, function ($0, $1) {\n literals.push($1);\n return '@@@';\n });\n var newFormat = regexEscape(format).replace(token, function ($0) {\n if (parseFlags[$0]) {\n var info = parseFlags[$0];\n parseInfo.push(info[1]);\n return '(' + info[0] + ')';\n }\n\n return $0;\n });\n newFormat = newFormat.replace(/@@@/g, function () {\n return literals.shift();\n });\n var matches = dateStr.match(new RegExp(newFormat, 'i'));\n if (!matches) {\n return null;\n }\n\n for (var i = 1; i < matches.length; i++) {\n parseInfo[i - 1](dateInfo, matches[i], i18n);\n }\n\n var today = new Date();\n if (dateInfo.isPm === true && dateInfo.hour != null && +dateInfo.hour !== 12) {\n dateInfo.hour = +dateInfo.hour + 12;\n } else if (dateInfo.isPm === false && +dateInfo.hour === 12) {\n dateInfo.hour = 0;\n }\n\n var date;\n if (dateInfo.timezoneOffset != null) {\n dateInfo.minute = +(dateInfo.minute || 0) - +dateInfo.timezoneOffset;\n date = new Date(Date.UTC(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0));\n } else {\n date = new Date(dateInfo.year || today.getFullYear(), dateInfo.month || 0, dateInfo.day || 1, dateInfo.hour || 0, dateInfo.minute || 0, dateInfo.second || 0, dateInfo.millisecond || 0);\n }\n return date;\n };\n\n /* istanbul ignore next */\n if ( true && module.exports) {\n module.exports = fecha;\n } else if (true) {\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n return fecha;\n }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n})(undefined);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZGF0ZS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9kYXRlLmpzP2Q3ZDEiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG4vKiBNb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS90YXlsb3JoYWtlcy9mZWNoYVxuICpcbiAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNSBUYXlsb3IgSGFrZXNcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiAgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiAgICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogICAgIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4vKmVzbGludC1kaXNhYmxlKi9cbi8vIOaKiiBZWVlZLU1NLUREIOaUueaIkOS6hiB5eXl5LU1NLWRkXG4oZnVuY3Rpb24gKG1haW4pIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiBQYXJzZSBvciBmb3JtYXQgZGF0ZXNcbiAgICogQGNsYXNzIGZlY2hhXG4gICAqL1xuXG4gIHZhciBmZWNoYSA9IHt9O1xuICB2YXIgdG9rZW4gPSAvZHsxLDR9fE17MSw0fXx5eSg/Onl5KT98U3sxLDN9fERvfFpafChbSGhNc0RtXSlcXDE/fFthQV18XCJbXlwiXSpcInwnW14nXSonL2c7XG4gIHZhciB0d29EaWdpdHMgPSAnXFxcXGRcXFxcZD8nO1xuICB2YXIgdGhyZWVEaWdpdHMgPSAnXFxcXGR7M30nO1xuICB2YXIgZm91ckRpZ2l0cyA9ICdcXFxcZHs0fSc7XG4gIHZhciB3b3JkID0gJ1teXFxcXHNdKyc7XG4gIHZhciBsaXRlcmFsID0gL1xcWyhbXl0qPylcXF0vZ207XG4gIHZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4gIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW3xcXFxceygpW14kKyo/Li1dL2csICdcXFxcJCYnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3J0ZW4oYXJyLCBzTGVuKSB7XG4gICAgdmFyIG5ld0FyciA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIG5ld0Fyci5wdXNoKGFycltpXS5zdWJzdHIoMCwgc0xlbikpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QXJyO1xuICB9XG5cbiAgZnVuY3Rpb24gbW9udGhVcGRhdGUoYXJyTmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgdiwgaTE4bikge1xuICAgICAgdmFyIGluZGV4ID0gaTE4blthcnJOYW1lXS5pbmRleE9mKHYuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgZC5tb250aCA9IGluZGV4O1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYWQodmFsLCBsZW4pIHtcbiAgICB2YWwgPSBTdHJpbmcodmFsKTtcbiAgICBsZW4gPSBsZW4gfHwgMjtcbiAgICB3aGlsZSAodmFsLmxlbmd0aCA8IGxlbikge1xuICAgICAgdmFsID0gJzAnICsgdmFsO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgdmFyIGRheU5hbWVzID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xuICB2YXIgbW9udGhOYW1lcyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xuICB2YXIgbW9udGhOYW1lc1Nob3J0ID0gc2hvcnRlbihtb250aE5hbWVzLCAzKTtcbiAgdmFyIGRheU5hbWVzU2hvcnQgPSBzaG9ydGVuKGRheU5hbWVzLCAzKTtcbiAgZmVjaGEuaTE4biA9IHtcbiAgICBkYXlOYW1lc1Nob3J0OiBkYXlOYW1lc1Nob3J0LFxuICAgIGRheU5hbWVzOiBkYXlOYW1lcyxcbiAgICBtb250aE5hbWVzU2hvcnQ6IG1vbnRoTmFtZXNTaG9ydCxcbiAgICBtb250aE5hbWVzOiBtb250aE5hbWVzLFxuICAgIGFtUG06IFsnYW0nLCAncG0nXSxcbiAgICBEb0ZuOiBmdW5jdGlvbiBEb0ZuKEQpIHtcbiAgICAgIHJldHVybiBEICsgWyd0aCcsICdzdCcsICduZCcsICdyZCddW0QgJSAxMCA+IDMgPyAwIDogKEQgLSBEICUgMTAgIT09IDEwKSAqIEQgJSAxMF07XG4gICAgfVxuICB9O1xuXG4gIHZhciBmb3JtYXRGbGFncyA9IHtcbiAgICBEOiBmdW5jdGlvbiBEKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBkYXRlT2JqLmdldERheSgpO1xuICAgIH0sXG4gICAgREQ6IGZ1bmN0aW9uIEREKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXREYXkoKSk7XG4gICAgfSxcbiAgICBEbzogZnVuY3Rpb24gRG8oZGF0ZU9iaiwgaTE4bikge1xuICAgICAgcmV0dXJuIGkxOG4uRG9GbihkYXRlT2JqLmdldERhdGUoKSk7XG4gICAgfSxcbiAgICBkOiBmdW5jdGlvbiBkKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBkYXRlT2JqLmdldERhdGUoKTtcbiAgICB9LFxuICAgIGRkOiBmdW5jdGlvbiBkZChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0RGF0ZSgpKTtcbiAgICB9LFxuICAgIGRkZDogZnVuY3Rpb24gZGRkKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBpMThuLmRheU5hbWVzU2hvcnRbZGF0ZU9iai5nZXREYXkoKV07XG4gICAgfSxcbiAgICBkZGRkOiBmdW5jdGlvbiBkZGRkKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBpMThuLmRheU5hbWVzW2RhdGVPYmouZ2V0RGF5KCldO1xuICAgIH0sXG4gICAgTTogZnVuY3Rpb24gTShkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXRNb250aCgpICsgMTtcbiAgICB9LFxuICAgIE1NOiBmdW5jdGlvbiBNTShkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKGRhdGVPYmouZ2V0TW9udGgoKSArIDEpO1xuICAgIH0sXG4gICAgTU1NOiBmdW5jdGlvbiBNTU0oZGF0ZU9iaiwgaTE4bikge1xuICAgICAgcmV0dXJuIGkxOG4ubW9udGhOYW1lc1Nob3J0W2RhdGVPYmouZ2V0TW9udGgoKV07XG4gICAgfSxcbiAgICBNTU1NOiBmdW5jdGlvbiBNTU1NKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBpMThuLm1vbnRoTmFtZXNbZGF0ZU9iai5nZXRNb250aCgpXTtcbiAgICB9LFxuICAgIHl5OiBmdW5jdGlvbiB5eShkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gcGFkKFN0cmluZyhkYXRlT2JqLmdldEZ1bGxZZWFyKCkpLCA0KS5zdWJzdHIoMik7XG4gICAgfSxcbiAgICB5eXl5OiBmdW5jdGlvbiB5eXl5KGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRGdWxsWWVhcigpLCA0KTtcbiAgICB9LFxuICAgIGg6IGZ1bmN0aW9uIGgoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0SG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH0sXG4gICAgaGg6IGZ1bmN0aW9uIGhoKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRIb3VycygpICUgMTIgfHwgMTIpO1xuICAgIH0sXG4gICAgSDogZnVuY3Rpb24gSChkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXRIb3VycygpO1xuICAgIH0sXG4gICAgSEg6IGZ1bmN0aW9uIEhIKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRIb3VycygpKTtcbiAgICB9LFxuICAgIG06IGZ1bmN0aW9uIG0oZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0TWludXRlcygpO1xuICAgIH0sXG4gICAgbW06IGZ1bmN0aW9uIG1tKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRNaW51dGVzKCkpO1xuICAgIH0sXG4gICAgczogZnVuY3Rpb24gcyhkYXRlT2JqKSB7XG4gICAgICByZXR1cm4gZGF0ZU9iai5nZXRTZWNvbmRzKCk7XG4gICAgfSxcbiAgICBzczogZnVuY3Rpb24gc3MoZGF0ZU9iaikge1xuICAgICAgcmV0dXJuIHBhZChkYXRlT2JqLmdldFNlY29uZHMoKSk7XG4gICAgfSxcbiAgICBTOiBmdW5jdGlvbiBTKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKGRhdGVPYmouZ2V0TWlsbGlzZWNvbmRzKCkgLyAxMDApO1xuICAgIH0sXG4gICAgU1M6IGZ1bmN0aW9uIFNTKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoTWF0aC5yb3VuZChkYXRlT2JqLmdldE1pbGxpc2Vjb25kcygpIC8gMTApLCAyKTtcbiAgICB9LFxuICAgIFNTUzogZnVuY3Rpb24gU1NTKGRhdGVPYmopIHtcbiAgICAgIHJldHVybiBwYWQoZGF0ZU9iai5nZXRNaWxsaXNlY29uZHMoKSwgMyk7XG4gICAgfSxcbiAgICBhOiBmdW5jdGlvbiBhKGRhdGVPYmosIGkxOG4pIHtcbiAgICAgIHJldHVybiBkYXRlT2JqLmdldEhvdXJzKCkgPCAxMiA/IGkxOG4uYW1QbVswXSA6IGkxOG4uYW1QbVsxXTtcbiAgICB9LFxuICAgIEE6IGZ1bmN0aW9uIEEoZGF0ZU9iaiwgaTE4bikge1xuICAgICAgcmV0dXJuIGRhdGVPYmouZ2V0SG91cnMoKSA8IDEyID8gaTE4bi5hbVBtWzBdLnRvVXBwZXJDYXNlKCkgOiBpMThuLmFtUG1bMV0udG9VcHBlckNhc2UoKTtcbiAgICB9LFxuICAgIFpaOiBmdW5jdGlvbiBaWihkYXRlT2JqKSB7XG4gICAgICB2YXIgbyA9IGRhdGVPYmouZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgIHJldHVybiAobyA+IDAgPyAnLScgOiAnKycpICsgcGFkKE1hdGguZmxvb3IoTWF0aC5hYnMobykgLyA2MCkgKiAxMDAgKyBNYXRoLmFicyhvKSAlIDYwLCA0KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBhcnNlRmxhZ3MgPSB7XG4gICAgZDogW3R3b0RpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQuZGF5ID0gdjtcbiAgICB9XSxcbiAgICBEbzogW3R3b0RpZ2l0cyArIHdvcmQsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLmRheSA9IHBhcnNlSW50KHYsIDEwKTtcbiAgICB9XSxcbiAgICBNOiBbdHdvRGlnaXRzLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5tb250aCA9IHYgLSAxO1xuICAgIH1dLFxuICAgIHl5OiBbdHdvRGlnaXRzLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgdmFyIGRhID0gbmV3IERhdGUoKSxcbiAgICAgICAgICBjZW50ID0gKygnJyArIGRhLmdldEZ1bGxZZWFyKCkpLnN1YnN0cigwLCAyKTtcbiAgICAgIGQueWVhciA9ICcnICsgKHYgPiA2OCA/IGNlbnQgLSAxIDogY2VudCkgKyB2O1xuICAgIH1dLFxuICAgIGg6IFt0d29EaWdpdHMsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLmhvdXIgPSB2O1xuICAgIH1dLFxuICAgIG06IFt0d29EaWdpdHMsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLm1pbnV0ZSA9IHY7XG4gICAgfV0sXG4gICAgczogW3R3b0RpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQuc2Vjb25kID0gdjtcbiAgICB9XSxcbiAgICB5eXl5OiBbZm91ckRpZ2l0cywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIGQueWVhciA9IHY7XG4gICAgfV0sXG4gICAgUzogWydcXFxcZCcsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLm1pbGxpc2Vjb25kID0gdiAqIDEwMDtcbiAgICB9XSxcbiAgICBTUzogWydcXFxcZHsyfScsIGZ1bmN0aW9uIChkLCB2KSB7XG4gICAgICBkLm1pbGxpc2Vjb25kID0gdiAqIDEwO1xuICAgIH1dLFxuICAgIFNTUzogW3RocmVlRGlnaXRzLCBmdW5jdGlvbiAoZCwgdikge1xuICAgICAgZC5taWxsaXNlY29uZCA9IHY7XG4gICAgfV0sXG4gICAgRDogW3R3b0RpZ2l0cywgbm9vcF0sXG4gICAgZGRkOiBbd29yZCwgbm9vcF0sXG4gICAgTU1NOiBbd29yZCwgbW9udGhVcGRhdGUoJ21vbnRoTmFtZXNTaG9ydCcpXSxcbiAgICBNTU1NOiBbd29yZCwgbW9udGhVcGRhdGUoJ21vbnRoTmFtZXMnKV0sXG4gICAgYTogW3dvcmQsIGZ1bmN0aW9uIChkLCB2LCBpMThuKSB7XG4gICAgICB2YXIgdmFsID0gdi50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKHZhbCA9PT0gaTE4bi5hbVBtWzBdKSB7XG4gICAgICAgIGQuaXNQbSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh2YWwgPT09IGkxOG4uYW1QbVsxXSkge1xuICAgICAgICBkLmlzUG0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1dLFxuICAgIFpaOiBbJ1teXFxcXHNdKj9bXFxcXCtcXFxcLV1cXFxcZFxcXFxkOj9cXFxcZFxcXFxkfFteXFxcXHNdKj9aJywgZnVuY3Rpb24gKGQsIHYpIHtcbiAgICAgIHZhciBwYXJ0cyA9ICh2ICsgJycpLm1hdGNoKC8oWystXXxcXGRcXGQpL2dpKSxcbiAgICAgICAgICBtaW51dGVzO1xuXG4gICAgICBpZiAocGFydHMpIHtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyBwYXJzZUludChwYXJ0c1syXSwgMTApO1xuICAgICAgICBkLnRpbWV6b25lT2Zmc2V0ID0gcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICAgIH1cbiAgICB9XVxuICB9O1xuICBwYXJzZUZsYWdzLmRkID0gcGFyc2VGbGFncy5kO1xuICBwYXJzZUZsYWdzLmRkZGQgPSBwYXJzZUZsYWdzLmRkZDtcbiAgcGFyc2VGbGFncy5ERCA9IHBhcnNlRmxhZ3MuRDtcbiAgcGFyc2VGbGFncy5tbSA9IHBhcnNlRmxhZ3MubTtcbiAgcGFyc2VGbGFncy5oaCA9IHBhcnNlRmxhZ3MuSCA9IHBhcnNlRmxhZ3MuSEggPSBwYXJzZUZsYWdzLmg7XG4gIHBhcnNlRmxhZ3MuTU0gPSBwYXJzZUZsYWdzLk07XG4gIHBhcnNlRmxhZ3Muc3MgPSBwYXJzZUZsYWdzLnM7XG4gIHBhcnNlRmxhZ3MuQSA9IHBhcnNlRmxhZ3MuYTtcblxuICAvLyBTb21lIGNvbW1vbiBmb3JtYXQgc3RyaW5nc1xuICBmZWNoYS5tYXNrcyA9IHtcbiAgICBkZWZhdWx0OiAnZGRkIE1NTSBkZCB5eXl5IEhIOm1tOnNzJyxcbiAgICBzaG9ydERhdGU6ICdNL0QveXknLFxuICAgIG1lZGl1bURhdGU6ICdNTU0gZCwgeXl5eScsXG4gICAgbG9uZ0RhdGU6ICdNTU1NIGQsIHl5eXknLFxuICAgIGZ1bGxEYXRlOiAnZGRkZCwgTU1NTSBkLCB5eXl5JyxcbiAgICBzaG9ydFRpbWU6ICdISDptbScsXG4gICAgbWVkaXVtVGltZTogJ0hIOm1tOnNzJyxcbiAgICBsb25nVGltZTogJ0hIOm1tOnNzLlNTUydcbiAgfTtcblxuICAvKioqXG4gICAqIEZvcm1hdCBhIGRhdGVcbiAgICogQG1ldGhvZCBmb3JtYXRcbiAgICogQHBhcmFtIHtEYXRlfG51bWJlcn0gZGF0ZU9ialxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFzayBGb3JtYXQgb2YgdGhlIGRhdGUsIGkuZS4gJ21tLWRkLXl5JyBvciAnc2hvcnREYXRlJ1xuICAgKi9cbiAgZmVjaGEuZm9ybWF0ID0gZnVuY3Rpb24gKGRhdGVPYmosIG1hc2ssIGkxOG5TZXR0aW5ncykge1xuICAgIHZhciBpMThuID0gaTE4blNldHRpbmdzIHx8IGZlY2hhLmkxOG47XG5cbiAgICBpZiAodHlwZW9mIGRhdGVPYmogPT09ICdudW1iZXInKSB7XG4gICAgICBkYXRlT2JqID0gbmV3IERhdGUoZGF0ZU9iaik7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkYXRlT2JqKSAhPT0gJ1tvYmplY3QgRGF0ZV0nIHx8IGlzTmFOKGRhdGVPYmouZ2V0VGltZSgpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIERhdGUgaW4gZmVjaGEuZm9ybWF0Jyk7XG4gICAgfVxuXG4gICAgbWFzayA9IGZlY2hhLm1hc2tzW21hc2tdIHx8IG1hc2sgfHwgZmVjaGEubWFza3NbJ2RlZmF1bHQnXTtcblxuICAgIHZhciBsaXRlcmFscyA9IFtdO1xuXG4gICAgLy8gTWFrZSBsaXRlcmFscyBpbmFjdGl2ZSBieSByZXBsYWNpbmcgdGhlbSB3aXRoID8/XG4gICAgbWFzayA9IG1hc2sucmVwbGFjZShsaXRlcmFsLCBmdW5jdGlvbiAoJDAsICQxKSB7XG4gICAgICBsaXRlcmFscy5wdXNoKCQxKTtcbiAgICAgIHJldHVybiAnQEBAJztcbiAgICB9KTtcbiAgICAvLyBBcHBseSBmb3JtYXR0aW5nIHJ1bGVzXG4gICAgbWFzayA9IG1hc2sucmVwbGFjZSh0b2tlbiwgZnVuY3Rpb24gKCQwKSB7XG4gICAgICByZXR1cm4gJDAgaW4gZm9ybWF0RmxhZ3MgPyBmb3JtYXRGbGFnc1skMF0oZGF0ZU9iaiwgaTE4bikgOiAkMC5zbGljZSgxLCAkMC5sZW5ndGggLSAxKTtcbiAgICB9KTtcbiAgICAvLyBJbmxpbmUgbGl0ZXJhbCB2YWx1ZXMgYmFjayBpbnRvIHRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICByZXR1cm4gbWFzay5yZXBsYWNlKC9AQEAvZywgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGxpdGVyYWxzLnNoaWZ0KCk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgZGF0ZSBzdHJpbmcgaW50byBhbiBvYmplY3QsIGNoYW5nZXMgLSBpbnRvIC9cbiAgICogQG1ldGhvZCBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZVN0ciBEYXRlIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0IERhdGUgcGFyc2UgZm9ybWF0XG4gICAqIEByZXR1cm5zIHtEYXRlfGJvb2xlYW59XG4gICAqL1xuICBmZWNoYS5wYXJzZSA9IGZ1bmN0aW9uIChkYXRlU3RyLCBmb3JtYXQsIGkxOG5TZXR0aW5ncykge1xuICAgIHZhciBpMThuID0gaTE4blNldHRpbmdzIHx8IGZlY2hhLmkxOG47XG5cbiAgICBpZiAodHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmb3JtYXQgaW4gZmVjaGEucGFyc2UnKTtcbiAgICB9XG5cbiAgICBmb3JtYXQgPSBmZWNoYS5tYXNrc1tmb3JtYXRdIHx8IGZvcm1hdDtcblxuICAgIC8vIEF2b2lkIHJlZ3VsYXIgZXhwcmVzc2lvbiBkZW5pYWwgb2Ygc2VydmljZSwgZmFpbCBlYXJseSBmb3IgcmVhbGx5IGxvbmcgc3RyaW5nc1xuICAgIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvUmVndWxhcl9leHByZXNzaW9uX0RlbmlhbF9vZl9TZXJ2aWNlXy1fUmVEb1NcbiAgICBpZiAoZGF0ZVN0ci5sZW5ndGggPiAxMDAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZGF0ZUluZm8gPSB7fTtcbiAgICB2YXIgcGFyc2VJbmZvID0gW107XG4gICAgdmFyIGxpdGVyYWxzID0gW107XG4gICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UobGl0ZXJhbCwgZnVuY3Rpb24gKCQwLCAkMSkge1xuICAgICAgbGl0ZXJhbHMucHVzaCgkMSk7XG4gICAgICByZXR1cm4gJ0BAQCc7XG4gICAgfSk7XG4gICAgdmFyIG5ld0Zvcm1hdCA9IHJlZ2V4RXNjYXBlKGZvcm1hdCkucmVwbGFjZSh0b2tlbiwgZnVuY3Rpb24gKCQwKSB7XG4gICAgICBpZiAocGFyc2VGbGFnc1skMF0pIHtcbiAgICAgICAgdmFyIGluZm8gPSBwYXJzZUZsYWdzWyQwXTtcbiAgICAgICAgcGFyc2VJbmZvLnB1c2goaW5mb1sxXSk7XG4gICAgICAgIHJldHVybiAnKCcgKyBpbmZvWzBdICsgJyknO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJDA7XG4gICAgfSk7XG4gICAgbmV3Rm9ybWF0ID0gbmV3Rm9ybWF0LnJlcGxhY2UoL0BAQC9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbGl0ZXJhbHMuc2hpZnQoKTtcbiAgICB9KTtcbiAgICB2YXIgbWF0Y2hlcyA9IGRhdGVTdHIubWF0Y2gobmV3IFJlZ0V4cChuZXdGb3JtYXQsICdpJykpO1xuICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYXJzZUluZm9baSAtIDFdKGRhdGVJbmZvLCBtYXRjaGVzW2ldLCBpMThuKTtcbiAgICB9XG5cbiAgICB2YXIgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGlmIChkYXRlSW5mby5pc1BtID09PSB0cnVlICYmIGRhdGVJbmZvLmhvdXIgIT0gbnVsbCAmJiArZGF0ZUluZm8uaG91ciAhPT0gMTIpIHtcbiAgICAgIGRhdGVJbmZvLmhvdXIgPSArZGF0ZUluZm8uaG91ciArIDEyO1xuICAgIH0gZWxzZSBpZiAoZGF0ZUluZm8uaXNQbSA9PT0gZmFsc2UgJiYgK2RhdGVJbmZvLmhvdXIgPT09IDEyKSB7XG4gICAgICBkYXRlSW5mby5ob3VyID0gMDtcbiAgICB9XG5cbiAgICB2YXIgZGF0ZTtcbiAgICBpZiAoZGF0ZUluZm8udGltZXpvbmVPZmZzZXQgIT0gbnVsbCkge1xuICAgICAgZGF0ZUluZm8ubWludXRlID0gKyhkYXRlSW5mby5taW51dGUgfHwgMCkgLSArZGF0ZUluZm8udGltZXpvbmVPZmZzZXQ7XG4gICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoZGF0ZUluZm8ueWVhciB8fCB0b2RheS5nZXRGdWxsWWVhcigpLCBkYXRlSW5mby5tb250aCB8fCAwLCBkYXRlSW5mby5kYXkgfHwgMSwgZGF0ZUluZm8uaG91ciB8fCAwLCBkYXRlSW5mby5taW51dGUgfHwgMCwgZGF0ZUluZm8uc2Vjb25kIHx8IDAsIGRhdGVJbmZvLm1pbGxpc2Vjb25kIHx8IDApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGVJbmZvLnllYXIgfHwgdG9kYXkuZ2V0RnVsbFllYXIoKSwgZGF0ZUluZm8ubW9udGggfHwgMCwgZGF0ZUluZm8uZGF5IHx8IDEsIGRhdGVJbmZvLmhvdXIgfHwgMCwgZGF0ZUluZm8ubWludXRlIHx8IDAsIGRhdGVJbmZvLnNlY29uZCB8fCAwLCBkYXRlSW5mby5taWxsaXNlY29uZCB8fCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG4gIH07XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmZWNoYTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZlY2hhO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG1haW4uZmVjaGEgPSBmZWNoYTtcbiAgfVxufSkodW5kZWZpbmVkKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBLFdBRUE7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/date.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/dom.js":
- /*!**************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/dom.js ***!
- \**************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.isInContainer = exports.getScrollContainer = exports.isScroll = exports.getStyle = exports.once = exports.off = exports.on = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; /* istanbul ignore next */\n\nexports.hasClass = hasClass;\nexports.addClass = addClass;\nexports.removeClass = removeClass;\nexports.setStyle = setStyle;\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isServer = _vue2.default.prototype.$isServer;\nvar SPECIAL_CHARS_REGEXP = /([\\:\\-\\_]+(.))/g;\nvar MOZ_HACK_REGEXP = /^moz([A-Z])/;\nvar ieVersion = isServer ? 0 : Number(document.documentMode);\n\n/* istanbul ignore next */\nvar trim = function trim(string) {\n return (string || '').replace(/^[\\s\\uFEFF]+|[\\s\\uFEFF]+$/g, '');\n};\n/* istanbul ignore next */\nvar camelCase = function camelCase(name) {\n return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) {\n return offset ? letter.toUpperCase() : letter;\n }).replace(MOZ_HACK_REGEXP, 'Moz$1');\n};\n\n/* istanbul ignore next */\nvar on = exports.on = function () {\n if (!isServer && document.addEventListener) {\n return function (element, event, handler) {\n if (element && event && handler) {\n element.addEventListener(event, handler, false);\n }\n };\n } else {\n return function (element, event, handler) {\n if (element && event && handler) {\n element.attachEvent('on' + event, handler);\n }\n };\n }\n}();\n\n/* istanbul ignore next */\nvar off = exports.off = function () {\n if (!isServer && document.removeEventListener) {\n return function (element, event, handler) {\n if (element && event) {\n element.removeEventListener(event, handler, false);\n }\n };\n } else {\n return function (element, event, handler) {\n if (element && event) {\n element.detachEvent('on' + event, handler);\n }\n };\n }\n}();\n\n/* istanbul ignore next */\nvar once = exports.once = function once(el, event, fn) {\n var listener = function listener() {\n if (fn) {\n fn.apply(this, arguments);\n }\n off(el, event, listener);\n };\n on(el, event, listener);\n};\n\n/* istanbul ignore next */\nfunction hasClass(el, cls) {\n if (!el || !cls) return false;\n if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');\n if (el.classList) {\n return el.classList.contains(cls);\n } else {\n return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;\n }\n};\n\n/* istanbul ignore next */\nfunction addClass(el, cls) {\n if (!el) return;\n var curClass = el.className;\n var classes = (cls || '').split(' ');\n\n for (var i = 0, j = classes.length; i < j; i++) {\n var clsName = classes[i];\n if (!clsName) continue;\n\n if (el.classList) {\n el.classList.add(clsName);\n } else if (!hasClass(el, clsName)) {\n curClass += ' ' + clsName;\n }\n }\n if (!el.classList) {\n el.setAttribute('class', curClass);\n }\n};\n\n/* istanbul ignore next */\nfunction removeClass(el, cls) {\n if (!el || !cls) return;\n var classes = cls.split(' ');\n var curClass = ' ' + el.className + ' ';\n\n for (var i = 0, j = classes.length; i < j; i++) {\n var clsName = classes[i];\n if (!clsName) continue;\n\n if (el.classList) {\n el.classList.remove(clsName);\n } else if (hasClass(el, clsName)) {\n curClass = curClass.replace(' ' + clsName + ' ', ' ');\n }\n }\n if (!el.classList) {\n el.setAttribute('class', trim(curClass));\n }\n};\n\n/* istanbul ignore next */\nvar getStyle = exports.getStyle = ieVersion < 9 ? function (element, styleName) {\n if (isServer) return;\n if (!element || !styleName) return null;\n styleName = camelCase(styleName);\n if (styleName === 'float') {\n styleName = 'styleFloat';\n }\n try {\n switch (styleName) {\n case 'opacity':\n try {\n return element.filters.item('alpha').opacity / 100;\n } catch (e) {\n return 1.0;\n }\n default:\n return element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null;\n }\n } catch (e) {\n return element.style[styleName];\n }\n} : function (element, styleName) {\n if (isServer) return;\n if (!element || !styleName) return null;\n styleName = camelCase(styleName);\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n try {\n var computed = document.defaultView.getComputedStyle(element, '');\n return element.style[styleName] || computed ? computed[styleName] : null;\n } catch (e) {\n return element.style[styleName];\n }\n};\n\n/* istanbul ignore next */\nfunction setStyle(element, styleName, value) {\n if (!element || !styleName) return;\n\n if ((typeof styleName === 'undefined' ? 'undefined' : _typeof(styleName)) === 'object') {\n for (var prop in styleName) {\n if (styleName.hasOwnProperty(prop)) {\n setStyle(element, prop, styleName[prop]);\n }\n }\n } else {\n styleName = camelCase(styleName);\n if (styleName === 'opacity' && ieVersion < 9) {\n element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';\n } else {\n element.style[styleName] = value;\n }\n }\n};\n\nvar isScroll = exports.isScroll = function isScroll(el, vertical) {\n if (isServer) return;\n\n var determinedDirection = vertical !== null && vertical !== undefined;\n var overflow = determinedDirection ? vertical ? getStyle(el, 'overflow-y') : getStyle(el, 'overflow-x') : getStyle(el, 'overflow');\n\n return overflow.match(/(scroll|auto|overlay)/);\n};\n\nvar getScrollContainer = exports.getScrollContainer = function getScrollContainer(el, vertical) {\n if (isServer) return;\n\n var parent = el;\n while (parent) {\n if ([window, document, document.documentElement].includes(parent)) {\n return window;\n }\n if (isScroll(parent, vertical)) {\n return parent;\n }\n parent = parent.parentNode;\n }\n\n return parent;\n};\n\nvar isInContainer = exports.isInContainer = function isInContainer(el, container) {\n if (isServer || !el || !container) return false;\n\n var elRect = el.getBoundingClientRect();\n var containerRect = void 0;\n\n if ([window, document, document.documentElement, null, undefined].includes(container)) {\n containerRect = {\n top: 0,\n right: window.innerWidth,\n bottom: window.innerHeight,\n left: 0\n };\n } else {\n containerRect = container.getBoundingClientRect();\n }\n\n return elRect.top < containerRect.bottom && elRect.bottom > containerRect.top && elRect.right > containerRect.left && elRect.left < containerRect.right;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvZG9tLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL2RvbS5qcz81OTI0Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuaXNJbkNvbnRhaW5lciA9IGV4cG9ydHMuZ2V0U2Nyb2xsQ29udGFpbmVyID0gZXhwb3J0cy5pc1Njcm9sbCA9IGV4cG9ydHMuZ2V0U3R5bGUgPSBleHBvcnRzLm9uY2UgPSBleHBvcnRzLm9mZiA9IGV4cG9ydHMub24gPSB1bmRlZmluZWQ7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuZXhwb3J0cy5oYXNDbGFzcyA9IGhhc0NsYXNzO1xuZXhwb3J0cy5hZGRDbGFzcyA9IGFkZENsYXNzO1xuZXhwb3J0cy5yZW1vdmVDbGFzcyA9IHJlbW92ZUNsYXNzO1xuZXhwb3J0cy5zZXRTdHlsZSA9IHNldFN0eWxlO1xuXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xuXG52YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgaXNTZXJ2ZXIgPSBfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXI7XG52YXIgU1BFQ0lBTF9DSEFSU19SRUdFWFAgPSAvKFtcXDpcXC1cXF9dKyguKSkvZztcbnZhciBNT1pfSEFDS19SRUdFWFAgPSAvXm1veihbQS1aXSkvO1xudmFyIGllVmVyc2lvbiA9IGlzU2VydmVyID8gMCA6IE51bWJlcihkb2N1bWVudC5kb2N1bWVudE1vZGUpO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIHRyaW0gPSBmdW5jdGlvbiB0cmltKHN0cmluZykge1xuICByZXR1cm4gKHN0cmluZyB8fCAnJykucmVwbGFjZSgvXltcXHNcXHVGRUZGXSt8W1xcc1xcdUZFRkZdKyQvZywgJycpO1xufTtcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgY2FtZWxDYXNlID0gZnVuY3Rpb24gY2FtZWxDYXNlKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZShTUEVDSUFMX0NIQVJTX1JFR0VYUCwgZnVuY3Rpb24gKF8sIHNlcGFyYXRvciwgbGV0dGVyLCBvZmZzZXQpIHtcbiAgICByZXR1cm4gb2Zmc2V0ID8gbGV0dGVyLnRvVXBwZXJDYXNlKCkgOiBsZXR0ZXI7XG4gIH0pLnJlcGxhY2UoTU9aX0hBQ0tfUkVHRVhQLCAnTW96JDEnKTtcbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgb24gPSBleHBvcnRzLm9uID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIWlzU2VydmVyICYmIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICBpZiAoZWxlbWVudCAmJiBldmVudCAmJiBoYW5kbGVyKSB7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgZmFsc2UpO1xuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlbGVtZW50LCBldmVudCwgaGFuZGxlcikge1xuICAgICAgaWYgKGVsZW1lbnQgJiYgZXZlbnQgJiYgaGFuZGxlcikge1xuICAgICAgICBlbGVtZW50LmF0dGFjaEV2ZW50KCdvbicgKyBldmVudCwgaGFuZGxlcik7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufSgpO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIG9mZiA9IGV4cG9ydHMub2ZmID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIWlzU2VydmVyICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyKSB7XG4gICAgICBpZiAoZWxlbWVudCAmJiBldmVudCkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIpIHtcbiAgICAgIGlmIChlbGVtZW50ICYmIGV2ZW50KSB7XG4gICAgICAgIGVsZW1lbnQuZGV0YWNoRXZlbnQoJ29uJyArIGV2ZW50LCBoYW5kbGVyKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59KCk7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgb25jZSA9IGV4cG9ydHMub25jZSA9IGZ1bmN0aW9uIG9uY2UoZWwsIGV2ZW50LCBmbikge1xuICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcigpIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIG9mZihlbCwgZXZlbnQsIGxpc3RlbmVyKTtcbiAgfTtcbiAgb24oZWwsIGV2ZW50LCBsaXN0ZW5lcik7XG59O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gaGFzQ2xhc3MoZWwsIGNscykge1xuICBpZiAoIWVsIHx8ICFjbHMpIHJldHVybiBmYWxzZTtcbiAgaWYgKGNscy5pbmRleE9mKCcgJykgIT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ2NsYXNzTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gc3BhY2UuJyk7XG4gIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNscyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICgnICcgKyBlbC5jbGFzc05hbWUgKyAnICcpLmluZGV4T2YoJyAnICsgY2xzICsgJyAnKSA+IC0xO1xuICB9XG59O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gYWRkQ2xhc3MoZWwsIGNscykge1xuICBpZiAoIWVsKSByZXR1cm47XG4gIHZhciBjdXJDbGFzcyA9IGVsLmNsYXNzTmFtZTtcbiAgdmFyIGNsYXNzZXMgPSAoY2xzIHx8ICcnKS5zcGxpdCgnICcpO1xuXG4gIGZvciAodmFyIGkgPSAwLCBqID0gY2xhc3Nlcy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgY2xzTmFtZSA9IGNsYXNzZXNbaV07XG4gICAgaWYgKCFjbHNOYW1lKSBjb250aW51ZTtcblxuICAgIGlmIChlbC5jbGFzc0xpc3QpIHtcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoY2xzTmFtZSk7XG4gICAgfSBlbHNlIGlmICghaGFzQ2xhc3MoZWwsIGNsc05hbWUpKSB7XG4gICAgICBjdXJDbGFzcyArPSAnICcgKyBjbHNOYW1lO1xuICAgIH1cbiAgfVxuICBpZiAoIWVsLmNsYXNzTGlzdCkge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjdXJDbGFzcyk7XG4gIH1cbn07XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiByZW1vdmVDbGFzcyhlbCwgY2xzKSB7XG4gIGlmICghZWwgfHwgIWNscykgcmV0dXJuO1xuICB2YXIgY2xhc3NlcyA9IGNscy5zcGxpdCgnICcpO1xuICB2YXIgY3VyQ2xhc3MgPSAnICcgKyBlbC5jbGFzc05hbWUgKyAnICc7XG5cbiAgZm9yICh2YXIgaSA9IDAsIGogPSBjbGFzc2VzLmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgIHZhciBjbHNOYW1lID0gY2xhc3Nlc1tpXTtcbiAgICBpZiAoIWNsc05hbWUpIGNvbnRpbnVlO1xuXG4gICAgaWYgKGVsLmNsYXNzTGlzdCkge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShjbHNOYW1lKTtcbiAgICB9IGVsc2UgaWYgKGhhc0NsYXNzKGVsLCBjbHNOYW1lKSkge1xuICAgICAgY3VyQ2xhc3MgPSBjdXJDbGFzcy5yZXBsYWNlKCcgJyArIGNsc05hbWUgKyAnICcsICcgJyk7XG4gICAgfVxuICB9XG4gIGlmICghZWwuY2xhc3NMaXN0KSB7XG4gICAgZWwuc2V0QXR0cmlidXRlKCdjbGFzcycsIHRyaW0oY3VyQ2xhc3MpKTtcbiAgfVxufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBnZXRTdHlsZSA9IGV4cG9ydHMuZ2V0U3R5bGUgPSBpZVZlcnNpb24gPCA5ID8gZnVuY3Rpb24gKGVsZW1lbnQsIHN0eWxlTmFtZSkge1xuICBpZiAoaXNTZXJ2ZXIpIHJldHVybjtcbiAgaWYgKCFlbGVtZW50IHx8ICFzdHlsZU5hbWUpIHJldHVybiBudWxsO1xuICBzdHlsZU5hbWUgPSBjYW1lbENhc2Uoc3R5bGVOYW1lKTtcbiAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgIHN0eWxlTmFtZSA9ICdzdHlsZUZsb2F0JztcbiAgfVxuICB0cnkge1xuICAgIHN3aXRjaCAoc3R5bGVOYW1lKSB7XG4gICAgICBjYXNlICdvcGFjaXR5JzpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudC5maWx0ZXJzLml0ZW0oJ2FscGhhJykub3BhY2l0eSAvIDEwMDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBlbGVtZW50LnN0eWxlW3N0eWxlTmFtZV0gfHwgZWxlbWVudC5jdXJyZW50U3R5bGUgPyBlbGVtZW50LmN1cnJlbnRTdHlsZVtzdHlsZU5hbWVdIDogbnVsbDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZWxlbWVudC5zdHlsZVtzdHlsZU5hbWVdO1xuICB9XG59IDogZnVuY3Rpb24gKGVsZW1lbnQsIHN0eWxlTmFtZSkge1xuICBpZiAoaXNTZXJ2ZXIpIHJldHVybjtcbiAgaWYgKCFlbGVtZW50IHx8ICFzdHlsZU5hbWUpIHJldHVybiBudWxsO1xuICBzdHlsZU5hbWUgPSBjYW1lbENhc2Uoc3R5bGVOYW1lKTtcbiAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgIHN0eWxlTmFtZSA9ICdjc3NGbG9hdCc7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIgY29tcHV0ZWQgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICcnKTtcbiAgICByZXR1cm4gZWxlbWVudC5zdHlsZVtzdHlsZU5hbWVdIHx8IGNvbXB1dGVkID8gY29tcHV0ZWRbc3R5bGVOYW1lXSA6IG51bGw7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZWxlbWVudC5zdHlsZVtzdHlsZU5hbWVdO1xuICB9XG59O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gc2V0U3R5bGUoZWxlbWVudCwgc3R5bGVOYW1lLCB2YWx1ZSkge1xuICBpZiAoIWVsZW1lbnQgfHwgIXN0eWxlTmFtZSkgcmV0dXJuO1xuXG4gIGlmICgodHlwZW9mIHN0eWxlTmFtZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2Yoc3R5bGVOYW1lKSkgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yICh2YXIgcHJvcCBpbiBzdHlsZU5hbWUpIHtcbiAgICAgIGlmIChzdHlsZU5hbWUuaGFzT3duUHJvcGVydHkocHJvcCkpIHtcbiAgICAgICAgc2V0U3R5bGUoZWxlbWVudCwgcHJvcCwgc3R5bGVOYW1lW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3R5bGVOYW1lID0gY2FtZWxDYXNlKHN0eWxlTmFtZSk7XG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ29wYWNpdHknICYmIGllVmVyc2lvbiA8IDkpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZmlsdGVyID0gaXNOYU4odmFsdWUpID8gJycgOiAnYWxwaGEob3BhY2l0eT0nICsgdmFsdWUgKiAxMDAgKyAnKSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc3R5bGVbc3R5bGVOYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxufTtcblxudmFyIGlzU2Nyb2xsID0gZXhwb3J0cy5pc1Njcm9sbCA9IGZ1bmN0aW9uIGlzU2Nyb2xsKGVsLCB2ZXJ0aWNhbCkge1xuICBpZiAoaXNTZXJ2ZXIpIHJldHVybjtcblxuICB2YXIgZGV0ZXJtaW5lZERpcmVjdGlvbiA9IHZlcnRpY2FsICE9PSBudWxsICYmIHZlcnRpY2FsICE9PSB1bmRlZmluZWQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVybWluZWREaXJlY3Rpb24gPyB2ZXJ0aWNhbCA/IGdldFN0eWxlKGVsLCAnb3ZlcmZsb3cteScpIDogZ2V0U3R5bGUoZWwsICdvdmVyZmxvdy14JykgOiBnZXRTdHlsZShlbCwgJ292ZXJmbG93Jyk7XG5cbiAgcmV0dXJuIG92ZXJmbG93Lm1hdGNoKC8oc2Nyb2xsfGF1dG98b3ZlcmxheSkvKTtcbn07XG5cbnZhciBnZXRTY3JvbGxDb250YWluZXIgPSBleHBvcnRzLmdldFNjcm9sbENvbnRhaW5lciA9IGZ1bmN0aW9uIGdldFNjcm9sbENvbnRhaW5lcihlbCwgdmVydGljYWwpIHtcbiAgaWYgKGlzU2VydmVyKSByZXR1cm47XG5cbiAgdmFyIHBhcmVudCA9IGVsO1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKFt3aW5kb3csIGRvY3VtZW50LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdLmluY2x1ZGVzKHBhcmVudCkpIHtcbiAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfVxuICAgIGlmIChpc1Njcm9sbChwYXJlbnQsIHZlcnRpY2FsKSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gcGFyZW50O1xufTtcblxudmFyIGlzSW5Db250YWluZXIgPSBleHBvcnRzLmlzSW5Db250YWluZXIgPSBmdW5jdGlvbiBpc0luQ29udGFpbmVyKGVsLCBjb250YWluZXIpIHtcbiAgaWYgKGlzU2VydmVyIHx8ICFlbCB8fCAhY29udGFpbmVyKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgY29udGFpbmVyUmVjdCA9IHZvaWQgMDtcblxuICBpZiAoW3dpbmRvdywgZG9jdW1lbnQsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyhjb250YWluZXIpKSB7XG4gICAgY29udGFpbmVyUmVjdCA9IHtcbiAgICAgIHRvcDogMCxcbiAgICAgIHJpZ2h0OiB3aW5kb3cuaW5uZXJXaWR0aCxcbiAgICAgIGJvdHRvbTogd2luZG93LmlubmVySGVpZ2h0LFxuICAgICAgbGVmdDogMFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxuXG4gIHJldHVybiBlbFJlY3QudG9wIDwgY29udGFpbmVyUmVjdC5ib3R0b20gJiYgZWxSZWN0LmJvdHRvbSA+IGNvbnRhaW5lclJlY3QudG9wICYmIGVsUmVjdC5yaWdodCA+IGNvbnRhaW5lclJlY3QubGVmdCAmJiBlbFJlY3QubGVmdCA8IGNvbnRhaW5lclJlY3QucmlnaHQ7XG59OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/dom.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/merge.js":
- /*!****************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/merge.js ***!
- \****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nexports.default = function (target) {\n for (var i = 1, j = arguments.length; i < j; i++) {\n var source = arguments[i] || {};\n for (var prop in source) {\n if (source.hasOwnProperty(prop)) {\n var value = source[prop];\n if (value !== undefined) {\n target[prop] = value;\n }\n }\n }\n }\n\n return target;\n};\n\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2UuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvbWVyZ2UuanM/N2Y0ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMSwgaiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldIHx8IHt9O1xuICAgIGZvciAodmFyIHByb3AgaW4gc291cmNlKSB7XG4gICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KHByb3ApKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvdXJjZVtwcm9wXTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG47Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/merge.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/popper.js":
- /*!*****************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/popper.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version {{version}}\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n//\n// Cross module loader\n// Supported: Node, AMD, Browser globals\n//\n;(function (root, factory) {\n if (true) {\n // AMD. Register as an anonymous module.\n !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else {}\n})(undefined, function () {\n\n 'use strict';\n\n var root = window;\n\n // default options\n var DEFAULTS = {\n // placement of the popper\n placement: 'bottom',\n\n gpuAcceleration: true,\n\n // shift popper from its origin by the given amount of pixels (can be negative)\n offset: 0,\n\n // the element which will act as boundary of the popper\n boundariesElement: 'viewport',\n\n // amount of pixel used to define a minimum distance between the boundaries and the popper\n boundariesPadding: 5,\n\n // popper will try to prevent overflow following this order,\n // by default, then, it could overflow on the left and on top of the boundariesElement\n preventOverflowOrder: ['left', 'right', 'top', 'bottom'],\n\n // the behavior used by flip to change the placement of the popper\n flipBehavior: 'flip',\n\n arrowElement: '[x-arrow]',\n\n arrowOffset: 0,\n\n // list of functions used to modify the offsets before they are applied to the popper\n modifiers: ['shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle'],\n\n modifiersIgnored: [],\n\n forceAbsolute: false\n };\n\n /**\n * Create a new Popper.js instance\n * @constructor Popper\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement|Object} popper\n * The HTML element used as popper, or a configuration used to generate the popper.\n * @param {String} [popper.tagName='div'] The tag name of the generated popper.\n * @param {Array} [popper.classNames=['popper']] Array of classes to apply to the generated popper.\n * @param {Array} [popper.attributes] Array of attributes to apply, specify `attr:value` to assign a value to it.\n * @param {HTMLElement|String} [popper.parent=window.document.body] The parent element, given as HTMLElement or as query string.\n * @param {String} [popper.content=''] The content of the popper, it can be text, html, or node; if it is not text, set `contentType` to `html` or `node`.\n * @param {String} [popper.contentType='text'] If `html`, the `content` will be parsed as HTML. If `node`, it will be appended as-is.\n * @param {String} [popper.arrowTagName='div'] Same as `popper.tagName` but for the arrow element.\n * @param {Array} [popper.arrowClassNames='popper__arrow'] Same as `popper.classNames` but for the arrow element.\n * @param {String} [popper.arrowAttributes=['x-arrow']] Same as `popper.attributes` but for the arrow element.\n * @param {Object} options\n * @param {String} [options.placement=bottom]\n * Placement of the popper accepted values: `top(-start, -end), right(-start, -end), bottom(-start, -right),\n * left(-start, -end)`\n *\n * @param {HTMLElement|String} [options.arrowElement='[x-arrow]']\n * The DOM Node used as arrow for the popper, or a CSS selector used to get the DOM node. It must be child of\n * its parent Popper. Popper.js will apply to the given element the style required to align the arrow with its\n * reference element.\n * By default, it will look for a child node of the popper with the `x-arrow` attribute.\n *\n * @param {Boolean} [options.gpuAcceleration=true]\n * When this property is set to true, the popper position will be applied using CSS3 translate3d, allowing the\n * browser to use the GPU to accelerate the rendering.\n * If set to false, the popper will be placed using `top` and `left` properties, not using the GPU.\n *\n * @param {Number} [options.offset=0]\n * Amount of pixels the popper will be shifted (can be negative).\n *\n * @param {String|Element} [options.boundariesElement='viewport']\n * The element which will define the boundaries of the popper position, the popper will never be placed outside\n * of the defined boundaries (except if `keepTogether` is enabled)\n *\n * @param {Number} [options.boundariesPadding=5]\n * Additional padding for the boundaries\n *\n * @param {Array} [options.preventOverflowOrder=['left', 'right', 'top', 'bottom']]\n * Order used when Popper.js tries to avoid overflows from the boundaries, they will be checked in order,\n * this means that the last ones will never overflow\n *\n * @param {String|Array} [options.flipBehavior='flip']\n * The behavior used by the `flip` modifier to change the placement of the popper when the latter is trying to\n * overlap its reference element. Defining `flip` as value, the placement will be flipped on\n * its axis (`right - left`, `top - bottom`).\n * You can even pass an array of placements (eg: `['right', 'left', 'top']` ) to manually specify\n * how alter the placement when a flip is needed. (eg. in the above example, it would first flip from right to left,\n * then, if even in its new placement, the popper is overlapping its reference element, it will be moved to top)\n *\n * @param {Array} [options.modifiers=[ 'shift', 'offset', 'preventOverflow', 'keepTogether', 'arrow', 'flip', 'applyStyle']]\n * List of functions used to modify the data before they are applied to the popper, add your custom functions\n * to this array to edit the offsets and placement.\n * The function should reflect the @params and @returns of preventOverflow\n *\n * @param {Array} [options.modifiersIgnored=[]]\n * Put here any built-in modifier name you want to exclude from the modifiers list\n * The function should reflect the @params and @returns of preventOverflow\n *\n * @param {Boolean} [options.removeOnDestroy=false]\n * Set to true if you want to automatically remove the popper when you call the `destroy` method.\n */\n function Popper(reference, popper, options) {\n this._reference = reference.jquery ? reference[0] : reference;\n this.state = {};\n\n // if the popper variable is a configuration object, parse it to generate an HTMLElement\n // generate a default popper if is not defined\n var isNotDefined = typeof popper === 'undefined' || popper === null;\n var isConfig = popper && Object.prototype.toString.call(popper) === '[object Object]';\n if (isNotDefined || isConfig) {\n this._popper = this.parse(isConfig ? popper : {});\n }\n // otherwise, use the given HTMLElement as popper\n else {\n this._popper = popper.jquery ? popper[0] : popper;\n }\n\n // with {} we create a new object with the options inside it\n this._options = Object.assign({}, DEFAULTS, options);\n\n // refactoring modifiers' list\n this._options.modifiers = this._options.modifiers.map(function (modifier) {\n // remove ignored modifiers\n if (this._options.modifiersIgnored.indexOf(modifier) !== -1) return;\n\n // set the x-placement attribute before everything else because it could be used to add margins to the popper\n // margins needs to be calculated to get the correct popper offsets\n if (modifier === 'applyStyle') {\n this._popper.setAttribute('x-placement', this._options.placement);\n }\n\n // return predefined modifier identified by string or keep the custom one\n return this.modifiers[modifier] || modifier;\n }.bind(this));\n\n // make sure to apply the popper position before any computation\n this.state.position = this._getPosition(this._popper, this._reference);\n setStyle(this._popper, { position: this.state.position, top: 0 });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n // setup event listeners, they will take care of update the position in specific situations\n this._setupEventListeners();\n return this;\n }\n\n //\n // Methods\n //\n /**\n * Destroy the popper\n * @method\n * @memberof Popper\n */\n Popper.prototype.destroy = function () {\n this._popper.removeAttribute('x-placement');\n this._popper.style.left = '';\n this._popper.style.position = '';\n this._popper.style.top = '';\n this._popper.style[getSupportedPropertyName('transform')] = '';\n this._removeEventListeners();\n\n // remove the popper if user explicity asked for the deletion on destroy\n if (this._options.removeOnDestroy) {\n this._popper.remove();\n }\n return this;\n };\n\n /**\n * Updates the position of the popper, computing the new offsets and applying the new style\n * @method\n * @memberof Popper\n */\n Popper.prototype.update = function () {\n var data = { instance: this, styles: {} };\n\n // store placement inside the data object, modifiers will be able to edit `placement` if needed\n // and refer to _originalPlacement to know the original value\n data.placement = this._options.placement;\n data._originalPlacement = this._options.placement;\n\n // compute the popper and reference offsets and put them inside data.offsets\n data.offsets = this._getOffsets(this._popper, this._reference, data.placement);\n\n // get boundaries\n data.boundaries = this._getBoundaries(data, this._options.boundariesPadding, this._options.boundariesElement);\n\n data = this.runModifiers(data, this._options.modifiers);\n\n if (typeof this.state.updateCallback === 'function') {\n this.state.updateCallback(data);\n }\n };\n\n /**\n * If a function is passed, it will be executed after the initialization of popper with as first argument the Popper instance.\n * @method\n * @memberof Popper\n * @param {Function} callback\n */\n Popper.prototype.onCreate = function (callback) {\n // the createCallbacks return as first argument the popper instance\n callback(this);\n return this;\n };\n\n /**\n * If a function is passed, it will be executed after each update of popper with as first argument the set of coordinates and informations\n * used to style popper and its arrow.\n * NOTE: it doesn't get fired on the first call of the `Popper.update()` method inside the `Popper` constructor!\n * @method\n * @memberof Popper\n * @param {Function} callback\n */\n Popper.prototype.onUpdate = function (callback) {\n this.state.updateCallback = callback;\n return this;\n };\n\n /**\n * Helper used to generate poppers from a configuration file\n * @method\n * @memberof Popper\n * @param config {Object} configuration\n * @returns {HTMLElement} popper\n */\n Popper.prototype.parse = function (config) {\n var defaultConfig = {\n tagName: 'div',\n classNames: ['popper'],\n attributes: [],\n parent: root.document.body,\n content: '',\n contentType: 'text',\n arrowTagName: 'div',\n arrowClassNames: ['popper__arrow'],\n arrowAttributes: ['x-arrow']\n };\n config = Object.assign({}, defaultConfig, config);\n\n var d = root.document;\n\n var popper = d.createElement(config.tagName);\n addClassNames(popper, config.classNames);\n addAttributes(popper, config.attributes);\n if (config.contentType === 'node') {\n popper.appendChild(config.content.jquery ? config.content[0] : config.content);\n } else if (config.contentType === 'html') {\n popper.innerHTML = config.content;\n } else {\n popper.textContent = config.content;\n }\n\n if (config.arrowTagName) {\n var arrow = d.createElement(config.arrowTagName);\n addClassNames(arrow, config.arrowClassNames);\n addAttributes(arrow, config.arrowAttributes);\n popper.appendChild(arrow);\n }\n\n var parent = config.parent.jquery ? config.parent[0] : config.parent;\n\n // if the given parent is a string, use it to match an element\n // if more than one element is matched, the first one will be used as parent\n // if no elements are matched, the script will throw an error\n if (typeof parent === 'string') {\n parent = d.querySelectorAll(config.parent);\n if (parent.length > 1) {\n console.warn('WARNING: the given `parent` query(' + config.parent + ') matched more than one element, the first one will be used');\n }\n if (parent.length === 0) {\n throw 'ERROR: the given `parent` doesn\\'t exists!';\n }\n parent = parent[0];\n }\n // if the given parent is a DOM nodes list or an array of nodes with more than one element,\n // the first one will be used as parent\n if (parent.length > 1 && parent instanceof Element === false) {\n console.warn('WARNING: you have passed as parent a list of elements, the first one will be used');\n parent = parent[0];\n }\n\n // append the generated popper to its parent\n parent.appendChild(popper);\n\n return popper;\n\n /**\n * Adds class names to the given element\n * @function\n * @ignore\n * @param {HTMLElement} target\n * @param {Array} classes\n */\n function addClassNames(element, classNames) {\n classNames.forEach(function (className) {\n element.classList.add(className);\n });\n }\n\n /**\n * Adds attributes to the given element\n * @function\n * @ignore\n * @param {HTMLElement} target\n * @param {Array} attributes\n * @example\n * addAttributes(element, [ 'data-info:foobar' ]);\n */\n function addAttributes(element, attributes) {\n attributes.forEach(function (attribute) {\n element.setAttribute(attribute.split(':')[0], attribute.split(':')[1] || '');\n });\n }\n };\n\n /**\n * Helper used to get the position which will be applied to the popper\n * @method\n * @memberof Popper\n * @param config {HTMLElement} popper element\n * @param reference {HTMLElement} reference element\n * @returns {String} position\n */\n Popper.prototype._getPosition = function (popper, reference) {\n var container = getOffsetParent(reference);\n\n if (this._options.forceAbsolute) {\n return 'absolute';\n }\n\n // Decide if the popper will be fixed\n // If the reference element is inside a fixed context, the popper will be fixed as well to allow them to scroll together\n var isParentFixed = isFixed(reference, container);\n return isParentFixed ? 'fixed' : 'absolute';\n };\n\n /**\n * Get offsets to the popper\n * @method\n * @memberof Popper\n * @access private\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\n Popper.prototype._getOffsets = function (popper, reference, placement) {\n placement = placement.split('-')[0];\n var popperOffsets = {};\n\n popperOffsets.position = this.state.position;\n var isParentFixed = popperOffsets.position === 'fixed';\n\n //\n // Get reference element position\n //\n var referenceOffsets = getOffsetRectRelativeToCustomParent(reference, getOffsetParent(popper), isParentFixed);\n\n //\n // Get popper sizes\n //\n var popperRect = getOuterSizes(popper);\n\n //\n // Compute offsets of popper\n //\n\n // depending by the popper placement we have to compute its offsets slightly differently\n if (['right', 'left'].indexOf(placement) !== -1) {\n popperOffsets.top = referenceOffsets.top + referenceOffsets.height / 2 - popperRect.height / 2;\n if (placement === 'left') {\n popperOffsets.left = referenceOffsets.left - popperRect.width;\n } else {\n popperOffsets.left = referenceOffsets.right;\n }\n } else {\n popperOffsets.left = referenceOffsets.left + referenceOffsets.width / 2 - popperRect.width / 2;\n if (placement === 'top') {\n popperOffsets.top = referenceOffsets.top - popperRect.height;\n } else {\n popperOffsets.top = referenceOffsets.bottom;\n }\n }\n\n // Add width and height to our offsets object\n popperOffsets.width = popperRect.width;\n popperOffsets.height = popperRect.height;\n\n return {\n popper: popperOffsets,\n reference: referenceOffsets\n };\n };\n\n /**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper\n * @access private\n */\n Popper.prototype._setupEventListeners = function () {\n // NOTE: 1 DOM access here\n this.state.updateBound = this.update.bind(this);\n root.addEventListener('resize', this.state.updateBound);\n // if the boundariesElement is window we don't need to listen for the scroll event\n if (this._options.boundariesElement !== 'window') {\n var target = getScrollParent(this._reference);\n // here it could be both `body` or `documentElement` thanks to Firefox, we then check both\n if (target === root.document.body || target === root.document.documentElement) {\n target = root;\n }\n target.addEventListener('scroll', this.state.updateBound);\n this.state.scrollTarget = target;\n }\n };\n\n /**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper\n * @access private\n */\n Popper.prototype._removeEventListeners = function () {\n // NOTE: 1 DOM access here\n root.removeEventListener('resize', this.state.updateBound);\n if (this._options.boundariesElement !== 'window' && this.state.scrollTarget) {\n this.state.scrollTarget.removeEventListener('scroll', this.state.updateBound);\n this.state.scrollTarget = null;\n }\n this.state.updateBound = null;\n };\n\n /**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper\n * @access private\n * @param {Object} data - Object containing the property \"offsets\" generated by `_getOffsets`\n * @param {Number} padding - Boundaries padding\n * @param {Element} boundariesElement - Element used to define the boundaries\n * @returns {Object} Coordinates of the boundaries\n */\n Popper.prototype._getBoundaries = function (data, padding, boundariesElement) {\n // NOTE: 1 DOM access here\n var boundaries = {};\n var width, height;\n if (boundariesElement === 'window') {\n var body = root.document.body,\n html = root.document.documentElement;\n\n height = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n width = Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth);\n\n boundaries = {\n top: 0,\n right: width,\n bottom: height,\n left: 0\n };\n } else if (boundariesElement === 'viewport') {\n var offsetParent = getOffsetParent(this._popper);\n var scrollParent = getScrollParent(this._popper);\n var offsetParentRect = getOffsetRect(offsetParent);\n\n // Thanks the fucking native API, `document.body.scrollTop` & `document.documentElement.scrollTop`\n var getScrollTopValue = function getScrollTopValue(element) {\n return element == document.body ? Math.max(document.documentElement.scrollTop, document.body.scrollTop) : element.scrollTop;\n };\n var getScrollLeftValue = function getScrollLeftValue(element) {\n return element == document.body ? Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) : element.scrollLeft;\n };\n\n // if the popper is fixed we don't have to substract scrolling from the boundaries\n var scrollTop = data.offsets.popper.position === 'fixed' ? 0 : getScrollTopValue(scrollParent);\n var scrollLeft = data.offsets.popper.position === 'fixed' ? 0 : getScrollLeftValue(scrollParent);\n\n boundaries = {\n top: 0 - (offsetParentRect.top - scrollTop),\n right: root.document.documentElement.clientWidth - (offsetParentRect.left - scrollLeft),\n bottom: root.document.documentElement.clientHeight - (offsetParentRect.top - scrollTop),\n left: 0 - (offsetParentRect.left - scrollLeft)\n };\n } else {\n if (getOffsetParent(this._popper) === boundariesElement) {\n boundaries = {\n top: 0,\n left: 0,\n right: boundariesElement.clientWidth,\n bottom: boundariesElement.clientHeight\n };\n } else {\n boundaries = getOffsetRect(boundariesElement);\n }\n }\n boundaries.left += padding;\n boundaries.right -= padding;\n boundaries.top = boundaries.top + padding;\n boundaries.bottom = boundaries.bottom - padding;\n return boundaries;\n };\n\n /**\n * Loop trough the list of modifiers and run them in order, each of them will then edit the data object\n * @method\n * @memberof Popper\n * @access public\n * @param {Object} data\n * @param {Array} modifiers\n * @param {Function} ends\n */\n Popper.prototype.runModifiers = function (data, modifiers, ends) {\n var modifiersToRun = modifiers.slice();\n if (ends !== undefined) {\n modifiersToRun = this._options.modifiers.slice(0, getArrayKeyIndex(this._options.modifiers, ends));\n }\n\n modifiersToRun.forEach(function (modifier) {\n if (isFunction(modifier)) {\n data = modifier.call(this, data);\n }\n }.bind(this));\n\n return data;\n };\n\n /**\n * Helper used to know if the given modifier depends from another one.\n * @method\n * @memberof Popper\n * @param {String} requesting - name of requesting modifier\n * @param {String} requested - name of requested modifier\n * @returns {Boolean}\n */\n Popper.prototype.isModifierRequired = function (requesting, requested) {\n var index = getArrayKeyIndex(this._options.modifiers, requesting);\n return !!this._options.modifiers.slice(0, index).filter(function (modifier) {\n return modifier === requested;\n }).length;\n };\n\n //\n // Modifiers\n //\n\n /**\n * Modifiers list\n * @namespace Popper.modifiers\n * @memberof Popper\n * @type {Object}\n */\n Popper.prototype.modifiers = {};\n\n /**\n * Apply the computed styles to the popper element\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The same data object\n */\n Popper.prototype.modifiers.applyStyle = function (data) {\n // apply the final offsets to the popper\n // NOTE: 1 DOM access here\n var styles = {\n position: data.offsets.popper.position\n };\n\n // round top and left to avoid blurry text\n var left = Math.round(data.offsets.popper.left);\n var top = Math.round(data.offsets.popper.top);\n\n // if gpuAcceleration is set to true and transform is supported, we use `translate3d` to apply the position to the popper\n // we automatically use the supported prefixed version if needed\n var prefixedProperty;\n if (this._options.gpuAcceleration && (prefixedProperty = getSupportedPropertyName('transform'))) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles.top = 0;\n styles.left = 0;\n }\n // othwerise, we use the standard `left` and `top` properties\n else {\n styles.left = left;\n styles.top = top;\n }\n\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n Object.assign(styles, data.styles);\n\n setStyle(this._popper, styles);\n\n // set an attribute which will be useful to style the tooltip (use it to properly position its arrow)\n // NOTE: 1 DOM access here\n this._popper.setAttribute('x-placement', data.placement);\n\n // if the arrow modifier is required and the arrow style has been computed, apply the arrow style\n if (this.isModifierRequired(this.modifiers.applyStyle, this.modifiers.arrow) && data.offsets.arrow) {\n setStyle(data.arrowElement, data.offsets.arrow);\n }\n\n return data;\n };\n\n /**\n * Modifier used to shift the popper on the start or end of its reference element side\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.shift = function (data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftVariation = placement.split('-')[1];\n\n // if shift shiftVariation is specified, run the modifier\n if (shiftVariation) {\n var reference = data.offsets.reference;\n var popper = getPopperClientRect(data.offsets.popper);\n\n var shiftOffsets = {\n y: {\n start: { top: reference.top },\n end: { top: reference.top + reference.height - popper.height }\n },\n x: {\n start: { left: reference.left },\n end: { left: reference.left + reference.width - popper.width }\n }\n };\n\n var axis = ['bottom', 'top'].indexOf(basePlacement) !== -1 ? 'x' : 'y';\n\n data.offsets.popper = Object.assign(popper, shiftOffsets[axis][shiftVariation]);\n }\n\n return data;\n };\n\n /**\n * Modifier used to make sure the popper does not overflows from it's boundaries\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.preventOverflow = function (data) {\n var order = this._options.preventOverflowOrder;\n var popper = getPopperClientRect(data.offsets.popper);\n\n var check = {\n left: function left() {\n var left = popper.left;\n if (popper.left < data.boundaries.left) {\n left = Math.max(popper.left, data.boundaries.left);\n }\n return { left: left };\n },\n right: function right() {\n var left = popper.left;\n if (popper.right > data.boundaries.right) {\n left = Math.min(popper.left, data.boundaries.right - popper.width);\n }\n return { left: left };\n },\n top: function top() {\n var top = popper.top;\n if (popper.top < data.boundaries.top) {\n top = Math.max(popper.top, data.boundaries.top);\n }\n return { top: top };\n },\n bottom: function bottom() {\n var top = popper.top;\n if (popper.bottom > data.boundaries.bottom) {\n top = Math.min(popper.top, data.boundaries.bottom - popper.height);\n }\n return { top: top };\n }\n };\n\n order.forEach(function (direction) {\n data.offsets.popper = Object.assign(popper, check[direction]());\n });\n\n return data;\n };\n\n /**\n * Modifier used to make sure the popper is always near its reference\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.keepTogether = function (data) {\n var popper = getPopperClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var f = Math.floor;\n\n if (popper.right < f(reference.left)) {\n data.offsets.popper.left = f(reference.left) - popper.width;\n }\n if (popper.left > f(reference.right)) {\n data.offsets.popper.left = f(reference.right);\n }\n if (popper.bottom < f(reference.top)) {\n data.offsets.popper.top = f(reference.top) - popper.height;\n }\n if (popper.top > f(reference.bottom)) {\n data.offsets.popper.top = f(reference.bottom);\n }\n\n return data;\n };\n\n /**\n * Modifier used to flip the placement of the popper when the latter is starting overlapping its reference element.\n * Requires the `preventOverflow` modifier before it in order to work.\n * **NOTE:** This modifier will run all its previous modifiers everytime it tries to flip the popper!\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.flip = function (data) {\n // check if preventOverflow is in the list of modifiers before the flip modifier.\n // otherwise flip would not work as expected.\n if (!this.isModifierRequired(this.modifiers.flip, this.modifiers.preventOverflow)) {\n console.warn('WARNING: preventOverflow modifier is required by flip modifier in order to work, be sure to include it before flip!');\n return data;\n }\n\n if (data.flipped && data.placement === data._originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n if (this._options.flipBehavior === 'flip') {\n flipOrder = [placement, placementOpposite];\n } else {\n flipOrder = this._options.flipBehavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = getPopperClientRect(data.offsets.popper);\n\n // this boolean is used to distinguish right and bottom from top and left\n // they need different computations to get flipped\n var a = ['right', 'bottom'].indexOf(placement) !== -1;\n\n // using Math.floor because the reference offsets may contain decimals we are not going to consider here\n if (a && Math.floor(data.offsets.reference[placement]) > Math.floor(popperOffsets[placementOpposite]) || !a && Math.floor(data.offsets.reference[placement]) < Math.floor(popperOffsets[placementOpposite])) {\n // we'll use this boolean to detect any flip loop\n data.flipped = true;\n data.placement = flipOrder[index + 1];\n if (variation) {\n data.placement += '-' + variation;\n }\n data.offsets.popper = this._getOffsets(this._popper, this._reference, data.placement).popper;\n\n data = this.runModifiers(data, this._options.modifiers, this._flip);\n }\n }.bind(this));\n return data;\n };\n\n /**\n * Modifier used to add an offset to the popper, useful if you more granularity positioning your popper.\n * The offsets will shift the popper on the side of its reference element.\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.offset = function (data) {\n var offset = this._options.offset;\n var popper = data.offsets.popper;\n\n if (data.placement.indexOf('left') !== -1) {\n popper.top -= offset;\n } else if (data.placement.indexOf('right') !== -1) {\n popper.top += offset;\n } else if (data.placement.indexOf('top') !== -1) {\n popper.left -= offset;\n } else if (data.placement.indexOf('bottom') !== -1) {\n popper.left += offset;\n }\n return data;\n };\n\n /**\n * Modifier used to move the arrows on the edge of the popper to make sure them are always between the popper and the reference element\n * It will use the CSS outer size of the arrow element to know how many pixels of conjuction are needed\n * @method\n * @memberof Popper.modifiers\n * @argument {Object} data - The data object generated by _update method\n * @returns {Object} The data object, properly modified\n */\n Popper.prototype.modifiers.arrow = function (data) {\n var arrow = this._options.arrowElement;\n var arrowOffset = this._options.arrowOffset;\n\n // if the arrowElement is a string, suppose it's a CSS selector\n if (typeof arrow === 'string') {\n arrow = this._popper.querySelector(arrow);\n }\n\n // if arrow element is not found, don't run the modifier\n if (!arrow) {\n return data;\n }\n\n // the arrow element must be child of its popper\n if (!this._popper.contains(arrow)) {\n console.warn('WARNING: `arrowElement` must be child of its popper element!');\n return data;\n }\n\n // arrow depends on keepTogether in order to work\n if (!this.isModifierRequired(this.modifiers.arrow, this.modifiers.keepTogether)) {\n console.warn('WARNING: keepTogether modifier is required by arrow modifier in order to work, be sure to include it before arrow!');\n return data;\n }\n\n var arrowStyle = {};\n var placement = data.placement.split('-')[0];\n var popper = getPopperClientRect(data.offsets.popper);\n var reference = data.offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var side = isVertical ? 'top' : 'left';\n var translate = isVertical ? 'translateY' : 'translateX';\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowSize = getOuterSizes(arrow)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its reference have enough pixels in conjuction\n //\n\n // top/left side\n if (reference[opSide] - arrowSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowSize);\n }\n // bottom/right side\n if (reference[side] + arrowSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowSize - popper[opSide];\n }\n\n // compute center of the popper\n var center = reference[side] + (arrowOffset || reference[len] / 2 - arrowSize / 2);\n\n var sideValue = center - popper[side];\n\n // prevent arrow from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowSize - 8, sideValue), 8);\n arrowStyle[side] = sideValue;\n arrowStyle[altSide] = ''; // make sure to remove any old style from the arrow\n\n data.offsets.arrow = arrowStyle;\n data.arrowElement = arrow;\n\n return data;\n };\n\n //\n // Helpers\n //\n\n /**\n * Get the outer sizes of the given element (offset size + margins)\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\n function getOuterSizes(element) {\n // NOTE: 1 DOM access here\n var _display = element.style.display,\n _visibility = element.style.visibility;\n element.style.display = 'block';element.style.visibility = 'hidden';\n var calcWidthToForceRepaint = element.offsetWidth;\n\n // original method\n var styles = root.getComputedStyle(element);\n var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);\n var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);\n var result = { width: element.offsetWidth + y, height: element.offsetHeight + x };\n\n // reset element styles\n element.style.display = _display;element.style.visibility = _visibility;\n return result;\n }\n\n /**\n * Get the opposite placement of the given one/\n * @function\n * @ignore\n * @argument {String} placement\n * @returns {String} flipped placement\n */\n function getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n }\n\n /**\n * Given the popper offsets, generate an output similar to getBoundingClientRect\n * @function\n * @ignore\n * @argument {Object} popperOffsets\n * @returns {Object} ClientRect like output\n */\n function getPopperClientRect(popperOffsets) {\n var offsets = Object.assign({}, popperOffsets);\n offsets.right = offsets.left + offsets.width;\n offsets.bottom = offsets.top + offsets.height;\n return offsets;\n }\n\n /**\n * Given an array and the key to find, returns its index\n * @function\n * @ignore\n * @argument {Array} arr\n * @argument keyToFind\n * @returns index or null\n */\n function getArrayKeyIndex(arr, keyToFind) {\n var i = 0,\n key;\n for (key in arr) {\n if (arr[key] === keyToFind) {\n return i;\n }\n i++;\n }\n return null;\n }\n\n /**\n * Get CSS computed property of the given element\n * @function\n * @ignore\n * @argument {Eement} element\n * @argument {String} property\n */\n function getStyleComputedProperty(element, property) {\n // NOTE: 1 DOM access here\n var css = root.getComputedStyle(element, null);\n return css[property];\n }\n\n /**\n * Returns the offset parent of the given element\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n function getOffsetParent(element) {\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent;\n return offsetParent === root.document.body || !offsetParent ? root.document.documentElement : offsetParent;\n }\n\n /**\n * Returns the scrolling parent of the given element\n * @function\n * @ignore\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n function getScrollParent(element) {\n var parent = element.parentNode;\n\n if (!parent) {\n return element;\n }\n\n if (parent === root.document) {\n // Firefox puts the scrollTOp value on `documentElement` instead of `body`, we then check which of them is\n // greater than 0 and return the proper element\n if (root.document.body.scrollTop || root.document.body.scrollLeft) {\n return root.document.body;\n } else {\n return root.document.documentElement;\n }\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n if (['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow')) !== -1 || ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-x')) !== -1 || ['scroll', 'auto'].indexOf(getStyleComputedProperty(parent, 'overflow-y')) !== -1) {\n // If the detected scrollParent is body, we perform an additional check on its parentNode\n // in this way we'll get body if the browser is Chrome-ish, or documentElement otherwise\n // fixes issue #65\n return parent;\n }\n return getScrollParent(element.parentNode);\n }\n\n /**\n * Check if the given element is fixed or is inside a fixed parent\n * @function\n * @ignore\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\n function isFixed(element) {\n if (element === root.document.body) {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n return element.parentNode ? isFixed(element.parentNode) : element;\n }\n\n /**\n * Set the style to the given popper\n * @function\n * @ignore\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles - Object with a list of properties and values which will be applied to the element\n */\n function setStyle(element, styles) {\n function is_numeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n }\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && is_numeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n }\n\n /**\n * Check if the given variable is a function\n * @function\n * @ignore\n * @argument {*} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\n function isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n }\n\n /**\n * Get the position of the given element, relative to its offset parent\n * @function\n * @ignore\n * @param {Element} element\n * @return {Object} position - Coordinates of the element and its `scrollTop`\n */\n function getOffsetRect(element) {\n var elementRect = {\n width: element.offsetWidth,\n height: element.offsetHeight,\n left: element.offsetLeft,\n top: element.offsetTop\n };\n\n elementRect.right = elementRect.left + elementRect.width;\n elementRect.bottom = elementRect.top + elementRect.height;\n\n // position\n return elementRect;\n }\n\n /**\n * Get bounding client rect of given element\n * @function\n * @ignore\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\n function getBoundingClientRect(element) {\n var rect = element.getBoundingClientRect();\n\n // whether the IE version is lower than 11\n var isIE = navigator.userAgent.indexOf(\"MSIE\") != -1;\n\n // fix ie document bounding top always 0 bug\n var rectTop = isIE && element.tagName === 'HTML' ? -element.scrollTop : rect.top;\n\n return {\n left: rect.left,\n top: rectTop,\n right: rect.right,\n bottom: rect.bottom,\n width: rect.right - rect.left,\n height: rect.bottom - rectTop\n };\n }\n\n /**\n * Given an element and one of its parents, return the offset\n * @function\n * @ignore\n * @param {HTMLElement} element\n * @param {HTMLElement} parent\n * @return {Object} rect\n */\n function getOffsetRectRelativeToCustomParent(element, parent, fixed) {\n var elementRect = getBoundingClientRect(element);\n var parentRect = getBoundingClientRect(parent);\n\n if (fixed) {\n var scrollParent = getScrollParent(parent);\n parentRect.top += scrollParent.scrollTop;\n parentRect.bottom += scrollParent.scrollTop;\n parentRect.left += scrollParent.scrollLeft;\n parentRect.right += scrollParent.scrollLeft;\n }\n\n var rect = {\n top: elementRect.top - parentRect.top,\n left: elementRect.left - parentRect.left,\n bottom: elementRect.top - parentRect.top + elementRect.height,\n right: elementRect.left - parentRect.left + elementRect.width,\n width: elementRect.width,\n height: elementRect.height\n };\n return rect;\n }\n\n /**\n * Get the prefixed supported property name\n * @function\n * @ignore\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase)\n */\n function getSupportedPropertyName(property) {\n var prefixes = ['', 'ms', 'webkit', 'moz', 'o'];\n\n for (var i = 0; i < prefixes.length; i++) {\n var toCheck = prefixes[i] ? prefixes[i] + property.charAt(0).toUpperCase() + property.slice(1) : property;\n if (typeof root.document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n }\n\n /**\n * The Object.assign() method is used to copy the values of all enumerable own properties from one or more source\n * objects to a target object. It will return the target object.\n * This polyfill doesn't support symbol properties, since ES5 doesn't have symbols anyway\n * Source: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @function\n * @ignore\n */\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: function value(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n nextSource = Object(nextSource);\n\n var keysArray = Object.keys(nextSource);\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n }\n });\n }\n\n return Popper;\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wcGVyLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3BvcHBlci5qcz82MTY3Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG4vKipcbiAqIEBmaWxlT3ZlcnZpZXcgS2lja2FzcyBsaWJyYXJ5IHRvIGNyZWF0ZSBhbmQgcGxhY2UgcG9wcGVycyBuZWFyIHRoZWlyIHJlZmVyZW5jZSBlbGVtZW50cy5cbiAqIEB2ZXJzaW9uIHt7dmVyc2lvbn19XG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2IEZlZGVyaWNvIFppdm9sbyBhbmQgY29udHJpYnV0b3JzXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4vL1xuLy8gQ3Jvc3MgbW9kdWxlIGxvYWRlclxuLy8gU3VwcG9ydGVkOiBOb2RlLCBBTUQsIEJyb3dzZXIgZ2xvYmFsc1xuLy9cbjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICAgICAgZGVmaW5lKGZhY3RvcnkpO1xuICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBtb2R1bGUgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG1vZHVsZSkpID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICAvLyBOb2RlLiBEb2VzIG5vdCB3b3JrIHdpdGggc3RyaWN0IENvbW1vbkpTLCBidXRcbiAgICAgICAgLy8gb25seSBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMsXG4gICAgICAgIC8vIGxpa2UgTm9kZS5cbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzIChyb290IGlzIHdpbmRvdylcbiAgICAgICAgcm9vdC5Qb3BwZXIgPSBmYWN0b3J5KCk7XG4gICAgfVxufSkodW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgcm9vdCA9IHdpbmRvdztcblxuICAgIC8vIGRlZmF1bHQgb3B0aW9uc1xuICAgIHZhciBERUZBVUxUUyA9IHtcbiAgICAgICAgLy8gcGxhY2VtZW50IG9mIHRoZSBwb3BwZXJcbiAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcblxuICAgICAgICBncHVBY2NlbGVyYXRpb246IHRydWUsXG5cbiAgICAgICAgLy8gc2hpZnQgcG9wcGVyIGZyb20gaXRzIG9yaWdpbiBieSB0aGUgZ2l2ZW4gYW1vdW50IG9mIHBpeGVscyAoY2FuIGJlIG5lZ2F0aXZlKVxuICAgICAgICBvZmZzZXQ6IDAsXG5cbiAgICAgICAgLy8gdGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBhY3QgYXMgYm91bmRhcnkgb2YgdGhlIHBvcHBlclxuICAgICAgICBib3VuZGFyaWVzRWxlbWVudDogJ3ZpZXdwb3J0JyxcblxuICAgICAgICAvLyBhbW91bnQgb2YgcGl4ZWwgdXNlZCB0byBkZWZpbmUgYSBtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdGhlIGJvdW5kYXJpZXMgYW5kIHRoZSBwb3BwZXJcbiAgICAgICAgYm91bmRhcmllc1BhZGRpbmc6IDUsXG5cbiAgICAgICAgLy8gcG9wcGVyIHdpbGwgdHJ5IHRvIHByZXZlbnQgb3ZlcmZsb3cgZm9sbG93aW5nIHRoaXMgb3JkZXIsXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQsIHRoZW4sIGl0IGNvdWxkIG92ZXJmbG93IG9uIHRoZSBsZWZ0IGFuZCBvbiB0b3Agb2YgdGhlIGJvdW5kYXJpZXNFbGVtZW50XG4gICAgICAgIHByZXZlbnRPdmVyZmxvd09yZGVyOiBbJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddLFxuXG4gICAgICAgIC8vIHRoZSBiZWhhdmlvciB1c2VkIGJ5IGZsaXAgdG8gY2hhbmdlIHRoZSBwbGFjZW1lbnQgb2YgdGhlIHBvcHBlclxuICAgICAgICBmbGlwQmVoYXZpb3I6ICdmbGlwJyxcblxuICAgICAgICBhcnJvd0VsZW1lbnQ6ICdbeC1hcnJvd10nLFxuXG4gICAgICAgIGFycm93T2Zmc2V0OiAwLFxuXG4gICAgICAgIC8vIGxpc3Qgb2YgZnVuY3Rpb25zIHVzZWQgdG8gbW9kaWZ5IHRoZSBvZmZzZXRzIGJlZm9yZSB0aGV5IGFyZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXJcbiAgICAgICAgbW9kaWZpZXJzOiBbJ3NoaWZ0JywgJ29mZnNldCcsICdwcmV2ZW50T3ZlcmZsb3cnLCAna2VlcFRvZ2V0aGVyJywgJ2Fycm93JywgJ2ZsaXAnLCAnYXBwbHlTdHlsZSddLFxuXG4gICAgICAgIG1vZGlmaWVyc0lnbm9yZWQ6IFtdLFxuXG4gICAgICAgIGZvcmNlQWJzb2x1dGU6IGZhbHNlXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBQb3BwZXIuanMgaW5zdGFuY2VcbiAgICAgKiBAY29uc3RydWN0b3IgUG9wcGVyXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSBlbGVtZW50IHVzZWQgdG8gcG9zaXRpb24gdGhlIHBvcHBlclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8T2JqZWN0fSBwb3BwZXJcbiAgICAgKiAgICAgIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXIsIG9yIGEgY29uZmlndXJhdGlvbiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwb3BwZXIuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtwb3BwZXIudGFnTmFtZT0nZGl2J10gVGhlIHRhZyBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgcG9wcGVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwb3BwZXIuY2xhc3NOYW1lcz1bJ3BvcHBlciddXSBBcnJheSBvZiBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSBnZW5lcmF0ZWQgcG9wcGVyLlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtwb3BwZXIuYXR0cmlidXRlc10gQXJyYXkgb2YgYXR0cmlidXRlcyB0byBhcHBseSwgc3BlY2lmeSBgYXR0cjp2YWx1ZWAgdG8gYXNzaWduIGEgdmFsdWUgdG8gaXQuXG4gICAgICogQHBhcmFtIHtIVE1MRWxlbWVudHxTdHJpbmd9IFtwb3BwZXIucGFyZW50PXdpbmRvdy5kb2N1bWVudC5ib2R5XSBUaGUgcGFyZW50IGVsZW1lbnQsIGdpdmVuIGFzIEhUTUxFbGVtZW50IG9yIGFzIHF1ZXJ5IHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BvcHBlci5jb250ZW50PScnXSBUaGUgY29udGVudCBvZiB0aGUgcG9wcGVyLCBpdCBjYW4gYmUgdGV4dCwgaHRtbCwgb3Igbm9kZTsgaWYgaXQgaXMgbm90IHRleHQsIHNldCBgY29udGVudFR5cGVgIHRvIGBodG1sYCBvciBgbm9kZWAuXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtwb3BwZXIuY29udGVudFR5cGU9J3RleHQnXSBJZiBgaHRtbGAsIHRoZSBgY29udGVudGAgd2lsbCBiZSBwYXJzZWQgYXMgSFRNTC4gSWYgYG5vZGVgLCBpdCB3aWxsIGJlIGFwcGVuZGVkIGFzLWlzLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBbcG9wcGVyLmFycm93VGFnTmFtZT0nZGl2J10gU2FtZSBhcyBgcG9wcGVyLnRhZ05hbWVgIGJ1dCBmb3IgdGhlIGFycm93IGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtBcnJheX0gW3BvcHBlci5hcnJvd0NsYXNzTmFtZXM9J3BvcHBlcl9fYXJyb3cnXSBTYW1lIGFzIGBwb3BwZXIuY2xhc3NOYW1lc2AgYnV0IGZvciB0aGUgYXJyb3cgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gW3BvcHBlci5hcnJvd0F0dHJpYnV0ZXM9Wyd4LWFycm93J11dIFNhbWUgYXMgYHBvcHBlci5hdHRyaWJ1dGVzYCBidXQgZm9yIHRoZSBhcnJvdyBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFtvcHRpb25zLnBsYWNlbWVudD1ib3R0b21dXG4gICAgICogICAgICBQbGFjZW1lbnQgb2YgdGhlIHBvcHBlciBhY2NlcHRlZCB2YWx1ZXM6IGB0b3AoLXN0YXJ0LCAtZW5kKSwgcmlnaHQoLXN0YXJ0LCAtZW5kKSwgYm90dG9tKC1zdGFydCwgLXJpZ2h0KSxcbiAgICAgKiAgICAgIGxlZnQoLXN0YXJ0LCAtZW5kKWBcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U3RyaW5nfSBbb3B0aW9ucy5hcnJvd0VsZW1lbnQ9J1t4LWFycm93XSddXG4gICAgICogICAgICBUaGUgRE9NIE5vZGUgdXNlZCBhcyBhcnJvdyBmb3IgdGhlIHBvcHBlciwgb3IgYSBDU1Mgc2VsZWN0b3IgdXNlZCB0byBnZXQgdGhlIERPTSBub2RlLiBJdCBtdXN0IGJlIGNoaWxkIG9mXG4gICAgICogICAgICBpdHMgcGFyZW50IFBvcHBlci4gUG9wcGVyLmpzIHdpbGwgYXBwbHkgdG8gdGhlIGdpdmVuIGVsZW1lbnQgdGhlIHN0eWxlIHJlcXVpcmVkIHRvIGFsaWduIHRoZSBhcnJvdyB3aXRoIGl0c1xuICAgICAqICAgICAgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAgICogICAgICBCeSBkZWZhdWx0LCBpdCB3aWxsIGxvb2sgZm9yIGEgY2hpbGQgbm9kZSBvZiB0aGUgcG9wcGVyIHdpdGggdGhlIGB4LWFycm93YCBhdHRyaWJ1dGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmdwdUFjY2VsZXJhdGlvbj10cnVlXVxuICAgICAqICAgICAgV2hlbiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byB0cnVlLCB0aGUgcG9wcGVyIHBvc2l0aW9uIHdpbGwgYmUgYXBwbGllZCB1c2luZyBDU1MzIHRyYW5zbGF0ZTNkLCBhbGxvd2luZyB0aGVcbiAgICAgKiAgICAgIGJyb3dzZXIgdG8gdXNlIHRoZSBHUFUgdG8gYWNjZWxlcmF0ZSB0aGUgcmVuZGVyaW5nLlxuICAgICAqICAgICAgSWYgc2V0IHRvIGZhbHNlLCB0aGUgcG9wcGVyIHdpbGwgYmUgcGxhY2VkIHVzaW5nIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllcywgbm90IHVzaW5nIHRoZSBHUFUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMub2Zmc2V0PTBdXG4gICAgICogICAgICBBbW91bnQgb2YgcGl4ZWxzIHRoZSBwb3BwZXIgd2lsbCBiZSBzaGlmdGVkIChjYW4gYmUgbmVnYXRpdmUpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd8RWxlbWVudH0gW29wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQ9J3ZpZXdwb3J0J11cbiAgICAgKiAgICAgIFRoZSBlbGVtZW50IHdoaWNoIHdpbGwgZGVmaW5lIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBwb3BwZXIgcG9zaXRpb24sIHRoZSBwb3BwZXIgd2lsbCBuZXZlciBiZSBwbGFjZWQgb3V0c2lkZVxuICAgICAqICAgICAgb2YgdGhlIGRlZmluZWQgYm91bmRhcmllcyAoZXhjZXB0IGlmIGBrZWVwVG9nZXRoZXJgIGlzIGVuYWJsZWQpXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuYm91bmRhcmllc1BhZGRpbmc9NV1cbiAgICAgKiAgICAgIEFkZGl0aW9uYWwgcGFkZGluZyBmb3IgdGhlIGJvdW5kYXJpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLnByZXZlbnRPdmVyZmxvd09yZGVyPVsnbGVmdCcsICdyaWdodCcsICd0b3AnLCAnYm90dG9tJ11dXG4gICAgICogICAgICBPcmRlciB1c2VkIHdoZW4gUG9wcGVyLmpzIHRyaWVzIHRvIGF2b2lkIG92ZXJmbG93cyBmcm9tIHRoZSBib3VuZGFyaWVzLCB0aGV5IHdpbGwgYmUgY2hlY2tlZCBpbiBvcmRlcixcbiAgICAgKiAgICAgIHRoaXMgbWVhbnMgdGhhdCB0aGUgbGFzdCBvbmVzIHdpbGwgbmV2ZXIgb3ZlcmZsb3dcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fSBbb3B0aW9ucy5mbGlwQmVoYXZpb3I9J2ZsaXAnXVxuICAgICAqICAgICAgVGhlIGJlaGF2aW9yIHVzZWQgYnkgdGhlIGBmbGlwYCBtb2RpZmllciB0byBjaGFuZ2UgdGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyIHdoZW4gdGhlIGxhdHRlciBpcyB0cnlpbmcgdG9cbiAgICAgKiAgICAgIG92ZXJsYXAgaXRzIHJlZmVyZW5jZSBlbGVtZW50LiBEZWZpbmluZyBgZmxpcGAgYXMgdmFsdWUsIHRoZSBwbGFjZW1lbnQgd2lsbCBiZSBmbGlwcGVkIG9uXG4gICAgICogICAgICBpdHMgYXhpcyAoYHJpZ2h0IC0gbGVmdGAsIGB0b3AgLSBib3R0b21gKS5cbiAgICAgKiAgICAgIFlvdSBjYW4gZXZlbiBwYXNzIGFuIGFycmF5IG9mIHBsYWNlbWVudHMgKGVnOiBgWydyaWdodCcsICdsZWZ0JywgJ3RvcCddYCApIHRvIG1hbnVhbGx5IHNwZWNpZnlcbiAgICAgKiAgICAgIGhvdyBhbHRlciB0aGUgcGxhY2VtZW50IHdoZW4gYSBmbGlwIGlzIG5lZWRlZC4gKGVnLiBpbiB0aGUgYWJvdmUgZXhhbXBsZSwgaXQgd291bGQgZmlyc3QgZmxpcCBmcm9tIHJpZ2h0IHRvIGxlZnQsXG4gICAgICogICAgICB0aGVuLCBpZiBldmVuIGluIGl0cyBuZXcgcGxhY2VtZW50LCB0aGUgcG9wcGVyIGlzIG92ZXJsYXBwaW5nIGl0cyByZWZlcmVuY2UgZWxlbWVudCwgaXQgd2lsbCBiZSBtb3ZlZCB0byB0b3ApXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5tb2RpZmllcnM9WyAnc2hpZnQnLCAnb2Zmc2V0JywgJ3ByZXZlbnRPdmVyZmxvdycsICdrZWVwVG9nZXRoZXInLCAnYXJyb3cnLCAnZmxpcCcsICdhcHBseVN0eWxlJ11dXG4gICAgICogICAgICBMaXN0IG9mIGZ1bmN0aW9ucyB1c2VkIHRvIG1vZGlmeSB0aGUgZGF0YSBiZWZvcmUgdGhleSBhcmUgYXBwbGllZCB0byB0aGUgcG9wcGVyLCBhZGQgeW91ciBjdXN0b20gZnVuY3Rpb25zXG4gICAgICogICAgICB0byB0aGlzIGFycmF5IHRvIGVkaXQgdGhlIG9mZnNldHMgYW5kIHBsYWNlbWVudC5cbiAgICAgKiAgICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgcmVmbGVjdCB0aGUgQHBhcmFtcyBhbmQgQHJldHVybnMgb2YgcHJldmVudE92ZXJmbG93XG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBbb3B0aW9ucy5tb2RpZmllcnNJZ25vcmVkPVtdXVxuICAgICAqICAgICAgUHV0IGhlcmUgYW55IGJ1aWx0LWluIG1vZGlmaWVyIG5hbWUgeW91IHdhbnQgdG8gZXhjbHVkZSBmcm9tIHRoZSBtb2RpZmllcnMgbGlzdFxuICAgICAqICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZWZsZWN0IHRoZSBAcGFyYW1zIGFuZCBAcmV0dXJucyBvZiBwcmV2ZW50T3ZlcmZsb3dcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmVtb3ZlT25EZXN0cm95PWZhbHNlXVxuICAgICAqICAgICAgU2V0IHRvIHRydWUgaWYgeW91IHdhbnQgdG8gYXV0b21hdGljYWxseSByZW1vdmUgdGhlIHBvcHBlciB3aGVuIHlvdSBjYWxsIHRoZSBgZGVzdHJveWAgbWV0aG9kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIFBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLl9yZWZlcmVuY2UgPSByZWZlcmVuY2UuanF1ZXJ5ID8gcmVmZXJlbmNlWzBdIDogcmVmZXJlbmNlO1xuICAgICAgICB0aGlzLnN0YXRlID0ge307XG5cbiAgICAgICAgLy8gaWYgdGhlIHBvcHBlciB2YXJpYWJsZSBpcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LCBwYXJzZSBpdCB0byBnZW5lcmF0ZSBhbiBIVE1MRWxlbWVudFxuICAgICAgICAvLyBnZW5lcmF0ZSBhIGRlZmF1bHQgcG9wcGVyIGlmIGlzIG5vdCBkZWZpbmVkXG4gICAgICAgIHZhciBpc05vdERlZmluZWQgPSB0eXBlb2YgcG9wcGVyID09PSAndW5kZWZpbmVkJyB8fCBwb3BwZXIgPT09IG51bGw7XG4gICAgICAgIHZhciBpc0NvbmZpZyA9IHBvcHBlciAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocG9wcGVyKSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG4gICAgICAgIGlmIChpc05vdERlZmluZWQgfHwgaXNDb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcHBlciA9IHRoaXMucGFyc2UoaXNDb25maWcgPyBwb3BwZXIgOiB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3RoZXJ3aXNlLCB1c2UgdGhlIGdpdmVuIEhUTUxFbGVtZW50IGFzIHBvcHBlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3BwZXIgPSBwb3BwZXIuanF1ZXJ5ID8gcG9wcGVyWzBdIDogcG9wcGVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vIHdpdGgge30gd2UgY3JlYXRlIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBvcHRpb25zIGluc2lkZSBpdFxuICAgICAgICB0aGlzLl9vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVFMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIHJlZmFjdG9yaW5nIG1vZGlmaWVycycgbGlzdFxuICAgICAgICB0aGlzLl9vcHRpb25zLm1vZGlmaWVycyA9IHRoaXMuX29wdGlvbnMubW9kaWZpZXJzLm1hcChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBpZ25vcmVkIG1vZGlmaWVyc1xuICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubW9kaWZpZXJzSWdub3JlZC5pbmRleE9mKG1vZGlmaWVyKSAhPT0gLTEpIHJldHVybjtcblxuICAgICAgICAgICAgLy8gc2V0IHRoZSB4LXBsYWNlbWVudCBhdHRyaWJ1dGUgYmVmb3JlIGV2ZXJ5dGhpbmcgZWxzZSBiZWNhdXNlIGl0IGNvdWxkIGJlIHVzZWQgdG8gYWRkIG1hcmdpbnMgdG8gdGhlIHBvcHBlclxuICAgICAgICAgICAgLy8gbWFyZ2lucyBuZWVkcyB0byBiZSBjYWxjdWxhdGVkIHRvIGdldCB0aGUgY29ycmVjdCBwb3BwZXIgb2Zmc2V0c1xuICAgICAgICAgICAgaWYgKG1vZGlmaWVyID09PSAnYXBwbHlTdHlsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHRoaXMuX29wdGlvbnMucGxhY2VtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcmV0dXJuIHByZWRlZmluZWQgbW9kaWZpZXIgaWRlbnRpZmllZCBieSBzdHJpbmcgb3Iga2VlcCB0aGUgY3VzdG9tIG9uZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kaWZpZXJzW21vZGlmaWVyXSB8fCBtb2RpZmllcjtcbiAgICAgICAgfS5iaW5kKHRoaXMpKTtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gYXBwbHkgdGhlIHBvcHBlciBwb3NpdGlvbiBiZWZvcmUgYW55IGNvbXB1dGF0aW9uXG4gICAgICAgIHRoaXMuc3RhdGUucG9zaXRpb24gPSB0aGlzLl9nZXRQb3NpdGlvbih0aGlzLl9wb3BwZXIsIHRoaXMuX3JlZmVyZW5jZSk7XG4gICAgICAgIHNldFN0eWxlKHRoaXMuX3BvcHBlciwgeyBwb3NpdGlvbjogdGhpcy5zdGF0ZS5wb3NpdGlvbiwgdG9wOiAwIH0pO1xuXG4gICAgICAgIC8vIGZpcmUgdGhlIGZpcnN0IHVwZGF0ZSB0byBwb3NpdGlvbiB0aGUgcG9wcGVyIGluIHRoZSByaWdodCBwbGFjZVxuICAgICAgICB0aGlzLnVwZGF0ZSgpO1xuXG4gICAgICAgIC8vIHNldHVwIGV2ZW50IGxpc3RlbmVycywgdGhleSB3aWxsIHRha2UgY2FyZSBvZiB1cGRhdGUgdGhlIHBvc2l0aW9uIGluIHNwZWNpZmljIHNpdHVhdGlvbnNcbiAgICAgICAgdGhpcy5fc2V0dXBFdmVudExpc3RlbmVycygpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE1ldGhvZHNcbiAgICAvL1xuICAgIC8qKlxuICAgICAqIERlc3Ryb3kgdGhlIHBvcHBlclxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCd4LXBsYWNlbWVudCcpO1xuICAgICAgICB0aGlzLl9wb3BwZXIuc3R5bGUubGVmdCA9ICcnO1xuICAgICAgICB0aGlzLl9wb3BwZXIuc3R5bGUucG9zaXRpb24gPSAnJztcbiAgICAgICAgdGhpcy5fcG9wcGVyLnN0eWxlLnRvcCA9ICcnO1xuICAgICAgICB0aGlzLl9wb3BwZXIuc3R5bGVbZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKV0gPSAnJztcbiAgICAgICAgdGhpcy5fcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgICAgICAvLyByZW1vdmUgdGhlIHBvcHBlciBpZiB1c2VyIGV4cGxpY2l0eSBhc2tlZCBmb3IgdGhlIGRlbGV0aW9uIG9uIGRlc3Ryb3lcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMucmVtb3ZlT25EZXN0cm95KSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BwZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIsIGNvbXB1dGluZyB0aGUgbmV3IG9mZnNldHMgYW5kIGFwcGx5aW5nIHRoZSBuZXcgc3R5bGVcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHsgaW5zdGFuY2U6IHRoaXMsIHN0eWxlczoge30gfTtcblxuICAgICAgICAvLyBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCwgbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAgICAgICAvLyBhbmQgcmVmZXIgdG8gX29yaWdpbmFsUGxhY2VtZW50IHRvIGtub3cgdGhlIG9yaWdpbmFsIHZhbHVlXG4gICAgICAgIGRhdGEucGxhY2VtZW50ID0gdGhpcy5fb3B0aW9ucy5wbGFjZW1lbnQ7XG4gICAgICAgIGRhdGEuX29yaWdpbmFsUGxhY2VtZW50ID0gdGhpcy5fb3B0aW9ucy5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gY29tcHV0ZSB0aGUgcG9wcGVyIGFuZCByZWZlcmVuY2Ugb2Zmc2V0cyBhbmQgcHV0IHRoZW0gaW5zaWRlIGRhdGEub2Zmc2V0c1xuICAgICAgICBkYXRhLm9mZnNldHMgPSB0aGlzLl9nZXRPZmZzZXRzKHRoaXMuX3BvcHBlciwgdGhpcy5fcmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCk7XG5cbiAgICAgICAgLy8gZ2V0IGJvdW5kYXJpZXNcbiAgICAgICAgZGF0YS5ib3VuZGFyaWVzID0gdGhpcy5fZ2V0Qm91bmRhcmllcyhkYXRhLCB0aGlzLl9vcHRpb25zLmJvdW5kYXJpZXNQYWRkaW5nLCB0aGlzLl9vcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50KTtcblxuICAgICAgICBkYXRhID0gdGhpcy5ydW5Nb2RpZmllcnMoZGF0YSwgdGhpcy5fb3B0aW9ucy5tb2RpZmllcnMpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdGF0ZS51cGRhdGVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVDYWxsYmFjayhkYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBJZiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCwgaXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcG9wcGVyIHdpdGggYXMgZmlyc3QgYXJndW1lbnQgdGhlIFBvcHBlciBpbnN0YW5jZS5cbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5vbkNyZWF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgICAvLyB0aGUgY3JlYXRlQ2FsbGJhY2tzIHJldHVybiBhcyBmaXJzdCBhcmd1bWVudCB0aGUgcG9wcGVyIGluc3RhbmNlXG4gICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSWYgYSBmdW5jdGlvbiBpcyBwYXNzZWQsIGl0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgZWFjaCB1cGRhdGUgb2YgcG9wcGVyIHdpdGggYXMgZmlyc3QgYXJndW1lbnQgdGhlIHNldCBvZiBjb29yZGluYXRlcyBhbmQgaW5mb3JtYXRpb25zXG4gICAgICogdXNlZCB0byBzdHlsZSBwb3BwZXIgYW5kIGl0cyBhcnJvdy5cbiAgICAgKiBOT1RFOiBpdCBkb2Vzbid0IGdldCBmaXJlZCBvbiB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgYFBvcHBlci51cGRhdGUoKWAgbWV0aG9kIGluc2lkZSB0aGUgYFBvcHBlcmAgY29uc3RydWN0b3IhXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUub25VcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogSGVscGVyIHVzZWQgdG8gZ2VuZXJhdGUgcG9wcGVycyBmcm9tIGEgY29uZmlndXJhdGlvbiBmaWxlXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAcGFyYW0gY29uZmlnIHtPYmplY3R9IGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcmV0dXJucyB7SFRNTEVsZW1lbnR9IHBvcHBlclxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIHZhciBkZWZhdWx0Q29uZmlnID0ge1xuICAgICAgICAgICAgdGFnTmFtZTogJ2RpdicsXG4gICAgICAgICAgICBjbGFzc05hbWVzOiBbJ3BvcHBlciddLFxuICAgICAgICAgICAgYXR0cmlidXRlczogW10sXG4gICAgICAgICAgICBwYXJlbnQ6IHJvb3QuZG9jdW1lbnQuYm9keSxcbiAgICAgICAgICAgIGNvbnRlbnQ6ICcnLFxuICAgICAgICAgICAgY29udGVudFR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGFycm93VGFnTmFtZTogJ2RpdicsXG4gICAgICAgICAgICBhcnJvd0NsYXNzTmFtZXM6IFsncG9wcGVyX19hcnJvdyddLFxuICAgICAgICAgICAgYXJyb3dBdHRyaWJ1dGVzOiBbJ3gtYXJyb3cnXVxuICAgICAgICB9O1xuICAgICAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29uZmlnLCBjb25maWcpO1xuXG4gICAgICAgIHZhciBkID0gcm9vdC5kb2N1bWVudDtcblxuICAgICAgICB2YXIgcG9wcGVyID0gZC5jcmVhdGVFbGVtZW50KGNvbmZpZy50YWdOYW1lKTtcbiAgICAgICAgYWRkQ2xhc3NOYW1lcyhwb3BwZXIsIGNvbmZpZy5jbGFzc05hbWVzKTtcbiAgICAgICAgYWRkQXR0cmlidXRlcyhwb3BwZXIsIGNvbmZpZy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgaWYgKGNvbmZpZy5jb250ZW50VHlwZSA9PT0gJ25vZGUnKSB7XG4gICAgICAgICAgICBwb3BwZXIuYXBwZW5kQ2hpbGQoY29uZmlnLmNvbnRlbnQuanF1ZXJ5ID8gY29uZmlnLmNvbnRlbnRbMF0gOiBjb25maWcuY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLmNvbnRlbnRUeXBlID09PSAnaHRtbCcpIHtcbiAgICAgICAgICAgIHBvcHBlci5pbm5lckhUTUwgPSBjb25maWcuY29udGVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBvcHBlci50ZXh0Q29udGVudCA9IGNvbmZpZy5jb250ZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5hcnJvd1RhZ05hbWUpIHtcbiAgICAgICAgICAgIHZhciBhcnJvdyA9IGQuY3JlYXRlRWxlbWVudChjb25maWcuYXJyb3dUYWdOYW1lKTtcbiAgICAgICAgICAgIGFkZENsYXNzTmFtZXMoYXJyb3csIGNvbmZpZy5hcnJvd0NsYXNzTmFtZXMpO1xuICAgICAgICAgICAgYWRkQXR0cmlidXRlcyhhcnJvdywgY29uZmlnLmFycm93QXR0cmlidXRlcyk7XG4gICAgICAgICAgICBwb3BwZXIuYXBwZW5kQ2hpbGQoYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudCA9IGNvbmZpZy5wYXJlbnQuanF1ZXJ5ID8gY29uZmlnLnBhcmVudFswXSA6IGNvbmZpZy5wYXJlbnQ7XG5cbiAgICAgICAgLy8gaWYgdGhlIGdpdmVuIHBhcmVudCBpcyBhIHN0cmluZywgdXNlIGl0IHRvIG1hdGNoIGFuIGVsZW1lbnRcbiAgICAgICAgLy8gaWYgbW9yZSB0aGFuIG9uZSBlbGVtZW50IGlzIG1hdGNoZWQsIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkIGFzIHBhcmVudFxuICAgICAgICAvLyBpZiBubyBlbGVtZW50cyBhcmUgbWF0Y2hlZCwgdGhlIHNjcmlwdCB3aWxsIHRocm93IGFuIGVycm9yXG4gICAgICAgIGlmICh0eXBlb2YgcGFyZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcGFyZW50ID0gZC5xdWVyeVNlbGVjdG9yQWxsKGNvbmZpZy5wYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiB0aGUgZ2l2ZW4gYHBhcmVudGAgcXVlcnkoJyArIGNvbmZpZy5wYXJlbnQgKyAnKSBtYXRjaGVkIG1vcmUgdGhhbiBvbmUgZWxlbWVudCwgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHVzZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJlbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgJ0VSUk9SOiB0aGUgZ2l2ZW4gYHBhcmVudGAgZG9lc25cXCd0IGV4aXN0cyEnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50WzBdO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSBnaXZlbiBwYXJlbnQgaXMgYSBET00gbm9kZXMgbGlzdCBvciBhbiBhcnJheSBvZiBub2RlcyB3aXRoIG1vcmUgdGhhbiBvbmUgZWxlbWVudCxcbiAgICAgICAgLy8gdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHVzZWQgYXMgcGFyZW50XG4gICAgICAgIGlmIChwYXJlbnQubGVuZ3RoID4gMSAmJiBwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiB5b3UgaGF2ZSBwYXNzZWQgYXMgcGFyZW50IGEgbGlzdCBvZiBlbGVtZW50cywgdGhlIGZpcnN0IG9uZSB3aWxsIGJlIHVzZWQnKTtcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudFswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFwcGVuZCB0aGUgZ2VuZXJhdGVkIHBvcHBlciB0byBpdHMgcGFyZW50XG4gICAgICAgIHBhcmVudC5hcHBlbmRDaGlsZChwb3BwZXIpO1xuXG4gICAgICAgIHJldHVybiBwb3BwZXI7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgY2xhc3MgbmFtZXMgdG8gdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgICAgICogQGZ1bmN0aW9uXG4gICAgICAgICAqIEBpZ25vcmVcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0XG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IGNsYXNzZXNcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGFkZENsYXNzTmFtZXMoZWxlbWVudCwgY2xhc3NOYW1lcykge1xuICAgICAgICAgICAgY2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgICAgICAgKiBAZnVuY3Rpb25cbiAgICAgICAgICogQGlnbm9yZVxuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0YXJnZXRcbiAgICAgICAgICogQHBhcmFtIHtBcnJheX0gYXR0cmlidXRlc1xuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBhZGRBdHRyaWJ1dGVzKGVsZW1lbnQsIFsgJ2RhdGEtaW5mbzpmb29iYXInIF0pO1xuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gYWRkQXR0cmlidXRlcyhlbGVtZW50LCBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5zcGxpdCgnOicpWzBdLCBhdHRyaWJ1dGUuc3BsaXQoJzonKVsxXSB8fCAnJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgdXNlZCB0byBnZXQgdGhlIHBvc2l0aW9uIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAcGFyYW0gY29uZmlnIHtIVE1MRWxlbWVudH0gcG9wcGVyIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gcmVmZXJlbmNlIHtIVE1MRWxlbWVudH0gcmVmZXJlbmNlIGVsZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7U3RyaW5nfSBwb3NpdGlvblxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuX2dldFBvc2l0aW9uID0gZnVuY3Rpb24gKHBvcHBlciwgcmVmZXJlbmNlKSB7XG4gICAgICAgIHZhciBjb250YWluZXIgPSBnZXRPZmZzZXRQYXJlbnQocmVmZXJlbmNlKTtcblxuICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5mb3JjZUFic29sdXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2Fic29sdXRlJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlY2lkZSBpZiB0aGUgcG9wcGVyIHdpbGwgYmUgZml4ZWRcbiAgICAgICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBlbGVtZW50IGlzIGluc2lkZSBhIGZpeGVkIGNvbnRleHQsIHRoZSBwb3BwZXIgd2lsbCBiZSBmaXhlZCBhcyB3ZWxsIHRvIGFsbG93IHRoZW0gdG8gc2Nyb2xsIHRvZ2V0aGVyXG4gICAgICAgIHZhciBpc1BhcmVudEZpeGVkID0gaXNGaXhlZChyZWZlcmVuY2UsIGNvbnRhaW5lcik7XG4gICAgICAgIHJldHVybiBpc1BhcmVudEZpeGVkID8gJ2ZpeGVkJyA6ICdhYnNvbHV0ZSc7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEdldCBvZmZzZXRzIHRvIHRoZSBwb3BwZXJcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gcG9wcGVyIC0gdGhlIHBvcHBlciBlbGVtZW50XG4gICAgICogQHBhcmFtIHtFbGVtZW50fSByZWZlcmVuY2UgLSB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvZmZzZXRzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgcG9wcGVyXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5fZ2V0T2Zmc2V0cyA9IGZ1bmN0aW9uIChwb3BwZXIsIHJlZmVyZW5jZSwgcGxhY2VtZW50KSB7XG4gICAgICAgIHBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgICAgICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHt9O1xuXG4gICAgICAgIHBvcHBlck9mZnNldHMucG9zaXRpb24gPSB0aGlzLnN0YXRlLnBvc2l0aW9uO1xuICAgICAgICB2YXIgaXNQYXJlbnRGaXhlZCA9IHBvcHBlck9mZnNldHMucG9zaXRpb24gPT09ICdmaXhlZCc7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gR2V0IHJlZmVyZW5jZSBlbGVtZW50IHBvc2l0aW9uXG4gICAgICAgIC8vXG4gICAgICAgIHZhciByZWZlcmVuY2VPZmZzZXRzID0gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9DdXN0b21QYXJlbnQocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgaXNQYXJlbnRGaXhlZCk7XG5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gR2V0IHBvcHBlciBzaXplc1xuICAgICAgICAvL1xuICAgICAgICB2YXIgcG9wcGVyUmVjdCA9IGdldE91dGVyU2l6ZXMocG9wcGVyKTtcblxuICAgICAgICAvL1xuICAgICAgICAvLyBDb21wdXRlIG9mZnNldHMgb2YgcG9wcGVyXG4gICAgICAgIC8vXG5cbiAgICAgICAgLy8gZGVwZW5kaW5nIGJ5IHRoZSBwb3BwZXIgcGxhY2VtZW50IHdlIGhhdmUgdG8gY29tcHV0ZSBpdHMgb2Zmc2V0cyBzbGlnaHRseSBkaWZmZXJlbnRseVxuICAgICAgICBpZiAoWydyaWdodCcsICdsZWZ0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMSkge1xuICAgICAgICAgICAgcG9wcGVyT2Zmc2V0cy50b3AgPSByZWZlcmVuY2VPZmZzZXRzLnRvcCArIHJlZmVyZW5jZU9mZnNldHMuaGVpZ2h0IC8gMiAtIHBvcHBlclJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGlmIChwbGFjZW1lbnQgPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgICAgIHBvcHBlck9mZnNldHMubGVmdCA9IHJlZmVyZW5jZU9mZnNldHMubGVmdCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBvcHBlck9mZnNldHMubGVmdCA9IHJlZmVyZW5jZU9mZnNldHMucmlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwb3BwZXJPZmZzZXRzLmxlZnQgPSByZWZlcmVuY2VPZmZzZXRzLmxlZnQgKyByZWZlcmVuY2VPZmZzZXRzLndpZHRoIC8gMiAtIHBvcHBlclJlY3Qud2lkdGggLyAyO1xuICAgICAgICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICAgICAgICBwb3BwZXJPZmZzZXRzLnRvcCA9IHJlZmVyZW5jZU9mZnNldHMudG9wIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBvcHBlck9mZnNldHMudG9wID0gcmVmZXJlbmNlT2Zmc2V0cy5ib3R0b207XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZGQgd2lkdGggYW5kIGhlaWdodCB0byBvdXIgb2Zmc2V0cyBvYmplY3RcbiAgICAgICAgcG9wcGVyT2Zmc2V0cy53aWR0aCA9IHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICAgIHBvcHBlck9mZnNldHMuaGVpZ2h0ID0gcG9wcGVyUmVjdC5oZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBvcHBlcjogcG9wcGVyT2Zmc2V0cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlT2Zmc2V0c1xuICAgICAgICB9O1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBTZXR1cCBuZWVkZWQgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuX3NldHVwRXZlbnRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gICAgICAgIHRoaXMuc3RhdGUudXBkYXRlQm91bmQgPSB0aGlzLnVwZGF0ZS5iaW5kKHRoaXMpO1xuICAgICAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuc3RhdGUudXBkYXRlQm91bmQpO1xuICAgICAgICAvLyBpZiB0aGUgYm91bmRhcmllc0VsZW1lbnQgaXMgd2luZG93IHdlIGRvbid0IG5lZWQgdG8gbGlzdGVuIGZvciB0aGUgc2Nyb2xsIGV2ZW50XG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmJvdW5kYXJpZXNFbGVtZW50ICE9PSAnd2luZG93Jykge1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGdldFNjcm9sbFBhcmVudCh0aGlzLl9yZWZlcmVuY2UpO1xuICAgICAgICAgICAgLy8gaGVyZSBpdCBjb3VsZCBiZSBib3RoIGBib2R5YCBvciBgZG9jdW1lbnRFbGVtZW50YCB0aGFua3MgdG8gRmlyZWZveCwgd2UgdGhlbiBjaGVjayBib3RoXG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSByb290LmRvY3VtZW50LmJvZHkgfHwgdGFyZ2V0ID09PSByb290LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IHJvb3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5zdGF0ZS51cGRhdGVCb3VuZCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlLnNjcm9sbFRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzIHVzZWQgdG8gdXBkYXRlIHRoZSBwb3BwZXIgcG9zaXRpb25cbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuX3JlbW92ZUV2ZW50TGlzdGVuZXJzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICByb290LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuc3RhdGUudXBkYXRlQm91bmQpO1xuICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCAhPT0gJ3dpbmRvdycgJiYgdGhpcy5zdGF0ZS5zY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuc2Nyb2xsVGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuc3RhdGUudXBkYXRlQm91bmQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZS5zY3JvbGxUYXJnZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUudXBkYXRlQm91bmQgPSBudWxsO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCB0aGUgYm91bmRhcmllcyBsaW1pdHMgYW5kIHJldHVybiB0aGVtXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YSAtIE9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0eSBcIm9mZnNldHNcIiBnZW5lcmF0ZWQgYnkgYF9nZXRPZmZzZXRzYFxuICAgICAqIEBwYXJhbSB7TnVtYmVyfSBwYWRkaW5nIC0gQm91bmRhcmllcyBwYWRkaW5nXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBib3VuZGFyaWVzRWxlbWVudCAtIEVsZW1lbnQgdXNlZCB0byBkZWZpbmUgdGhlIGJvdW5kYXJpZXNcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBDb29yZGluYXRlcyBvZiB0aGUgYm91bmRhcmllc1xuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuX2dldEJvdW5kYXJpZXMgPSBmdW5jdGlvbiAoZGF0YSwgcGFkZGluZywgYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgICAgICAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgICAgICAgdmFyIGJvdW5kYXJpZXMgPSB7fTtcbiAgICAgICAgdmFyIHdpZHRoLCBoZWlnaHQ7XG4gICAgICAgIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3dpbmRvdycpIHtcbiAgICAgICAgICAgIHZhciBib2R5ID0gcm9vdC5kb2N1bWVudC5ib2R5LFxuICAgICAgICAgICAgICAgIGh0bWwgPSByb290LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoYm9keS5zY3JvbGxIZWlnaHQsIGJvZHkub2Zmc2V0SGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwub2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgoYm9keS5zY3JvbGxXaWR0aCwgYm9keS5vZmZzZXRXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5vZmZzZXRXaWR0aCk7XG5cbiAgICAgICAgICAgIGJvdW5kYXJpZXMgPSB7XG4gICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiB3aWR0aCxcbiAgICAgICAgICAgICAgICBib3R0b206IGhlaWdodCxcbiAgICAgICAgICAgICAgICBsZWZ0OiAwXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGJvdW5kYXJpZXNFbGVtZW50ID09PSAndmlld3BvcnQnKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHRoaXMuX3BvcHBlcik7XG4gICAgICAgICAgICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KHRoaXMuX3BvcHBlcik7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0UGFyZW50UmVjdCA9IGdldE9mZnNldFJlY3Qob2Zmc2V0UGFyZW50KTtcblxuICAgICAgICAgICAgLy8gVGhhbmtzIHRoZSBmdWNraW5nIG5hdGl2ZSBBUEksIGBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcGAgJiBgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcGBcbiAgICAgICAgICAgIHZhciBnZXRTY3JvbGxUb3BWYWx1ZSA9IGZ1bmN0aW9uIGdldFNjcm9sbFRvcFZhbHVlKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudCA9PSBkb2N1bWVudC5ib2R5ID8gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3ApIDogZWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGdldFNjcm9sbExlZnRWYWx1ZSA9IGZ1bmN0aW9uIGdldFNjcm9sbExlZnRWYWx1ZShlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT0gZG9jdW1lbnQuYm9keSA/IE1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQpIDogZWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gaWYgdGhlIHBvcHBlciBpcyBmaXhlZCB3ZSBkb24ndCBoYXZlIHRvIHN1YnN0cmFjdCBzY3JvbGxpbmcgZnJvbSB0aGUgYm91bmRhcmllc1xuICAgICAgICAgICAgdmFyIHNjcm9sbFRvcCA9IGRhdGEub2Zmc2V0cy5wb3BwZXIucG9zaXRpb24gPT09ICdmaXhlZCcgPyAwIDogZ2V0U2Nyb2xsVG9wVmFsdWUoc2Nyb2xsUGFyZW50KTtcbiAgICAgICAgICAgIHZhciBzY3JvbGxMZWZ0ID0gZGF0YS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyA/IDAgOiBnZXRTY3JvbGxMZWZ0VmFsdWUoc2Nyb2xsUGFyZW50KTtcblxuICAgICAgICAgICAgYm91bmRhcmllcyA9IHtcbiAgICAgICAgICAgICAgICB0b3A6IDAgLSAob2Zmc2V0UGFyZW50UmVjdC50b3AgLSBzY3JvbGxUb3ApLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiByb290LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIChvZmZzZXRQYXJlbnRSZWN0LmxlZnQgLSBzY3JvbGxMZWZ0KSxcbiAgICAgICAgICAgICAgICBib3R0b206IHJvb3QuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtIChvZmZzZXRQYXJlbnRSZWN0LnRvcCAtIHNjcm9sbFRvcCksXG4gICAgICAgICAgICAgICAgbGVmdDogMCAtIChvZmZzZXRQYXJlbnRSZWN0LmxlZnQgLSBzY3JvbGxMZWZ0KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChnZXRPZmZzZXRQYXJlbnQodGhpcy5fcG9wcGVyKSA9PT0gYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBib3VuZGFyaWVzID0ge1xuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBib3VuZGFyaWVzRWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiBib3VuZGFyaWVzRWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBib3VuZGFyaWVzID0gZ2V0T2Zmc2V0UmVjdChib3VuZGFyaWVzRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYm91bmRhcmllcy5sZWZ0ICs9IHBhZGRpbmc7XG4gICAgICAgIGJvdW5kYXJpZXMucmlnaHQgLT0gcGFkZGluZztcbiAgICAgICAgYm91bmRhcmllcy50b3AgPSBib3VuZGFyaWVzLnRvcCArIHBhZGRpbmc7XG4gICAgICAgIGJvdW5kYXJpZXMuYm90dG9tID0gYm91bmRhcmllcy5ib3R0b20gLSBwYWRkaW5nO1xuICAgICAgICByZXR1cm4gYm91bmRhcmllcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTG9vcCB0cm91Z2ggdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGFuZCBydW4gdGhlbSBpbiBvcmRlciwgZWFjaCBvZiB0aGVtIHdpbGwgdGhlbiBlZGl0IHRoZSBkYXRhIG9iamVjdFxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICogQGFjY2VzcyBwdWJsaWNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IG1vZGlmaWVyc1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGVuZHNcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLnJ1bk1vZGlmaWVycyA9IGZ1bmN0aW9uIChkYXRhLCBtb2RpZmllcnMsIGVuZHMpIHtcbiAgICAgICAgdmFyIG1vZGlmaWVyc1RvUnVuID0gbW9kaWZpZXJzLnNsaWNlKCk7XG4gICAgICAgIGlmIChlbmRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyc1RvUnVuID0gdGhpcy5fb3B0aW9ucy5tb2RpZmllcnMuc2xpY2UoMCwgZ2V0QXJyYXlLZXlJbmRleCh0aGlzLl9vcHRpb25zLm1vZGlmaWVycywgZW5kcykpO1xuICAgICAgICB9XG5cbiAgICAgICAgbW9kaWZpZXJzVG9SdW4uZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG1vZGlmaWVyKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBtb2RpZmllci5jYWxsKHRoaXMsIGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcykpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgdXNlZCB0byBrbm93IGlmIHRoZSBnaXZlbiBtb2RpZmllciBkZXBlbmRzIGZyb20gYW5vdGhlciBvbmUuXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdGluZyAtIG5hbWUgb2YgcmVxdWVzdGluZyBtb2RpZmllclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0ZWQgLSBuYW1lIG9mIHJlcXVlc3RlZCBtb2RpZmllclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufVxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUuaXNNb2RpZmllclJlcXVpcmVkID0gZnVuY3Rpb24gKHJlcXVlc3RpbmcsIHJlcXVlc3RlZCkge1xuICAgICAgICB2YXIgaW5kZXggPSBnZXRBcnJheUtleUluZGV4KHRoaXMuX29wdGlvbnMubW9kaWZpZXJzLCByZXF1ZXN0aW5nKTtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fb3B0aW9ucy5tb2RpZmllcnMuc2xpY2UoMCwgaW5kZXgpLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RpZmllciA9PT0gcmVxdWVzdGVkO1xuICAgICAgICB9KS5sZW5ndGg7XG4gICAgfTtcblxuICAgIC8vXG4gICAgLy8gTW9kaWZpZXJzXG4gICAgLy9cblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVycyBsaXN0XG4gICAgICogQG5hbWVzcGFjZSBQb3BwZXIubW9kaWZpZXJzXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5tb2RpZmllcnMgPSB7fTtcblxuICAgIC8qKlxuICAgICAqIEFwcGx5IHRoZSBjb21wdXRlZCBzdHlsZXMgdG8gdGhlIHBvcHBlciBlbGVtZW50XG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXIubW9kaWZpZXJzXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzYW1lIGRhdGEgb2JqZWN0XG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5tb2RpZmllcnMuYXBwbHlTdHlsZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIC8vIGFwcGx5IHRoZSBmaW5hbCBvZmZzZXRzIHRvIHRoZSBwb3BwZXJcbiAgICAgICAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgICAgICAgdmFyIHN0eWxlcyA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBkYXRhLm9mZnNldHMucG9wcGVyLnBvc2l0aW9uXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gcm91bmQgdG9wIGFuZCBsZWZ0IHRvIGF2b2lkIGJsdXJyeSB0ZXh0XG4gICAgICAgIHZhciBsZWZ0ID0gTWF0aC5yb3VuZChkYXRhLm9mZnNldHMucG9wcGVyLmxlZnQpO1xuICAgICAgICB2YXIgdG9wID0gTWF0aC5yb3VuZChkYXRhLm9mZnNldHMucG9wcGVyLnRvcCk7XG5cbiAgICAgICAgLy8gaWYgZ3B1QWNjZWxlcmF0aW9uIGlzIHNldCB0byB0cnVlIGFuZCB0cmFuc2Zvcm0gaXMgc3VwcG9ydGVkLCB3ZSB1c2UgYHRyYW5zbGF0ZTNkYCB0byBhcHBseSB0aGUgcG9zaXRpb24gdG8gdGhlIHBvcHBlclxuICAgICAgICAvLyB3ZSBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgc3VwcG9ydGVkIHByZWZpeGVkIHZlcnNpb24gaWYgbmVlZGVkXG4gICAgICAgIHZhciBwcmVmaXhlZFByb3BlcnR5O1xuICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24gJiYgKHByZWZpeGVkUHJvcGVydHkgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpKSkge1xuICAgICAgICAgICAgc3R5bGVzW3ByZWZpeGVkUHJvcGVydHldID0gJ3RyYW5zbGF0ZTNkKCcgKyBsZWZ0ICsgJ3B4LCAnICsgdG9wICsgJ3B4LCAwKSc7XG4gICAgICAgICAgICBzdHlsZXMudG9wID0gMDtcbiAgICAgICAgICAgIHN0eWxlcy5sZWZ0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvdGh3ZXJpc2UsIHdlIHVzZSB0aGUgc3RhbmRhcmQgYGxlZnRgIGFuZCBgdG9wYCBwcm9wZXJ0aWVzXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlcy5sZWZ0ID0gbGVmdDtcbiAgICAgICAgICAgICAgICBzdHlsZXMudG9wID0gdG9wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vIGFueSBwcm9wZXJ0eSBwcmVzZW50IGluIGBkYXRhLnN0eWxlc2Agd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIsXG4gICAgICAgIC8vIGluIHRoaXMgd2F5IHdlIGNhbiBtYWtlIHRoZSAzcmQgcGFydHkgbW9kaWZpZXJzIGFkZCBjdXN0b20gc3R5bGVzIHRvIGl0XG4gICAgICAgIC8vIEJlIGF3YXJlLCBtb2RpZmllcnMgY291bGQgb3ZlcnJpZGUgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXNcbiAgICAgICAgLy8gbGluZXMgb2YgdGhpcyBtb2RpZmllciFcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZXMsIGRhdGEuc3R5bGVzKTtcblxuICAgICAgICBzZXRTdHlsZSh0aGlzLl9wb3BwZXIsIHN0eWxlcyk7XG5cbiAgICAgICAgLy8gc2V0IGFuIGF0dHJpYnV0ZSB3aGljaCB3aWxsIGJlIHVzZWZ1bCB0byBzdHlsZSB0aGUgdG9vbHRpcCAodXNlIGl0IHRvIHByb3Blcmx5IHBvc2l0aW9uIGl0cyBhcnJvdylcbiAgICAgICAgLy8gTk9URTogMSBET00gYWNjZXNzIGhlcmVcbiAgICAgICAgdGhpcy5fcG9wcGVyLnNldEF0dHJpYnV0ZSgneC1wbGFjZW1lbnQnLCBkYXRhLnBsYWNlbWVudCk7XG5cbiAgICAgICAgLy8gaWYgdGhlIGFycm93IG1vZGlmaWVyIGlzIHJlcXVpcmVkIGFuZCB0aGUgYXJyb3cgc3R5bGUgaGFzIGJlZW4gY29tcHV0ZWQsIGFwcGx5IHRoZSBhcnJvdyBzdHlsZVxuICAgICAgICBpZiAodGhpcy5pc01vZGlmaWVyUmVxdWlyZWQodGhpcy5tb2RpZmllcnMuYXBwbHlTdHlsZSwgdGhpcy5tb2RpZmllcnMuYXJyb3cpICYmIGRhdGEub2Zmc2V0cy5hcnJvdykge1xuICAgICAgICAgICAgc2V0U3R5bGUoZGF0YS5hcnJvd0VsZW1lbnQsIGRhdGEub2Zmc2V0cy5hcnJvdyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXIgdXNlZCB0byBzaGlmdCB0aGUgcG9wcGVyIG9uIHRoZSBzdGFydCBvciBlbmQgb2YgaXRzIHJlZmVyZW5jZSBlbGVtZW50IHNpZGVcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUubW9kaWZpZXJzLnNoaWZ0ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuICAgICAgICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgICAgICB2YXIgc2hpZnRWYXJpYXRpb24gPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcblxuICAgICAgICAvLyBpZiBzaGlmdCBzaGlmdFZhcmlhdGlvbiBpcyBzcGVjaWZpZWQsIHJ1biB0aGUgbW9kaWZpZXJcbiAgICAgICAgaWYgKHNoaWZ0VmFyaWF0aW9uKSB7XG4gICAgICAgICAgICB2YXIgcmVmZXJlbmNlID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcbiAgICAgICAgICAgIHZhciBwb3BwZXIgPSBnZXRQb3BwZXJDbGllbnRSZWN0KGRhdGEub2Zmc2V0cy5wb3BwZXIpO1xuXG4gICAgICAgICAgICB2YXIgc2hpZnRPZmZzZXRzID0ge1xuICAgICAgICAgICAgICAgIHk6IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IHsgdG9wOiByZWZlcmVuY2UudG9wIH0sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogeyB0b3A6IHJlZmVyZW5jZS50b3AgKyByZWZlcmVuY2UuaGVpZ2h0IC0gcG9wcGVyLmhlaWdodCB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB4OiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiB7IGxlZnQ6IHJlZmVyZW5jZS5sZWZ0IH0sXG4gICAgICAgICAgICAgICAgICAgIGVuZDogeyBsZWZ0OiByZWZlcmVuY2UubGVmdCArIHJlZmVyZW5jZS53aWR0aCAtIHBvcHBlci53aWR0aCB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIGF4aXMgPSBbJ2JvdHRvbScsICd0b3AnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMSA/ICd4JyA6ICd5JztcblxuICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24ocG9wcGVyLCBzaGlmdE9mZnNldHNbYXhpc11bc2hpZnRWYXJpYXRpb25dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllciB1c2VkIHRvIG1ha2Ugc3VyZSB0aGUgcG9wcGVyIGRvZXMgbm90IG92ZXJmbG93cyBmcm9tIGl0J3MgYm91bmRhcmllc1xuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5tb2RpZmllcnMucHJldmVudE92ZXJmbG93ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgdmFyIG9yZGVyID0gdGhpcy5fb3B0aW9ucy5wcmV2ZW50T3ZlcmZsb3dPcmRlcjtcbiAgICAgICAgdmFyIHBvcHBlciA9IGdldFBvcHBlckNsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG5cbiAgICAgICAgdmFyIGNoZWNrID0ge1xuICAgICAgICAgICAgbGVmdDogZnVuY3Rpb24gbGVmdCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGVmdCA9IHBvcHBlci5sZWZ0O1xuICAgICAgICAgICAgICAgIGlmIChwb3BwZXIubGVmdCA8IGRhdGEuYm91bmRhcmllcy5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgPSBNYXRoLm1heChwb3BwZXIubGVmdCwgZGF0YS5ib3VuZGFyaWVzLmxlZnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBsZWZ0OiBsZWZ0IH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmlnaHQ6IGZ1bmN0aW9uIHJpZ2h0KCkge1xuICAgICAgICAgICAgICAgIHZhciBsZWZ0ID0gcG9wcGVyLmxlZnQ7XG4gICAgICAgICAgICAgICAgaWYgKHBvcHBlci5yaWdodCA+IGRhdGEuYm91bmRhcmllcy5yaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gTWF0aC5taW4ocG9wcGVyLmxlZnQsIGRhdGEuYm91bmRhcmllcy5yaWdodCAtIHBvcHBlci53aWR0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGxlZnQ6IGxlZnQgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0b3A6IGZ1bmN0aW9uIHRvcCgpIHtcbiAgICAgICAgICAgICAgICB2YXIgdG9wID0gcG9wcGVyLnRvcDtcbiAgICAgICAgICAgICAgICBpZiAocG9wcGVyLnRvcCA8IGRhdGEuYm91bmRhcmllcy50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgdG9wID0gTWF0aC5tYXgocG9wcGVyLnRvcCwgZGF0YS5ib3VuZGFyaWVzLnRvcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRvcDogdG9wIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYm90dG9tOiBmdW5jdGlvbiBib3R0b20oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRvcCA9IHBvcHBlci50b3A7XG4gICAgICAgICAgICAgICAgaWYgKHBvcHBlci5ib3R0b20gPiBkYXRhLmJvdW5kYXJpZXMuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvcCA9IE1hdGgubWluKHBvcHBlci50b3AsIGRhdGEuYm91bmRhcmllcy5ib3R0b20gLSBwb3BwZXIuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdG9wOiB0b3AgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHBvcHBlciwgY2hlY2tbZGlyZWN0aW9uXSgpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyIHVzZWQgdG8gbWFrZSBzdXJlIHRoZSBwb3BwZXIgaXMgYWx3YXlzIG5lYXIgaXRzIHJlZmVyZW5jZVxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBfdXBkYXRlIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm1vZGlmaWVycy5rZWVwVG9nZXRoZXIgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgcG9wcGVyID0gZ2V0UG9wcGVyQ2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgICAgICAgdmFyIHJlZmVyZW5jZSA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gICAgICAgIHZhciBmID0gTWF0aC5mbG9vcjtcblxuICAgICAgICBpZiAocG9wcGVyLnJpZ2h0IDwgZihyZWZlcmVuY2UubGVmdCkpIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIubGVmdCA9IGYocmVmZXJlbmNlLmxlZnQpIC0gcG9wcGVyLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3BwZXIubGVmdCA+IGYocmVmZXJlbmNlLnJpZ2h0KSkge1xuICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlci5sZWZ0ID0gZihyZWZlcmVuY2UucmlnaHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3BwZXIuYm90dG9tIDwgZihyZWZlcmVuY2UudG9wKSkge1xuICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlci50b3AgPSBmKHJlZmVyZW5jZS50b3ApIC0gcG9wcGVyLmhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9wcGVyLnRvcCA+IGYocmVmZXJlbmNlLmJvdHRvbSkpIHtcbiAgICAgICAgICAgIGRhdGEub2Zmc2V0cy5wb3BwZXIudG9wID0gZihyZWZlcmVuY2UuYm90dG9tKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllciB1c2VkIHRvIGZsaXAgdGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyIHdoZW4gdGhlIGxhdHRlciBpcyBzdGFydGluZyBvdmVybGFwcGluZyBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgICAqICoqTk9URToqKiBUaGlzIG1vZGlmaWVyIHdpbGwgcnVuIGFsbCBpdHMgcHJldmlvdXMgbW9kaWZpZXJzIGV2ZXJ5dGltZSBpdCB0cmllcyB0byBmbGlwIHRoZSBwb3BwZXIhXG4gICAgICogQG1ldGhvZFxuICAgICAqIEBtZW1iZXJvZiBQb3BwZXIubW9kaWZpZXJzXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IF91cGRhdGUgbWV0aG9kXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICAgICAqL1xuICAgIFBvcHBlci5wcm90b3R5cGUubW9kaWZpZXJzLmZsaXAgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAvLyBjaGVjayBpZiBwcmV2ZW50T3ZlcmZsb3cgaXMgaW4gdGhlIGxpc3Qgb2YgbW9kaWZpZXJzIGJlZm9yZSB0aGUgZmxpcCBtb2RpZmllci5cbiAgICAgICAgLy8gb3RoZXJ3aXNlIGZsaXAgd291bGQgbm90IHdvcmsgYXMgZXhwZWN0ZWQuXG4gICAgICAgIGlmICghdGhpcy5pc01vZGlmaWVyUmVxdWlyZWQodGhpcy5tb2RpZmllcnMuZmxpcCwgdGhpcy5tb2RpZmllcnMucHJldmVudE92ZXJmbG93KSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBwcmV2ZW50T3ZlcmZsb3cgbW9kaWZpZXIgaXMgcmVxdWlyZWQgYnkgZmxpcCBtb2RpZmllciBpbiBvcmRlciB0byB3b3JrLCBiZSBzdXJlIHRvIGluY2x1ZGUgaXQgYmVmb3JlIGZsaXAhJyk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLmZsaXBwZWQgJiYgZGF0YS5wbGFjZW1lbnQgPT09IGRhdGEuX29yaWdpbmFsUGxhY2VtZW50KSB7XG4gICAgICAgICAgICAvLyBzZWVtcyBsaWtlIGZsaXAgaXMgdHJ5aW5nIHRvIGxvb3AsIHByb2JhYmx5IHRoZXJlJ3Mgbm90IGVub3VnaCBzcGFjZSBvbiBhbnkgb2YgdGhlIGZsaXBwYWJsZSBzaWRlc1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgICAgICAgdmFyIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgICAgICAgdmFyIHZhcmlhdGlvbiA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMV0gfHwgJyc7XG5cbiAgICAgICAgdmFyIGZsaXBPcmRlciA9IFtdO1xuICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5mbGlwQmVoYXZpb3IgPT09ICdmbGlwJykge1xuICAgICAgICAgICAgZmxpcE9yZGVyID0gW3BsYWNlbWVudCwgcGxhY2VtZW50T3Bwb3NpdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmxpcE9yZGVyID0gdGhpcy5fb3B0aW9ucy5mbGlwQmVoYXZpb3I7XG4gICAgICAgIH1cblxuICAgICAgICBmbGlwT3JkZXIuZm9yRWFjaChmdW5jdGlvbiAoc3RlcCwgaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChwbGFjZW1lbnQgIT09IHN0ZXAgfHwgZmxpcE9yZGVyLmxlbmd0aCA9PT0gaW5kZXggKyAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgICAgICAgICAgcGxhY2VtZW50T3Bwb3NpdGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgICAgICAgICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGdldFBvcHBlckNsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgYm9vbGVhbiBpcyB1c2VkIHRvIGRpc3Rpbmd1aXNoIHJpZ2h0IGFuZCBib3R0b20gZnJvbSB0b3AgYW5kIGxlZnRcbiAgICAgICAgICAgIC8vIHRoZXkgbmVlZCBkaWZmZXJlbnQgY29tcHV0YXRpb25zIHRvIGdldCBmbGlwcGVkXG4gICAgICAgICAgICB2YXIgYSA9IFsncmlnaHQnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcblxuICAgICAgICAgICAgLy8gdXNpbmcgTWF0aC5mbG9vciBiZWNhdXNlIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyBtYXkgY29udGFpbiBkZWNpbWFscyB3ZSBhcmUgbm90IGdvaW5nIHRvIGNvbnNpZGVyIGhlcmVcbiAgICAgICAgICAgIGlmIChhICYmIE1hdGguZmxvb3IoZGF0YS5vZmZzZXRzLnJlZmVyZW5jZVtwbGFjZW1lbnRdKSA+IE1hdGguZmxvb3IocG9wcGVyT2Zmc2V0c1twbGFjZW1lbnRPcHBvc2l0ZV0pIHx8ICFhICYmIE1hdGguZmxvb3IoZGF0YS5vZmZzZXRzLnJlZmVyZW5jZVtwbGFjZW1lbnRdKSA8IE1hdGguZmxvb3IocG9wcGVyT2Zmc2V0c1twbGFjZW1lbnRPcHBvc2l0ZV0pKSB7XG4gICAgICAgICAgICAgICAgLy8gd2UnbGwgdXNlIHRoaXMgYm9vbGVhbiB0byBkZXRlY3QgYW55IGZsaXAgbG9vcFxuICAgICAgICAgICAgICAgIGRhdGEuZmxpcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YS5wbGFjZW1lbnQgPSBmbGlwT3JkZXJbaW5kZXggKyAxXTtcbiAgICAgICAgICAgICAgICBpZiAodmFyaWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEucGxhY2VtZW50ICs9ICctJyArIHZhcmlhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IHRoaXMuX2dldE9mZnNldHModGhpcy5fcG9wcGVyLCB0aGlzLl9yZWZlcmVuY2UsIGRhdGEucGxhY2VtZW50KS5wb3BwZXI7XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5ydW5Nb2RpZmllcnMoZGF0YSwgdGhpcy5fb3B0aW9ucy5tb2RpZmllcnMsIHRoaXMuX2ZsaXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LmJpbmQodGhpcykpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXIgdXNlZCB0byBhZGQgYW4gb2Zmc2V0IHRvIHRoZSBwb3BwZXIsIHVzZWZ1bCBpZiB5b3UgbW9yZSBncmFudWxhcml0eSBwb3NpdGlvbmluZyB5b3VyIHBvcHBlci5cbiAgICAgKiBUaGUgb2Zmc2V0cyB3aWxsIHNoaWZ0IHRoZSBwb3BwZXIgb24gdGhlIHNpZGUgb2YgaXRzIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgICAqIEBtZXRob2RcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyLm1vZGlmaWVyc1xuICAgICAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBfdXBkYXRlIG1ldGhvZFxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAgICAgKi9cbiAgICBQb3BwZXIucHJvdG90eXBlLm1vZGlmaWVycy5vZmZzZXQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb3B0aW9ucy5vZmZzZXQ7XG4gICAgICAgIHZhciBwb3BwZXIgPSBkYXRhLm9mZnNldHMucG9wcGVyO1xuXG4gICAgICAgIGlmIChkYXRhLnBsYWNlbWVudC5pbmRleE9mKCdsZWZ0JykgIT09IC0xKSB7XG4gICAgICAgICAgICBwb3BwZXIudG9wIC09IG9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnBsYWNlbWVudC5pbmRleE9mKCdyaWdodCcpICE9PSAtMSkge1xuICAgICAgICAgICAgcG9wcGVyLnRvcCArPSBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5wbGFjZW1lbnQuaW5kZXhPZigndG9wJykgIT09IC0xKSB7XG4gICAgICAgICAgICBwb3BwZXIubGVmdCAtPSBvZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5wbGFjZW1lbnQuaW5kZXhPZignYm90dG9tJykgIT09IC0xKSB7XG4gICAgICAgICAgICBwb3BwZXIubGVmdCArPSBvZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVyIHVzZWQgdG8gbW92ZSB0aGUgYXJyb3dzIG9uIHRoZSBlZGdlIG9mIHRoZSBwb3BwZXIgdG8gbWFrZSBzdXJlIHRoZW0gYXJlIGFsd2F5cyBiZXR3ZWVuIHRoZSBwb3BwZXIgYW5kIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICAgICAqIEl0IHdpbGwgdXNlIHRoZSBDU1Mgb3V0ZXIgc2l6ZSBvZiB0aGUgYXJyb3cgZWxlbWVudCB0byBrbm93IGhvdyBtYW55IHBpeGVscyBvZiBjb25qdWN0aW9uIGFyZSBuZWVkZWRcbiAgICAgKiBAbWV0aG9kXG4gICAgICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgX3VwZGF0ZSBtZXRob2RcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gICAgICovXG4gICAgUG9wcGVyLnByb3RvdHlwZS5tb2RpZmllcnMuYXJyb3cgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICB2YXIgYXJyb3cgPSB0aGlzLl9vcHRpb25zLmFycm93RWxlbWVudDtcbiAgICAgICAgdmFyIGFycm93T2Zmc2V0ID0gdGhpcy5fb3B0aW9ucy5hcnJvd09mZnNldDtcblxuICAgICAgICAvLyBpZiB0aGUgYXJyb3dFbGVtZW50IGlzIGEgc3RyaW5nLCBzdXBwb3NlIGl0J3MgYSBDU1Mgc2VsZWN0b3JcbiAgICAgICAgaWYgKHR5cGVvZiBhcnJvdyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFycm93ID0gdGhpcy5fcG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYXJyb3cgZWxlbWVudCBpcyBub3QgZm91bmQsIGRvbid0IHJ1biB0aGUgbW9kaWZpZXJcbiAgICAgICAgaWYgKCFhcnJvdykge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGUgYXJyb3cgZWxlbWVudCBtdXN0IGJlIGNoaWxkIG9mIGl0cyBwb3BwZXJcbiAgICAgICAgaWYgKCF0aGlzLl9wb3BwZXIuY29udGFpbnMoYXJyb3cpKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IGBhcnJvd0VsZW1lbnRgIG11c3QgYmUgY2hpbGQgb2YgaXRzIHBvcHBlciBlbGVtZW50IScpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcnJvdyBkZXBlbmRzIG9uIGtlZXBUb2dldGhlciBpbiBvcmRlciB0byB3b3JrXG4gICAgICAgIGlmICghdGhpcy5pc01vZGlmaWVyUmVxdWlyZWQodGhpcy5tb2RpZmllcnMuYXJyb3csIHRoaXMubW9kaWZpZXJzLmtlZXBUb2dldGhlcikpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignV0FSTklORzoga2VlcFRvZ2V0aGVyIG1vZGlmaWVyIGlzIHJlcXVpcmVkIGJ5IGFycm93IG1vZGlmaWVyIGluIG9yZGVyIHRvIHdvcmssIGJlIHN1cmUgdG8gaW5jbHVkZSBpdCBiZWZvcmUgYXJyb3chJyk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhcnJvd1N0eWxlID0ge307XG4gICAgICAgIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgICAgICB2YXIgcG9wcGVyID0gZ2V0UG9wcGVyQ2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcbiAgICAgICAgdmFyIHJlZmVyZW5jZSA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG4gICAgICAgIHZhciBpc1ZlcnRpY2FsID0gWydsZWZ0JywgJ3JpZ2h0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcblxuICAgICAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICAgICAgdmFyIHNpZGUgPSBpc1ZlcnRpY2FsID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIHZhciB0cmFuc2xhdGUgPSBpc1ZlcnRpY2FsID8gJ3RyYW5zbGF0ZVknIDogJ3RyYW5zbGF0ZVgnO1xuICAgICAgICB2YXIgYWx0U2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgICAgICAgdmFyIG9wU2lkZSA9IGlzVmVydGljYWwgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIHZhciBhcnJvd1NpemUgPSBnZXRPdXRlclNpemVzKGFycm93KVtsZW5dO1xuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIGV4dGVuZHMga2VlcFRvZ2V0aGVyIGJlaGF2aW9yIG1ha2luZyBzdXJlIHRoZSBwb3BwZXIgYW5kIGl0cyByZWZlcmVuY2UgaGF2ZSBlbm91Z2ggcGl4ZWxzIGluIGNvbmp1Y3Rpb25cbiAgICAgICAgLy9cblxuICAgICAgICAvLyB0b3AvbGVmdCBzaWRlXG4gICAgICAgIGlmIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93U2l6ZSA8IHBvcHBlcltzaWRlXSkge1xuICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlcltzaWRlXSAtPSBwb3BwZXJbc2lkZV0gLSAocmVmZXJlbmNlW29wU2lkZV0gLSBhcnJvd1NpemUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJvdHRvbS9yaWdodCBzaWRlXG4gICAgICAgIGlmIChyZWZlcmVuY2Vbc2lkZV0gKyBhcnJvd1NpemUgPiBwb3BwZXJbb3BTaWRlXSkge1xuICAgICAgICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlcltzaWRlXSArPSByZWZlcmVuY2Vbc2lkZV0gKyBhcnJvd1NpemUgLSBwb3BwZXJbb3BTaWRlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbXB1dGUgY2VudGVyIG9mIHRoZSBwb3BwZXJcbiAgICAgICAgdmFyIGNlbnRlciA9IHJlZmVyZW5jZVtzaWRlXSArIChhcnJvd09mZnNldCB8fCByZWZlcmVuY2VbbGVuXSAvIDIgLSBhcnJvd1NpemUgLyAyKTtcblxuICAgICAgICB2YXIgc2lkZVZhbHVlID0gY2VudGVyIC0gcG9wcGVyW3NpZGVdO1xuXG4gICAgICAgIC8vIHByZXZlbnQgYXJyb3cgZnJvbSBiZWluZyBwbGFjZWQgbm90IGNvbnRpZ3VvdXNseSB0byBpdHMgcG9wcGVyXG4gICAgICAgIHNpZGVWYWx1ZSA9IE1hdGgubWF4KE1hdGgubWluKHBvcHBlcltsZW5dIC0gYXJyb3dTaXplIC0gOCwgc2lkZVZhbHVlKSwgOCk7XG4gICAgICAgIGFycm93U3R5bGVbc2lkZV0gPSBzaWRlVmFsdWU7XG4gICAgICAgIGFycm93U3R5bGVbYWx0U2lkZV0gPSAnJzsgLy8gbWFrZSBzdXJlIHRvIHJlbW92ZSBhbnkgb2xkIHN0eWxlIGZyb20gdGhlIGFycm93XG5cbiAgICAgICAgZGF0YS5vZmZzZXRzLmFycm93ID0gYXJyb3dTdHlsZTtcbiAgICAgICAgZGF0YS5hcnJvd0VsZW1lbnQgPSBhcnJvdztcblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9O1xuXG4gICAgLy9cbiAgICAvLyBIZWxwZXJzXG4gICAgLy9cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgb3V0ZXIgc2l6ZXMgb2YgdGhlIGdpdmVuIGVsZW1lbnQgKG9mZnNldCBzaXplICsgbWFyZ2lucylcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gICAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IGNvbnRhaW5pbmcgd2lkdGggYW5kIGhlaWdodCBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0T3V0ZXJTaXplcyhlbGVtZW50KSB7XG4gICAgICAgIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gICAgICAgIHZhciBfZGlzcGxheSA9IGVsZW1lbnQuc3R5bGUuZGlzcGxheSxcbiAgICAgICAgICAgIF92aXNpYmlsaXR5ID0gZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5O1xuICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO2VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICB2YXIgY2FsY1dpZHRoVG9Gb3JjZVJlcGFpbnQgPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIC8vIG9yaWdpbmFsIG1ldGhvZFxuICAgICAgICB2YXIgc3R5bGVzID0gcm9vdC5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCkgKyBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5Cb3R0b20pO1xuICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkxlZnQpICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luUmlnaHQpO1xuICAgICAgICB2YXIgcmVzdWx0ID0geyB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCArIHksIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHQgKyB4IH07XG5cbiAgICAgICAgLy8gcmVzZXQgZWxlbWVudCBzdHlsZXNcbiAgICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gX2Rpc3BsYXk7ZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gX3Zpc2liaWxpdHk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBvcHBvc2l0ZSBwbGFjZW1lbnQgb2YgdGhlIGdpdmVuIG9uZS9cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudFxuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IGZsaXBwZWQgcGxhY2VtZW50XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBoYXNoID0geyBsZWZ0OiAncmlnaHQnLCByaWdodDogJ2xlZnQnLCBib3R0b206ICd0b3AnLCB0b3A6ICdib3R0b20nIH07XG4gICAgICAgIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gdGhlIHBvcHBlciBvZmZzZXRzLCBnZW5lcmF0ZSBhbiBvdXRwdXQgc2ltaWxhciB0byBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtPYmplY3R9IHBvcHBlck9mZnNldHNcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBDbGllbnRSZWN0IGxpa2Ugb3V0cHV0XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0UG9wcGVyQ2xpZW50UmVjdChwb3BwZXJPZmZzZXRzKSB7XG4gICAgICAgIHZhciBvZmZzZXRzID0gT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyT2Zmc2V0cyk7XG4gICAgICAgIG9mZnNldHMucmlnaHQgPSBvZmZzZXRzLmxlZnQgKyBvZmZzZXRzLndpZHRoO1xuICAgICAgICBvZmZzZXRzLmJvdHRvbSA9IG9mZnNldHMudG9wICsgb2Zmc2V0cy5oZWlnaHQ7XG4gICAgICAgIHJldHVybiBvZmZzZXRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGFuIGFycmF5IGFuZCB0aGUga2V5IHRvIGZpbmQsIHJldHVybnMgaXRzIGluZGV4XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7QXJyYXl9IGFyclxuICAgICAqIEBhcmd1bWVudCBrZXlUb0ZpbmRcbiAgICAgKiBAcmV0dXJucyBpbmRleCBvciBudWxsXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0QXJyYXlLZXlJbmRleChhcnIsIGtleVRvRmluZCkge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBrZXk7XG4gICAgICAgIGZvciAoa2V5IGluIGFycikge1xuICAgICAgICAgICAgaWYgKGFycltrZXldID09PSBrZXlUb0ZpbmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgQ1NTIGNvbXB1dGVkIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7RWVtZW50fSBlbGVtZW50XG4gICAgICogQGFyZ3VtZW50IHtTdHJpbmd9IHByb3BlcnR5XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5KSB7XG4gICAgICAgIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gICAgICAgIHZhciBjc3MgPSByb290LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgbnVsbCk7XG4gICAgICAgIHJldHVybiBjc3NbcHJvcGVydHldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG9mZnNldCBwYXJlbnQgb2YgdGhlIGdpdmVuIGVsZW1lbnRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gICAgICogQHJldHVybnMge0VsZW1lbnR9IG9mZnNldCBwYXJlbnRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICAgICAgICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICAgICAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgIHJldHVybiBvZmZzZXRQYXJlbnQgPT09IHJvb3QuZG9jdW1lbnQuYm9keSB8fCAhb2Zmc2V0UGFyZW50ID8gcm9vdC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiBvZmZzZXRQYXJlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2Nyb2xsaW5nIHBhcmVudCBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAgICAgKiBAcmV0dXJucyB7RWxlbWVudH0gb2Zmc2V0IHBhcmVudFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50KSB7XG4gICAgICAgIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XG5cbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudCA9PT0gcm9vdC5kb2N1bWVudCkge1xuICAgICAgICAgICAgLy8gRmlyZWZveCBwdXRzIHRoZSBzY3JvbGxUT3AgdmFsdWUgb24gYGRvY3VtZW50RWxlbWVudGAgaW5zdGVhZCBvZiBgYm9keWAsIHdlIHRoZW4gY2hlY2sgd2hpY2ggb2YgdGhlbSBpc1xuICAgICAgICAgICAgLy8gZ3JlYXRlciB0aGFuIDAgYW5kIHJldHVybiB0aGUgcHJvcGVyIGVsZW1lbnRcbiAgICAgICAgICAgIGlmIChyb290LmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wIHx8IHJvb3QuZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvb3QuZG9jdW1lbnQuYm9keTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvb3QuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmlyZWZveCB3YW50IHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gICAgICAgIGlmIChbJ3Njcm9sbCcsICdhdXRvJ10uaW5kZXhPZihnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50LCAnb3ZlcmZsb3cnKSkgIT09IC0xIHx8IFsnc2Nyb2xsJywgJ2F1dG8nXS5pbmRleE9mKGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQsICdvdmVyZmxvdy14JykpICE9PSAtMSB8fCBbJ3Njcm9sbCcsICdhdXRvJ10uaW5kZXhPZihnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkocGFyZW50LCAnb3ZlcmZsb3cteScpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkZXRlY3RlZCBzY3JvbGxQYXJlbnQgaXMgYm9keSwgd2UgcGVyZm9ybSBhbiBhZGRpdGlvbmFsIGNoZWNrIG9uIGl0cyBwYXJlbnROb2RlXG4gICAgICAgICAgICAvLyBpbiB0aGlzIHdheSB3ZSdsbCBnZXQgYm9keSBpZiB0aGUgYnJvd3NlciBpcyBDaHJvbWUtaXNoLCBvciBkb2N1bWVudEVsZW1lbnQgb3RoZXJ3aXNlXG4gICAgICAgICAgICAvLyBmaXhlcyBpc3N1ZSAjNjVcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChlbGVtZW50LnBhcmVudE5vZGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBnaXZlbiBlbGVtZW50IGlzIGZpeGVkIG9yIGlzIGluc2lkZSBhIGZpeGVkIHBhcmVudFxuICAgICAqIEBmdW5jdGlvblxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAgICAgKiBAYXJndW1lbnQge0VsZW1lbnR9IGN1c3RvbUNvbnRhaW5lclxuICAgICAqIEByZXR1cm5zIHtCb29sZWFufSBhbnN3ZXIgdG8gXCJpc0ZpeGVkP1wiXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNGaXhlZChlbGVtZW50KSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSByb290LmRvY3VtZW50LmJvZHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlID8gaXNGaXhlZChlbGVtZW50LnBhcmVudE5vZGUpIDogZWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgdGhlIHN0eWxlIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50IC0gRWxlbWVudCB0byBhcHBseSB0aGUgc3R5bGUgdG9cbiAgICAgKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzIC0gT2JqZWN0IHdpdGggYSBsaXN0IG9mIHByb3BlcnRpZXMgYW5kIHZhbHVlcyB3aGljaCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRTdHlsZShlbGVtZW50LCBzdHlsZXMpIHtcbiAgICAgICAgZnVuY3Rpb24gaXNfbnVtZXJpYyhuKSB7XG4gICAgICAgICAgICByZXR1cm4gbiAhPT0gJycgJiYgIWlzTmFOKHBhcnNlRmxvYXQobikpICYmIGlzRmluaXRlKG4pO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICAgICAgdmFyIHVuaXQgPSAnJztcbiAgICAgICAgICAgIC8vIGFkZCB1bml0IGlmIHRoZSB2YWx1ZSBpcyBudW1lcmljIGFuZCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZ1xuICAgICAgICAgICAgaWYgKFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLmluZGV4T2YocHJvcCkgIT09IC0xICYmIGlzX251bWVyaWMoc3R5bGVzW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgIHVuaXQgPSAncHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHN0eWxlc1twcm9wXSArIHVuaXQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIHRoZSBnaXZlbiB2YXJpYWJsZSBpcyBhIGZ1bmN0aW9uXG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBhcmd1bWVudCB7Kn0gZnVuY3Rpb25Ub0NoZWNrIC0gdmFyaWFibGUgdG8gY2hlY2tcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvOiBpcyBhIGZ1bmN0aW9uP1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oZnVuY3Rpb25Ub0NoZWNrKSB7XG4gICAgICAgIHZhciBnZXRUeXBlID0ge307XG4gICAgICAgIHJldHVybiBmdW5jdGlvblRvQ2hlY2sgJiYgZ2V0VHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0aW9uVG9DaGVjaykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZ2l2ZW4gZWxlbWVudCwgcmVsYXRpdmUgdG8gaXRzIG9mZnNldCBwYXJlbnRcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gICAgICogQHJldHVybiB7T2JqZWN0fSBwb3NpdGlvbiAtIENvb3JkaW5hdGVzIG9mIHRoZSBlbGVtZW50IGFuZCBpdHMgYHNjcm9sbFRvcGBcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRPZmZzZXRSZWN0KGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIGVsZW1lbnRSZWN0ID0ge1xuICAgICAgICAgICAgd2lkdGg6IGVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0LFxuICAgICAgICAgICAgbGVmdDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgICAgICAgICAgdG9wOiBlbGVtZW50Lm9mZnNldFRvcFxuICAgICAgICB9O1xuXG4gICAgICAgIGVsZW1lbnRSZWN0LnJpZ2h0ID0gZWxlbWVudFJlY3QubGVmdCArIGVsZW1lbnRSZWN0LndpZHRoO1xuICAgICAgICBlbGVtZW50UmVjdC5ib3R0b20gPSBlbGVtZW50UmVjdC50b3AgKyBlbGVtZW50UmVjdC5oZWlnaHQ7XG5cbiAgICAgICAgLy8gcG9zaXRpb25cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRSZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBib3VuZGluZyBjbGllbnQgcmVjdCBvZiBnaXZlbiBlbGVtZW50XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IGNsaWVudCByZWN0XG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpIHtcbiAgICAgICAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIC8vIHdoZXRoZXIgdGhlIElFIHZlcnNpb24gaXMgbG93ZXIgdGhhbiAxMVxuICAgICAgICB2YXIgaXNJRSA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgIT0gLTE7XG5cbiAgICAgICAgLy8gZml4IGllIGRvY3VtZW50IGJvdW5kaW5nIHRvcCBhbHdheXMgMCBidWdcbiAgICAgICAgdmFyIHJlY3RUb3AgPSBpc0lFICYmIGVsZW1lbnQudGFnTmFtZSA9PT0gJ0hUTUwnID8gLWVsZW1lbnQuc2Nyb2xsVG9wIDogcmVjdC50b3A7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGxlZnQ6IHJlY3QubGVmdCxcbiAgICAgICAgICAgIHRvcDogcmVjdFRvcCxcbiAgICAgICAgICAgIHJpZ2h0OiByZWN0LnJpZ2h0LFxuICAgICAgICAgICAgYm90dG9tOiByZWN0LmJvdHRvbSxcbiAgICAgICAgICAgIHdpZHRoOiByZWN0LnJpZ2h0IC0gcmVjdC5sZWZ0LFxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0LmJvdHRvbSAtIHJlY3RUb3BcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhbiBlbGVtZW50IGFuZCBvbmUgb2YgaXRzIHBhcmVudHMsIHJldHVybiB0aGUgb2Zmc2V0XG4gICAgICogQGZ1bmN0aW9uXG4gICAgICogQGlnbm9yZVxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwYXJlbnRcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IHJlY3RcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0N1c3RvbVBhcmVudChlbGVtZW50LCBwYXJlbnQsIGZpeGVkKSB7XG4gICAgICAgIHZhciBlbGVtZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTtcbiAgICAgICAgdmFyIHBhcmVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocGFyZW50KTtcblxuICAgICAgICBpZiAoZml4ZWQpIHtcbiAgICAgICAgICAgIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQocGFyZW50KTtcbiAgICAgICAgICAgIHBhcmVudFJlY3QudG9wICs9IHNjcm9sbFBhcmVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICBwYXJlbnRSZWN0LmJvdHRvbSArPSBzY3JvbGxQYXJlbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgcGFyZW50UmVjdC5sZWZ0ICs9IHNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgcGFyZW50UmVjdC5yaWdodCArPSBzY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciByZWN0ID0ge1xuICAgICAgICAgICAgdG9wOiBlbGVtZW50UmVjdC50b3AgLSBwYXJlbnRSZWN0LnRvcCxcbiAgICAgICAgICAgIGxlZnQ6IGVsZW1lbnRSZWN0LmxlZnQgLSBwYXJlbnRSZWN0LmxlZnQsXG4gICAgICAgICAgICBib3R0b206IGVsZW1lbnRSZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wICsgZWxlbWVudFJlY3QuaGVpZ2h0LFxuICAgICAgICAgICAgcmlnaHQ6IGVsZW1lbnRSZWN0LmxlZnQgLSBwYXJlbnRSZWN0LmxlZnQgKyBlbGVtZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgIHdpZHRoOiBlbGVtZW50UmVjdC53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogZWxlbWVudFJlY3QuaGVpZ2h0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgcHJlZml4ZWQgc3VwcG9ydGVkIHByb3BlcnR5IG5hbWVcbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICogQGFyZ3VtZW50IHtTdHJpbmd9IHByb3BlcnR5IChjYW1lbENhc2UpXG4gICAgICogQHJldHVybnMge1N0cmluZ30gcHJlZml4ZWQgcHJvcGVydHkgKGNhbWVsQ2FzZSlcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUocHJvcGVydHkpIHtcbiAgICAgICAgdmFyIHByZWZpeGVzID0gWycnLCAnbXMnLCAnd2Via2l0JywgJ21veicsICdvJ107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmVmaXhlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHRvQ2hlY2sgPSBwcmVmaXhlc1tpXSA/IHByZWZpeGVzW2ldICsgcHJvcGVydHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKSA6IHByb3BlcnR5O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByb290LmRvY3VtZW50LmJvZHkuc3R5bGVbdG9DaGVja10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvQ2hlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIE9iamVjdC5hc3NpZ24oKSBtZXRob2QgaXMgdXNlZCB0byBjb3B5IHRoZSB2YWx1ZXMgb2YgYWxsIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2VcbiAgICAgKiBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdC4gSXQgd2lsbCByZXR1cm4gdGhlIHRhcmdldCBvYmplY3QuXG4gICAgICogVGhpcyBwb2x5ZmlsbCBkb2Vzbid0IHN1cHBvcnQgc3ltYm9sIHByb3BlcnRpZXMsIHNpbmNlIEVTNSBkb2Vzbid0IGhhdmUgc3ltYm9scyBhbnl3YXlcbiAgICAgKiBTb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9hc3NpZ25cbiAgICAgKiBAZnVuY3Rpb25cbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgaWYgKCFPYmplY3QuYXNzaWduKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QsICdhc3NpZ24nLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT09IHVuZGVmaW5lZCB8fCB0YXJnZXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgZmlyc3QgYXJndW1lbnQgdG8gb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIHRvID0gT2JqZWN0KHRhcmdldCk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRTb3VyY2UgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0U291cmNlID09PSB1bmRlZmluZWQgfHwgbmV4dFNvdXJjZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV4dFNvdXJjZSA9IE9iamVjdChuZXh0U291cmNlKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5c0FycmF5ID0gT2JqZWN0LmtleXMobmV4dFNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG5leHRJbmRleCA9IDAsIGxlbiA9IGtleXNBcnJheS5sZW5ndGg7IG5leHRJbmRleCA8IGxlbjsgbmV4dEluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0S2V5ID0ga2V5c0FycmF5W25leHRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobmV4dFNvdXJjZSwgbmV4dEtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkICYmIGRlc2MuZW51bWVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG87XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBQb3BwZXI7XG59KTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxhQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/popper.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/popup/index.js":
- /*!**********************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/popup/index.js ***!
- \**********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.PopupManager = undefined;\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _merge = __webpack_require__(/*! element-ui/lib/utils/merge */ \"./node_modules/element-ui/lib/utils/merge.js\");\n\nvar _merge2 = _interopRequireDefault(_merge);\n\nvar _popupManager = __webpack_require__(/*! element-ui/lib/utils/popup/popup-manager */ \"./node_modules/element-ui/lib/utils/popup/popup-manager.js\");\n\nvar _popupManager2 = _interopRequireDefault(_popupManager);\n\nvar _scrollbarWidth = __webpack_require__(/*! ../scrollbar-width */ \"./node_modules/element-ui/lib/utils/scrollbar-width.js\");\n\nvar _scrollbarWidth2 = _interopRequireDefault(_scrollbarWidth);\n\nvar _dom = __webpack_require__(/*! ../dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar idSeed = 1;\n\nvar scrollBarWidth = void 0;\n\nexports.default = {\n props: {\n visible: {\n type: Boolean,\n default: false\n },\n openDelay: {},\n closeDelay: {},\n zIndex: {},\n modal: {\n type: Boolean,\n default: false\n },\n modalFade: {\n type: Boolean,\n default: true\n },\n modalClass: {},\n modalAppendToBody: {\n type: Boolean,\n default: false\n },\n lockScroll: {\n type: Boolean,\n default: true\n },\n closeOnPressEscape: {\n type: Boolean,\n default: false\n },\n closeOnClickModal: {\n type: Boolean,\n default: false\n }\n },\n\n beforeMount: function beforeMount() {\n this._popupId = 'popup-' + idSeed++;\n _popupManager2.default.register(this._popupId, this);\n },\n beforeDestroy: function beforeDestroy() {\n _popupManager2.default.deregister(this._popupId);\n _popupManager2.default.closeModal(this._popupId);\n\n this.restoreBodyStyle();\n },\n data: function data() {\n return {\n opened: false,\n bodyPaddingRight: null,\n computedBodyPaddingRight: 0,\n withoutHiddenClass: true,\n rendered: false\n };\n },\n\n\n watch: {\n visible: function visible(val) {\n var _this = this;\n\n if (val) {\n if (this._opening) return;\n if (!this.rendered) {\n this.rendered = true;\n _vue2.default.nextTick(function () {\n _this.open();\n });\n } else {\n this.open();\n }\n } else {\n this.close();\n }\n }\n },\n\n methods: {\n open: function open(options) {\n var _this2 = this;\n\n if (!this.rendered) {\n this.rendered = true;\n }\n\n var props = (0, _merge2.default)({}, this.$props || this, options);\n\n if (this._closeTimer) {\n clearTimeout(this._closeTimer);\n this._closeTimer = null;\n }\n clearTimeout(this._openTimer);\n\n var openDelay = Number(props.openDelay);\n if (openDelay > 0) {\n this._openTimer = setTimeout(function () {\n _this2._openTimer = null;\n _this2.doOpen(props);\n }, openDelay);\n } else {\n this.doOpen(props);\n }\n },\n doOpen: function doOpen(props) {\n if (this.$isServer) return;\n if (this.willOpen && !this.willOpen()) return;\n if (this.opened) return;\n\n this._opening = true;\n\n var dom = this.$el;\n\n var modal = props.modal;\n\n var zIndex = props.zIndex;\n if (zIndex) {\n _popupManager2.default.zIndex = zIndex;\n }\n\n if (modal) {\n if (this._closing) {\n _popupManager2.default.closeModal(this._popupId);\n this._closing = false;\n }\n _popupManager2.default.openModal(this._popupId, _popupManager2.default.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);\n if (props.lockScroll) {\n this.withoutHiddenClass = !(0, _dom.hasClass)(document.body, 'el-popup-parent--hidden');\n if (this.withoutHiddenClass) {\n this.bodyPaddingRight = document.body.style.paddingRight;\n this.computedBodyPaddingRight = parseInt((0, _dom.getStyle)(document.body, 'paddingRight'), 10);\n }\n scrollBarWidth = (0, _scrollbarWidth2.default)();\n var bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight;\n var bodyOverflowY = (0, _dom.getStyle)(document.body, 'overflowY');\n if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === 'scroll') && this.withoutHiddenClass) {\n document.body.style.paddingRight = this.computedBodyPaddingRight + scrollBarWidth + 'px';\n }\n (0, _dom.addClass)(document.body, 'el-popup-parent--hidden');\n }\n }\n\n if (getComputedStyle(dom).position === 'static') {\n dom.style.position = 'absolute';\n }\n\n dom.style.zIndex = _popupManager2.default.nextZIndex();\n this.opened = true;\n\n this.onOpen && this.onOpen();\n\n this.doAfterOpen();\n },\n doAfterOpen: function doAfterOpen() {\n this._opening = false;\n },\n close: function close() {\n var _this3 = this;\n\n if (this.willClose && !this.willClose()) return;\n\n if (this._openTimer !== null) {\n clearTimeout(this._openTimer);\n this._openTimer = null;\n }\n clearTimeout(this._closeTimer);\n\n var closeDelay = Number(this.closeDelay);\n\n if (closeDelay > 0) {\n this._closeTimer = setTimeout(function () {\n _this3._closeTimer = null;\n _this3.doClose();\n }, closeDelay);\n } else {\n this.doClose();\n }\n },\n doClose: function doClose() {\n this._closing = true;\n\n this.onClose && this.onClose();\n\n if (this.lockScroll) {\n setTimeout(this.restoreBodyStyle, 200);\n }\n\n this.opened = false;\n\n this.doAfterClose();\n },\n doAfterClose: function doAfterClose() {\n _popupManager2.default.closeModal(this._popupId);\n this._closing = false;\n },\n restoreBodyStyle: function restoreBodyStyle() {\n if (this.modal && this.withoutHiddenClass) {\n document.body.style.paddingRight = this.bodyPaddingRight;\n (0, _dom.removeClass)(document.body, 'el-popup-parent--hidden');\n }\n this.withoutHiddenClass = true;\n }\n }\n};\nexports.PopupManager = _popupManager2.default;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvaW5kZXguanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvaW5kZXguanM/NTEyOCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLlBvcHVwTWFuYWdlciA9IHVuZGVmaW5lZDtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxudmFyIF9tZXJnZSA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL21lcmdlJyk7XG5cbnZhciBfbWVyZ2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbWVyZ2UpO1xuXG52YXIgX3BvcHVwTWFuYWdlciA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL3BvcHVwL3BvcHVwLW1hbmFnZXInKTtcblxudmFyIF9wb3B1cE1hbmFnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcG9wdXBNYW5hZ2VyKTtcblxudmFyIF9zY3JvbGxiYXJXaWR0aCA9IHJlcXVpcmUoJy4uL3Njcm9sbGJhci13aWR0aCcpO1xuXG52YXIgX3Njcm9sbGJhcldpZHRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Njcm9sbGJhcldpZHRoKTtcblxudmFyIF9kb20gPSByZXF1aXJlKCcuLi9kb20nKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGlkU2VlZCA9IDE7XG5cbnZhciBzY3JvbGxCYXJXaWR0aCA9IHZvaWQgMDtcblxuZXhwb3J0cy5kZWZhdWx0ID0ge1xuICBwcm9wczoge1xuICAgIHZpc2libGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgb3BlbkRlbGF5OiB7fSxcbiAgICBjbG9zZURlbGF5OiB7fSxcbiAgICB6SW5kZXg6IHt9LFxuICAgIG1vZGFsOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIG1vZGFsRmFkZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIG1vZGFsQ2xhc3M6IHt9LFxuICAgIG1vZGFsQXBwZW5kVG9Cb2R5OiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIGxvY2tTY3JvbGw6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSxcbiAgICBjbG9zZU9uUHJlc3NFc2NhcGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgY2xvc2VPbkNsaWNrTW9kYWw6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVNb3VudDogZnVuY3Rpb24gYmVmb3JlTW91bnQoKSB7XG4gICAgdGhpcy5fcG9wdXBJZCA9ICdwb3B1cC0nICsgaWRTZWVkKys7XG4gICAgX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC5yZWdpc3Rlcih0aGlzLl9wb3B1cElkLCB0aGlzKTtcbiAgfSxcbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0LmRlcmVnaXN0ZXIodGhpcy5fcG9wdXBJZCk7XG4gICAgX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC5jbG9zZU1vZGFsKHRoaXMuX3BvcHVwSWQpO1xuXG4gICAgdGhpcy5yZXN0b3JlQm9keVN0eWxlKCk7XG4gIH0sXG4gIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogZmFsc2UsXG4gICAgICBib2R5UGFkZGluZ1JpZ2h0OiBudWxsLFxuICAgICAgY29tcHV0ZWRCb2R5UGFkZGluZ1JpZ2h0OiAwLFxuICAgICAgd2l0aG91dEhpZGRlbkNsYXNzOiB0cnVlLFxuICAgICAgcmVuZGVyZWQ6IGZhbHNlXG4gICAgfTtcbiAgfSxcblxuXG4gIHdhdGNoOiB7XG4gICAgdmlzaWJsZTogZnVuY3Rpb24gdmlzaWJsZSh2YWwpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh2YWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX29wZW5pbmcpIHJldHVybjtcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmVkKSB7XG4gICAgICAgICAgdGhpcy5yZW5kZXJlZCA9IHRydWU7XG4gICAgICAgICAgX3Z1ZTIuZGVmYXVsdC5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5vcGVuKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9wZW46IGZ1bmN0aW9uIG9wZW4ob3B0aW9ucykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIGlmICghdGhpcy5yZW5kZXJlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb3BzID0gKDAsIF9tZXJnZTIuZGVmYXVsdCkoe30sIHRoaXMuJHByb3BzIHx8IHRoaXMsIG9wdGlvbnMpO1xuXG4gICAgICBpZiAodGhpcy5fY2xvc2VUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lcik7XG4gICAgICAgIHRoaXMuX2Nsb3NlVGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX29wZW5UaW1lcik7XG5cbiAgICAgIHZhciBvcGVuRGVsYXkgPSBOdW1iZXIocHJvcHMub3BlbkRlbGF5KTtcbiAgICAgIGlmIChvcGVuRGVsYXkgPiAwKSB7XG4gICAgICAgIHRoaXMuX29wZW5UaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5fb3BlblRpbWVyID0gbnVsbDtcbiAgICAgICAgICBfdGhpczIuZG9PcGVuKHByb3BzKTtcbiAgICAgICAgfSwgb3BlbkRlbGF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZG9PcGVuKHByb3BzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGRvT3BlbjogZnVuY3Rpb24gZG9PcGVuKHByb3BzKSB7XG4gICAgICBpZiAodGhpcy4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLndpbGxPcGVuICYmICF0aGlzLndpbGxPcGVuKCkpIHJldHVybjtcbiAgICAgIGlmICh0aGlzLm9wZW5lZCkgcmV0dXJuO1xuXG4gICAgICB0aGlzLl9vcGVuaW5nID0gdHJ1ZTtcblxuICAgICAgdmFyIGRvbSA9IHRoaXMuJGVsO1xuXG4gICAgICB2YXIgbW9kYWwgPSBwcm9wcy5tb2RhbDtcblxuICAgICAgdmFyIHpJbmRleCA9IHByb3BzLnpJbmRleDtcbiAgICAgIGlmICh6SW5kZXgpIHtcbiAgICAgICAgX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC56SW5kZXggPSB6SW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGlmIChtb2RhbCkge1xuICAgICAgICBpZiAodGhpcy5fY2xvc2luZykge1xuICAgICAgICAgIF9wb3B1cE1hbmFnZXIyLmRlZmF1bHQuY2xvc2VNb2RhbCh0aGlzLl9wb3B1cElkKTtcbiAgICAgICAgICB0aGlzLl9jbG9zaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC5vcGVuTW9kYWwodGhpcy5fcG9wdXBJZCwgX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC5uZXh0WkluZGV4KCksIHRoaXMubW9kYWxBcHBlbmRUb0JvZHkgPyB1bmRlZmluZWQgOiBkb20sIHByb3BzLm1vZGFsQ2xhc3MsIHByb3BzLm1vZGFsRmFkZSk7XG4gICAgICAgIGlmIChwcm9wcy5sb2NrU2Nyb2xsKSB7XG4gICAgICAgICAgdGhpcy53aXRob3V0SGlkZGVuQ2xhc3MgPSAhKDAsIF9kb20uaGFzQ2xhc3MpKGRvY3VtZW50LmJvZHksICdlbC1wb3B1cC1wYXJlbnQtLWhpZGRlbicpO1xuICAgICAgICAgIGlmICh0aGlzLndpdGhvdXRIaWRkZW5DbGFzcykge1xuICAgICAgICAgICAgdGhpcy5ib2R5UGFkZGluZ1JpZ2h0ID0gZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQ7XG4gICAgICAgICAgICB0aGlzLmNvbXB1dGVkQm9keVBhZGRpbmdSaWdodCA9IHBhcnNlSW50KCgwLCBfZG9tLmdldFN0eWxlKShkb2N1bWVudC5ib2R5LCAncGFkZGluZ1JpZ2h0JyksIDEwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsQmFyV2lkdGggPSAoMCwgX3Njcm9sbGJhcldpZHRoMi5kZWZhdWx0KSgpO1xuICAgICAgICAgIHZhciBib2R5SGFzT3ZlcmZsb3cgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IDwgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgdmFyIGJvZHlPdmVyZmxvd1kgPSAoMCwgX2RvbS5nZXRTdHlsZSkoZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93WScpO1xuICAgICAgICAgIGlmIChzY3JvbGxCYXJXaWR0aCA+IDAgJiYgKGJvZHlIYXNPdmVyZmxvdyB8fCBib2R5T3ZlcmZsb3dZID09PSAnc2Nyb2xsJykgJiYgdGhpcy53aXRob3V0SGlkZGVuQ2xhc3MpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gdGhpcy5jb21wdXRlZEJvZHlQYWRkaW5nUmlnaHQgKyBzY3JvbGxCYXJXaWR0aCArICdweCc7XG4gICAgICAgICAgfVxuICAgICAgICAgICgwLCBfZG9tLmFkZENsYXNzKShkb2N1bWVudC5ib2R5LCAnZWwtcG9wdXAtcGFyZW50LS1oaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShkb20pLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgICAgICBkb20uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgfVxuXG4gICAgICBkb20uc3R5bGUuekluZGV4ID0gX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC5uZXh0WkluZGV4KCk7XG4gICAgICB0aGlzLm9wZW5lZCA9IHRydWU7XG5cbiAgICAgIHRoaXMub25PcGVuICYmIHRoaXMub25PcGVuKCk7XG5cbiAgICAgIHRoaXMuZG9BZnRlck9wZW4oKTtcbiAgICB9LFxuICAgIGRvQWZ0ZXJPcGVuOiBmdW5jdGlvbiBkb0FmdGVyT3BlbigpIHtcbiAgICAgIHRoaXMuX29wZW5pbmcgPSBmYWxzZTtcbiAgICB9LFxuICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICBpZiAodGhpcy53aWxsQ2xvc2UgJiYgIXRoaXMud2lsbENsb3NlKCkpIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMuX29wZW5UaW1lciAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fb3BlblRpbWVyKTtcbiAgICAgICAgdGhpcy5fb3BlblRpbWVyID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9jbG9zZVRpbWVyKTtcblxuICAgICAgdmFyIGNsb3NlRGVsYXkgPSBOdW1iZXIodGhpcy5jbG9zZURlbGF5KTtcblxuICAgICAgaWYgKGNsb3NlRGVsYXkgPiAwKSB7XG4gICAgICAgIHRoaXMuX2Nsb3NlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMuX2Nsb3NlVGltZXIgPSBudWxsO1xuICAgICAgICAgIF90aGlzMy5kb0Nsb3NlKCk7XG4gICAgICAgIH0sIGNsb3NlRGVsYXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kb0Nsb3NlKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkb0Nsb3NlOiBmdW5jdGlvbiBkb0Nsb3NlKCkge1xuICAgICAgdGhpcy5fY2xvc2luZyA9IHRydWU7XG5cbiAgICAgIHRoaXMub25DbG9zZSAmJiB0aGlzLm9uQ2xvc2UoKTtcblxuICAgICAgaWYgKHRoaXMubG9ja1Njcm9sbCkge1xuICAgICAgICBzZXRUaW1lb3V0KHRoaXMucmVzdG9yZUJvZHlTdHlsZSwgMjAwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcGVuZWQgPSBmYWxzZTtcblxuICAgICAgdGhpcy5kb0FmdGVyQ2xvc2UoKTtcbiAgICB9LFxuICAgIGRvQWZ0ZXJDbG9zZTogZnVuY3Rpb24gZG9BZnRlckNsb3NlKCkge1xuICAgICAgX3BvcHVwTWFuYWdlcjIuZGVmYXVsdC5jbG9zZU1vZGFsKHRoaXMuX3BvcHVwSWQpO1xuICAgICAgdGhpcy5fY2xvc2luZyA9IGZhbHNlO1xuICAgIH0sXG4gICAgcmVzdG9yZUJvZHlTdHlsZTogZnVuY3Rpb24gcmVzdG9yZUJvZHlTdHlsZSgpIHtcbiAgICAgIGlmICh0aGlzLm1vZGFsICYmIHRoaXMud2l0aG91dEhpZGRlbkNsYXNzKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0ID0gdGhpcy5ib2R5UGFkZGluZ1JpZ2h0O1xuICAgICAgICAoMCwgX2RvbS5yZW1vdmVDbGFzcykoZG9jdW1lbnQuYm9keSwgJ2VsLXBvcHVwLXBhcmVudC0taGlkZGVuJyk7XG4gICAgICB9XG4gICAgICB0aGlzLndpdGhvdXRIaWRkZW5DbGFzcyA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuZXhwb3J0cy5Qb3B1cE1hbmFnZXIgPSBfcG9wdXBNYW5hZ2VyMi5kZWZhdWx0OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/popup/index.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/popup/popup-manager.js":
- /*!******************************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/popup/popup-manager.js ***!
- \******************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _dom = __webpack_require__(/*! element-ui/lib/utils/dom */ \"./node_modules/element-ui/lib/utils/dom.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar hasModal = false;\nvar hasInitZIndex = false;\nvar zIndex = void 0;\n\nvar getModal = function getModal() {\n if (_vue2.default.prototype.$isServer) return;\n var modalDom = PopupManager.modalDom;\n if (modalDom) {\n hasModal = true;\n } else {\n hasModal = false;\n modalDom = document.createElement('div');\n PopupManager.modalDom = modalDom;\n\n modalDom.addEventListener('touchmove', function (event) {\n event.preventDefault();\n event.stopPropagation();\n });\n\n modalDom.addEventListener('click', function () {\n PopupManager.doOnModalClick && PopupManager.doOnModalClick();\n });\n }\n\n return modalDom;\n};\n\nvar instances = {};\n\nvar PopupManager = {\n modalFade: true,\n\n getInstance: function getInstance(id) {\n return instances[id];\n },\n\n register: function register(id, instance) {\n if (id && instance) {\n instances[id] = instance;\n }\n },\n\n deregister: function deregister(id) {\n if (id) {\n instances[id] = null;\n delete instances[id];\n }\n },\n\n nextZIndex: function nextZIndex() {\n return PopupManager.zIndex++;\n },\n\n modalStack: [],\n\n doOnModalClick: function doOnModalClick() {\n var topItem = PopupManager.modalStack[PopupManager.modalStack.length - 1];\n if (!topItem) return;\n\n var instance = PopupManager.getInstance(topItem.id);\n if (instance && instance.closeOnClickModal) {\n instance.close();\n }\n },\n\n openModal: function openModal(id, zIndex, dom, modalClass, modalFade) {\n if (_vue2.default.prototype.$isServer) return;\n if (!id || zIndex === undefined) return;\n this.modalFade = modalFade;\n\n var modalStack = this.modalStack;\n\n for (var i = 0, j = modalStack.length; i < j; i++) {\n var item = modalStack[i];\n if (item.id === id) {\n return;\n }\n }\n\n var modalDom = getModal();\n\n (0, _dom.addClass)(modalDom, 'v-modal');\n if (this.modalFade && !hasModal) {\n (0, _dom.addClass)(modalDom, 'v-modal-enter');\n }\n if (modalClass) {\n var classArr = modalClass.trim().split(/\\s+/);\n classArr.forEach(function (item) {\n return (0, _dom.addClass)(modalDom, item);\n });\n }\n setTimeout(function () {\n (0, _dom.removeClass)(modalDom, 'v-modal-enter');\n }, 200);\n\n if (dom && dom.parentNode && dom.parentNode.nodeType !== 11) {\n dom.parentNode.appendChild(modalDom);\n } else {\n document.body.appendChild(modalDom);\n }\n\n if (zIndex) {\n modalDom.style.zIndex = zIndex;\n }\n modalDom.tabIndex = 0;\n modalDom.style.display = '';\n\n this.modalStack.push({ id: id, zIndex: zIndex, modalClass: modalClass });\n },\n\n closeModal: function closeModal(id) {\n var modalStack = this.modalStack;\n var modalDom = getModal();\n\n if (modalStack.length > 0) {\n var topItem = modalStack[modalStack.length - 1];\n if (topItem.id === id) {\n if (topItem.modalClass) {\n var classArr = topItem.modalClass.trim().split(/\\s+/);\n classArr.forEach(function (item) {\n return (0, _dom.removeClass)(modalDom, item);\n });\n }\n\n modalStack.pop();\n if (modalStack.length > 0) {\n modalDom.style.zIndex = modalStack[modalStack.length - 1].zIndex;\n }\n } else {\n for (var i = modalStack.length - 1; i >= 0; i--) {\n if (modalStack[i].id === id) {\n modalStack.splice(i, 1);\n break;\n }\n }\n }\n }\n\n if (modalStack.length === 0) {\n if (this.modalFade) {\n (0, _dom.addClass)(modalDom, 'v-modal-leave');\n }\n setTimeout(function () {\n if (modalStack.length === 0) {\n if (modalDom.parentNode) modalDom.parentNode.removeChild(modalDom);\n modalDom.style.display = 'none';\n PopupManager.modalDom = undefined;\n }\n (0, _dom.removeClass)(modalDom, 'v-modal-leave');\n }, 200);\n }\n }\n};\n\nObject.defineProperty(PopupManager, 'zIndex', {\n configurable: true,\n get: function get() {\n if (!hasInitZIndex) {\n zIndex = zIndex || (_vue2.default.prototype.$ELEMENT || {}).zIndex || 2000;\n hasInitZIndex = true;\n }\n return zIndex;\n },\n set: function set(value) {\n zIndex = value;\n }\n});\n\nvar getTopPopup = function getTopPopup() {\n if (_vue2.default.prototype.$isServer) return;\n if (PopupManager.modalStack.length > 0) {\n var topPopup = PopupManager.modalStack[PopupManager.modalStack.length - 1];\n if (!topPopup) return;\n var instance = PopupManager.getInstance(topPopup.id);\n\n return instance;\n }\n};\n\nif (!_vue2.default.prototype.$isServer) {\n // handle `esc` key when the popup is shown\n window.addEventListener('keydown', function (event) {\n if (event.keyCode === 27) {\n var topPopup = getTopPopup();\n\n if (topPopup && topPopup.closeOnPressEscape) {\n topPopup.handleClose ? topPopup.handleClose() : topPopup.handleAction ? topPopup.handleAction('cancel') : topPopup.close();\n }\n }\n });\n}\n\nexports.default = PopupManager;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAvcG9wdXAtbWFuYWdlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9wb3B1cC9wb3B1cC1tYW5hZ2VyLmpzPzRiMjYiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xuXG52YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG52YXIgX2RvbSA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL2RvbScpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgaGFzTW9kYWwgPSBmYWxzZTtcbnZhciBoYXNJbml0WkluZGV4ID0gZmFsc2U7XG52YXIgekluZGV4ID0gdm9pZCAwO1xuXG52YXIgZ2V0TW9kYWwgPSBmdW5jdGlvbiBnZXRNb2RhbCgpIHtcbiAgaWYgKF92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcikgcmV0dXJuO1xuICB2YXIgbW9kYWxEb20gPSBQb3B1cE1hbmFnZXIubW9kYWxEb207XG4gIGlmIChtb2RhbERvbSkge1xuICAgIGhhc01vZGFsID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBoYXNNb2RhbCA9IGZhbHNlO1xuICAgIG1vZGFsRG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgUG9wdXBNYW5hZ2VyLm1vZGFsRG9tID0gbW9kYWxEb207XG5cbiAgICBtb2RhbERvbS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIG1vZGFsRG9tLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgUG9wdXBNYW5hZ2VyLmRvT25Nb2RhbENsaWNrICYmIFBvcHVwTWFuYWdlci5kb09uTW9kYWxDbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG1vZGFsRG9tO1xufTtcblxudmFyIGluc3RhbmNlcyA9IHt9O1xuXG52YXIgUG9wdXBNYW5hZ2VyID0ge1xuICBtb2RhbEZhZGU6IHRydWUsXG5cbiAgZ2V0SW5zdGFuY2U6IGZ1bmN0aW9uIGdldEluc3RhbmNlKGlkKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlc1tpZF07XG4gIH0sXG5cbiAgcmVnaXN0ZXI6IGZ1bmN0aW9uIHJlZ2lzdGVyKGlkLCBpbnN0YW5jZSkge1xuICAgIGlmIChpZCAmJiBpbnN0YW5jZSkge1xuICAgICAgaW5zdGFuY2VzW2lkXSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfSxcblxuICBkZXJlZ2lzdGVyOiBmdW5jdGlvbiBkZXJlZ2lzdGVyKGlkKSB7XG4gICAgaWYgKGlkKSB7XG4gICAgICBpbnN0YW5jZXNbaWRdID0gbnVsbDtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZXNbaWRdO1xuICAgIH1cbiAgfSxcblxuICBuZXh0WkluZGV4OiBmdW5jdGlvbiBuZXh0WkluZGV4KCkge1xuICAgIHJldHVybiBQb3B1cE1hbmFnZXIuekluZGV4Kys7XG4gIH0sXG5cbiAgbW9kYWxTdGFjazogW10sXG5cbiAgZG9Pbk1vZGFsQ2xpY2s6IGZ1bmN0aW9uIGRvT25Nb2RhbENsaWNrKCkge1xuICAgIHZhciB0b3BJdGVtID0gUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2tbUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2subGVuZ3RoIC0gMV07XG4gICAgaWYgKCF0b3BJdGVtKSByZXR1cm47XG5cbiAgICB2YXIgaW5zdGFuY2UgPSBQb3B1cE1hbmFnZXIuZ2V0SW5zdGFuY2UodG9wSXRlbS5pZCk7XG4gICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLmNsb3NlT25DbGlja01vZGFsKSB7XG4gICAgICBpbnN0YW5jZS5jbG9zZSgpO1xuICAgIH1cbiAgfSxcblxuICBvcGVuTW9kYWw6IGZ1bmN0aW9uIG9wZW5Nb2RhbChpZCwgekluZGV4LCBkb20sIG1vZGFsQ2xhc3MsIG1vZGFsRmFkZSkge1xuICAgIGlmIChfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kaXNTZXJ2ZXIpIHJldHVybjtcbiAgICBpZiAoIWlkIHx8IHpJbmRleCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdGhpcy5tb2RhbEZhZGUgPSBtb2RhbEZhZGU7XG5cbiAgICB2YXIgbW9kYWxTdGFjayA9IHRoaXMubW9kYWxTdGFjaztcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gbW9kYWxTdGFjay5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgIHZhciBpdGVtID0gbW9kYWxTdGFja1tpXTtcbiAgICAgIGlmIChpdGVtLmlkID09PSBpZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1vZGFsRG9tID0gZ2V0TW9kYWwoKTtcblxuICAgICgwLCBfZG9tLmFkZENsYXNzKShtb2RhbERvbSwgJ3YtbW9kYWwnKTtcbiAgICBpZiAodGhpcy5tb2RhbEZhZGUgJiYgIWhhc01vZGFsKSB7XG4gICAgICAoMCwgX2RvbS5hZGRDbGFzcykobW9kYWxEb20sICd2LW1vZGFsLWVudGVyJyk7XG4gICAgfVxuICAgIGlmIChtb2RhbENsYXNzKSB7XG4gICAgICB2YXIgY2xhc3NBcnIgPSBtb2RhbENsYXNzLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICAgICAgY2xhc3NBcnIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gKDAsIF9kb20uYWRkQ2xhc3MpKG1vZGFsRG9tLCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShtb2RhbERvbSwgJ3YtbW9kYWwtZW50ZXInKTtcbiAgICB9LCAyMDApO1xuXG4gICAgaWYgKGRvbSAmJiBkb20ucGFyZW50Tm9kZSAmJiBkb20ucGFyZW50Tm9kZS5ub2RlVHlwZSAhPT0gMTEpIHtcbiAgICAgIGRvbS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKG1vZGFsRG9tKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtb2RhbERvbSk7XG4gICAgfVxuXG4gICAgaWYgKHpJbmRleCkge1xuICAgICAgbW9kYWxEb20uc3R5bGUuekluZGV4ID0gekluZGV4O1xuICAgIH1cbiAgICBtb2RhbERvbS50YWJJbmRleCA9IDA7XG4gICAgbW9kYWxEb20uc3R5bGUuZGlzcGxheSA9ICcnO1xuXG4gICAgdGhpcy5tb2RhbFN0YWNrLnB1c2goeyBpZDogaWQsIHpJbmRleDogekluZGV4LCBtb2RhbENsYXNzOiBtb2RhbENsYXNzIH0pO1xuICB9LFxuXG4gIGNsb3NlTW9kYWw6IGZ1bmN0aW9uIGNsb3NlTW9kYWwoaWQpIHtcbiAgICB2YXIgbW9kYWxTdGFjayA9IHRoaXMubW9kYWxTdGFjaztcbiAgICB2YXIgbW9kYWxEb20gPSBnZXRNb2RhbCgpO1xuXG4gICAgaWYgKG1vZGFsU3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHRvcEl0ZW0gPSBtb2RhbFN0YWNrW21vZGFsU3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBpZiAodG9wSXRlbS5pZCA9PT0gaWQpIHtcbiAgICAgICAgaWYgKHRvcEl0ZW0ubW9kYWxDbGFzcykge1xuICAgICAgICAgIHZhciBjbGFzc0FyciA9IHRvcEl0ZW0ubW9kYWxDbGFzcy50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgICAgICAgICBjbGFzc0Fyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gKDAsIF9kb20ucmVtb3ZlQ2xhc3MpKG1vZGFsRG9tLCBpdGVtKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vZGFsU3RhY2sucG9wKCk7XG4gICAgICAgIGlmIChtb2RhbFN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBtb2RhbERvbS5zdHlsZS56SW5kZXggPSBtb2RhbFN0YWNrW21vZGFsU3RhY2subGVuZ3RoIC0gMV0uekluZGV4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gbW9kYWxTdGFjay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGlmIChtb2RhbFN0YWNrW2ldLmlkID09PSBpZCkge1xuICAgICAgICAgICAgbW9kYWxTdGFjay5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kYWxTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICh0aGlzLm1vZGFsRmFkZSkge1xuICAgICAgICAoMCwgX2RvbS5hZGRDbGFzcykobW9kYWxEb20sICd2LW1vZGFsLWxlYXZlJyk7XG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG1vZGFsU3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgaWYgKG1vZGFsRG9tLnBhcmVudE5vZGUpIG1vZGFsRG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobW9kYWxEb20pO1xuICAgICAgICAgIG1vZGFsRG9tLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgUG9wdXBNYW5hZ2VyLm1vZGFsRG9tID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgICgwLCBfZG9tLnJlbW92ZUNsYXNzKShtb2RhbERvbSwgJ3YtbW9kYWwtbGVhdmUnKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfVxuICB9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUG9wdXBNYW5hZ2VyLCAnekluZGV4Jywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIGlmICghaGFzSW5pdFpJbmRleCkge1xuICAgICAgekluZGV4ID0gekluZGV4IHx8IChfdnVlMi5kZWZhdWx0LnByb3RvdHlwZS4kRUxFTUVOVCB8fCB7fSkuekluZGV4IHx8IDIwMDA7XG4gICAgICBoYXNJbml0WkluZGV4ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHpJbmRleDtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICB6SW5kZXggPSB2YWx1ZTtcbiAgfVxufSk7XG5cbnZhciBnZXRUb3BQb3B1cCA9IGZ1bmN0aW9uIGdldFRvcFBvcHVwKCkge1xuICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm47XG4gIGlmIChQb3B1cE1hbmFnZXIubW9kYWxTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHRvcFBvcHVwID0gUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2tbUG9wdXBNYW5hZ2VyLm1vZGFsU3RhY2subGVuZ3RoIC0gMV07XG4gICAgaWYgKCF0b3BQb3B1cCkgcmV0dXJuO1xuICAgIHZhciBpbnN0YW5jZSA9IFBvcHVwTWFuYWdlci5nZXRJbnN0YW5jZSh0b3BQb3B1cC5pZCk7XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cbn07XG5cbmlmICghX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSB7XG4gIC8vIGhhbmRsZSBgZXNjYCBrZXkgd2hlbiB0aGUgcG9wdXAgaXMgc2hvd25cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgIHZhciB0b3BQb3B1cCA9IGdldFRvcFBvcHVwKCk7XG5cbiAgICAgIGlmICh0b3BQb3B1cCAmJiB0b3BQb3B1cC5jbG9zZU9uUHJlc3NFc2NhcGUpIHtcbiAgICAgICAgdG9wUG9wdXAuaGFuZGxlQ2xvc2UgPyB0b3BQb3B1cC5oYW5kbGVDbG9zZSgpIDogdG9wUG9wdXAuaGFuZGxlQWN0aW9uID8gdG9wUG9wdXAuaGFuZGxlQWN0aW9uKCdjYW5jZWwnKSA6IHRvcFBvcHVwLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0cy5kZWZhdWx0ID0gUG9wdXBNYW5hZ2VyOyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/popup/popup-manager.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/resize-event.js":
- /*!***********************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/resize-event.js ***!
- \***********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.removeResizeListener = exports.addResizeListener = undefined;\n\nvar _resizeObserverPolyfill = __webpack_require__(/*! resize-observer-polyfill */ \"./node_modules/resize-observer-polyfill/dist/ResizeObserver.es.js\");\n\nvar _resizeObserverPolyfill2 = _interopRequireDefault(_resizeObserverPolyfill);\n\nvar _throttleDebounce = __webpack_require__(/*! throttle-debounce */ \"./node_modules/throttle-debounce/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar isServer = typeof window === 'undefined';\n\n/* istanbul ignore next */\nvar resizeHandler = function resizeHandler(entries) {\n for (var _iterator = entries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {\n var _ref;\n\n if (_isArray) {\n if (_i >= _iterator.length) break;\n _ref = _iterator[_i++];\n } else {\n _i = _iterator.next();\n if (_i.done) break;\n _ref = _i.value;\n }\n\n var entry = _ref;\n\n var listeners = entry.target.__resizeListeners__ || [];\n if (listeners.length) {\n listeners.forEach(function (fn) {\n fn();\n });\n }\n }\n};\n\n/* istanbul ignore next */\nvar addResizeListener = exports.addResizeListener = function addResizeListener(element, fn) {\n if (isServer) return;\n if (!element.__resizeListeners__) {\n element.__resizeListeners__ = [];\n element.__ro__ = new _resizeObserverPolyfill2.default((0, _throttleDebounce.debounce)(16, resizeHandler));\n element.__ro__.observe(element);\n }\n element.__resizeListeners__.push(fn);\n};\n\n/* istanbul ignore next */\nvar removeResizeListener = exports.removeResizeListener = function removeResizeListener(element, fn) {\n if (!element || !element.__resizeListeners__) return;\n element.__resizeListeners__.splice(element.__resizeListeners__.indexOf(fn), 1);\n if (!element.__resizeListeners__.length) {\n element.__ro__.disconnect();\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvcmVzaXplLWV2ZW50LmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3Jlc2l6ZS1ldmVudC5qcz80MDEwIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMucmVtb3ZlUmVzaXplTGlzdGVuZXIgPSBleHBvcnRzLmFkZFJlc2l6ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuXG52YXIgX3Jlc2l6ZU9ic2VydmVyUG9seWZpbGwgPSByZXF1aXJlKCdyZXNpemUtb2JzZXJ2ZXItcG9seWZpbGwnKTtcblxudmFyIF9yZXNpemVPYnNlcnZlclBvbHlmaWxsMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Jlc2l6ZU9ic2VydmVyUG9seWZpbGwpO1xuXG52YXIgX3Rocm90dGxlRGVib3VuY2UgPSByZXF1aXJlKCd0aHJvdHRsZS1kZWJvdW5jZScpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgaXNTZXJ2ZXIgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciByZXNpemVIYW5kbGVyID0gZnVuY3Rpb24gcmVzaXplSGFuZGxlcihlbnRyaWVzKSB7XG4gIGZvciAodmFyIF9pdGVyYXRvciA9IGVudHJpZXMsIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheShfaXRlcmF0b3IpLCBfaSA9IDAsIF9pdGVyYXRvciA9IF9pc0FycmF5ID8gX2l0ZXJhdG9yIDogX2l0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0oKTs7KSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICBpZiAoX2lzQXJyYXkpIHtcbiAgICAgIGlmIChfaSA+PSBfaXRlcmF0b3IubGVuZ3RoKSBicmVhaztcbiAgICAgIF9yZWYgPSBfaXRlcmF0b3JbX2krK107XG4gICAgfSBlbHNlIHtcbiAgICAgIF9pID0gX2l0ZXJhdG9yLm5leHQoKTtcbiAgICAgIGlmIChfaS5kb25lKSBicmVhaztcbiAgICAgIF9yZWYgPSBfaS52YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgZW50cnkgPSBfcmVmO1xuXG4gICAgdmFyIGxpc3RlbmVycyA9IGVudHJ5LnRhcmdldC5fX3Jlc2l6ZUxpc3RlbmVyc19fIHx8IFtdO1xuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnZhciBhZGRSZXNpemVMaXN0ZW5lciA9IGV4cG9ydHMuYWRkUmVzaXplTGlzdGVuZXIgPSBmdW5jdGlvbiBhZGRSZXNpemVMaXN0ZW5lcihlbGVtZW50LCBmbikge1xuICBpZiAoaXNTZXJ2ZXIpIHJldHVybjtcbiAgaWYgKCFlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18pIHtcbiAgICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18gPSBbXTtcbiAgICBlbGVtZW50Ll9fcm9fXyA9IG5ldyBfcmVzaXplT2JzZXJ2ZXJQb2x5ZmlsbDIuZGVmYXVsdCgoMCwgX3Rocm90dGxlRGVib3VuY2UuZGVib3VuY2UpKDE2LCByZXNpemVIYW5kbGVyKSk7XG4gICAgZWxlbWVudC5fX3JvX18ub2JzZXJ2ZShlbGVtZW50KTtcbiAgfVxuICBlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18ucHVzaChmbik7XG59O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIHJlbW92ZVJlc2l6ZUxpc3RlbmVyID0gZXhwb3J0cy5yZW1vdmVSZXNpemVMaXN0ZW5lciA9IGZ1bmN0aW9uIHJlbW92ZVJlc2l6ZUxpc3RlbmVyKGVsZW1lbnQsIGZuKSB7XG4gIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fKSByZXR1cm47XG4gIGVsZW1lbnQuX19yZXNpemVMaXN0ZW5lcnNfXy5zcGxpY2UoZWxlbWVudC5fX3Jlc2l6ZUxpc3RlbmVyc19fLmluZGV4T2YoZm4pLCAxKTtcbiAgaWYgKCFlbGVtZW50Ll9fcmVzaXplTGlzdGVuZXJzX18ubGVuZ3RoKSB7XG4gICAgZWxlbWVudC5fX3JvX18uZGlzY29ubmVjdCgpO1xuICB9XG59OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/resize-event.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/scroll-into-view.js":
- /*!***************************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/scroll-into-view.js ***!
- \***************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.default = scrollIntoView;\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction scrollIntoView(container, selected) {\n if (_vue2.default.prototype.$isServer) return;\n\n if (!selected) {\n container.scrollTop = 0;\n return;\n }\n\n var offsetParents = [];\n var pointer = selected.offsetParent;\n while (pointer && container !== pointer && container.contains(pointer)) {\n offsetParents.push(pointer);\n pointer = pointer.offsetParent;\n }\n var top = selected.offsetTop + offsetParents.reduce(function (prev, curr) {\n return prev + curr.offsetTop;\n }, 0);\n var bottom = top + selected.offsetHeight;\n var viewRectTop = container.scrollTop;\n var viewRectBottom = viewRectTop + container.clientHeight;\n\n if (top < viewRectTop) {\n container.scrollTop = top;\n } else if (bottom > viewRectBottom) {\n container.scrollTop = bottom - container.clientHeight;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsLWludG8tdmlldy5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy9zY3JvbGwtaW50by12aWV3LmpzPzJhNWUiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5kZWZhdWx0ID0gc2Nyb2xsSW50b1ZpZXc7XG5cbnZhciBfdnVlID0gcmVxdWlyZSgndnVlJyk7XG5cbnZhciBfdnVlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3Z1ZSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KGNvbnRhaW5lciwgc2VsZWN0ZWQpIHtcbiAgaWYgKF92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlcikgcmV0dXJuO1xuXG4gIGlmICghc2VsZWN0ZWQpIHtcbiAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgb2Zmc2V0UGFyZW50cyA9IFtdO1xuICB2YXIgcG9pbnRlciA9IHNlbGVjdGVkLm9mZnNldFBhcmVudDtcbiAgd2hpbGUgKHBvaW50ZXIgJiYgY29udGFpbmVyICE9PSBwb2ludGVyICYmIGNvbnRhaW5lci5jb250YWlucyhwb2ludGVyKSkge1xuICAgIG9mZnNldFBhcmVudHMucHVzaChwb2ludGVyKTtcbiAgICBwb2ludGVyID0gcG9pbnRlci5vZmZzZXRQYXJlbnQ7XG4gIH1cbiAgdmFyIHRvcCA9IHNlbGVjdGVkLm9mZnNldFRvcCArIG9mZnNldFBhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7XG4gICAgcmV0dXJuIHByZXYgKyBjdXJyLm9mZnNldFRvcDtcbiAgfSwgMCk7XG4gIHZhciBib3R0b20gPSB0b3AgKyBzZWxlY3RlZC5vZmZzZXRIZWlnaHQ7XG4gIHZhciB2aWV3UmVjdFRvcCA9IGNvbnRhaW5lci5zY3JvbGxUb3A7XG4gIHZhciB2aWV3UmVjdEJvdHRvbSA9IHZpZXdSZWN0VG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcblxuICBpZiAodG9wIDwgdmlld1JlY3RUb3ApIHtcbiAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gdG9wO1xuICB9IGVsc2UgaWYgKGJvdHRvbSA+IHZpZXdSZWN0Qm90dG9tKSB7XG4gICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IGJvdHRvbSAtIGNvbnRhaW5lci5jbGllbnRIZWlnaHQ7XG4gIH1cbn0iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/scroll-into-view.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/scrollbar-width.js":
- /*!**************************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/scrollbar-width.js ***!
- \**************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nexports.default = function () {\n if (_vue2.default.prototype.$isServer) return 0;\n if (scrollBarWidth !== undefined) return scrollBarWidth;\n\n var outer = document.createElement('div');\n outer.className = 'el-scrollbar__wrap';\n outer.style.visibility = 'hidden';\n outer.style.width = '100px';\n outer.style.position = 'absolute';\n outer.style.top = '-9999px';\n document.body.appendChild(outer);\n\n var widthNoScroll = outer.offsetWidth;\n outer.style.overflow = 'scroll';\n\n var inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n\n var widthWithScroll = inner.offsetWidth;\n outer.parentNode.removeChild(outer);\n scrollBarWidth = widthNoScroll - widthWithScroll;\n\n return scrollBarWidth;\n};\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar scrollBarWidth = void 0;\n\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2Nyb2xsYmFyLXdpZHRoLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3Njcm9sbGJhci13aWR0aC5qcz9lNjJkIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24gKCkge1xuICBpZiAoX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyKSByZXR1cm4gMDtcbiAgaWYgKHNjcm9sbEJhcldpZHRoICE9PSB1bmRlZmluZWQpIHJldHVybiBzY3JvbGxCYXJXaWR0aDtcblxuICB2YXIgb3V0ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgb3V0ZXIuY2xhc3NOYW1lID0gJ2VsLXNjcm9sbGJhcl9fd3JhcCc7XG4gIG91dGVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgb3V0ZXIuc3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICBvdXRlci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIG91dGVyLnN0eWxlLnRvcCA9ICctOTk5OXB4JztcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlcik7XG5cbiAgdmFyIHdpZHRoTm9TY3JvbGwgPSBvdXRlci5vZmZzZXRXaWR0aDtcbiAgb3V0ZXIuc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcblxuICB2YXIgaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgaW5uZXIuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gIG91dGVyLmFwcGVuZENoaWxkKGlubmVyKTtcblxuICB2YXIgd2lkdGhXaXRoU2Nyb2xsID0gaW5uZXIub2Zmc2V0V2lkdGg7XG4gIG91dGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob3V0ZXIpO1xuICBzY3JvbGxCYXJXaWR0aCA9IHdpZHRoTm9TY3JvbGwgLSB3aWR0aFdpdGhTY3JvbGw7XG5cbiAgcmV0dXJuIHNjcm9sbEJhcldpZHRoO1xufTtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIHNjcm9sbEJhcldpZHRoID0gdm9pZCAwO1xuXG47Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/scrollbar-width.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/shared.js":
- /*!*****************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/shared.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.isDef = isDef;\nexports.isKorean = isKorean;\nfunction isDef(val) {\n return val !== undefined && val !== null;\n}\nfunction isKorean(text) {\n var reg = /([(\\uAC00-\\uD7AF)|(\\u3130-\\u318F)])+/gi;\n return reg.test(text);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvc2hhcmVkLmpzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VsZW1lbnQtdWkvbGliL3V0aWxzL3NoYXJlZC5qcz9kMzk3Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5pc0RlZiA9IGlzRGVmO1xuZXhwb3J0cy5pc0tvcmVhbiA9IGlzS29yZWFuO1xuZnVuY3Rpb24gaXNEZWYodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGw7XG59XG5mdW5jdGlvbiBpc0tvcmVhbih0ZXh0KSB7XG4gIHZhciByZWcgPSAvKFsoXFx1QUMwMC1cXHVEN0FGKXwoXFx1MzEzMC1cXHUzMThGKV0pKy9naTtcbiAgcmV0dXJuIHJlZy50ZXN0KHRleHQpO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/shared.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/types.js":
- /*!****************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/types.js ***!
- \****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.isDefined = exports.isUndefined = exports.isFunction = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.isString = isString;\nexports.isObject = isObject;\nexports.isHtmlElement = isHtmlElement;\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction isString(obj) {\n return Object.prototype.toString.call(obj) === '[object String]';\n}\n\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nfunction isHtmlElement(node) {\n return node && node.nodeType === Node.ELEMENT_NODE;\n}\n\n/**\n * - Inspired:\n * https://github.com/jashkenas/underscore/blob/master/modules/isFunction.js\n */\nvar isFunction = function isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n};\n\nif ( true && (typeof Int8Array === 'undefined' ? 'undefined' : _typeof(Int8Array)) !== 'object' && (_vue2.default.prototype.$isServer || typeof document.childNodes !== 'function')) {\n exports.isFunction = isFunction = function isFunction(obj) {\n return typeof obj === 'function' || false;\n };\n}\n\nexports.isFunction = isFunction;\nvar isUndefined = exports.isUndefined = function isUndefined(val) {\n return val === void 0;\n};\n\nvar isDefined = exports.isDefined = function isDefined(val) {\n return val !== undefined && val !== null;\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXMuanMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXMuanM/YTc0MiJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmlzRGVmaW5lZCA9IGV4cG9ydHMuaXNVbmRlZmluZWQgPSBleHBvcnRzLmlzRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuZXhwb3J0cy5pc0h0bWxFbGVtZW50ID0gaXNIdG1sRWxlbWVudDtcblxudmFyIF92dWUgPSByZXF1aXJlKCd2dWUnKTtcblxudmFyIF92dWUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdnVlKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nO1xufVxuXG5mdW5jdGlvbiBpc0h0bWxFbGVtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREU7XG59XG5cbi8qKlxuICogIC0gSW5zcGlyZWQ6XG4gKiAgICBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi9tYXN0ZXIvbW9kdWxlcy9pc0Z1bmN0aW9uLmpzXG4gKi9cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spIHtcbiAgdmFyIGdldFR5cGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiBnZXRUeXBlLnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn07XG5cbmlmICh0eXBlb2YgLy4vICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihJbnQ4QXJyYXkpKSAhPT0gJ29iamVjdCcgJiYgKF92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciB8fCB0eXBlb2YgZG9jdW1lbnQuY2hpbGROb2RlcyAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24ob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicgfHwgZmFsc2U7XG4gIH07XG59XG5cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG52YXIgaXNVbmRlZmluZWQgPSBleHBvcnRzLmlzVW5kZWZpbmVkID0gZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB2YWwgPT09IHZvaWQgMDtcbn07XG5cbnZhciBpc0RlZmluZWQgPSBleHBvcnRzLmlzRGVmaW5lZCA9IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbDtcbn07Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/types.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/util.js":
- /*!***************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/util.js ***!
- \***************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\nexports.isEmpty = exports.isEqual = exports.arrayEquals = exports.looseEqual = exports.capitalize = exports.kebabCase = exports.autoprefixer = exports.isFirefox = exports.isEdge = exports.isIE = exports.coerceTruthyValueToArray = exports.arrayFind = exports.arrayFindIndex = exports.escapeRegexpString = exports.valueEquals = exports.generateId = exports.getValueByPath = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.noop = noop;\nexports.hasOwn = hasOwn;\nexports.toObject = toObject;\nexports.getPropByPath = getPropByPath;\nexports.rafThrottle = rafThrottle;\nexports.objToArray = objToArray;\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _types = __webpack_require__(/*! element-ui/lib/utils/types */ \"./node_modules/element-ui/lib/utils/types.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction noop() {};\n\nfunction hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n};\n\nfunction extend(to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to;\n};\n\nfunction toObject(arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res;\n};\n\nvar getValueByPath = exports.getValueByPath = function getValueByPath(object, prop) {\n prop = prop || '';\n var paths = prop.split('.');\n var current = object;\n var result = null;\n for (var i = 0, j = paths.length; i < j; i++) {\n var path = paths[i];\n if (!current) break;\n\n if (i === j - 1) {\n result = current[path];\n break;\n }\n current = current[path];\n }\n return result;\n};\n\nfunction getPropByPath(obj, path, strict) {\n var tempObj = obj;\n path = path.replace(/\\[(\\w+)\\]/g, '.$1');\n path = path.replace(/^\\./, '');\n\n var keyArr = path.split('.');\n var i = 0;\n for (var len = keyArr.length; i < len - 1; ++i) {\n if (!tempObj && !strict) break;\n var key = keyArr[i];\n if (key in tempObj) {\n tempObj = tempObj[key];\n } else {\n if (strict) {\n throw new Error('please transfer a valid prop path to form item!');\n }\n break;\n }\n }\n return {\n o: tempObj,\n k: keyArr[i],\n v: tempObj ? tempObj[keyArr[i]] : null\n };\n};\n\nvar generateId = exports.generateId = function generateId() {\n return Math.floor(Math.random() * 10000);\n};\n\nvar valueEquals = exports.valueEquals = function valueEquals(a, b) {\n // see: https://stackoverflow.com/questions/3115982/how-to-check-if-two-arrays-are-equal-with-javascript\n if (a === b) return true;\n if (!(a instanceof Array)) return false;\n if (!(b instanceof Array)) return false;\n if (a.length !== b.length) return false;\n for (var i = 0; i !== a.length; ++i) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n};\n\nvar escapeRegexpString = exports.escapeRegexpString = function escapeRegexpString() {\n var value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n return String(value).replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n};\n\n// TODO: use native Array.find, Array.findIndex when IE support is dropped\nvar arrayFindIndex = exports.arrayFindIndex = function arrayFindIndex(arr, pred) {\n for (var i = 0; i !== arr.length; ++i) {\n if (pred(arr[i])) {\n return i;\n }\n }\n return -1;\n};\n\nvar arrayFind = exports.arrayFind = function arrayFind(arr, pred) {\n var idx = arrayFindIndex(arr, pred);\n return idx !== -1 ? arr[idx] : undefined;\n};\n\n// coerce truthy value to array\nvar coerceTruthyValueToArray = exports.coerceTruthyValueToArray = function coerceTruthyValueToArray(val) {\n if (Array.isArray(val)) {\n return val;\n } else if (val) {\n return [val];\n } else {\n return [];\n }\n};\n\nvar isIE = exports.isIE = function isIE() {\n return !_vue2.default.prototype.$isServer && !isNaN(Number(document.documentMode));\n};\n\nvar isEdge = exports.isEdge = function isEdge() {\n return !_vue2.default.prototype.$isServer && navigator.userAgent.indexOf('Edge') > -1;\n};\n\nvar isFirefox = exports.isFirefox = function isFirefox() {\n return !_vue2.default.prototype.$isServer && !!window.navigator.userAgent.match(/firefox/i);\n};\n\nvar autoprefixer = exports.autoprefixer = function autoprefixer(style) {\n if ((typeof style === 'undefined' ? 'undefined' : _typeof(style)) !== 'object') return style;\n var rules = ['transform', 'transition', 'animation'];\n var prefixes = ['ms-', 'webkit-'];\n rules.forEach(function (rule) {\n var value = style[rule];\n if (rule && value) {\n prefixes.forEach(function (prefix) {\n style[prefix + rule] = value;\n });\n }\n });\n return style;\n};\n\nvar kebabCase = exports.kebabCase = function kebabCase(str) {\n var hyphenateRE = /([^-])([A-Z])/g;\n return str.replace(hyphenateRE, '$1-$2').replace(hyphenateRE, '$1-$2').toLowerCase();\n};\n\nvar capitalize = exports.capitalize = function capitalize(str) {\n if (!(0, _types.isString)(str)) return str;\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nvar looseEqual = exports.looseEqual = function looseEqual(a, b) {\n var isObjectA = (0, _types.isObject)(a);\n var isObjectB = (0, _types.isObject)(b);\n if (isObjectA && isObjectB) {\n return JSON.stringify(a) === JSON.stringify(b);\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b);\n } else {\n return false;\n }\n};\n\nvar arrayEquals = exports.arrayEquals = function arrayEquals(arrayA, arrayB) {\n arrayA = arrayA || [];\n arrayB = arrayB || [];\n\n if (arrayA.length !== arrayB.length) {\n return false;\n }\n\n for (var i = 0; i < arrayA.length; i++) {\n if (!looseEqual(arrayA[i], arrayB[i])) {\n return false;\n }\n }\n\n return true;\n};\n\nvar isEqual = exports.isEqual = function isEqual(value1, value2) {\n if (Array.isArray(value1) && Array.isArray(value2)) {\n return arrayEquals(value1, value2);\n }\n return looseEqual(value1, value2);\n};\n\nvar isEmpty = exports.isEmpty = function isEmpty(val) {\n // null or undefined\n if (val == null) return true;\n\n if (typeof val === 'boolean') return false;\n\n if (typeof val === 'number') return !val;\n\n if (val instanceof Error) return val.message === '';\n\n switch (Object.prototype.toString.call(val)) {\n // String or Array\n case '[object String]':\n case '[object Array]':\n return !val.length;\n\n // Map or Set or File\n case '[object File]':\n case '[object Map]':\n case '[object Set]':\n {\n return !val.size;\n }\n // Plain Object\n case '[object Object]':\n {\n return !Object.keys(val).length;\n }\n }\n\n return false;\n};\n\nfunction rafThrottle(fn) {\n var locked = false;\n return function () {\n var _this = this;\n\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (locked) return;\n locked = true;\n window.requestAnimationFrame(function (_) {\n fn.apply(_this, args);\n locked = false;\n });\n };\n}\n\nfunction objToArray(obj) {\n if (Array.isArray(obj)) {\n return obj;\n }\n return isEmpty(obj) ? [] : [obj];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdXRpbC5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy91dGlsLmpzPzgxMjIiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5pc0VtcHR5ID0gZXhwb3J0cy5pc0VxdWFsID0gZXhwb3J0cy5hcnJheUVxdWFscyA9IGV4cG9ydHMubG9vc2VFcXVhbCA9IGV4cG9ydHMuY2FwaXRhbGl6ZSA9IGV4cG9ydHMua2ViYWJDYXNlID0gZXhwb3J0cy5hdXRvcHJlZml4ZXIgPSBleHBvcnRzLmlzRmlyZWZveCA9IGV4cG9ydHMuaXNFZGdlID0gZXhwb3J0cy5pc0lFID0gZXhwb3J0cy5jb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXkgPSBleHBvcnRzLmFycmF5RmluZCA9IGV4cG9ydHMuYXJyYXlGaW5kSW5kZXggPSBleHBvcnRzLmVzY2FwZVJlZ2V4cFN0cmluZyA9IGV4cG9ydHMudmFsdWVFcXVhbHMgPSBleHBvcnRzLmdlbmVyYXRlSWQgPSBleHBvcnRzLmdldFZhbHVlQnlQYXRoID0gdW5kZWZpbmVkO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHMubm9vcCA9IG5vb3A7XG5leHBvcnRzLmhhc093biA9IGhhc093bjtcbmV4cG9ydHMudG9PYmplY3QgPSB0b09iamVjdDtcbmV4cG9ydHMuZ2V0UHJvcEJ5UGF0aCA9IGdldFByb3BCeVBhdGg7XG5leHBvcnRzLnJhZlRocm90dGxlID0gcmFmVGhyb3R0bGU7XG5leHBvcnRzLm9ialRvQXJyYXkgPSBvYmpUb0FycmF5O1xuXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xuXG52YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG52YXIgX3R5cGVzID0gcmVxdWlyZSgnZWxlbWVudC11aS9saWIvdXRpbHMvdHlwZXMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG5mdW5jdGlvbiBoYXNPd24ob2JqLCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpO1xufTtcblxuZnVuY3Rpb24gZXh0ZW5kKHRvLCBfZnJvbSkge1xuICBmb3IgKHZhciBrZXkgaW4gX2Zyb20pIHtcbiAgICB0b1trZXldID0gX2Zyb21ba2V5XTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xuXG5mdW5jdGlvbiB0b09iamVjdChhcnIpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnJbaV0pIHtcbiAgICAgIGV4dGVuZChyZXMsIGFycltpXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59O1xuXG52YXIgZ2V0VmFsdWVCeVBhdGggPSBleHBvcnRzLmdldFZhbHVlQnlQYXRoID0gZnVuY3Rpb24gZ2V0VmFsdWVCeVBhdGgob2JqZWN0LCBwcm9wKSB7XG4gIHByb3AgPSBwcm9wIHx8ICcnO1xuICB2YXIgcGF0aHMgPSBwcm9wLnNwbGl0KCcuJyk7XG4gIHZhciBjdXJyZW50ID0gb2JqZWN0O1xuICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBwYXRocy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICB2YXIgcGF0aCA9IHBhdGhzW2ldO1xuICAgIGlmICghY3VycmVudCkgYnJlYWs7XG5cbiAgICBpZiAoaSA9PT0gaiAtIDEpIHtcbiAgICAgIHJlc3VsdCA9IGN1cnJlbnRbcGF0aF07XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY3VycmVudCA9IGN1cnJlbnRbcGF0aF07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmZ1bmN0aW9uIGdldFByb3BCeVBhdGgob2JqLCBwYXRoLCBzdHJpY3QpIHtcbiAgdmFyIHRlbXBPYmogPSBvYmo7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL1xcWyhcXHcrKVxcXS9nLCAnLiQxJyk7XG4gIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC4vLCAnJyk7XG5cbiAgdmFyIGtleUFyciA9IHBhdGguc3BsaXQoJy4nKTtcbiAgdmFyIGkgPSAwO1xuICBmb3IgKHZhciBsZW4gPSBrZXlBcnIubGVuZ3RoOyBpIDwgbGVuIC0gMTsgKytpKSB7XG4gICAgaWYgKCF0ZW1wT2JqICYmICFzdHJpY3QpIGJyZWFrO1xuICAgIHZhciBrZXkgPSBrZXlBcnJbaV07XG4gICAgaWYgKGtleSBpbiB0ZW1wT2JqKSB7XG4gICAgICB0ZW1wT2JqID0gdGVtcE9ialtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncGxlYXNlIHRyYW5zZmVyIGEgdmFsaWQgcHJvcCBwYXRoIHRvIGZvcm0gaXRlbSEnKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIG86IHRlbXBPYmosXG4gICAgazoga2V5QXJyW2ldLFxuICAgIHY6IHRlbXBPYmogPyB0ZW1wT2JqW2tleUFycltpXV0gOiBudWxsXG4gIH07XG59O1xuXG52YXIgZ2VuZXJhdGVJZCA9IGV4cG9ydHMuZ2VuZXJhdGVJZCA9IGZ1bmN0aW9uIGdlbmVyYXRlSWQoKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMCk7XG59O1xuXG52YXIgdmFsdWVFcXVhbHMgPSBleHBvcnRzLnZhbHVlRXF1YWxzID0gZnVuY3Rpb24gdmFsdWVFcXVhbHMoYSwgYikge1xuICAvLyBzZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMxMTU5ODIvaG93LXRvLWNoZWNrLWlmLXR3by1hcnJheXMtYXJlLWVxdWFsLXdpdGgtamF2YXNjcmlwdFxuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmICghKGEgaW5zdGFuY2VvZiBBcnJheSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCEoYiBpbnN0YW5jZW9mIEFycmF5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGZvciAodmFyIGkgPSAwOyBpICE9PSBhLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBlc2NhcGVSZWdleHBTdHJpbmcgPSBleHBvcnRzLmVzY2FwZVJlZ2V4cFN0cmluZyA9IGZ1bmN0aW9uIGVzY2FwZVJlZ2V4cFN0cmluZygpIHtcbiAgdmFyIHZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csICdcXFxcJCYnKTtcbn07XG5cbi8vIFRPRE86IHVzZSBuYXRpdmUgQXJyYXkuZmluZCwgQXJyYXkuZmluZEluZGV4IHdoZW4gSUUgc3VwcG9ydCBpcyBkcm9wcGVkXG52YXIgYXJyYXlGaW5kSW5kZXggPSBleHBvcnRzLmFycmF5RmluZEluZGV4ID0gZnVuY3Rpb24gYXJyYXlGaW5kSW5kZXgoYXJyLCBwcmVkKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpICE9PSBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAocHJlZChhcnJbaV0pKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcblxudmFyIGFycmF5RmluZCA9IGV4cG9ydHMuYXJyYXlGaW5kID0gZnVuY3Rpb24gYXJyYXlGaW5kKGFyciwgcHJlZCkge1xuICB2YXIgaWR4ID0gYXJyYXlGaW5kSW5kZXgoYXJyLCBwcmVkKTtcbiAgcmV0dXJuIGlkeCAhPT0gLTEgPyBhcnJbaWR4XSA6IHVuZGVmaW5lZDtcbn07XG5cbi8vIGNvZXJjZSB0cnV0aHkgdmFsdWUgdG8gYXJyYXlcbnZhciBjb2VyY2VUcnV0aHlWYWx1ZVRvQXJyYXkgPSBleHBvcnRzLmNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSA9IGZ1bmN0aW9uIGNvZXJjZVRydXRoeVZhbHVlVG9BcnJheSh2YWwpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiB2YWw7XG4gIH0gZWxzZSBpZiAodmFsKSB7XG4gICAgcmV0dXJuIFt2YWxdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxudmFyIGlzSUUgPSBleHBvcnRzLmlzSUUgPSBmdW5jdGlvbiBpc0lFKCkge1xuICByZXR1cm4gIV92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciAmJiAhaXNOYU4oTnVtYmVyKGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO1xufTtcblxudmFyIGlzRWRnZSA9IGV4cG9ydHMuaXNFZGdlID0gZnVuY3Rpb24gaXNFZGdlKCkge1xuICByZXR1cm4gIV92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0VkZ2UnKSA+IC0xO1xufTtcblxudmFyIGlzRmlyZWZveCA9IGV4cG9ydHMuaXNGaXJlZm94ID0gZnVuY3Rpb24gaXNGaXJlZm94KCkge1xuICByZXR1cm4gIV92dWUyLmRlZmF1bHQucHJvdG90eXBlLiRpc1NlcnZlciAmJiAhIXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9maXJlZm94L2kpO1xufTtcblxudmFyIGF1dG9wcmVmaXhlciA9IGV4cG9ydHMuYXV0b3ByZWZpeGVyID0gZnVuY3Rpb24gYXV0b3ByZWZpeGVyKHN0eWxlKSB7XG4gIGlmICgodHlwZW9mIHN0eWxlID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihzdHlsZSkpICE9PSAnb2JqZWN0JykgcmV0dXJuIHN0eWxlO1xuICB2YXIgcnVsZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2l0aW9uJywgJ2FuaW1hdGlvbiddO1xuICB2YXIgcHJlZml4ZXMgPSBbJ21zLScsICd3ZWJraXQtJ107XG4gIHJ1bGVzLmZvckVhY2goZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICB2YXIgdmFsdWUgPSBzdHlsZVtydWxlXTtcbiAgICBpZiAocnVsZSAmJiB2YWx1ZSkge1xuICAgICAgcHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgICAgIHN0eWxlW3ByZWZpeCArIHJ1bGVdID0gdmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3R5bGU7XG59O1xuXG52YXIga2ViYWJDYXNlID0gZXhwb3J0cy5rZWJhYkNhc2UgPSBmdW5jdGlvbiBrZWJhYkNhc2Uoc3RyKSB7XG4gIHZhciBoeXBoZW5hdGVSRSA9IC8oW14tXSkoW0EtWl0pL2c7XG4gIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJyQxLSQyJykucmVwbGFjZShoeXBoZW5hdGVSRSwgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBjYXBpdGFsaXplID0gZXhwb3J0cy5jYXBpdGFsaXplID0gZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgaWYgKCEoMCwgX3R5cGVzLmlzU3RyaW5nKShzdHIpKSByZXR1cm4gc3RyO1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpO1xufTtcblxudmFyIGxvb3NlRXF1YWwgPSBleHBvcnRzLmxvb3NlRXF1YWwgPSBmdW5jdGlvbiBsb29zZUVxdWFsKGEsIGIpIHtcbiAgdmFyIGlzT2JqZWN0QSA9ICgwLCBfdHlwZXMuaXNPYmplY3QpKGEpO1xuICB2YXIgaXNPYmplY3RCID0gKDAsIF90eXBlcy5pc09iamVjdCkoYik7XG4gIGlmIChpc09iamVjdEEgJiYgaXNPYmplY3RCKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKTtcbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG52YXIgYXJyYXlFcXVhbHMgPSBleHBvcnRzLmFycmF5RXF1YWxzID0gZnVuY3Rpb24gYXJyYXlFcXVhbHMoYXJyYXlBLCBhcnJheUIpIHtcbiAgYXJyYXlBID0gYXJyYXlBIHx8IFtdO1xuICBhcnJheUIgPSBhcnJheUIgfHwgW107XG5cbiAgaWYgKGFycmF5QS5sZW5ndGggIT09IGFycmF5Qi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5QS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghbG9vc2VFcXVhbChhcnJheUFbaV0sIGFycmF5QltpXSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciBpc0VxdWFsID0gZXhwb3J0cy5pc0VxdWFsID0gZnVuY3Rpb24gaXNFcXVhbCh2YWx1ZTEsIHZhbHVlMikge1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTEpICYmIEFycmF5LmlzQXJyYXkodmFsdWUyKSkge1xuICAgIHJldHVybiBhcnJheUVxdWFscyh2YWx1ZTEsIHZhbHVlMik7XG4gIH1cbiAgcmV0dXJuIGxvb3NlRXF1YWwodmFsdWUxLCB2YWx1ZTIpO1xufTtcblxudmFyIGlzRW1wdHkgPSBleHBvcnRzLmlzRW1wdHkgPSBmdW5jdGlvbiBpc0VtcHR5KHZhbCkge1xuICAvLyBudWxsIG9yIHVuZGVmaW5lZFxuICBpZiAodmFsID09IG51bGwpIHJldHVybiB0cnVlO1xuXG4gIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHJldHVybiAhdmFsO1xuXG4gIGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIHZhbC5tZXNzYWdlID09PSAnJztcblxuICBzd2l0Y2ggKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpKSB7XG4gICAgLy8gU3RyaW5nIG9yIEFycmF5XG4gICAgY2FzZSAnW29iamVjdCBTdHJpbmddJzpcbiAgICBjYXNlICdbb2JqZWN0IEFycmF5XSc6XG4gICAgICByZXR1cm4gIXZhbC5sZW5ndGg7XG5cbiAgICAvLyBNYXAgb3IgU2V0IG9yIEZpbGVcbiAgICBjYXNlICdbb2JqZWN0IEZpbGVdJzpcbiAgICBjYXNlICdbb2JqZWN0IE1hcF0nOlxuICAgIGNhc2UgJ1tvYmplY3QgU2V0XSc6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAhdmFsLnNpemU7XG4gICAgICB9XG4gICAgLy8gUGxhaW4gT2JqZWN0XG4gICAgY2FzZSAnW29iamVjdCBPYmplY3RdJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICFPYmplY3Qua2V5cyh2YWwpLmxlbmd0aDtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHJhZlRocm90dGxlKGZuKSB7XG4gIHZhciBsb2NrZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgaWYgKGxvY2tlZCkgcmV0dXJuO1xuICAgIGxvY2tlZCA9IHRydWU7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoXykge1xuICAgICAgZm4uYXBwbHkoX3RoaXMsIGFyZ3MpO1xuICAgICAgbG9ja2VkID0gZmFsc2U7XG4gICAgfSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG9ialRvQXJyYXkob2JqKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIHJldHVybiBpc0VtcHR5KG9iaikgPyBbXSA6IFtvYmpdO1xufSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/util.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/vdom.js":
- /*!***************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/vdom.js ***!
- \***************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nexports.isVNode = isVNode;\n\nvar _util = __webpack_require__(/*! element-ui/lib/utils/util */ \"./node_modules/element-ui/lib/utils/util.js\");\n\nfunction isVNode(node) {\n return node !== null && (typeof node === 'undefined' ? 'undefined' : _typeof(node)) === 'object' && (0, _util.hasOwn)(node, 'componentOptions');\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdmRvbS5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy92ZG9tLmpzPzQxZjgiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHMuaXNWTm9kZSA9IGlzVk5vZGU7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoJ2VsZW1lbnQtdWkvbGliL3V0aWxzL3V0aWwnKTtcblxuZnVuY3Rpb24gaXNWTm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlICE9PSBudWxsICYmICh0eXBlb2Ygbm9kZSA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2Yobm9kZSkpID09PSAnb2JqZWN0JyAmJiAoMCwgX3V0aWwuaGFzT3duKShub2RlLCAnY29tcG9uZW50T3B0aW9ucycpO1xufTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/vdom.js\n");
- /***/ }),
- /***/ "./node_modules/element-ui/lib/utils/vue-popper.js":
- /*!*********************************************************!*\
- !*** ./node_modules/element-ui/lib/utils/vue-popper.js ***!
- \*********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- eval("\n\nexports.__esModule = true;\n\nvar _vue = __webpack_require__(/*! vue */ \"vue\");\n\nvar _vue2 = _interopRequireDefault(_vue);\n\nvar _popup = __webpack_require__(/*! element-ui/lib/utils/popup */ \"./node_modules/element-ui/lib/utils/popup/index.js\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PopperJS = _vue2.default.prototype.$isServer ? function () {} : __webpack_require__(/*! ./popper */ \"./node_modules/element-ui/lib/utils/popper.js\");\nvar stop = function stop(e) {\n return e.stopPropagation();\n};\n\n/**\n * @param {HTMLElement} [reference=$refs.reference] - The reference element used to position the popper.\n * @param {HTMLElement} [popper=$refs.popper] - The HTML element used as popper, or a configuration used to generate the popper.\n * @param {String} [placement=button] - Placement of the popper accepted values: top(-start, -end), right(-start, -end), bottom(-start, -end), left(-start, -end)\n * @param {Number} [offset=0] - Amount of pixels the popper will be shifted (can be negative).\n * @param {Boolean} [visible=false] Visibility of the popup element.\n * @param {Boolean} [visible-arrow=false] Visibility of the arrow, no style.\n */\nexports.default = {\n props: {\n transformOrigin: {\n type: [Boolean, String],\n default: true\n },\n placement: {\n type: String,\n default: 'bottom'\n },\n boundariesPadding: {\n type: Number,\n default: 5\n },\n reference: {},\n popper: {},\n offset: {\n default: 0\n },\n value: Boolean,\n visibleArrow: Boolean,\n arrowOffset: {\n type: Number,\n default: 35\n },\n appendToBody: {\n type: Boolean,\n default: true\n },\n popperOptions: {\n type: Object,\n default: function _default() {\n return {\n gpuAcceleration: false\n };\n }\n }\n },\n\n data: function data() {\n return {\n showPopper: false,\n currentPlacement: ''\n };\n },\n\n\n watch: {\n value: {\n immediate: true,\n handler: function handler(val) {\n this.showPopper = val;\n this.$emit('input', val);\n }\n },\n\n showPopper: function showPopper(val) {\n if (this.disabled) return;\n val ? this.updatePopper() : this.destroyPopper();\n this.$emit('input', val);\n }\n },\n\n methods: {\n createPopper: function createPopper() {\n var _this = this;\n\n if (this.$isServer) return;\n this.currentPlacement = this.currentPlacement || this.placement;\n if (!/^(top|bottom|left|right)(-start|-end)?$/g.test(this.currentPlacement)) {\n return;\n }\n\n var options = this.popperOptions;\n var popper = this.popperElm = this.popperElm || this.popper || this.$refs.popper;\n var reference = this.referenceElm = this.referenceElm || this.reference || this.$refs.reference;\n\n if (!reference && this.$slots.reference && this.$slots.reference[0]) {\n reference = this.referenceElm = this.$slots.reference[0].elm;\n }\n\n if (!popper || !reference) return;\n if (this.visibleArrow) this.appendArrow(popper);\n if (this.appendToBody) document.body.appendChild(this.popperElm);\n if (this.popperJS && this.popperJS.destroy) {\n this.popperJS.destroy();\n }\n\n options.placement = this.currentPlacement;\n options.offset = this.offset;\n options.arrowOffset = this.arrowOffset;\n this.popperJS = new PopperJS(reference, popper, options);\n this.popperJS.onCreate(function (_) {\n _this.$emit('created', _this);\n _this.resetTransformOrigin();\n _this.$nextTick(_this.updatePopper);\n });\n if (typeof options.onUpdate === 'function') {\n this.popperJS.onUpdate(options.onUpdate);\n }\n this.popperJS._popper.style.zIndex = _popup.PopupManager.nextZIndex();\n this.popperElm.addEventListener('click', stop);\n },\n updatePopper: function updatePopper() {\n var popperJS = this.popperJS;\n if (popperJS) {\n popperJS.update();\n if (popperJS._popper) {\n popperJS._popper.style.zIndex = _popup.PopupManager.nextZIndex();\n }\n } else {\n this.createPopper();\n }\n },\n doDestroy: function doDestroy(forceDestroy) {\n /* istanbul ignore if */\n if (!this.popperJS || this.showPopper && !forceDestroy) return;\n this.popperJS.destroy();\n this.popperJS = null;\n },\n destroyPopper: function destroyPopper() {\n if (this.popperJS) {\n this.resetTransformOrigin();\n }\n },\n resetTransformOrigin: function resetTransformOrigin() {\n if (!this.transformOrigin) return;\n var placementMap = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left'\n };\n var placement = this.popperJS._popper.getAttribute('x-placement').split('-')[0];\n var origin = placementMap[placement];\n this.popperJS._popper.style.transformOrigin = typeof this.transformOrigin === 'string' ? this.transformOrigin : ['top', 'bottom'].indexOf(placement) > -1 ? 'center ' + origin : origin + ' center';\n },\n appendArrow: function appendArrow(element) {\n var hash = void 0;\n if (this.appended) {\n return;\n }\n\n this.appended = true;\n\n for (var item in element.attributes) {\n if (/^_v-/.test(element.attributes[item].name)) {\n hash = element.attributes[item].name;\n break;\n }\n }\n\n var arrow = document.createElement('div');\n\n if (hash) {\n arrow.setAttribute(hash, '');\n }\n arrow.setAttribute('x-arrow', '');\n arrow.className = 'popper__arrow';\n element.appendChild(arrow);\n }\n },\n\n beforeDestroy: function beforeDestroy() {\n this.doDestroy(true);\n if (this.popperElm && this.popperElm.parentNode === document.body) {\n this.popperElm.removeEventListener('click', stop);\n document.body.removeChild(this.popperElm);\n }\n },\n\n\n // call destroy in keep-alive mode\n deactivated: function deactivated() {\n this.$options.beforeDestroy[0].call(this);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZWxlbWVudC11aS9saWIvdXRpbHMvdnVlLXBvcHBlci5qcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lbGVtZW50LXVpL2xpYi91dGlscy92dWUtcG9wcGVyLmpzP2U5NzQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX3Z1ZSA9IHJlcXVpcmUoJ3Z1ZScpO1xuXG52YXIgX3Z1ZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF92dWUpO1xuXG52YXIgX3BvcHVwID0gcmVxdWlyZSgnZWxlbWVudC11aS9saWIvdXRpbHMvcG9wdXAnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIFBvcHBlckpTID0gX3Z1ZTIuZGVmYXVsdC5wcm90b3R5cGUuJGlzU2VydmVyID8gZnVuY3Rpb24gKCkge30gOiByZXF1aXJlKCcuL3BvcHBlcicpO1xudmFyIHN0b3AgPSBmdW5jdGlvbiBzdG9wKGUpIHtcbiAgcmV0dXJuIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtyZWZlcmVuY2U9JHJlZnMucmVmZXJlbmNlXSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIuXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbcG9wcGVyPSRyZWZzLnBvcHBlcl0gLSBUaGUgSFRNTCBlbGVtZW50IHVzZWQgYXMgcG9wcGVyLCBvciBhIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgcG9wcGVyLlxuICogQHBhcmFtIHtTdHJpbmd9IFtwbGFjZW1lbnQ9YnV0dG9uXSAtIFBsYWNlbWVudCBvZiB0aGUgcG9wcGVyIGFjY2VwdGVkIHZhbHVlczogdG9wKC1zdGFydCwgLWVuZCksIHJpZ2h0KC1zdGFydCwgLWVuZCksIGJvdHRvbSgtc3RhcnQsIC1lbmQpLCBsZWZ0KC1zdGFydCwgLWVuZClcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb2Zmc2V0PTBdIC0gQW1vdW50IG9mIHBpeGVscyB0aGUgcG9wcGVyIHdpbGwgYmUgc2hpZnRlZCAoY2FuIGJlIG5lZ2F0aXZlKS5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3Zpc2libGU9ZmFsc2VdIFZpc2liaWxpdHkgb2YgdGhlIHBvcHVwIGVsZW1lbnQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFt2aXNpYmxlLWFycm93PWZhbHNlXSBWaXNpYmlsaXR5IG9mIHRoZSBhcnJvdywgbm8gc3R5bGUuXG4gKi9cbmV4cG9ydHMuZGVmYXVsdCA9IHtcbiAgcHJvcHM6IHtcbiAgICB0cmFuc2Zvcm1PcmlnaW46IHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgcGxhY2VtZW50OiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnYm90dG9tJ1xuICAgIH0sXG4gICAgYm91bmRhcmllc1BhZGRpbmc6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDVcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge30sXG4gICAgcG9wcGVyOiB7fSxcbiAgICBvZmZzZXQ6IHtcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIHZhbHVlOiBCb29sZWFuLFxuICAgIHZpc2libGVBcnJvdzogQm9vbGVhbixcbiAgICBhcnJvd09mZnNldDoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMzVcbiAgICB9LFxuICAgIGFwcGVuZFRvQm9keToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIHBvcHBlck9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdwdUFjY2VsZXJhdGlvbjogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHBlcjogZmFsc2UsXG4gICAgICBjdXJyZW50UGxhY2VtZW50OiAnJ1xuICAgIH07XG4gIH0sXG5cblxuICB3YXRjaDoge1xuICAgIHZhbHVlOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICBoYW5kbGVyOiBmdW5jdGlvbiBoYW5kbGVyKHZhbCkge1xuICAgICAgICB0aGlzLnNob3dQb3BwZXIgPSB2YWw7XG4gICAgICAgIHRoaXMuJGVtaXQoJ2lucHV0JywgdmFsKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvd1BvcHBlcjogZnVuY3Rpb24gc2hvd1BvcHBlcih2YWwpIHtcbiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgICB2YWwgPyB0aGlzLnVwZGF0ZVBvcHBlcigpIDogdGhpcy5kZXN0cm95UG9wcGVyKCk7XG4gICAgICB0aGlzLiRlbWl0KCdpbnB1dCcsIHZhbCk7XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBjcmVhdGVQb3BwZXI6IGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcigpIHtcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgIGlmICh0aGlzLiRpc1NlcnZlcikgcmV0dXJuO1xuICAgICAgdGhpcy5jdXJyZW50UGxhY2VtZW50ID0gdGhpcy5jdXJyZW50UGxhY2VtZW50IHx8IHRoaXMucGxhY2VtZW50O1xuICAgICAgaWYgKCEvXih0b3B8Ym90dG9tfGxlZnR8cmlnaHQpKC1zdGFydHwtZW5kKT8kL2cudGVzdCh0aGlzLmN1cnJlbnRQbGFjZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLnBvcHBlck9wdGlvbnM7XG4gICAgICB2YXIgcG9wcGVyID0gdGhpcy5wb3BwZXJFbG0gPSB0aGlzLnBvcHBlckVsbSB8fCB0aGlzLnBvcHBlciB8fCB0aGlzLiRyZWZzLnBvcHBlcjtcbiAgICAgIHZhciByZWZlcmVuY2UgPSB0aGlzLnJlZmVyZW5jZUVsbSA9IHRoaXMucmVmZXJlbmNlRWxtIHx8IHRoaXMucmVmZXJlbmNlIHx8IHRoaXMuJHJlZnMucmVmZXJlbmNlO1xuXG4gICAgICBpZiAoIXJlZmVyZW5jZSAmJiB0aGlzLiRzbG90cy5yZWZlcmVuY2UgJiYgdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdKSB7XG4gICAgICAgIHJlZmVyZW5jZSA9IHRoaXMucmVmZXJlbmNlRWxtID0gdGhpcy4kc2xvdHMucmVmZXJlbmNlWzBdLmVsbTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwb3BwZXIgfHwgIXJlZmVyZW5jZSkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMudmlzaWJsZUFycm93KSB0aGlzLmFwcGVuZEFycm93KHBvcHBlcik7XG4gICAgICBpZiAodGhpcy5hcHBlbmRUb0JvZHkpIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5wb3BwZXJFbG0pO1xuICAgICAgaWYgKHRoaXMucG9wcGVySlMgJiYgdGhpcy5wb3BwZXJKUy5kZXN0cm95KSB7XG4gICAgICAgIHRoaXMucG9wcGVySlMuZGVzdHJveSgpO1xuICAgICAgfVxuXG4gICAgICBvcHRpb25zLnBsYWNlbWVudCA9IHRoaXMuY3VycmVudFBsYWNlbWVudDtcbiAgICAgIG9wdGlvbnMub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICBvcHRpb25zLmFycm93T2Zmc2V0ID0gdGhpcy5hcnJvd09mZnNldDtcbiAgICAgIHRoaXMucG9wcGVySlMgPSBuZXcgUG9wcGVySlMocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpO1xuICAgICAgdGhpcy5wb3BwZXJKUy5vbkNyZWF0ZShmdW5jdGlvbiAoXykge1xuICAgICAgICBfdGhpcy4kZW1pdCgnY3JlYXRlZCcsIF90aGlzKTtcbiAgICAgICAgX3RoaXMucmVzZXRUcmFuc2Zvcm1PcmlnaW4oKTtcbiAgICAgICAgX3RoaXMuJG5leHRUaWNrKF90aGlzLnVwZGF0ZVBvcHBlcik7XG4gICAgICB9KTtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5vblVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnBvcHBlckpTLm9uVXBkYXRlKG9wdGlvbnMub25VcGRhdGUpO1xuICAgICAgfVxuICAgICAgdGhpcy5wb3BwZXJKUy5fcG9wcGVyLnN0eWxlLnpJbmRleCA9IF9wb3B1cC5Qb3B1cE1hbmFnZXIubmV4dFpJbmRleCgpO1xuICAgICAgdGhpcy5wb3BwZXJFbG0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdG9wKTtcbiAgICB9LFxuICAgIHVwZGF0ZVBvcHBlcjogZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuICAgICAgdmFyIHBvcHBlckpTID0gdGhpcy5wb3BwZXJKUztcbiAgICAgIGlmIChwb3BwZXJKUykge1xuICAgICAgICBwb3BwZXJKUy51cGRhdGUoKTtcbiAgICAgICAgaWYgKHBvcHBlckpTLl9wb3BwZXIpIHtcbiAgICAgICAgICBwb3BwZXJKUy5fcG9wcGVyLnN0eWxlLnpJbmRleCA9IF9wb3B1cC5Qb3B1cE1hbmFnZXIubmV4dFpJbmRleCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZVBvcHBlcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgZG9EZXN0cm95OiBmdW5jdGlvbiBkb0Rlc3Ryb3koZm9yY2VEZXN0cm95KSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmICghdGhpcy5wb3BwZXJKUyB8fCB0aGlzLnNob3dQb3BwZXIgJiYgIWZvcmNlRGVzdHJveSkgcmV0dXJuO1xuICAgICAgdGhpcy5wb3BwZXJKUy5kZXN0cm95KCk7XG4gICAgICB0aGlzLnBvcHBlckpTID0gbnVsbDtcbiAgICB9LFxuICAgIGRlc3Ryb3lQb3BwZXI6IGZ1bmN0aW9uIGRlc3Ryb3lQb3BwZXIoKSB7XG4gICAgICBpZiAodGhpcy5wb3BwZXJKUykge1xuICAgICAgICB0aGlzLnJlc2V0VHJhbnNmb3JtT3JpZ2luKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNldFRyYW5zZm9ybU9yaWdpbjogZnVuY3Rpb24gcmVzZXRUcmFuc2Zvcm1PcmlnaW4oKSB7XG4gICAgICBpZiAoIXRoaXMudHJhbnNmb3JtT3JpZ2luKSByZXR1cm47XG4gICAgICB2YXIgcGxhY2VtZW50TWFwID0ge1xuICAgICAgICB0b3A6ICdib3R0b20nLFxuICAgICAgICBib3R0b206ICd0b3AnLFxuICAgICAgICBsZWZ0OiAncmlnaHQnLFxuICAgICAgICByaWdodDogJ2xlZnQnXG4gICAgICB9O1xuICAgICAgdmFyIHBsYWNlbWVudCA9IHRoaXMucG9wcGVySlMuX3BvcHBlci5nZXRBdHRyaWJ1dGUoJ3gtcGxhY2VtZW50Jykuc3BsaXQoJy0nKVswXTtcbiAgICAgIHZhciBvcmlnaW4gPSBwbGFjZW1lbnRNYXBbcGxhY2VtZW50XTtcbiAgICAgIHRoaXMucG9wcGVySlMuX3BvcHBlci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSB0eXBlb2YgdGhpcy50cmFuc2Zvcm1PcmlnaW4gPT09ICdzdHJpbmcnID8gdGhpcy50cmFuc2Zvcm1PcmlnaW4gOiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPiAtMSA/ICdjZW50ZXIgJyArIG9yaWdpbiA6IG9yaWdpbiArICcgY2VudGVyJztcbiAgICB9LFxuICAgIGFwcGVuZEFycm93OiBmdW5jdGlvbiBhcHBlbmRBcnJvdyhlbGVtZW50KSB7XG4gICAgICB2YXIgaGFzaCA9IHZvaWQgMDtcbiAgICAgIGlmICh0aGlzLmFwcGVuZGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hcHBlbmRlZCA9IHRydWU7XG5cbiAgICAgIGZvciAodmFyIGl0ZW0gaW4gZWxlbWVudC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgIGlmICgvXl92LS8udGVzdChlbGVtZW50LmF0dHJpYnV0ZXNbaXRlbV0ubmFtZSkpIHtcbiAgICAgICAgICBoYXNoID0gZWxlbWVudC5hdHRyaWJ1dGVzW2l0ZW1dLm5hbWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGFycm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGlmIChoYXNoKSB7XG4gICAgICAgIGFycm93LnNldEF0dHJpYnV0ZShoYXNoLCAnJyk7XG4gICAgICB9XG4gICAgICBhcnJvdy5zZXRBdHRyaWJ1dGUoJ3gtYXJyb3cnLCAnJyk7XG4gICAgICBhcnJvdy5jbGFzc05hbWUgPSAncG9wcGVyX19hcnJvdyc7XG4gICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGFycm93KTtcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmRvRGVzdHJveSh0cnVlKTtcbiAgICBpZiAodGhpcy5wb3BwZXJFbG0gJiYgdGhpcy5wb3BwZXJFbG0ucGFyZW50Tm9kZSA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgdGhpcy5wb3BwZXJFbG0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBzdG9wKTtcbiAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5wb3BwZXJFbG0pO1xuICAgIH1cbiAgfSxcblxuXG4gIC8vIGNhbGwgZGVzdHJveSBpbiBrZWVwLWFsaXZlIG1vZGVcbiAgZGVhY3RpdmF0ZWQ6IGZ1bmN0aW9uIGRlYWN0aXZhdGVkKCkge1xuICAgIHRoaXMuJG9wdGlvbnMuYmVmb3JlRGVzdHJveVswXS5jYWxsKHRoaXMpO1xuICB9XG59OyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/element-ui/lib/utils/vue-popper.js\n");
- /***/ })
- }]);
|