-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path1256.8ec1e900.iframe.bundle.js
3 lines (3 loc) · 692 KB
/
1256.8ec1e900.iframe.bundle.js
1
2
3
/*! For license information please see 1256.8ec1e900.iframe.bundle.js.LICENSE.txt */
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[1256],{"./node_modules/css-loader/dist/cjs.js!./node_modules/react-datepicker/dist/react-datepicker.css":(module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{A:()=>__WEBPACK_DEFAULT_EXPORT__});var _css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/css-loader/dist/runtime/sourceMaps.js"),_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__),_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/css-loader/dist/runtime/api.js"),___CSS_LOADER_EXPORT___=__webpack_require__.n(_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__)()(_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default());___CSS_LOADER_EXPORT___.push([module.id,'.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n margin-left: -8px;\n position: absolute;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow, .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before,\n.react-datepicker__month-read-view--down-arrow::before,\n.react-datepicker__month-year-read-view--down-arrow::before {\n box-sizing: content-box;\n position: absolute;\n border: 8px solid transparent;\n height: 0;\n width: 1px;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before,\n.react-datepicker__month-read-view--down-arrow::before,\n.react-datepicker__month-year-read-view--down-arrow::before {\n content: "";\n z-index: -1;\n border-width: 8px;\n left: -8px;\n border-bottom-color: #aeaeae;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle {\n top: 0;\n margin-top: -8px;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before {\n border-top: none;\n border-bottom-color: #f0f0f0;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before {\n top: -1px;\n border-bottom-color: #aeaeae;\n}\n\n.react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n bottom: 0;\n margin-bottom: -8px;\n}\n\n.react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before,\n.react-datepicker__month-read-view--down-arrow::before,\n.react-datepicker__month-year-read-view--down-arrow::before {\n border-bottom: none;\n border-top-color: #fff;\n}\n\n.react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before,\n.react-datepicker__month-read-view--down-arrow::before,\n.react-datepicker__month-year-read-view--down-arrow::before {\n bottom: -1px;\n border-top-color: #aeaeae;\n}\n\n.react-datepicker-wrapper {\n display: inline-block;\n}\n\n.react-datepicker {\n font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n font-size: 0.8rem;\n background-color: #fff;\n color: #000;\n border: 1px solid #aeaeae;\n border-radius: 0.3rem;\n display: inline-block;\n position: relative;\n}\n\n.react-datepicker--time-only .react-datepicker__triangle {\n left: 35px;\n}\n\n.react-datepicker--time-only .react-datepicker__time-container {\n border-left: 0;\n}\n\n.react-datepicker--time-only .react-datepicker__time {\n border-radius: 0.3rem;\n}\n\n.react-datepicker--time-only .react-datepicker__time-box {\n border-radius: 0.3rem;\n}\n\n.react-datepicker__triangle {\n position: absolute;\n left: 50px;\n}\n\n.react-datepicker-popper {\n z-index: 1;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] {\n margin-top: 10px;\n}\n\n.react-datepicker-popper[data-placement^="top"] {\n margin-bottom: 10px;\n}\n\n.react-datepicker-popper[data-placement^="right"] {\n margin-left: 8px;\n}\n\n.react-datepicker-popper[data-placement^="right"] .react-datepicker__triangle {\n left: auto;\n right: 42px;\n}\n\n.react-datepicker-popper[data-placement^="left"] {\n margin-right: 8px;\n}\n\n.react-datepicker-popper[data-placement^="left"] .react-datepicker__triangle {\n left: 42px;\n right: auto;\n}\n\n.react-datepicker__header {\n text-align: center;\n background-color: #f0f0f0;\n border-bottom: 1px solid #aeaeae;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n padding-top: 8px;\n position: relative;\n}\n\n.react-datepicker__header--time {\n padding-bottom: 8px;\n padding-left: 5px;\n padding-right: 5px;\n}\n\n.react-datepicker__year-dropdown-container--select,\n.react-datepicker__month-dropdown-container--select,\n.react-datepicker__month-year-dropdown-container--select,\n.react-datepicker__year-dropdown-container--scroll,\n.react-datepicker__month-dropdown-container--scroll,\n.react-datepicker__month-year-dropdown-container--scroll {\n display: inline-block;\n margin: 0 2px;\n}\n\n.react-datepicker__current-month,\n.react-datepicker-time__header {\n margin-top: 0;\n color: #000;\n font-weight: bold;\n font-size: 0.944rem;\n}\n\n.react-datepicker-time__header {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.react-datepicker__navigation {\n background: none;\n line-height: 1.7rem;\n text-align: center;\n cursor: pointer;\n position: absolute;\n top: 10px;\n width: 0;\n padding: 0;\n border: 0.45rem solid transparent;\n z-index: 1;\n height: 10px;\n width: 10px;\n text-indent: -999em;\n overflow: hidden;\n}\n\n.react-datepicker__navigation--previous {\n left: 10px;\n border-right-color: #ccc;\n}\n\n.react-datepicker__navigation--previous:hover {\n border-right-color: #b3b3b3;\n}\n\n.react-datepicker__navigation--previous--disabled, .react-datepicker__navigation--previous--disabled:hover {\n border-right-color: #e6e6e6;\n cursor: default;\n}\n\n.react-datepicker__navigation--next {\n right: 10px;\n border-left-color: #ccc;\n}\n\n.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button) {\n right: 80px;\n}\n\n.react-datepicker__navigation--next:hover {\n border-left-color: #b3b3b3;\n}\n\n.react-datepicker__navigation--next--disabled, .react-datepicker__navigation--next--disabled:hover {\n border-left-color: #e6e6e6;\n cursor: default;\n}\n\n.react-datepicker__navigation--years {\n position: relative;\n top: 0;\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.react-datepicker__navigation--years-previous {\n top: 4px;\n border-top-color: #ccc;\n}\n\n.react-datepicker__navigation--years-previous:hover {\n border-top-color: #b3b3b3;\n}\n\n.react-datepicker__navigation--years-upcoming {\n top: -4px;\n border-bottom-color: #ccc;\n}\n\n.react-datepicker__navigation--years-upcoming:hover {\n border-bottom-color: #b3b3b3;\n}\n\n.react-datepicker__month-container {\n float: left;\n}\n\n.react-datepicker__month {\n margin: 0.4rem;\n text-align: center;\n}\n\n.react-datepicker__time-container {\n float: right;\n border-left: 1px solid #aeaeae;\n width: 70px;\n}\n\n.react-datepicker__time-container--with-today-button {\n display: inline;\n border: 1px solid #aeaeae;\n border-radius: 0.3rem;\n position: absolute;\n right: -72px;\n top: 0;\n}\n\n.react-datepicker__time-container .react-datepicker__time {\n position: relative;\n background: white;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box {\n width: 70px;\n overflow-x: hidden;\n margin: 0 auto;\n text-align: center;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list {\n list-style: none;\n margin: 0;\n height: calc(195px + (1.7rem / 2));\n overflow-y: scroll;\n padding-right: 30px;\n width: 100%;\n box-sizing: content-box;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item {\n padding: 5px 10px;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover {\n cursor: pointer;\n background-color: #f0f0f0;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected {\n background-color: #216ba5;\n color: white;\n font-weight: bold;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover {\n background-color: #216ba5;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled {\n color: #ccc;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover {\n cursor: default;\n background-color: transparent;\n}\n\n.react-datepicker__week-number {\n color: #ccc;\n display: inline-block;\n width: 1.7rem;\n line-height: 1.7rem;\n text-align: center;\n margin: 0.166rem;\n}\n\n.react-datepicker__week-number.react-datepicker__week-number--clickable {\n cursor: pointer;\n}\n\n.react-datepicker__week-number.react-datepicker__week-number--clickable:hover {\n border-radius: 0.3rem;\n background-color: #f0f0f0;\n}\n\n.react-datepicker__day-names,\n.react-datepicker__week {\n white-space: nowrap;\n}\n\n.react-datepicker__day-name,\n.react-datepicker__day,\n.react-datepicker__time-name {\n color: #000;\n display: inline-block;\n width: 1.7rem;\n line-height: 1.7rem;\n text-align: center;\n margin: 0.166rem;\n}\n\n.react-datepicker__day {\n cursor: pointer;\n}\n\n.react-datepicker__day:hover {\n border-radius: 0.3rem;\n background-color: #f0f0f0;\n}\n\n.react-datepicker__day--today {\n font-weight: bold;\n}\n\n.react-datepicker__day--highlighted {\n border-radius: 0.3rem;\n background-color: #3dcc4a;\n color: #fff;\n}\n\n.react-datepicker__day--highlighted:hover {\n background-color: #32be3f;\n}\n\n.react-datepicker__day--highlighted-custom-1 {\n color: magenta;\n}\n\n.react-datepicker__day--highlighted-custom-2 {\n color: green;\n}\n\n.react-datepicker__day--selected, .react-datepicker__day--in-selecting-range, .react-datepicker__day--in-range {\n border-radius: 0.3rem;\n background-color: #216ba5;\n color: #fff;\n}\n\n.react-datepicker__day--selected:hover, .react-datepicker__day--in-selecting-range:hover, .react-datepicker__day--in-range:hover {\n background-color: #1d5d90;\n}\n\n.react-datepicker__day--keyboard-selected {\n border-radius: 0.3rem;\n background-color: #2a87d0;\n color: #fff;\n}\n\n.react-datepicker__day--keyboard-selected:hover {\n background-color: #1d5d90;\n}\n\n.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range) {\n background-color: rgba(33, 107, 165, 0.5);\n}\n\n.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range) {\n background-color: #f0f0f0;\n color: #000;\n}\n\n.react-datepicker__day--disabled {\n cursor: default;\n color: #ccc;\n}\n\n.react-datepicker__day--disabled:hover {\n background-color: transparent;\n}\n\n.react-datepicker__input-container {\n position: relative;\n display: inline-block;\n}\n\n.react-datepicker__year-read-view,\n.react-datepicker__month-read-view,\n.react-datepicker__month-year-read-view {\n border: 1px solid transparent;\n border-radius: 0.3rem;\n}\n\n.react-datepicker__year-read-view:hover,\n.react-datepicker__month-read-view:hover,\n.react-datepicker__month-year-read-view:hover {\n cursor: pointer;\n}\n\n.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow {\n border-top-color: #b3b3b3;\n}\n\n.react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n border-top-color: #ccc;\n float: right;\n margin-left: 20px;\n top: 8px;\n position: relative;\n border-width: 0.45rem;\n}\n\n.react-datepicker__year-dropdown,\n.react-datepicker__month-dropdown,\n.react-datepicker__month-year-dropdown {\n background-color: #f0f0f0;\n position: absolute;\n width: 50%;\n left: 25%;\n top: 30px;\n z-index: 1;\n text-align: center;\n border-radius: 0.3rem;\n border: 1px solid #aeaeae;\n}\n\n.react-datepicker__year-dropdown:hover,\n.react-datepicker__month-dropdown:hover,\n.react-datepicker__month-year-dropdown:hover {\n cursor: pointer;\n}\n\n.react-datepicker__year-dropdown--scrollable,\n.react-datepicker__month-dropdown--scrollable,\n.react-datepicker__month-year-dropdown--scrollable {\n height: 150px;\n overflow-y: scroll;\n}\n\n.react-datepicker__year-option,\n.react-datepicker__month-option,\n.react-datepicker__month-year-option {\n line-height: 20px;\n width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.react-datepicker__year-option:first-of-type,\n.react-datepicker__month-option:first-of-type,\n.react-datepicker__month-year-option:first-of-type {\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.react-datepicker__year-option:last-of-type,\n.react-datepicker__month-option:last-of-type,\n.react-datepicker__month-year-option:last-of-type {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n border-bottom-left-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.react-datepicker__year-option:hover,\n.react-datepicker__month-option:hover,\n.react-datepicker__month-year-option:hover {\n background-color: #ccc;\n}\n\n.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,\n.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,\n.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming {\n border-bottom-color: #b3b3b3;\n}\n\n.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,\n.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,\n.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous {\n border-top-color: #b3b3b3;\n}\n\n.react-datepicker__year-option--selected,\n.react-datepicker__month-option--selected,\n.react-datepicker__month-year-option--selected {\n position: absolute;\n left: 15px;\n}\n\n.react-datepicker__close-icon {\n background-color: transparent;\n border: 0;\n cursor: pointer;\n outline: 0;\n padding: 0;\n vertical-align: middle;\n position: absolute;\n height: 16px;\n width: 16px;\n top: 25%;\n right: 7px;\n}\n\n.react-datepicker__close-icon::after {\n background-color: #216ba5;\n border-radius: 50%;\n bottom: 0;\n box-sizing: border-box;\n color: #fff;\n content: "\\00d7";\n cursor: pointer;\n font-size: 12px;\n height: 16px;\n width: 16px;\n line-height: 1;\n margin: -8px auto 0;\n padding: 2px;\n position: absolute;\n right: 0px;\n text-align: center;\n}\n\n.react-datepicker__today-button {\n background: #f0f0f0;\n border-top: 1px solid #aeaeae;\n cursor: pointer;\n text-align: center;\n font-weight: bold;\n padding: 5px 0;\n clear: left;\n}\n\n.react-datepicker__portal {\n position: fixed;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.8);\n left: 0;\n top: 0;\n justify-content: center;\n align-items: center;\n display: flex;\n z-index: 2147483647;\n}\n\n.react-datepicker__portal .react-datepicker__day-name,\n.react-datepicker__portal .react-datepicker__day,\n.react-datepicker__portal .react-datepicker__time-name {\n width: 3rem;\n line-height: 3rem;\n}\n\n@media (max-width: 400px), (max-height: 550px) {\n .react-datepicker__portal .react-datepicker__day-name,\n .react-datepicker__portal .react-datepicker__day,\n .react-datepicker__portal .react-datepicker__time-name {\n width: 2rem;\n line-height: 2rem;\n }\n}\n\n.react-datepicker__portal .react-datepicker__current-month,\n.react-datepicker__portal .react-datepicker-time__header {\n font-size: 1.44rem;\n}\n\n.react-datepicker__portal .react-datepicker__navigation {\n border: 0.81rem solid transparent;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--previous {\n border-right-color: #ccc;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--previous:hover {\n border-right-color: #b3b3b3;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--previous--disabled, .react-datepicker__portal .react-datepicker__navigation--previous--disabled:hover {\n border-right-color: #e6e6e6;\n cursor: default;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--next {\n border-left-color: #ccc;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--next:hover {\n border-left-color: #b3b3b3;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--next--disabled, .react-datepicker__portal .react-datepicker__navigation--next--disabled:hover {\n border-left-color: #e6e6e6;\n cursor: default;\n}\n',"",{version:3,sources:["webpack://./node_modules/react-datepicker/dist/react-datepicker.css"],names:[],mappings:"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",sourcesContent:['.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n margin-left: -8px;\n position: absolute;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow, .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before,\n.react-datepicker__month-read-view--down-arrow::before,\n.react-datepicker__month-year-read-view--down-arrow::before {\n box-sizing: content-box;\n position: absolute;\n border: 8px solid transparent;\n height: 0;\n width: 1px;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before,\n.react-datepicker__month-read-view--down-arrow::before,\n.react-datepicker__month-year-read-view--down-arrow::before {\n content: "";\n z-index: -1;\n border-width: 8px;\n left: -8px;\n border-bottom-color: #aeaeae;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle {\n top: 0;\n margin-top: -8px;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle, .react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before {\n border-top: none;\n border-bottom-color: #f0f0f0;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] .react-datepicker__triangle::before {\n top: -1px;\n border-bottom-color: #aeaeae;\n}\n\n.react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n bottom: 0;\n margin-bottom: -8px;\n}\n\n.react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle, .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow, .react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before,\n.react-datepicker__month-read-view--down-arrow::before,\n.react-datepicker__month-year-read-view--down-arrow::before {\n border-bottom: none;\n border-top-color: #fff;\n}\n\n.react-datepicker-popper[data-placement^="top"] .react-datepicker__triangle::before, .react-datepicker__year-read-view--down-arrow::before,\n.react-datepicker__month-read-view--down-arrow::before,\n.react-datepicker__month-year-read-view--down-arrow::before {\n bottom: -1px;\n border-top-color: #aeaeae;\n}\n\n.react-datepicker-wrapper {\n display: inline-block;\n}\n\n.react-datepicker {\n font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\n font-size: 0.8rem;\n background-color: #fff;\n color: #000;\n border: 1px solid #aeaeae;\n border-radius: 0.3rem;\n display: inline-block;\n position: relative;\n}\n\n.react-datepicker--time-only .react-datepicker__triangle {\n left: 35px;\n}\n\n.react-datepicker--time-only .react-datepicker__time-container {\n border-left: 0;\n}\n\n.react-datepicker--time-only .react-datepicker__time {\n border-radius: 0.3rem;\n}\n\n.react-datepicker--time-only .react-datepicker__time-box {\n border-radius: 0.3rem;\n}\n\n.react-datepicker__triangle {\n position: absolute;\n left: 50px;\n}\n\n.react-datepicker-popper {\n z-index: 1;\n}\n\n.react-datepicker-popper[data-placement^="bottom"] {\n margin-top: 10px;\n}\n\n.react-datepicker-popper[data-placement^="top"] {\n margin-bottom: 10px;\n}\n\n.react-datepicker-popper[data-placement^="right"] {\n margin-left: 8px;\n}\n\n.react-datepicker-popper[data-placement^="right"] .react-datepicker__triangle {\n left: auto;\n right: 42px;\n}\n\n.react-datepicker-popper[data-placement^="left"] {\n margin-right: 8px;\n}\n\n.react-datepicker-popper[data-placement^="left"] .react-datepicker__triangle {\n left: 42px;\n right: auto;\n}\n\n.react-datepicker__header {\n text-align: center;\n background-color: #f0f0f0;\n border-bottom: 1px solid #aeaeae;\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n padding-top: 8px;\n position: relative;\n}\n\n.react-datepicker__header--time {\n padding-bottom: 8px;\n padding-left: 5px;\n padding-right: 5px;\n}\n\n.react-datepicker__year-dropdown-container--select,\n.react-datepicker__month-dropdown-container--select,\n.react-datepicker__month-year-dropdown-container--select,\n.react-datepicker__year-dropdown-container--scroll,\n.react-datepicker__month-dropdown-container--scroll,\n.react-datepicker__month-year-dropdown-container--scroll {\n display: inline-block;\n margin: 0 2px;\n}\n\n.react-datepicker__current-month,\n.react-datepicker-time__header {\n margin-top: 0;\n color: #000;\n font-weight: bold;\n font-size: 0.944rem;\n}\n\n.react-datepicker-time__header {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.react-datepicker__navigation {\n background: none;\n line-height: 1.7rem;\n text-align: center;\n cursor: pointer;\n position: absolute;\n top: 10px;\n width: 0;\n padding: 0;\n border: 0.45rem solid transparent;\n z-index: 1;\n height: 10px;\n width: 10px;\n text-indent: -999em;\n overflow: hidden;\n}\n\n.react-datepicker__navigation--previous {\n left: 10px;\n border-right-color: #ccc;\n}\n\n.react-datepicker__navigation--previous:hover {\n border-right-color: #b3b3b3;\n}\n\n.react-datepicker__navigation--previous--disabled, .react-datepicker__navigation--previous--disabled:hover {\n border-right-color: #e6e6e6;\n cursor: default;\n}\n\n.react-datepicker__navigation--next {\n right: 10px;\n border-left-color: #ccc;\n}\n\n.react-datepicker__navigation--next--with-time:not(.react-datepicker__navigation--next--with-today-button) {\n right: 80px;\n}\n\n.react-datepicker__navigation--next:hover {\n border-left-color: #b3b3b3;\n}\n\n.react-datepicker__navigation--next--disabled, .react-datepicker__navigation--next--disabled:hover {\n border-left-color: #e6e6e6;\n cursor: default;\n}\n\n.react-datepicker__navigation--years {\n position: relative;\n top: 0;\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.react-datepicker__navigation--years-previous {\n top: 4px;\n border-top-color: #ccc;\n}\n\n.react-datepicker__navigation--years-previous:hover {\n border-top-color: #b3b3b3;\n}\n\n.react-datepicker__navigation--years-upcoming {\n top: -4px;\n border-bottom-color: #ccc;\n}\n\n.react-datepicker__navigation--years-upcoming:hover {\n border-bottom-color: #b3b3b3;\n}\n\n.react-datepicker__month-container {\n float: left;\n}\n\n.react-datepicker__month {\n margin: 0.4rem;\n text-align: center;\n}\n\n.react-datepicker__time-container {\n float: right;\n border-left: 1px solid #aeaeae;\n width: 70px;\n}\n\n.react-datepicker__time-container--with-today-button {\n display: inline;\n border: 1px solid #aeaeae;\n border-radius: 0.3rem;\n position: absolute;\n right: -72px;\n top: 0;\n}\n\n.react-datepicker__time-container .react-datepicker__time {\n position: relative;\n background: white;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box {\n width: 70px;\n overflow-x: hidden;\n margin: 0 auto;\n text-align: center;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list {\n list-style: none;\n margin: 0;\n height: calc(195px + (1.7rem / 2));\n overflow-y: scroll;\n padding-right: 30px;\n width: 100%;\n box-sizing: content-box;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item {\n padding: 5px 10px;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item:hover {\n cursor: pointer;\n background-color: #f0f0f0;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected {\n background-color: #216ba5;\n color: white;\n font-weight: bold;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--selected:hover {\n background-color: #216ba5;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled {\n color: #ccc;\n}\n\n.react-datepicker__time-container .react-datepicker__time .react-datepicker__time-box ul.react-datepicker__time-list li.react-datepicker__time-list-item--disabled:hover {\n cursor: default;\n background-color: transparent;\n}\n\n.react-datepicker__week-number {\n color: #ccc;\n display: inline-block;\n width: 1.7rem;\n line-height: 1.7rem;\n text-align: center;\n margin: 0.166rem;\n}\n\n.react-datepicker__week-number.react-datepicker__week-number--clickable {\n cursor: pointer;\n}\n\n.react-datepicker__week-number.react-datepicker__week-number--clickable:hover {\n border-radius: 0.3rem;\n background-color: #f0f0f0;\n}\n\n.react-datepicker__day-names,\n.react-datepicker__week {\n white-space: nowrap;\n}\n\n.react-datepicker__day-name,\n.react-datepicker__day,\n.react-datepicker__time-name {\n color: #000;\n display: inline-block;\n width: 1.7rem;\n line-height: 1.7rem;\n text-align: center;\n margin: 0.166rem;\n}\n\n.react-datepicker__day {\n cursor: pointer;\n}\n\n.react-datepicker__day:hover {\n border-radius: 0.3rem;\n background-color: #f0f0f0;\n}\n\n.react-datepicker__day--today {\n font-weight: bold;\n}\n\n.react-datepicker__day--highlighted {\n border-radius: 0.3rem;\n background-color: #3dcc4a;\n color: #fff;\n}\n\n.react-datepicker__day--highlighted:hover {\n background-color: #32be3f;\n}\n\n.react-datepicker__day--highlighted-custom-1 {\n color: magenta;\n}\n\n.react-datepicker__day--highlighted-custom-2 {\n color: green;\n}\n\n.react-datepicker__day--selected, .react-datepicker__day--in-selecting-range, .react-datepicker__day--in-range {\n border-radius: 0.3rem;\n background-color: #216ba5;\n color: #fff;\n}\n\n.react-datepicker__day--selected:hover, .react-datepicker__day--in-selecting-range:hover, .react-datepicker__day--in-range:hover {\n background-color: #1d5d90;\n}\n\n.react-datepicker__day--keyboard-selected {\n border-radius: 0.3rem;\n background-color: #2a87d0;\n color: #fff;\n}\n\n.react-datepicker__day--keyboard-selected:hover {\n background-color: #1d5d90;\n}\n\n.react-datepicker__day--in-selecting-range:not(.react-datepicker__day--in-range) {\n background-color: rgba(33, 107, 165, 0.5);\n}\n\n.react-datepicker__month--selecting-range .react-datepicker__day--in-range:not(.react-datepicker__day--in-selecting-range) {\n background-color: #f0f0f0;\n color: #000;\n}\n\n.react-datepicker__day--disabled {\n cursor: default;\n color: #ccc;\n}\n\n.react-datepicker__day--disabled:hover {\n background-color: transparent;\n}\n\n.react-datepicker__input-container {\n position: relative;\n display: inline-block;\n}\n\n.react-datepicker__year-read-view,\n.react-datepicker__month-read-view,\n.react-datepicker__month-year-read-view {\n border: 1px solid transparent;\n border-radius: 0.3rem;\n}\n\n.react-datepicker__year-read-view:hover,\n.react-datepicker__month-read-view:hover,\n.react-datepicker__month-year-read-view:hover {\n cursor: pointer;\n}\n\n.react-datepicker__year-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__year-read-view:hover .react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view:hover .react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view:hover .react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-year-read-view:hover .react-datepicker__month-read-view--down-arrow {\n border-top-color: #b3b3b3;\n}\n\n.react-datepicker__year-read-view--down-arrow,\n.react-datepicker__month-read-view--down-arrow,\n.react-datepicker__month-year-read-view--down-arrow {\n border-top-color: #ccc;\n float: right;\n margin-left: 20px;\n top: 8px;\n position: relative;\n border-width: 0.45rem;\n}\n\n.react-datepicker__year-dropdown,\n.react-datepicker__month-dropdown,\n.react-datepicker__month-year-dropdown {\n background-color: #f0f0f0;\n position: absolute;\n width: 50%;\n left: 25%;\n top: 30px;\n z-index: 1;\n text-align: center;\n border-radius: 0.3rem;\n border: 1px solid #aeaeae;\n}\n\n.react-datepicker__year-dropdown:hover,\n.react-datepicker__month-dropdown:hover,\n.react-datepicker__month-year-dropdown:hover {\n cursor: pointer;\n}\n\n.react-datepicker__year-dropdown--scrollable,\n.react-datepicker__month-dropdown--scrollable,\n.react-datepicker__month-year-dropdown--scrollable {\n height: 150px;\n overflow-y: scroll;\n}\n\n.react-datepicker__year-option,\n.react-datepicker__month-option,\n.react-datepicker__month-year-option {\n line-height: 20px;\n width: 100%;\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n\n.react-datepicker__year-option:first-of-type,\n.react-datepicker__month-option:first-of-type,\n.react-datepicker__month-year-option:first-of-type {\n border-top-left-radius: 0.3rem;\n border-top-right-radius: 0.3rem;\n}\n\n.react-datepicker__year-option:last-of-type,\n.react-datepicker__month-option:last-of-type,\n.react-datepicker__month-year-option:last-of-type {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n border-bottom-left-radius: 0.3rem;\n border-bottom-right-radius: 0.3rem;\n}\n\n.react-datepicker__year-option:hover,\n.react-datepicker__month-option:hover,\n.react-datepicker__month-year-option:hover {\n background-color: #ccc;\n}\n\n.react-datepicker__year-option:hover .react-datepicker__navigation--years-upcoming,\n.react-datepicker__month-option:hover .react-datepicker__navigation--years-upcoming,\n.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-upcoming {\n border-bottom-color: #b3b3b3;\n}\n\n.react-datepicker__year-option:hover .react-datepicker__navigation--years-previous,\n.react-datepicker__month-option:hover .react-datepicker__navigation--years-previous,\n.react-datepicker__month-year-option:hover .react-datepicker__navigation--years-previous {\n border-top-color: #b3b3b3;\n}\n\n.react-datepicker__year-option--selected,\n.react-datepicker__month-option--selected,\n.react-datepicker__month-year-option--selected {\n position: absolute;\n left: 15px;\n}\n\n.react-datepicker__close-icon {\n background-color: transparent;\n border: 0;\n cursor: pointer;\n outline: 0;\n padding: 0;\n vertical-align: middle;\n position: absolute;\n height: 16px;\n width: 16px;\n top: 25%;\n right: 7px;\n}\n\n.react-datepicker__close-icon::after {\n background-color: #216ba5;\n border-radius: 50%;\n bottom: 0;\n box-sizing: border-box;\n color: #fff;\n content: "\\00d7";\n cursor: pointer;\n font-size: 12px;\n height: 16px;\n width: 16px;\n line-height: 1;\n margin: -8px auto 0;\n padding: 2px;\n position: absolute;\n right: 0px;\n text-align: center;\n}\n\n.react-datepicker__today-button {\n background: #f0f0f0;\n border-top: 1px solid #aeaeae;\n cursor: pointer;\n text-align: center;\n font-weight: bold;\n padding: 5px 0;\n clear: left;\n}\n\n.react-datepicker__portal {\n position: fixed;\n width: 100vw;\n height: 100vh;\n background-color: rgba(0, 0, 0, 0.8);\n left: 0;\n top: 0;\n justify-content: center;\n align-items: center;\n display: flex;\n z-index: 2147483647;\n}\n\n.react-datepicker__portal .react-datepicker__day-name,\n.react-datepicker__portal .react-datepicker__day,\n.react-datepicker__portal .react-datepicker__time-name {\n width: 3rem;\n line-height: 3rem;\n}\n\n@media (max-width: 400px), (max-height: 550px) {\n .react-datepicker__portal .react-datepicker__day-name,\n .react-datepicker__portal .react-datepicker__day,\n .react-datepicker__portal .react-datepicker__time-name {\n width: 2rem;\n line-height: 2rem;\n }\n}\n\n.react-datepicker__portal .react-datepicker__current-month,\n.react-datepicker__portal .react-datepicker-time__header {\n font-size: 1.44rem;\n}\n\n.react-datepicker__portal .react-datepicker__navigation {\n border: 0.81rem solid transparent;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--previous {\n border-right-color: #ccc;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--previous:hover {\n border-right-color: #b3b3b3;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--previous--disabled, .react-datepicker__portal .react-datepicker__navigation--previous--disabled:hover {\n border-right-color: #e6e6e6;\n cursor: default;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--next {\n border-left-color: #ccc;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--next:hover {\n border-left-color: #b3b3b3;\n}\n\n.react-datepicker__portal .react-datepicker__navigation--next--disabled, .react-datepicker__portal .react-datepicker__navigation--next--disabled:hover {\n border-left-color: #e6e6e6;\n cursor: default;\n}\n'],sourceRoot:""}]);const __WEBPACK_DEFAULT_EXPORT__=___CSS_LOADER_EXPORT___},"./node_modules/css-loader/dist/runtime/api.js":module=>{"use strict";module.exports=function(cssWithMappingToString){var list=[];return list.toString=function toString(){return this.map((function(item){var content="",needLayer=void 0!==item[5];return item[4]&&(content+="@supports (".concat(item[4],") {")),item[2]&&(content+="@media ".concat(item[2]," {")),needLayer&&(content+="@layer".concat(item[5].length>0?" ".concat(item[5]):""," {")),content+=cssWithMappingToString(item),needLayer&&(content+="}"),item[2]&&(content+="}"),item[4]&&(content+="}"),content})).join("")},list.i=function i(modules,media,dedupe,supports,layer){"string"==typeof modules&&(modules=[[null,modules,void 0]]);var alreadyImportedModules={};if(dedupe)for(var k=0;k<this.length;k++){var id=this[k][0];null!=id&&(alreadyImportedModules[id]=!0)}for(var _k=0;_k<modules.length;_k++){var item=[].concat(modules[_k]);dedupe&&alreadyImportedModules[item[0]]||(void 0!==layer&&(void 0===item[5]||(item[1]="@layer".concat(item[5].length>0?" ".concat(item[5]):""," {").concat(item[1],"}")),item[5]=layer),media&&(item[2]?(item[1]="@media ".concat(item[2]," {").concat(item[1],"}"),item[2]=media):item[2]=media),supports&&(item[4]?(item[1]="@supports (".concat(item[4],") {").concat(item[1],"}"),item[4]=supports):item[4]="".concat(supports)),list.push(item))}},list}},"./node_modules/css-loader/dist/runtime/sourceMaps.js":module=>{"use strict";module.exports=function(item){var content=item[1],cssMapping=item[3];if(!cssMapping)return content;if("function"==typeof btoa){var base64=btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))),data="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64),sourceMapping="/*# ".concat(data," */"),sourceURLs=cssMapping.sources.map((function(source){return"/*# sourceURL=".concat(cssMapping.sourceRoot||"").concat(source," */")}));return[content].concat(sourceURLs).concat([sourceMapping]).join("\n")}return[content].join("\n")}},"./node_modules/prop-types/factoryWithThrowingShims.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var ReactPropTypesSecret=__webpack_require__("./node_modules/prop-types/lib/ReactPropTypesSecret.js");function emptyFunction(){}module.exports=function(){function shim(props,propName,componentName,location,propFullName,secret){if(secret!==ReactPropTypesSecret){var err=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw err.name="Invariant Violation",err}}function getShim(){return shim}shim.isRequired=shim;var ReactPropTypes={array:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim};return ReactPropTypes.checkPropTypes=emptyFunction,ReactPropTypes.PropTypes=ReactPropTypes,ReactPropTypes}},"./node_modules/prop-types/index.js":(module,__unused_webpack_exports,__webpack_require__)=>{module.exports=__webpack_require__("./node_modules/prop-types/factoryWithThrowingShims.js")()},"./node_modules/prop-types/lib/ReactPropTypesSecret.js":module=>{"use strict";module.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},"./node_modules/react-datepicker/es/index.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{CalendarContainer:()=>CalendarContainer,default:()=>es});var react=__webpack_require__("./node_modules/react/index.js"),prop_types=__webpack_require__("./node_modules/prop-types/index.js"),prop_types_default=__webpack_require__.n(prop_types),classnames=__webpack_require__("./node_modules/react-datepicker/node_modules/classnames/index.js"),classnames_default=__webpack_require__.n(classnames),react_dom=__webpack_require__("./node_modules/react-dom/index.js");function isNodeFound(current,componentNode,ignoreClass){return current===componentNode||(current.correspondingElement?current.correspondingElement.classList.contains(ignoreClass):current.classList.contains(ignoreClass))}var passiveEventSupport,uid=function autoInc(seed){return void 0===seed&&(seed=0),function(){return++seed}}(),handlersMap={},enabledInstances={},touchEvents=["touchstart","touchmove"];function getEventHandlerOptions(instance,eventName){var handlerOptions=null;return-1!==touchEvents.indexOf(eventName)&&passiveEventSupport&&(handlerOptions={passive:!instance.props.preventDefault}),handlerOptions}const react_onclickoutside_es=function onClickOutsideHOC(WrappedComponent,config){var _class,_temp;return _temp=_class=function(_Component){function onClickOutside(props){var _this;return(_this=_Component.call(this,props)||this).__outsideClickHandler=function(event){if("function"!=typeof _this.__clickOutsideHandlerProp){var instance=_this.getInstance();if("function"!=typeof instance.props.handleClickOutside){if("function"!=typeof instance.handleClickOutside)throw new Error("WrappedComponent lacks a handleClickOutside(event) function for processing outside click events.");instance.handleClickOutside(event)}else instance.props.handleClickOutside(event)}else _this.__clickOutsideHandlerProp(event)},_this.enableOnClickOutside=function(){if("undefined"!=typeof document&&!enabledInstances[_this._uid]){void 0===passiveEventSupport&&(passiveEventSupport=function testPassiveEventSupport(){if("undefined"!=typeof window&&"function"==typeof window.addEventListener){var passive=!1,options=Object.defineProperty({},"passive",{get:function get(){passive=!0}}),noop=function noop(){};return window.addEventListener("testPassiveEventSupport",noop,options),window.removeEventListener("testPassiveEventSupport",noop,options),passive}}()),enabledInstances[_this._uid]=!0;var events=_this.props.eventTypes;events.forEach||(events=[events]),handlersMap[_this._uid]=function(event){_this.props.disableOnClickOutside||null!==_this.componentNode&&(_this.props.preventDefault&&event.preventDefault(),_this.props.stopPropagation&&event.stopPropagation(),_this.props.excludeScrollbar&&function clickedScrollbar(evt){return document.documentElement.clientWidth<=evt.clientX||document.documentElement.clientHeight<=evt.clientY}(event)||function findHighest(current,componentNode,ignoreClass){if(current===componentNode)return!0;for(;current.parentNode;){if(isNodeFound(current,componentNode,ignoreClass))return!0;current=current.parentNode}return current}(event.target,_this.componentNode,_this.props.outsideClickIgnoreClass)===document&&_this.__outsideClickHandler(event))},events.forEach((function(eventName){document.addEventListener(eventName,handlersMap[_this._uid],getEventHandlerOptions(_this,eventName))}))}},_this.disableOnClickOutside=function(){delete enabledInstances[_this._uid];var fn=handlersMap[_this._uid];if(fn&&"undefined"!=typeof document){var events=_this.props.eventTypes;events.forEach||(events=[events]),events.forEach((function(eventName){return document.removeEventListener(eventName,fn,getEventHandlerOptions(_this,eventName))})),delete handlersMap[_this._uid]}},_this.getRef=function(ref){return _this.instanceRef=ref},_this._uid=uid(),_this}!function _inheritsLoose(subClass,superClass){subClass.prototype=Object.create(superClass.prototype),subClass.prototype.constructor=subClass,subClass.__proto__=superClass}(onClickOutside,_Component);var _proto=onClickOutside.prototype;return _proto.getInstance=function getInstance(){if(!WrappedComponent.prototype.isReactComponent)return this;var ref=this.instanceRef;return ref.getInstance?ref.getInstance():ref},_proto.componentDidMount=function componentDidMount(){if("undefined"!=typeof document&&document.createElement){var instance=this.getInstance();if(config&&"function"==typeof config.handleClickOutside&&(this.__clickOutsideHandlerProp=config.handleClickOutside(instance),"function"!=typeof this.__clickOutsideHandlerProp))throw new Error("WrappedComponent lacks a function for processing outside click events specified by the handleClickOutside config option.");this.componentNode=(0,react_dom.findDOMNode)(this.getInstance()),this.enableOnClickOutside()}},_proto.componentDidUpdate=function componentDidUpdate(){this.componentNode=(0,react_dom.findDOMNode)(this.getInstance())},_proto.componentWillUnmount=function componentWillUnmount(){this.disableOnClickOutside()},_proto.render=function render(){var _props=this.props,props=(_props.excludeScrollbar,function _objectWithoutProperties(source,excluded){if(null==source)return{};var key,i,target={},sourceKeys=Object.keys(source);for(i=0;i<sourceKeys.length;i++)key=sourceKeys[i],excluded.indexOf(key)>=0||(target[key]=source[key]);if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++)key=sourceSymbolKeys[i],excluded.indexOf(key)>=0||Object.prototype.propertyIsEnumerable.call(source,key)&&(target[key]=source[key])}return target}(_props,["excludeScrollbar"]));return WrappedComponent.prototype.isReactComponent?props.ref=this.getRef:props.wrappedRef=this.getRef,props.disableOnClickOutside=this.disableOnClickOutside,props.enableOnClickOutside=this.enableOnClickOutside,(0,react.createElement)(WrappedComponent,props)},onClickOutside}(react.Component),_class.displayName="OnClickOutside("+(WrappedComponent.displayName||WrappedComponent.name||"Component")+")",_class.defaultProps={eventTypes:["mousedown","touchstart"],excludeScrollbar:config&&config.excludeScrollbar||!1,outsideClickIgnoreClass:"ignore-react-onclickoutside",preventDefault:!1,stopPropagation:!1},_class.getClass=function(){return WrappedComponent.getClass?WrappedComponent.getClass():WrappedComponent},_temp};var moment=__webpack_require__("./node_modules/moment/moment.js"),moment_default=__webpack_require__.n(moment),_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}var Manager=function(_Component){function Manager(){var _ref,_temp,_this;!function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Manager);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=_possibleConstructorReturn(this,(_ref=Manager.__proto__||Object.getPrototypeOf(Manager)).call.apply(_ref,[this].concat(args))),_this._setTargetNode=function(node){_this._targetNode=node},_this._getTargetNode=function(){return _this._targetNode},_possibleConstructorReturn(_this,_temp)}return function _inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(Manager,_Component),_createClass(Manager,[{key:"getChildContext",value:function getChildContext(){return{popperManager:{setTargetNode:this._setTargetNode,getTargetNode:this._getTargetNode}}}},{key:"render",value:function render(){var _props=this.props,tag=_props.tag,children=_props.children,restProps=function Manager_objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}(_props,["tag","children"]);return!1!==tag?(0,react.createElement)(tag,restProps,children):children}}]),Manager}(react.Component);Manager.childContextTypes={popperManager:prop_types_default().object.isRequired},Manager.propTypes={tag:prop_types_default().oneOfType([prop_types_default().string,prop_types_default().bool]),children:prop_types_default().oneOfType([prop_types_default().node,prop_types_default().func])},Manager.defaultProps={tag:"div"};const lib_Manager=Manager;var _extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target};var Target=function Target(props,context){var _props$component=props.component,component=void 0===_props$component?"div":_props$component,innerRef=props.innerRef,children=props.children,restProps=function Target_objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}(props,["component","innerRef","children"]),popperManager=context.popperManager,targetRef=function targetRef(node){popperManager.setTargetNode(node),"function"==typeof innerRef&&innerRef(node)};if("function"==typeof children)return children({targetProps:{ref:targetRef},restProps});var componentProps=_extends({},restProps);return"string"==typeof component?componentProps.ref=targetRef:componentProps.innerRef=targetRef,(0,react.createElement)(component,componentProps,children)};Target.contextTypes={popperManager:prop_types_default().object.isRequired},Target.propTypes={component:prop_types_default().oneOfType([prop_types_default().node,prop_types_default().func]),innerRef:prop_types_default().func,children:prop_types_default().oneOfType([prop_types_default().node,prop_types_default().func])};const lib_Target=Target;for(var isBrowser="undefined"!=typeof window&&"undefined"!=typeof document,longerTimeoutBrowsers=["Edge","Trident","Firefox"],timeoutDuration=0,i=0;i<longerTimeoutBrowsers.length;i+=1)if(isBrowser&&navigator.userAgent.indexOf(longerTimeoutBrowsers[i])>=0){timeoutDuration=1;break}var debounce=isBrowser&&window.Promise?function microtaskDebounce(fn){var called=!1;return function(){called||(called=!0,window.Promise.resolve().then((function(){called=!1,fn()})))}}:function taskDebounce(fn){var scheduled=!1;return function(){scheduled||(scheduled=!0,setTimeout((function(){scheduled=!1,fn()}),timeoutDuration))}};function isFunction(functionToCheck){return functionToCheck&&"[object Function]"==={}.toString.call(functionToCheck)}function getStyleComputedProperty(element,property){if(1!==element.nodeType)return[];var css=getComputedStyle(element,null);return property?css[property]:css}function getParentNode(element){return"HTML"===element.nodeName?element:element.parentNode||element.host}function getScrollParent(element){if(!element)return document.body;switch(element.nodeName){case"HTML":case"BODY":return element.ownerDocument.body;case"#document":return element.body}var _getStyleComputedProp=getStyleComputedProperty(element),overflow=_getStyleComputedProp.overflow,overflowX=_getStyleComputedProp.overflowX,overflowY=_getStyleComputedProp.overflowY;return/(auto|scroll|overlay)/.test(overflow+overflowY+overflowX)?element:getScrollParent(getParentNode(element))}var isIE11=isBrowser&&!(!window.MSInputMethodContext||!document.documentMode),isIE10=isBrowser&&/MSIE 10/.test(navigator.userAgent);function isIE(version){return 11===version?isIE11:10===version?isIE10:isIE11||isIE10}function getOffsetParent(element){if(!element)return document.documentElement;for(var noOffsetParent=isIE(10)?document.body:null,offsetParent=element.offsetParent;offsetParent===noOffsetParent&&element.nextElementSibling;)offsetParent=(element=element.nextElementSibling).offsetParent;var nodeName=offsetParent&&offsetParent.nodeName;return nodeName&&"BODY"!==nodeName&&"HTML"!==nodeName?-1!==["TD","TABLE"].indexOf(offsetParent.nodeName)&&"static"===getStyleComputedProperty(offsetParent,"position")?getOffsetParent(offsetParent):offsetParent:element?element.ownerDocument.documentElement:document.documentElement}function getRoot(node){return null!==node.parentNode?getRoot(node.parentNode):node}function findCommonOffsetParent(element1,element2){if(!(element1&&element1.nodeType&&element2&&element2.nodeType))return document.documentElement;var order=element1.compareDocumentPosition(element2)&Node.DOCUMENT_POSITION_FOLLOWING,start=order?element1:element2,end=order?element2:element1,range=document.createRange();range.setStart(start,0),range.setEnd(end,0);var commonAncestorContainer=range.commonAncestorContainer;if(element1!==commonAncestorContainer&&element2!==commonAncestorContainer||start.contains(end))return function isOffsetContainer(element){var nodeName=element.nodeName;return"BODY"!==nodeName&&("HTML"===nodeName||getOffsetParent(element.firstElementChild)===element)}(commonAncestorContainer)?commonAncestorContainer:getOffsetParent(commonAncestorContainer);var element1root=getRoot(element1);return element1root.host?findCommonOffsetParent(element1root.host,element2):findCommonOffsetParent(element1,getRoot(element2).host)}function getScroll(element){var upperSide="top"===(arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",nodeName=element.nodeName;if("BODY"===nodeName||"HTML"===nodeName){var html=element.ownerDocument.documentElement;return(element.ownerDocument.scrollingElement||html)[upperSide]}return element[upperSide]}function getBordersSize(styles,axis){var sideA="x"===axis?"Left":"Top",sideB="Left"===sideA?"Right":"Bottom";return parseFloat(styles["border"+sideA+"Width"],10)+parseFloat(styles["border"+sideB+"Width"],10)}function getSize(axis,body,html,computedStyle){return Math.max(body["offset"+axis],body["scroll"+axis],html["client"+axis],html["offset"+axis],html["scroll"+axis],isIE(10)?html["offset"+axis]+computedStyle["margin"+("Height"===axis?"Top":"Left")]+computedStyle["margin"+("Height"===axis?"Bottom":"Right")]:0)}function getWindowSizes(){var body=document.body,html=document.documentElement,computedStyle=isIE(10)&&getComputedStyle(html);return{height:getSize("Height",body,html,computedStyle),width:getSize("Width",body,html,computedStyle)}}var createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),defineProperty=function(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj},popper_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target};function getClientRect(offsets){return popper_extends({},offsets,{right:offsets.left+offsets.width,bottom:offsets.top+offsets.height})}function getBoundingClientRect(element){var rect={};try{if(isIE(10)){rect=element.getBoundingClientRect();var scrollTop=getScroll(element,"top"),scrollLeft=getScroll(element,"left");rect.top+=scrollTop,rect.left+=scrollLeft,rect.bottom+=scrollTop,rect.right+=scrollLeft}else rect=element.getBoundingClientRect()}catch(e){}var result={left:rect.left,top:rect.top,width:rect.right-rect.left,height:rect.bottom-rect.top},sizes="HTML"===element.nodeName?getWindowSizes():{},width=sizes.width||element.clientWidth||result.right-result.left,height=sizes.height||element.clientHeight||result.bottom-result.top,horizScrollbar=element.offsetWidth-width,vertScrollbar=element.offsetHeight-height;if(horizScrollbar||vertScrollbar){var styles=getStyleComputedProperty(element);horizScrollbar-=getBordersSize(styles,"x"),vertScrollbar-=getBordersSize(styles,"y"),result.width-=horizScrollbar,result.height-=vertScrollbar}return getClientRect(result)}function getOffsetRectRelativeToArbitraryNode(children,parent){var fixedPosition=arguments.length>2&&void 0!==arguments[2]&&arguments[2],isIE10=isIE(10),isHTML="HTML"===parent.nodeName,childrenRect=getBoundingClientRect(children),parentRect=getBoundingClientRect(parent),scrollParent=getScrollParent(children),styles=getStyleComputedProperty(parent),borderTopWidth=parseFloat(styles.borderTopWidth,10),borderLeftWidth=parseFloat(styles.borderLeftWidth,10);fixedPosition&&"HTML"===parent.nodeName&&(parentRect.top=Math.max(parentRect.top,0),parentRect.left=Math.max(parentRect.left,0));var offsets=getClientRect({top:childrenRect.top-parentRect.top-borderTopWidth,left:childrenRect.left-parentRect.left-borderLeftWidth,width:childrenRect.width,height:childrenRect.height});if(offsets.marginTop=0,offsets.marginLeft=0,!isIE10&&isHTML){var marginTop=parseFloat(styles.marginTop,10),marginLeft=parseFloat(styles.marginLeft,10);offsets.top-=borderTopWidth-marginTop,offsets.bottom-=borderTopWidth-marginTop,offsets.left-=borderLeftWidth-marginLeft,offsets.right-=borderLeftWidth-marginLeft,offsets.marginTop=marginTop,offsets.marginLeft=marginLeft}return(isIE10&&!fixedPosition?parent.contains(scrollParent):parent===scrollParent&&"BODY"!==scrollParent.nodeName)&&(offsets=function includeScroll(rect,element){var subtract=arguments.length>2&&void 0!==arguments[2]&&arguments[2],scrollTop=getScroll(element,"top"),scrollLeft=getScroll(element,"left"),modifier=subtract?-1:1;return rect.top+=scrollTop*modifier,rect.bottom+=scrollTop*modifier,rect.left+=scrollLeft*modifier,rect.right+=scrollLeft*modifier,rect}(offsets,parent)),offsets}function isFixed(element){var nodeName=element.nodeName;return"BODY"!==nodeName&&"HTML"!==nodeName&&("fixed"===getStyleComputedProperty(element,"position")||isFixed(getParentNode(element)))}function getFixedPositionOffsetParent(element){if(!element||!element.parentElement||isIE())return document.documentElement;for(var el=element.parentElement;el&&"none"===getStyleComputedProperty(el,"transform");)el=el.parentElement;return el||document.documentElement}function getBoundaries(popper,reference,padding,boundariesElement){var fixedPosition=arguments.length>4&&void 0!==arguments[4]&&arguments[4],boundaries={top:0,left:0},offsetParent=fixedPosition?getFixedPositionOffsetParent(popper):findCommonOffsetParent(popper,reference);if("viewport"===boundariesElement)boundaries=function getViewportOffsetRectRelativeToArtbitraryNode(element){var excludeScroll=arguments.length>1&&void 0!==arguments[1]&&arguments[1],html=element.ownerDocument.documentElement,relativeOffset=getOffsetRectRelativeToArbitraryNode(element,html),width=Math.max(html.clientWidth,window.innerWidth||0),height=Math.max(html.clientHeight,window.innerHeight||0),scrollTop=excludeScroll?0:getScroll(html),scrollLeft=excludeScroll?0:getScroll(html,"left");return getClientRect({top:scrollTop-relativeOffset.top+relativeOffset.marginTop,left:scrollLeft-relativeOffset.left+relativeOffset.marginLeft,width,height})}(offsetParent,fixedPosition);else{var boundariesNode=void 0;"scrollParent"===boundariesElement?"BODY"===(boundariesNode=getScrollParent(getParentNode(reference))).nodeName&&(boundariesNode=popper.ownerDocument.documentElement):boundariesNode="window"===boundariesElement?popper.ownerDocument.documentElement:boundariesElement;var offsets=getOffsetRectRelativeToArbitraryNode(boundariesNode,offsetParent,fixedPosition);if("HTML"!==boundariesNode.nodeName||isFixed(offsetParent))boundaries=offsets;else{var _getWindowSizes=getWindowSizes(),height=_getWindowSizes.height,width=_getWindowSizes.width;boundaries.top+=offsets.top-offsets.marginTop,boundaries.bottom=height+offsets.top,boundaries.left+=offsets.left-offsets.marginLeft,boundaries.right=width+offsets.left}}return boundaries.left+=padding,boundaries.top+=padding,boundaries.right-=padding,boundaries.bottom-=padding,boundaries}function computeAutoPlacement(placement,refRect,popper,reference,boundariesElement){var padding=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===placement.indexOf("auto"))return placement;var boundaries=getBoundaries(popper,reference,padding,boundariesElement),rects={top:{width:boundaries.width,height:refRect.top-boundaries.top},right:{width:boundaries.right-refRect.right,height:boundaries.height},bottom:{width:boundaries.width,height:boundaries.bottom-refRect.bottom},left:{width:refRect.left-boundaries.left,height:boundaries.height}},sortedAreas=Object.keys(rects).map((function(key){return popper_extends({key},rects[key],{area:(_ref=rects[key],_ref.width*_ref.height)});var _ref})).sort((function(a,b){return b.area-a.area})),filteredAreas=sortedAreas.filter((function(_ref2){var width=_ref2.width,height=_ref2.height;return width>=popper.clientWidth&&height>=popper.clientHeight})),computedPlacement=filteredAreas.length>0?filteredAreas[0].key:sortedAreas[0].key,variation=placement.split("-")[1];return computedPlacement+(variation?"-"+variation:"")}function getReferenceOffsets(state,popper,reference){var fixedPosition=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;return getOffsetRectRelativeToArbitraryNode(reference,fixedPosition?getFixedPositionOffsetParent(popper):findCommonOffsetParent(popper,reference),fixedPosition)}function getOuterSizes(element){var styles=getComputedStyle(element),x=parseFloat(styles.marginTop)+parseFloat(styles.marginBottom),y=parseFloat(styles.marginLeft)+parseFloat(styles.marginRight);return{width:element.offsetWidth+y,height:element.offsetHeight+x}}function getOppositePlacement(placement){var hash={left:"right",right:"left",bottom:"top",top:"bottom"};return placement.replace(/left|right|bottom|top/g,(function(matched){return hash[matched]}))}function getPopperOffsets(popper,referenceOffsets,placement){placement=placement.split("-")[0];var popperRect=getOuterSizes(popper),popperOffsets={width:popperRect.width,height:popperRect.height},isHoriz=-1!==["right","left"].indexOf(placement),mainSide=isHoriz?"top":"left",secondarySide=isHoriz?"left":"top",measurement=isHoriz?"height":"width",secondaryMeasurement=isHoriz?"width":"height";return popperOffsets[mainSide]=referenceOffsets[mainSide]+referenceOffsets[measurement]/2-popperRect[measurement]/2,popperOffsets[secondarySide]=placement===secondarySide?referenceOffsets[secondarySide]-popperRect[secondaryMeasurement]:referenceOffsets[getOppositePlacement(secondarySide)],popperOffsets}function find(arr,check){return Array.prototype.find?arr.find(check):arr.filter(check)[0]}function runModifiers(modifiers,data,ends){return(void 0===ends?modifiers:modifiers.slice(0,function findIndex(arr,prop,value){if(Array.prototype.findIndex)return arr.findIndex((function(cur){return cur[prop]===value}));var match=find(arr,(function(obj){return obj[prop]===value}));return arr.indexOf(match)}(modifiers,"name",ends))).forEach((function(modifier){modifier.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var fn=modifier.function||modifier.fn;modifier.enabled&&isFunction(fn)&&(data.offsets.popper=getClientRect(data.offsets.popper),data.offsets.reference=getClientRect(data.offsets.reference),data=fn(data,modifier))})),data}function update(){if(!this.state.isDestroyed){var data={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};data.offsets.reference=getReferenceOffsets(this.state,this.popper,this.reference,this.options.positionFixed),data.placement=computeAutoPlacement(this.options.placement,data.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),data.originalPlacement=data.placement,data.positionFixed=this.options.positionFixed,data.offsets.popper=getPopperOffsets(this.popper,data.offsets.reference,data.placement),data.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",data=runModifiers(this.modifiers,data),this.state.isCreated?this.options.onUpdate(data):(this.state.isCreated=!0,this.options.onCreate(data))}}function isModifierEnabled(modifiers,modifierName){return modifiers.some((function(_ref){var name=_ref.name;return _ref.enabled&&name===modifierName}))}function getSupportedPropertyName(property){for(var prefixes=[!1,"ms","Webkit","Moz","O"],upperProp=property.charAt(0).toUpperCase()+property.slice(1),i=0;i<prefixes.length;i++){var prefix=prefixes[i],toCheck=prefix?""+prefix+upperProp:property;if(void 0!==document.body.style[toCheck])return toCheck}return null}function destroy(){return this.state.isDestroyed=!0,isModifierEnabled(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[getSupportedPropertyName("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function getWindow(element){var ownerDocument=element.ownerDocument;return ownerDocument?ownerDocument.defaultView:window}function attachToScrollParents(scrollParent,event,callback,scrollParents){var isBody="BODY"===scrollParent.nodeName,target=isBody?scrollParent.ownerDocument.defaultView:scrollParent;target.addEventListener(event,callback,{passive:!0}),isBody||attachToScrollParents(getScrollParent(target.parentNode),event,callback,scrollParents),scrollParents.push(target)}function setupEventListeners(reference,options,state,updateBound){state.updateBound=updateBound,getWindow(reference).addEventListener("resize",state.updateBound,{passive:!0});var scrollElement=getScrollParent(reference);return attachToScrollParents(scrollElement,"scroll",state.updateBound,state.scrollParents),state.scrollElement=scrollElement,state.eventsEnabled=!0,state}function enableEventListeners(){this.state.eventsEnabled||(this.state=setupEventListeners(this.reference,this.options,this.state,this.scheduleUpdate))}function disableEventListeners(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=function removeEventListeners(reference,state){return getWindow(reference).removeEventListener("resize",state.updateBound),state.scrollParents.forEach((function(target){target.removeEventListener("scroll",state.updateBound)})),state.updateBound=null,state.scrollParents=[],state.scrollElement=null,state.eventsEnabled=!1,state}(this.reference,this.state))}function isNumeric(n){return""!==n&&!isNaN(parseFloat(n))&&isFinite(n)}function setStyles(element,styles){Object.keys(styles).forEach((function(prop){var unit="";-1!==["width","height","top","right","bottom","left"].indexOf(prop)&&isNumeric(styles[prop])&&(unit="px"),element.style[prop]=styles[prop]+unit}))}function isModifierRequired(modifiers,requestingName,requestedName){var requesting=find(modifiers,(function(_ref){return _ref.name===requestingName})),isRequired=!!requesting&&modifiers.some((function(modifier){return modifier.name===requestedName&&modifier.enabled&&modifier.order<requesting.order}));if(!isRequired){var _requesting="`"+requestingName+"`",requested="`"+requestedName+"`";console.warn(requested+" modifier is required by "+_requesting+" modifier in order to work, be sure to include it before "+_requesting+"!")}return isRequired}var placements=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],validPlacements=placements.slice(3);function clockwise(placement){var counter=arguments.length>1&&void 0!==arguments[1]&&arguments[1],index=validPlacements.indexOf(placement),arr=validPlacements.slice(index+1).concat(validPlacements.slice(0,index));return counter?arr.reverse():arr}var BEHAVIORS_FLIP="flip",BEHAVIORS_CLOCKWISE="clockwise",BEHAVIORS_COUNTERCLOCKWISE="counterclockwise";function parseOffset(offset,popperOffsets,referenceOffsets,basePlacement){var offsets=[0,0],useHeight=-1!==["right","left"].indexOf(basePlacement),fragments=offset.split(/(\+|\-)/).map((function(frag){return frag.trim()})),divider=fragments.indexOf(find(fragments,(function(frag){return-1!==frag.search(/,|\s/)})));fragments[divider]&&-1===fragments[divider].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var splitRegex=/\s*,\s*|\s+/,ops=-1!==divider?[fragments.slice(0,divider).concat([fragments[divider].split(splitRegex)[0]]),[fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider+1))]:[fragments];return ops=ops.map((function(op,index){var measurement=(1===index?!useHeight:useHeight)?"height":"width",mergeWithPrevious=!1;return op.reduce((function(a,b){return""===a[a.length-1]&&-1!==["+","-"].indexOf(b)?(a[a.length-1]=b,mergeWithPrevious=!0,a):mergeWithPrevious?(a[a.length-1]+=b,mergeWithPrevious=!1,a):a.concat(b)}),[]).map((function(str){return function toValue(str,measurement,popperOffsets,referenceOffsets){var split=str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),value=+split[1],unit=split[2];if(!value)return str;if(0===unit.indexOf("%")){return getClientRect("%p"===unit?popperOffsets:referenceOffsets)[measurement]/100*value}if("vh"===unit||"vw"===unit)return("vh"===unit?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*value;return value}(str,measurement,popperOffsets,referenceOffsets)}))})),ops.forEach((function(op,index){op.forEach((function(frag,index2){isNumeric(frag)&&(offsets[index]+=frag*("-"===op[index2-1]?-1:1))}))})),offsets}var modifiers={shift:{order:100,enabled:!0,fn:function shift(data){var placement=data.placement,basePlacement=placement.split("-")[0],shiftvariation=placement.split("-")[1];if(shiftvariation){var _data$offsets=data.offsets,reference=_data$offsets.reference,popper=_data$offsets.popper,isVertical=-1!==["bottom","top"].indexOf(basePlacement),side=isVertical?"left":"top",measurement=isVertical?"width":"height",shiftOffsets={start:defineProperty({},side,reference[side]),end:defineProperty({},side,reference[side]+reference[measurement]-popper[measurement])};data.offsets.popper=popper_extends({},popper,shiftOffsets[shiftvariation])}return data}},offset:{order:200,enabled:!0,fn:function offset(data,_ref){var offset=_ref.offset,placement=data.placement,_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,basePlacement=placement.split("-")[0],offsets=void 0;return offsets=isNumeric(+offset)?[+offset,0]:parseOffset(offset,popper,reference,basePlacement),"left"===basePlacement?(popper.top+=offsets[0],popper.left-=offsets[1]):"right"===basePlacement?(popper.top+=offsets[0],popper.left+=offsets[1]):"top"===basePlacement?(popper.left+=offsets[0],popper.top-=offsets[1]):"bottom"===basePlacement&&(popper.left+=offsets[0],popper.top+=offsets[1]),data.popper=popper,data},offset:0},preventOverflow:{order:300,enabled:!0,fn:function preventOverflow(data,options){var boundariesElement=options.boundariesElement||getOffsetParent(data.instance.popper);data.instance.reference===boundariesElement&&(boundariesElement=getOffsetParent(boundariesElement));var transformProp=getSupportedPropertyName("transform"),popperStyles=data.instance.popper.style,top=popperStyles.top,left=popperStyles.left,transform=popperStyles[transformProp];popperStyles.top="",popperStyles.left="",popperStyles[transformProp]="";var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,boundariesElement,data.positionFixed);popperStyles.top=top,popperStyles.left=left,popperStyles[transformProp]=transform,options.boundaries=boundaries;var order=options.priority,popper=data.offsets.popper,check={primary:function primary(placement){var value=popper[placement];return popper[placement]<boundaries[placement]&&!options.escapeWithReference&&(value=Math.max(popper[placement],boundaries[placement])),defineProperty({},placement,value)},secondary:function secondary(placement){var mainSide="right"===placement?"left":"top",value=popper[mainSide];return popper[placement]>boundaries[placement]&&!options.escapeWithReference&&(value=Math.min(popper[mainSide],boundaries[placement]-("right"===placement?popper.width:popper.height))),defineProperty({},mainSide,value)}};return order.forEach((function(placement){var side=-1!==["left","top"].indexOf(placement)?"primary":"secondary";popper=popper_extends({},popper,check[side](placement))})),data.offsets.popper=popper,data},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function keepTogether(data){var _data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,placement=data.placement.split("-")[0],floor=Math.floor,isVertical=-1!==["top","bottom"].indexOf(placement),side=isVertical?"right":"bottom",opSide=isVertical?"left":"top",measurement=isVertical?"width":"height";return popper[side]<floor(reference[opSide])&&(data.offsets.popper[opSide]=floor(reference[opSide])-popper[measurement]),popper[opSide]>floor(reference[side])&&(data.offsets.popper[opSide]=floor(reference[side])),data}},arrow:{order:500,enabled:!0,fn:function arrow(data,options){var _data$offsets$arrow;if(!isModifierRequired(data.instance.modifiers,"arrow","keepTogether"))return data;var arrowElement=options.element;if("string"==typeof arrowElement){if(!(arrowElement=data.instance.popper.querySelector(arrowElement)))return data}else if(!data.instance.popper.contains(arrowElement))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),data;var placement=data.placement.split("-")[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isVertical=-1!==["left","right"].indexOf(placement),len=isVertical?"height":"width",sideCapitalized=isVertical?"Top":"Left",side=sideCapitalized.toLowerCase(),altSide=isVertical?"left":"top",opSide=isVertical?"bottom":"right",arrowElementSize=getOuterSizes(arrowElement)[len];reference[opSide]-arrowElementSize<popper[side]&&(data.offsets.popper[side]-=popper[side]-(reference[opSide]-arrowElementSize)),reference[side]+arrowElementSize>popper[opSide]&&(data.offsets.popper[side]+=reference[side]+arrowElementSize-popper[opSide]),data.offsets.popper=getClientRect(data.offsets.popper);var center=reference[side]+reference[len]/2-arrowElementSize/2,css=getStyleComputedProperty(data.instance.popper),popperMarginSide=parseFloat(css["margin"+sideCapitalized],10),popperBorderSide=parseFloat(css["border"+sideCapitalized+"Width"],10),sideValue=center-data.offsets.popper[side]-popperMarginSide-popperBorderSide;return sideValue=Math.max(Math.min(popper[len]-arrowElementSize,sideValue),0),data.arrowElement=arrowElement,data.offsets.arrow=(defineProperty(_data$offsets$arrow={},side,Math.round(sideValue)),defineProperty(_data$offsets$arrow,altSide,""),_data$offsets$arrow),data},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function flip(data,options){if(isModifierEnabled(data.instance.modifiers,"inner"))return data;if(data.flipped&&data.placement===data.originalPlacement)return data;var boundaries=getBoundaries(data.instance.popper,data.instance.reference,options.padding,options.boundariesElement,data.positionFixed),placement=data.placement.split("-")[0],placementOpposite=getOppositePlacement(placement),variation=data.placement.split("-")[1]||"",flipOrder=[];switch(options.behavior){case BEHAVIORS_FLIP:flipOrder=[placement,placementOpposite];break;case BEHAVIORS_CLOCKWISE:flipOrder=clockwise(placement);break;case BEHAVIORS_COUNTERCLOCKWISE:flipOrder=clockwise(placement,!0);break;default:flipOrder=options.behavior}return flipOrder.forEach((function(step,index){if(placement!==step||flipOrder.length===index+1)return data;placement=data.placement.split("-")[0],placementOpposite=getOppositePlacement(placement);var popperOffsets=data.offsets.popper,refOffsets=data.offsets.reference,floor=Math.floor,overlapsRef="left"===placement&&floor(popperOffsets.right)>floor(refOffsets.left)||"right"===placement&&floor(popperOffsets.left)<floor(refOffsets.right)||"top"===placement&&floor(popperOffsets.bottom)>floor(refOffsets.top)||"bottom"===placement&&floor(popperOffsets.top)<floor(refOffsets.bottom),overflowsLeft=floor(popperOffsets.left)<floor(boundaries.left),overflowsRight=floor(popperOffsets.right)>floor(boundaries.right),overflowsTop=floor(popperOffsets.top)<floor(boundaries.top),overflowsBottom=floor(popperOffsets.bottom)>floor(boundaries.bottom),overflowsBoundaries="left"===placement&&overflowsLeft||"right"===placement&&overflowsRight||"top"===placement&&overflowsTop||"bottom"===placement&&overflowsBottom,isVertical=-1!==["top","bottom"].indexOf(placement),flippedVariation=!!options.flipVariations&&(isVertical&&"start"===variation&&overflowsLeft||isVertical&&"end"===variation&&overflowsRight||!isVertical&&"start"===variation&&overflowsTop||!isVertical&&"end"===variation&&overflowsBottom);(overlapsRef||overflowsBoundaries||flippedVariation)&&(data.flipped=!0,(overlapsRef||overflowsBoundaries)&&(placement=flipOrder[index+1]),flippedVariation&&(variation=function getOppositeVariation(variation){return"end"===variation?"start":"start"===variation?"end":variation}(variation)),data.placement=placement+(variation?"-"+variation:""),data.offsets.popper=popper_extends({},data.offsets.popper,getPopperOffsets(data.instance.popper,data.offsets.reference,data.placement)),data=runModifiers(data.instance.modifiers,data,"flip"))})),data},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function inner(data){var placement=data.placement,basePlacement=placement.split("-")[0],_data$offsets=data.offsets,popper=_data$offsets.popper,reference=_data$offsets.reference,isHoriz=-1!==["left","right"].indexOf(basePlacement),subtractLength=-1===["top","left"].indexOf(basePlacement);return popper[isHoriz?"left":"top"]=reference[basePlacement]-(subtractLength?popper[isHoriz?"width":"height"]:0),data.placement=getOppositePlacement(placement),data.offsets.popper=getClientRect(popper),data}},hide:{order:800,enabled:!0,fn:function hide(data){if(!isModifierRequired(data.instance.modifiers,"hide","preventOverflow"))return data;var refRect=data.offsets.reference,bound=find(data.instance.modifiers,(function(modifier){return"preventOverflow"===modifier.name})).boundaries;if(refRect.bottom<bound.top||refRect.left>bound.right||refRect.top>bound.bottom||refRect.right<bound.left){if(!0===data.hide)return data;data.hide=!0,data.attributes["x-out-of-boundaries"]=""}else{if(!1===data.hide)return data;data.hide=!1,data.attributes["x-out-of-boundaries"]=!1}return data}},computeStyle:{order:850,enabled:!0,fn:function computeStyle(data,options){var x=options.x,y=options.y,popper=data.offsets.popper,legacyGpuAccelerationOption=find(data.instance.modifiers,(function(modifier){return"applyStyle"===modifier.name})).gpuAcceleration;void 0!==legacyGpuAccelerationOption&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var gpuAcceleration=void 0!==legacyGpuAccelerationOption?legacyGpuAccelerationOption:options.gpuAcceleration,offsetParentRect=getBoundingClientRect(getOffsetParent(data.instance.popper)),styles={position:popper.position},offsets={left:Math.floor(popper.left),top:Math.round(popper.top),bottom:Math.round(popper.bottom),right:Math.floor(popper.right)},sideA="bottom"===x?"top":"bottom",sideB="right"===y?"left":"right",prefixedProperty=getSupportedPropertyName("transform"),left=void 0,top=void 0;if(top="bottom"===sideA?-offsetParentRect.height+offsets.bottom:offsets.top,left="right"===sideB?-offsetParentRect.width+offsets.right:offsets.left,gpuAcceleration&&prefixedProperty)styles[prefixedProperty]="translate3d("+left+"px, "+top+"px, 0)",styles[sideA]=0,styles[sideB]=0,styles.willChange="transform";else{var invertTop="bottom"===sideA?-1:1,invertLeft="right"===sideB?-1:1;styles[sideA]=top*invertTop,styles[sideB]=left*invertLeft,styles.willChange=sideA+", "+sideB}var attributes={"x-placement":data.placement};return data.attributes=popper_extends({},attributes,data.attributes),data.styles=popper_extends({},styles,data.styles),data.arrowStyles=popper_extends({},data.offsets.arrow,data.arrowStyles),data},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function applyStyle(data){return setStyles(data.instance.popper,data.styles),function setAttributes(element,attributes){Object.keys(attributes).forEach((function(prop){!1!==attributes[prop]?element.setAttribute(prop,attributes[prop]):element.removeAttribute(prop)}))}(data.instance.popper,data.attributes),data.arrowElement&&Object.keys(data.arrowStyles).length&&setStyles(data.arrowElement,data.arrowStyles),data},onLoad:function applyStyleOnLoad(reference,popper,options,modifierOptions,state){var referenceOffsets=getReferenceOffsets(state,popper,reference,options.positionFixed),placement=computeAutoPlacement(options.placement,referenceOffsets,popper,reference,options.modifiers.flip.boundariesElement,options.modifiers.flip.padding);return popper.setAttribute("x-placement",placement),setStyles(popper,{position:options.positionFixed?"fixed":"absolute"}),options},gpuAcceleration:void 0}},Defaults={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function onCreate(){},onUpdate:function onUpdate(){},modifiers},Popper=function(){function Popper(reference,popper){var _this=this,options=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Popper),this.scheduleUpdate=function(){return requestAnimationFrame(_this.update)},this.update=debounce(this.update.bind(this)),this.options=popper_extends({},Popper.Defaults,options),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=reference&&reference.jquery?reference[0]:reference,this.popper=popper&&popper.jquery?popper[0]:popper,this.options.modifiers={},Object.keys(popper_extends({},Popper.Defaults.modifiers,options.modifiers)).forEach((function(name){_this.options.modifiers[name]=popper_extends({},Popper.Defaults.modifiers[name]||{},options.modifiers?options.modifiers[name]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(name){return popper_extends({name},_this.options.modifiers[name])})).sort((function(a,b){return a.order-b.order})),this.modifiers.forEach((function(modifierOptions){modifierOptions.enabled&&isFunction(modifierOptions.onLoad)&&modifierOptions.onLoad(_this.reference,_this.popper,_this.options,modifierOptions,_this.state)})),this.update();var eventsEnabled=this.options.eventsEnabled;eventsEnabled&&this.enableEventListeners(),this.state.eventsEnabled=eventsEnabled}return createClass(Popper,[{key:"update",value:function update$$1(){return update.call(this)}},{key:"destroy",value:function destroy$$1(){return destroy.call(this)}},{key:"enableEventListeners",value:function enableEventListeners$$1(){return enableEventListeners.call(this)}},{key:"disableEventListeners",value:function disableEventListeners$$1(){return disableEventListeners.call(this)}}]),Popper}();Popper.Utils=("undefined"!=typeof window?window:__webpack_require__.g).PopperUtils,Popper.placements=placements,Popper.Defaults=Defaults;const popper=Popper;var Popper_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target},Popper_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function Popper_possibleConstructorReturn(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call}var Popper_placements=popper.placements,Popper_Popper=function(_Component){function Popper(){var _ref,_temp,_this;!function Popper_classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Popper);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=Popper_possibleConstructorReturn(this,(_ref=Popper.__proto__||Object.getPrototypeOf(Popper)).call.apply(_ref,[this].concat(args))),_this.state={},_this._setArrowNode=function(node){_this._arrowNode=node},_this._getTargetNode=function(){if(_this.props.target)return _this.props.target;if(!_this.context.popperManager||!_this.context.popperManager.getTargetNode())throw new Error("Target missing. Popper must be given a target from the Popper Manager, or as a prop.");return _this.context.popperManager.getTargetNode()},_this._getOffsets=function(data){return Object.keys(data.offsets).map((function(key){return data.offsets[key]}))},_this._isDataDirty=function(data){return!_this.state.data||JSON.stringify(_this._getOffsets(_this.state.data))!==JSON.stringify(_this._getOffsets(data))},_this._updateStateModifier={enabled:!0,order:900,fn:function fn(data){return _this._isDataDirty(data)&&_this.setState({data}),data}},_this._getPopperStyle=function(){var data=_this.state.data;return _this._popper&&data?Popper_extends({position:data.offsets.popper.position},data.styles):{position:"absolute",pointerEvents:"none",opacity:0}},_this._getPopperPlacement=function(){return _this.state.data?_this.state.data.placement:void 0},_this._getPopperHide=function(){return _this.state.data&&_this.state.data.hide?"":void 0},_this._getArrowStyle=function(){if(_this.state.data&&_this.state.data.offsets.arrow){var _this$state$data$offs=_this.state.data.offsets.arrow;return{top:_this$state$data$offs.top,left:_this$state$data$offs.left}}return{}},_this._handlePopperRef=function(node){_this._popperNode=node,node?_this._createPopper():_this._destroyPopper(),_this.props.innerRef&&_this.props.innerRef(node)},_this._scheduleUpdate=function(){_this._popper&&_this._popper.scheduleUpdate()},Popper_possibleConstructorReturn(_this,_temp)}return function Popper_inherits(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)}(Popper,_Component),Popper_createClass(Popper,[{key:"getChildContext",value:function getChildContext(){return{popper:{setArrowNode:this._setArrowNode,getArrowStyle:this._getArrowStyle}}}},{key:"componentDidUpdate",value:function componentDidUpdate(lastProps){lastProps.placement===this.props.placement&&lastProps.eventsEnabled===this.props.eventsEnabled&&lastProps.target===this.props.target||(this._destroyPopper(),this._createPopper()),lastProps.children!==this.props.children&&this._scheduleUpdate()}},{key:"componentWillUnmount",value:function componentWillUnmount(){this._destroyPopper()}},{key:"_createPopper",value:function _createPopper(){var _this2=this,_props=this.props,placement=_props.placement,eventsEnabled=_props.eventsEnabled,modifiers=Popper_extends({},this.props.modifiers,{applyStyle:{enabled:!1},updateState:this._updateStateModifier});this._arrowNode&&(modifiers.arrow=Popper_extends({},this.props.modifiers.arrow||{},{element:this._arrowNode})),this._popper=new popper(this._getTargetNode(),this._popperNode,{placement,eventsEnabled,modifiers}),setTimeout((function(){return _this2._scheduleUpdate()}))}},{key:"_destroyPopper",value:function _destroyPopper(){this._popper&&this._popper.destroy()}},{key:"render",value:function render(){var _props2=this.props,component=_props2.component,children=(_props2.innerRef,_props2.placement,_props2.eventsEnabled,_props2.modifiers,_props2.children),restProps=function Popper_objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}(_props2,["component","innerRef","placement","eventsEnabled","modifiers","children"]),popperStyle=this._getPopperStyle(),popperPlacement=this._getPopperPlacement(),popperHide=this._getPopperHide();if("function"==typeof children)return children({popperProps:{ref:this._handlePopperRef,style:popperStyle,"data-placement":popperPlacement,"data-x-out-of-boundaries":popperHide},restProps,scheduleUpdate:this._scheduleUpdate});var componentProps=Popper_extends({},restProps,{style:Popper_extends({},restProps.style,popperStyle),"data-placement":popperPlacement,"data-x-out-of-boundaries":popperHide});return"string"==typeof component?componentProps.ref=this._handlePopperRef:componentProps.innerRef=this._handlePopperRef,(0,react.createElement)(component,componentProps,children)}}]),Popper}(react.Component);Popper_Popper.contextTypes={popperManager:prop_types_default().object},Popper_Popper.childContextTypes={popper:prop_types_default().object.isRequired},Popper_Popper.propTypes={component:prop_types_default().oneOfType([prop_types_default().node,prop_types_default().func]),innerRef:prop_types_default().func,placement:prop_types_default().oneOf(Popper_placements),eventsEnabled:prop_types_default().bool,modifiers:prop_types_default().object,children:prop_types_default().oneOfType([prop_types_default().node,prop_types_default().func]),target:prop_types_default().oneOfType([prop_types_default().instanceOf("undefined"!=typeof Element?Element:Object),prop_types_default().shape({getBoundingClientRect:prop_types_default().func.isRequired,clientWidth:prop_types_default().number.isRequired,clientHeight:prop_types_default().number.isRequired})])},Popper_Popper.defaultProps={component:"div",placement:"bottom",eventsEnabled:!0,modifiers:{}};const lib_Popper=Popper_Popper;var Arrow_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source)Object.prototype.hasOwnProperty.call(source,key)&&(target[key]=source[key])}return target};var Arrow=function Arrow(props,context){var _props$component=props.component,component=void 0===_props$component?"span":_props$component,innerRef=props.innerRef,children=props.children,restProps=function Arrow_objectWithoutProperties(obj,keys){var target={};for(var i in obj)keys.indexOf(i)>=0||Object.prototype.hasOwnProperty.call(obj,i)&&(target[i]=obj[i]);return target}(props,["component","innerRef","children"]),popper=context.popper,arrowRef=function arrowRef(node){popper.setArrowNode(node),"function"==typeof innerRef&&innerRef(node)},arrowStyle=popper.getArrowStyle();if("function"==typeof children)return children({arrowProps:{ref:arrowRef,style:arrowStyle},restProps});var componentProps=Arrow_extends({},restProps,{style:Arrow_extends({},arrowStyle,restProps.style)});return"string"==typeof component?componentProps.ref=arrowRef:componentProps.innerRef=arrowRef,(0,react.createElement)(component,componentProps,children)};Arrow.contextTypes={popper:prop_types_default().object.isRequired},Arrow.propTypes={component:prop_types_default().oneOfType([prop_types_default().node,prop_types_default().func]),innerRef:prop_types_default().func,children:prop_types_default().oneOfType([prop_types_default().node,prop_types_default().func])};var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},es_classCallCheck=function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")},es_createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),inherits=function(subClass,superClass){if("function"!=typeof superClass&&null!==superClass)throw new TypeError("Super expression must either be null or a function, not "+typeof superClass);subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,enumerable:!1,writable:!0,configurable:!0}}),superClass&&(Object.setPrototypeOf?Object.setPrototypeOf(subClass,superClass):subClass.__proto__=superClass)},possibleConstructorReturn=function(self,call){if(!self)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!call||"object"!=typeof call&&"function"!=typeof call?self:call};function generateYears(year,noOfYear,minDate,maxDate){for(var list=[],i=0;i<2*noOfYear+1;i++){var newYear=year+noOfYear-i,isInRange=!0;minDate&&(isInRange=minDate.year()<=newYear),maxDate&&isInRange&&(isInRange=maxDate.year()>=newYear),isInRange&&list.push(newYear)}return list}var YearDropdownOptions=function(_React$Component){function YearDropdownOptions(props){es_classCallCheck(this,YearDropdownOptions);var _this=possibleConstructorReturn(this,_React$Component.call(this,props));_this.renderOptions=function(){var selectedYear=_this.props.year,options=_this.state.yearsList.map((function(year){return react.createElement("div",{className:selectedYear===year?"react-datepicker__year-option react-datepicker__year-option--selected_year":"react-datepicker__year-option",key:year,ref:year,onClick:_this.onChange.bind(_this,year)},selectedYear===year?react.createElement("span",{className:"react-datepicker__year-option--selected"},"✓"):"",year)})),minYear=_this.props.minDate?_this.props.minDate.year():null,maxYear=_this.props.maxDate?_this.props.maxDate.year():null;return maxYear&&_this.state.yearsList.find((function(year){return year===maxYear}))||options.unshift(react.createElement("div",{className:"react-datepicker__year-option",ref:"upcoming",key:"upcoming",onClick:_this.incrementYears},react.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-upcoming"}))),minYear&&_this.state.yearsList.find((function(year){return year===minYear}))||options.push(react.createElement("div",{className:"react-datepicker__year-option",ref:"previous",key:"previous",onClick:_this.decrementYears},react.createElement("a",{className:"react-datepicker__navigation react-datepicker__navigation--years react-datepicker__navigation--years-previous"}))),options},_this.onChange=function(year){_this.props.onChange(year)},_this.handleClickOutside=function(){_this.props.onCancel()},_this.shiftYears=function(amount){var years=_this.state.yearsList.map((function(year){return year+amount}));_this.setState({yearsList:years})},_this.incrementYears=function(){return _this.shiftYears(1)},_this.decrementYears=function(){return _this.shiftYears(-1)};var yearDropdownItemNumber=props.yearDropdownItemNumber,scrollableYearDropdown=props.scrollableYearDropdown,noOfYear=yearDropdownItemNumber||(scrollableYearDropdown?10:5);return _this.state={yearsList:generateYears(_this.props.year,noOfYear,_this.props.minDate,_this.props.maxDate)},_this}return inherits(YearDropdownOptions,_React$Component),YearDropdownOptions.prototype.render=function render(){var dropdownClass=classnames_default()({"react-datepicker__year-dropdown":!0,"react-datepicker__year-dropdown--scrollable":this.props.scrollableYearDropdown});return react.createElement("div",{className:dropdownClass},this.renderOptions())},YearDropdownOptions}(react.Component);YearDropdownOptions.propTypes={minDate:prop_types_default().object,maxDate:prop_types_default().object,onCancel:prop_types_default().func.isRequired,onChange:prop_types_default().func.isRequired,scrollableYearDropdown:prop_types_default().bool,year:prop_types_default().number.isRequired,yearDropdownItemNumber:prop_types_default().number};var dayOfWeekCodes={1:"mon",2:"tue",3:"wed",4:"thu",5:"fri",6:"sat",7:"sun"};function set$1(date,unit,to){return date.set(unit,to)}function add(date,amount,unit){return date.add(amount,unit)}function subtract(date,amount,unit){return date.subtract(amount,unit)}function get$1(date,unit){return date.get(unit)}function getStartOf(date,unit){return date.startOf(unit)}function newDate(point){return moment_default()(point)}function now(maybeFixedUtcOffset){return null==maybeFixedUtcOffset?newDate():function newDateWithOffset(utcOffset){return moment_default()().utc().utcOffset(utcOffset)}(maybeFixedUtcOffset)}function cloneDate(date){return date.clone()}function isMoment(date){return moment_default().isMoment(date)}function formatDate(date,format){return date.format(format)}function setTime(date,_ref3){var hour=_ref3.hour,minute=_ref3.minute,second=_ref3.second;return date.set({hour,minute,second}),date}function setMonth(date,month){return set$1(date,"month",month)}function setYear(date,year){return set$1(date,"year",year)}function getSecond(date){return get$1(date,"second")}function getMinute(date){return get$1(date,"minute")}function getHour(date){return get$1(date,"hour")}function getMonth(date){return get$1(date,"month")}function getYear(date){return get$1(date,"year")}function getDate(date){return get$1(date,"date")}function getStartOfWeek(date){return getStartOf(date,"week")}function getStartOfMonth(date){return getStartOf(date,"month")}function addMinutes(date,amount){return add(date,amount,"minutes")}function addDays(date,amount){return add(date,amount,"days")}function addWeeks(date,amount){return add(date,amount,"weeks")}function addMonths(date,amount){return add(date,amount,"months")}function subtractMonths(date,amount){return subtract(date,amount,"months")}function isBefore(date1,date2){return date1.isBefore(date2)}function isAfter(date1,date2){return date1.isAfter(date2)}function isSameYear(date1,date2){return date1&&date2?date1.isSame(date2,"year"):!date1&&!date2}function isSameMonth(date1,date2){return date1&&date2?date1.isSame(date2,"month"):!date1&&!date2}function isSameDay(moment1,moment2){return moment1&&moment2?moment1.isSame(moment2,"day"):!moment1&&!moment2}function isDayInRange(day,startDate,endDate){var before=startDate.clone().startOf("day").subtract(1,"seconds"),after=endDate.clone().startOf("day").add(1,"seconds");return day.clone().startOf("day").isBetween(before,after)}function localizeDate(date,locale){return date.clone().locale(locale||moment_default().locale())}function isDayDisabled(day){var _ref4=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},minDate=_ref4.minDate,maxDate=_ref4.maxDate,excludeDates=_ref4.excludeDates,includeDates=_ref4.includeDates,filterDate=_ref4.filterDate;return minDate&&day.isBefore(minDate,"day")||maxDate&&day.isAfter(maxDate,"day")||excludeDates&&excludeDates.some((function(excludeDate){return isSameDay(day,excludeDate)}))||includeDates&&!includeDates.some((function(includeDate){return isSameDay(day,includeDate)}))||filterDate&&!filterDate(day.clone())||!1}function isTimeDisabled(time,disabledTimes){for(var l=disabledTimes.length,i=0;i<l;i++)if(disabledTimes[i].get("hours")===time.get("hours")&&disabledTimes[i].get("minutes")===time.get("minutes"))return!0;return!1}function isTimeInDisabledRange(time,_ref5){var minTime=_ref5.minTime,maxTime=_ref5.maxTime;if(!minTime||!maxTime)throw new Error("Both minTime and maxTime props required");var base=moment_default()().hours(0).minutes(0).seconds(0),baseTime=base.clone().hours(time.get("hours")).minutes(time.get("minutes")),min=base.clone().hours(minTime.get("hours")).minutes(minTime.get("minutes")),max=base.clone().hours(maxTime.get("hours")).minutes(maxTime.get("minutes"));return!(baseTime.isSameOrAfter(min)&&baseTime.isSameOrBefore(max))}function getEffectiveMinDate(_ref8){var minDate=_ref8.minDate,includeDates=_ref8.includeDates;return includeDates&&minDate?moment_default().min(includeDates.filter((function(includeDate){return minDate.isSameOrBefore(includeDate,"day")}))):includeDates?moment_default().min(includeDates):minDate}function getEffectiveMaxDate(_ref9){var maxDate=_ref9.maxDate,includeDates=_ref9.includeDates;return includeDates&&maxDate?moment_default().max(includeDates.filter((function(includeDate){return maxDate.isSameOrAfter(includeDate,"day")}))):includeDates?moment_default().max(includeDates):maxDate}function getHightLightDaysMap(){for(var highlightDates=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],defaultClassName=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"react-datepicker__day--highlighted",dateClasses=new Map,i=0,len=highlightDates.length;i<len;i++){var obj=highlightDates[i];if(isMoment(obj)){var key=obj.format("MM.DD.YYYY"),classNamesArr=dateClasses.get(key)||[];classNamesArr.includes(defaultClassName)||(classNamesArr.push(defaultClassName),dateClasses.set(key,classNamesArr))}else if("object"===(void 0===obj?"undefined":_typeof(obj))){var keys=Object.keys(obj),className=keys[0],arrOfMoments=obj[keys[0]];if("string"==typeof className&&arrOfMoments.constructor===Array)for(var k=0,_len=arrOfMoments.length;k<_len;k++){var _key=arrOfMoments[k].format("MM.DD.YYYY"),_classNamesArr=dateClasses.get(_key)||[];_classNamesArr.includes(className)||(_classNamesArr.push(className),dateClasses.set(_key,_classNamesArr))}}}return dateClasses}function timesToInjectAfter(startOfDay,currentTime,currentMultiplier,intervals,injectedTimes){for(var date,amount,l=injectedTimes.length,times=[],i=0;i<l;i++){var injectedTime=addMinutes((date=cloneDate(startOfDay),amount=getHour(injectedTimes[i]),add(date,amount,"hours")),getMinute(injectedTimes[i])),nextTime=addMinutes(cloneDate(startOfDay),(currentMultiplier+1)*intervals);injectedTime.isBetween(currentTime,nextTime)&×.push(injectedTimes[i])}return times}var WrappedYearDropdownOptions=react_onclickoutside_es(YearDropdownOptions),YearDropdown=function(_React$Component){function YearDropdown(){var _temp,_this;es_classCallCheck(this,YearDropdown);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.state={dropdownVisible:!1},_this.renderSelectOptions=function(){for(var minYear=_this.props.minDate?getYear(_this.props.minDate):1900,maxYear=_this.props.maxDate?getYear(_this.props.maxDate):2100,options=[],i=minYear;i<=maxYear;i++)options.push(react.createElement("option",{key:i,value:i},i));return options},_this.onSelectChange=function(e){_this.onChange(e.target.value)},_this.renderSelectMode=function(){return react.createElement("select",{value:_this.props.year,className:"react-datepicker__year-select",onChange:_this.onSelectChange},_this.renderSelectOptions())},_this.renderReadView=function(visible){return react.createElement("div",{key:"read",style:{visibility:visible?"visible":"hidden"},className:"react-datepicker__year-read-view",onClick:function onClick(event){return _this.toggleDropdown(event)}},react.createElement("span",{className:"react-datepicker__year-read-view--down-arrow"}),react.createElement("span",{className:"react-datepicker__year-read-view--selected-year"},_this.props.year))},_this.renderDropdown=function(){return react.createElement(WrappedYearDropdownOptions,{key:"dropdown",ref:"options",year:_this.props.year,onChange:_this.onChange,onCancel:_this.toggleDropdown,minDate:_this.props.minDate,maxDate:_this.props.maxDate,scrollableYearDropdown:_this.props.scrollableYearDropdown,yearDropdownItemNumber:_this.props.yearDropdownItemNumber})},_this.renderScrollMode=function(){var dropdownVisible=_this.state.dropdownVisible,result=[_this.renderReadView(!dropdownVisible)];return dropdownVisible&&result.unshift(_this.renderDropdown()),result},_this.onChange=function(year){_this.toggleDropdown(),year!==_this.props.year&&_this.props.onChange(year)},_this.toggleDropdown=function(event){_this.setState({dropdownVisible:!_this.state.dropdownVisible},(function(){_this.props.adjustDateOnChange&&_this.handleYearChange(_this.props.date,event)}))},_this.handleYearChange=function(date,event){_this.onSelect(date,event),_this.setOpen()},_this.onSelect=function(date,event){_this.props.onSelect&&_this.props.onSelect(date,event)},_this.setOpen=function(){_this.props.setOpen&&_this.props.setOpen(!0)},possibleConstructorReturn(_this,_temp)}return inherits(YearDropdown,_React$Component),YearDropdown.prototype.render=function render(){var renderedDropdown=void 0;switch(this.props.dropdownMode){case"scroll":renderedDropdown=this.renderScrollMode();break;case"select":renderedDropdown=this.renderSelectMode()}return react.createElement("div",{className:"react-datepicker__year-dropdown-container react-datepicker__year-dropdown-container--"+this.props.dropdownMode},renderedDropdown)},YearDropdown}(react.Component);YearDropdown.propTypes={adjustDateOnChange:prop_types_default().bool,dropdownMode:prop_types_default().oneOf(["scroll","select"]).isRequired,maxDate:prop_types_default().object,minDate:prop_types_default().object,onChange:prop_types_default().func.isRequired,scrollableYearDropdown:prop_types_default().bool,year:prop_types_default().number.isRequired,yearDropdownItemNumber:prop_types_default().number,date:prop_types_default().object,onSelect:prop_types_default().func,setOpen:prop_types_default().func};var MonthDropdownOptions=function(_React$Component){function MonthDropdownOptions(){var _temp,_this;es_classCallCheck(this,MonthDropdownOptions);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.renderOptions=function(){return _this.props.monthNames.map((function(month,i){return react.createElement("div",{className:_this.props.month===i?"react-datepicker__month-option --selected_month":"react-datepicker__month-option",key:month,ref:month,onClick:_this.onChange.bind(_this,i)},_this.props.month===i?react.createElement("span",{className:"react-datepicker__month-option--selected"},"✓"):"",month)}))},_this.onChange=function(month){return _this.props.onChange(month)},_this.handleClickOutside=function(){return _this.props.onCancel()},possibleConstructorReturn(_this,_temp)}return inherits(MonthDropdownOptions,_React$Component),MonthDropdownOptions.prototype.render=function render(){return react.createElement("div",{className:"react-datepicker__month-dropdown"},this.renderOptions())},MonthDropdownOptions}(react.Component);MonthDropdownOptions.propTypes={onCancel:prop_types_default().func.isRequired,onChange:prop_types_default().func.isRequired,month:prop_types_default().number.isRequired,monthNames:prop_types_default().arrayOf(prop_types_default().string.isRequired).isRequired};var WrappedMonthDropdownOptions=react_onclickoutside_es(MonthDropdownOptions),MonthDropdown=function(_React$Component){function MonthDropdown(){var _temp,_this;es_classCallCheck(this,MonthDropdown);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.state={dropdownVisible:!1},_this.renderSelectOptions=function(monthNames){return monthNames.map((function(M,i){return react.createElement("option",{key:i,value:i},M)}))},_this.renderSelectMode=function(monthNames){return react.createElement("select",{value:_this.props.month,className:"react-datepicker__month-select",onChange:function onChange(e){return _this.onChange(e.target.value)}},_this.renderSelectOptions(monthNames))},_this.renderReadView=function(visible,monthNames){return react.createElement("div",{key:"read",style:{visibility:visible?"visible":"hidden"},className:"react-datepicker__month-read-view",onClick:_this.toggleDropdown},react.createElement("span",{className:"react-datepicker__month-read-view--down-arrow"}),react.createElement("span",{className:"react-datepicker__month-read-view--selected-month"},monthNames[_this.props.month]))},_this.renderDropdown=function(monthNames){return react.createElement(WrappedMonthDropdownOptions,{key:"dropdown",ref:"options",month:_this.props.month,monthNames,onChange:_this.onChange,onCancel:_this.toggleDropdown})},_this.renderScrollMode=function(monthNames){var dropdownVisible=_this.state.dropdownVisible,result=[_this.renderReadView(!dropdownVisible,monthNames)];return dropdownVisible&&result.unshift(_this.renderDropdown(monthNames)),result},_this.onChange=function(month){_this.toggleDropdown(),month!==_this.props.month&&_this.props.onChange(month)},_this.toggleDropdown=function(){return _this.setState({dropdownVisible:!_this.state.dropdownVisible})},possibleConstructorReturn(_this,_temp)}return inherits(MonthDropdown,_React$Component),MonthDropdown.prototype.render=function render(){var _this2=this,localeData=function getLocaleDataForLocale(locale){return moment_default().localeData(locale)}(this.props.locale),monthNames=[0,1,2,3,4,5,6,7,8,9,10,11].map(this.props.useShortMonthInDropdown?function(M){return function getMonthShortInLocale(locale,date){return locale.monthsShort(date)}(localeData,newDate({M}))}:function(M){return function getMonthInLocale(locale,date,format){return locale.months(date,format)}(localeData,newDate({M}),_this2.props.dateFormat)}),renderedDropdown=void 0;switch(this.props.dropdownMode){case"scroll":renderedDropdown=this.renderScrollMode(monthNames);break;case"select":renderedDropdown=this.renderSelectMode(monthNames)}return react.createElement("div",{className:"react-datepicker__month-dropdown-container react-datepicker__month-dropdown-container--"+this.props.dropdownMode},renderedDropdown)},MonthDropdown}(react.Component);function generateMonthYears(minDate,maxDate){for(var list=[],currDate=getStartOfMonth(cloneDate(minDate)),lastDate=getStartOfMonth(cloneDate(maxDate));!isAfter(currDate,lastDate);)list.push(cloneDate(currDate)),addMonths(currDate,1);return list}MonthDropdown.propTypes={dropdownMode:prop_types_default().oneOf(["scroll","select"]).isRequired,locale:prop_types_default().string,dateFormat:prop_types_default().string.isRequired,month:prop_types_default().number.isRequired,onChange:prop_types_default().func.isRequired,useShortMonthInDropdown:prop_types_default().bool};var MonthYearDropdownOptions=function(_React$Component){function MonthYearDropdownOptions(props){es_classCallCheck(this,MonthYearDropdownOptions);var _this=possibleConstructorReturn(this,_React$Component.call(this,props));return _this.renderOptions=function(){return _this.state.monthYearsList.map((function(monthYear){var monthYearPoint=monthYear.valueOf(),isSameMonthYear=isSameYear(_this.props.date,monthYear)&&isSameMonth(_this.props.date,monthYear);return react.createElement("div",{className:isSameMonthYear?"react-datepicker__month-year-option --selected_month-year":"react-datepicker__month-year-option",key:monthYearPoint,ref:monthYearPoint,onClick:_this.onChange.bind(_this,monthYearPoint)},isSameMonthYear?react.createElement("span",{className:"react-datepicker__month-year-option--selected"},"✓"):"",formatDate(monthYear,_this.props.dateFormat))}))},_this.onChange=function(monthYear){return _this.props.onChange(monthYear)},_this.handleClickOutside=function(){_this.props.onCancel()},_this.state={monthYearsList:generateMonthYears(_this.props.minDate,_this.props.maxDate)},_this}return inherits(MonthYearDropdownOptions,_React$Component),MonthYearDropdownOptions.prototype.render=function render(){var dropdownClass=classnames_default()({"react-datepicker__month-year-dropdown":!0,"react-datepicker__month-year-dropdown--scrollable":this.props.scrollableMonthYearDropdown});return react.createElement("div",{className:dropdownClass},this.renderOptions())},MonthYearDropdownOptions}(react.Component);MonthYearDropdownOptions.propTypes={minDate:prop_types_default().object.isRequired,maxDate:prop_types_default().object.isRequired,onCancel:prop_types_default().func.isRequired,onChange:prop_types_default().func.isRequired,scrollableMonthYearDropdown:prop_types_default().bool,date:prop_types_default().object.isRequired,dateFormat:prop_types_default().string.isRequired};var WrappedMonthYearDropdownOptions=react_onclickoutside_es(MonthYearDropdownOptions),MonthYearDropdown=function(_React$Component){function MonthYearDropdown(){var _temp,_this;es_classCallCheck(this,MonthYearDropdown);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.state={dropdownVisible:!1},_this.renderSelectOptions=function(){for(var currDate=getStartOfMonth(localizeDate(_this.props.minDate,_this.props.locale)),lastDate=getStartOfMonth(localizeDate(_this.props.maxDate,_this.props.locale)),options=[];!isAfter(currDate,lastDate);){var timepoint=currDate.valueOf();options.push(react.createElement("option",{key:timepoint,value:timepoint},formatDate(currDate,_this.props.dateFormat))),addMonths(currDate,1)}return options},_this.onSelectChange=function(e){_this.onChange(e.target.value)},_this.renderSelectMode=function(){return react.createElement("select",{value:getStartOfMonth(_this.props.date).valueOf(),className:"react-datepicker__month-year-select",onChange:_this.onSelectChange},_this.renderSelectOptions())},_this.renderReadView=function(visible){var yearMonth=formatDate(localizeDate(newDate(_this.props.date),_this.props.locale),_this.props.dateFormat);return react.createElement("div",{key:"read",style:{visibility:visible?"visible":"hidden"},className:"react-datepicker__month-year-read-view",onClick:function onClick(event){return _this.toggleDropdown(event)}},react.createElement("span",{className:"react-datepicker__month-year-read-view--down-arrow"}),react.createElement("span",{className:"react-datepicker__month-year-read-view--selected-month-year"},yearMonth))},_this.renderDropdown=function(){return react.createElement(WrappedMonthYearDropdownOptions,{key:"dropdown",ref:"options",date:_this.props.date,dateFormat:_this.props.dateFormat,onChange:_this.onChange,onCancel:_this.toggleDropdown,minDate:localizeDate(_this.props.minDate,_this.props.locale),maxDate:localizeDate(_this.props.maxDate,_this.props.locale),scrollableMonthYearDropdown:_this.props.scrollableMonthYearDropdown})},_this.renderScrollMode=function(){var dropdownVisible=_this.state.dropdownVisible,result=[_this.renderReadView(!dropdownVisible)];return dropdownVisible&&result.unshift(_this.renderDropdown()),result},_this.onChange=function(monthYearPoint){_this.toggleDropdown();var changedDate=newDate(parseInt(monthYearPoint));isSameYear(_this.props.date,changedDate)&&isSameMonth(_this.props.date,changedDate)||_this.props.onChange(changedDate)},_this.toggleDropdown=function(){return _this.setState({dropdownVisible:!_this.state.dropdownVisible})},possibleConstructorReturn(_this,_temp)}return inherits(MonthYearDropdown,_React$Component),MonthYearDropdown.prototype.render=function render(){var renderedDropdown=void 0;switch(this.props.dropdownMode){case"scroll":renderedDropdown=this.renderScrollMode();break;case"select":renderedDropdown=this.renderSelectMode()}return react.createElement("div",{className:"react-datepicker__month-year-dropdown-container react-datepicker__month-year-dropdown-container--"+this.props.dropdownMode},renderedDropdown)},MonthYearDropdown}(react.Component);MonthYearDropdown.propTypes={dropdownMode:prop_types_default().oneOf(["scroll","select"]).isRequired,dateFormat:prop_types_default().string.isRequired,locale:prop_types_default().string,maxDate:prop_types_default().object.isRequired,minDate:prop_types_default().object.isRequired,date:prop_types_default().object.isRequired,onChange:prop_types_default().func.isRequired,scrollableMonthYearDropdown:prop_types_default().bool};var Day=function(_React$Component){function Day(){var _temp,_this;es_classCallCheck(this,Day);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.handleClick=function(event){!_this.isDisabled()&&_this.props.onClick&&_this.props.onClick(event)},_this.handleMouseEnter=function(event){!_this.isDisabled()&&_this.props.onMouseEnter&&_this.props.onMouseEnter(event)},_this.isSameDay=function(other){return isSameDay(_this.props.day,other)},_this.isKeyboardSelected=function(){return!_this.props.inline&&!_this.isSameDay(_this.props.selected)&&_this.isSameDay(_this.props.preSelection)},_this.isDisabled=function(){return isDayDisabled(_this.props.day,_this.props)},_this.getHighLightedClass=function(defaultClassName){var _this$props=_this.props,day=_this$props.day,highlightDates=_this$props.highlightDates;if(!highlightDates)return!1;var dayStr=day.format("MM.DD.YYYY");return highlightDates.get(dayStr)},_this.isInRange=function(){var _this$props2=_this.props,day=_this$props2.day,startDate=_this$props2.startDate,endDate=_this$props2.endDate;return!(!startDate||!endDate)&&isDayInRange(day,startDate,endDate)},_this.isInSelectingRange=function(){var _this$props3=_this.props,day=_this$props3.day,selectsStart=_this$props3.selectsStart,selectsEnd=_this$props3.selectsEnd,selectingDate=_this$props3.selectingDate,startDate=_this$props3.startDate,endDate=_this$props3.endDate;return!(!selectsStart&&!selectsEnd||!selectingDate||_this.isDisabled())&&(selectsStart&&endDate&&selectingDate.isSameOrBefore(endDate)?isDayInRange(day,selectingDate,endDate):!!(selectsEnd&&startDate&&selectingDate.isSameOrAfter(startDate))&&isDayInRange(day,startDate,selectingDate))},_this.isSelectingRangeStart=function(){if(!_this.isInSelectingRange())return!1;var _this$props4=_this.props,day=_this$props4.day,selectingDate=_this$props4.selectingDate,startDate=_this$props4.startDate;return isSameDay(day,_this$props4.selectsStart?selectingDate:startDate)},_this.isSelectingRangeEnd=function(){if(!_this.isInSelectingRange())return!1;var _this$props5=_this.props,day=_this$props5.day,selectingDate=_this$props5.selectingDate,endDate=_this$props5.endDate;return isSameDay(day,_this$props5.selectsEnd?selectingDate:endDate)},_this.isRangeStart=function(){var _this$props6=_this.props,day=_this$props6.day,startDate=_this$props6.startDate,endDate=_this$props6.endDate;return!(!startDate||!endDate)&&isSameDay(startDate,day)},_this.isRangeEnd=function(){var _this$props7=_this.props,day=_this$props7.day,startDate=_this$props7.startDate,endDate=_this$props7.endDate;return!(!startDate||!endDate)&&isSameDay(endDate,day)},_this.isWeekend=function(){var weekday=function getDay(date){return get$1(date,"day")}(_this.props.day);return 0===weekday||6===weekday},_this.isOutsideMonth=function(){return void 0!==_this.props.month&&_this.props.month!==getMonth(_this.props.day)},_this.getClassNames=function(date){var dayClassName=_this.props.dayClassName?_this.props.dayClassName(date):void 0;return classnames_default()("react-datepicker__day",dayClassName,"react-datepicker__day--"+function getDayOfWeekCode(day){return dayOfWeekCodes[day.isoWeekday()]}(_this.props.day),{"react-datepicker__day--disabled":_this.isDisabled(),"react-datepicker__day--selected":_this.isSameDay(_this.props.selected),"react-datepicker__day--keyboard-selected":_this.isKeyboardSelected(),"react-datepicker__day--range-start":_this.isRangeStart(),"react-datepicker__day--range-end":_this.isRangeEnd(),"react-datepicker__day--in-range":_this.isInRange(),"react-datepicker__day--in-selecting-range":_this.isInSelectingRange(),"react-datepicker__day--selecting-range-start":_this.isSelectingRangeStart(),"react-datepicker__day--selecting-range-end":_this.isSelectingRangeEnd(),"react-datepicker__day--today":_this.isSameDay(now(_this.props.utcOffset)),"react-datepicker__day--weekend":_this.isWeekend(),"react-datepicker__day--outside-month":_this.isOutsideMonth()},_this.getHighLightedClass("react-datepicker__day--highlighted"))},possibleConstructorReturn(_this,_temp)}return inherits(Day,_React$Component),Day.prototype.render=function render(){return react.createElement("div",{className:this.getClassNames(this.props.day),onClick:this.handleClick,onMouseEnter:this.handleMouseEnter,"aria-label":"day-"+getDate(this.props.day),role:"option"},getDate(this.props.day))},Day}(react.Component);Day.propTypes={day:prop_types_default().object.isRequired,dayClassName:prop_types_default().func,endDate:prop_types_default().object,highlightDates:prop_types_default().instanceOf(Map),inline:prop_types_default().bool,month:prop_types_default().number,onClick:prop_types_default().func,onMouseEnter:prop_types_default().func,preSelection:prop_types_default().object,selected:prop_types_default().object,selectingDate:prop_types_default().object,selectsEnd:prop_types_default().bool,selectsStart:prop_types_default().bool,startDate:prop_types_default().object,utcOffset:prop_types_default().number};var WeekNumber=function(_React$Component){function WeekNumber(){var _temp,_this;es_classCallCheck(this,WeekNumber);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.handleClick=function(event){_this.props.onClick&&_this.props.onClick(event)},possibleConstructorReturn(_this,_temp)}return inherits(WeekNumber,_React$Component),WeekNumber.prototype.render=function render(){var weekNumberClasses={"react-datepicker__week-number":!0,"react-datepicker__week-number--clickable":!!this.props.onClick};return react.createElement("div",{className:classnames_default()(weekNumberClasses),"aria-label":"week-"+this.props.weekNumber,onClick:this.handleClick},this.props.weekNumber)},WeekNumber}(react.Component);WeekNumber.propTypes={weekNumber:prop_types_default().number.isRequired,onClick:prop_types_default().func};var Week=function(_React$Component){function Week(){var _temp,_this;es_classCallCheck(this,Week);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.handleDayClick=function(day,event){_this.props.onDayClick&&_this.props.onDayClick(day,event)},_this.handleDayMouseEnter=function(day){_this.props.onDayMouseEnter&&_this.props.onDayMouseEnter(day)},_this.handleWeekClick=function(day,weekNumber,event){"function"==typeof _this.props.onWeekSelect&&_this.props.onWeekSelect(day,weekNumber,event)},_this.formatWeekNumber=function(startOfWeek){return _this.props.formatWeekNumber?_this.props.formatWeekNumber(startOfWeek):function getWeek(date){return get$1(date,"week")}(startOfWeek)},_this.renderDays=function(){var startOfWeek=getStartOfWeek(cloneDate(_this.props.day)),days=[],weekNumber=_this.formatWeekNumber(startOfWeek);if(_this.props.showWeekNumber){var onClickAction=_this.props.onWeekSelect?_this.handleWeekClick.bind(_this,startOfWeek,weekNumber):void 0;days.push(react.createElement(WeekNumber,{key:"W",weekNumber,onClick:onClickAction}))}return days.concat([0,1,2,3,4,5,6].map((function(offset){var day=addDays(cloneDate(startOfWeek),offset);return react.createElement(Day,{key:offset,day,month:_this.props.month,onClick:_this.handleDayClick.bind(_this,day),onMouseEnter:_this.handleDayMouseEnter.bind(_this,day),minDate:_this.props.minDate,maxDate:_this.props.maxDate,excludeDates:_this.props.excludeDates,includeDates:_this.props.includeDates,inline:_this.props.inline,highlightDates:_this.props.highlightDates,selectingDate:_this.props.selectingDate,filterDate:_this.props.filterDate,preSelection:_this.props.preSelection,selected:_this.props.selected,selectsStart:_this.props.selectsStart,selectsEnd:_this.props.selectsEnd,startDate:_this.props.startDate,endDate:_this.props.endDate,dayClassName:_this.props.dayClassName,utcOffset:_this.props.utcOffset})})))},possibleConstructorReturn(_this,_temp)}return inherits(Week,_React$Component),Week.prototype.render=function render(){return react.createElement("div",{className:"react-datepicker__week"},this.renderDays())},Week}(react.Component);Week.propTypes={day:prop_types_default().object.isRequired,dayClassName:prop_types_default().func,endDate:prop_types_default().object,excludeDates:prop_types_default().array,filterDate:prop_types_default().func,formatWeekNumber:prop_types_default().func,highlightDates:prop_types_default().instanceOf(Map),includeDates:prop_types_default().array,inline:prop_types_default().bool,maxDate:prop_types_default().object,minDate:prop_types_default().object,month:prop_types_default().number,onDayClick:prop_types_default().func,onDayMouseEnter:prop_types_default().func,onWeekSelect:prop_types_default().func,preSelection:prop_types_default().object,selected:prop_types_default().object,selectingDate:prop_types_default().object,selectsEnd:prop_types_default().bool,selectsStart:prop_types_default().bool,showWeekNumber:prop_types_default().bool,startDate:prop_types_default().object,utcOffset:prop_types_default().number};var Month=function(_React$Component){function Month(){var _temp,_this;es_classCallCheck(this,Month);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.handleDayClick=function(day,event){_this.props.onDayClick&&_this.props.onDayClick(day,event)},_this.handleDayMouseEnter=function(day){_this.props.onDayMouseEnter&&_this.props.onDayMouseEnter(day)},_this.handleMouseLeave=function(){_this.props.onMouseLeave&&_this.props.onMouseLeave()},_this.isWeekInMonth=function(startOfWeek){var day=_this.props.day,endOfWeek=addDays(cloneDate(startOfWeek),6);return isSameMonth(startOfWeek,day)||isSameMonth(endOfWeek,day)},_this.renderWeeks=function(){for(var weeks=[],isFixedHeight=_this.props.fixedHeight,currentWeekStart=getStartOfWeek(getStartOfMonth(cloneDate(_this.props.day))),i=0,breakAfterNextPush=!1;weeks.push(react.createElement(Week,{key:i,day:currentWeekStart,month:getMonth(_this.props.day),onDayClick:_this.handleDayClick,onDayMouseEnter:_this.handleDayMouseEnter,onWeekSelect:_this.props.onWeekSelect,formatWeekNumber:_this.props.formatWeekNumber,minDate:_this.props.minDate,maxDate:_this.props.maxDate,excludeDates:_this.props.excludeDates,includeDates:_this.props.includeDates,inline:_this.props.inline,highlightDates:_this.props.highlightDates,selectingDate:_this.props.selectingDate,filterDate:_this.props.filterDate,preSelection:_this.props.preSelection,selected:_this.props.selected,selectsStart:_this.props.selectsStart,selectsEnd:_this.props.selectsEnd,showWeekNumber:_this.props.showWeekNumbers,startDate:_this.props.startDate,endDate:_this.props.endDate,dayClassName:_this.props.dayClassName,utcOffset:_this.props.utcOffset})),!breakAfterNextPush;){i++,currentWeekStart=addWeeks(cloneDate(currentWeekStart),1);var isFixedAndFinalWeek=isFixedHeight&&i>=6,isNonFixedAndOutOfMonth=!isFixedHeight&&!_this.isWeekInMonth(currentWeekStart);if(isFixedAndFinalWeek||isNonFixedAndOutOfMonth){if(!_this.props.peekNextMonth)break;breakAfterNextPush=!0}}return weeks},_this.getClassNames=function(){var _this$props=_this.props,selectingDate=_this$props.selectingDate,selectsStart=_this$props.selectsStart,selectsEnd=_this$props.selectsEnd;return classnames_default()("react-datepicker__month",{"react-datepicker__month--selecting-range":selectingDate&&(selectsStart||selectsEnd)})},possibleConstructorReturn(_this,_temp)}return inherits(Month,_React$Component),Month.prototype.render=function render(){return react.createElement("div",{className:this.getClassNames(),onMouseLeave:this.handleMouseLeave,role:"listbox"},this.renderWeeks())},Month}(react.Component);Month.propTypes={day:prop_types_default().object.isRequired,dayClassName:prop_types_default().func,endDate:prop_types_default().object,excludeDates:prop_types_default().array,filterDate:prop_types_default().func,fixedHeight:prop_types_default().bool,formatWeekNumber:prop_types_default().func,highlightDates:prop_types_default().instanceOf(Map),includeDates:prop_types_default().array,inline:prop_types_default().bool,maxDate:prop_types_default().object,minDate:prop_types_default().object,onDayClick:prop_types_default().func,onDayMouseEnter:prop_types_default().func,onMouseLeave:prop_types_default().func,onWeekSelect:prop_types_default().func,peekNextMonth:prop_types_default().bool,preSelection:prop_types_default().object,selected:prop_types_default().object,selectingDate:prop_types_default().object,selectsEnd:prop_types_default().bool,selectsStart:prop_types_default().bool,showWeekNumbers:prop_types_default().bool,startDate:prop_types_default().object,utcOffset:prop_types_default().number};var Time=function(_React$Component){function Time(){var _temp,_this;es_classCallCheck(this,Time);for(var _len=arguments.length,args=Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return _temp=_this=possibleConstructorReturn(this,_React$Component.call.apply(_React$Component,[this].concat(args))),_this.handleClick=function(time){(_this.props.minTime||_this.props.maxTime)&&isTimeInDisabledRange(time,_this.props)||_this.props.excludeTimes&&isTimeDisabled(time,_this.props.excludeTimes)||_this.props.includeTimes&&!isTimeDisabled(time,_this.props.includeTimes)||_this.props.onChange(time)},_this.liClasses=function(time,currH,currM){var classes=["react-datepicker__time-list-item"];return currH===getHour(time)&&currM===getMinute(time)&&classes.push("react-datepicker__time-list-item--selected"),((_this.props.minTime||_this.props.maxTime)&&isTimeInDisabledRange(time,_this.props)||_this.props.excludeTimes&&isTimeDisabled(time,_this.props.excludeTimes)||_this.props.includeTimes&&!isTimeDisabled(time,_this.props.includeTimes))&&classes.push("react-datepicker__time-list-item--disabled"),_this.props.injectTimes&&(60*getHour(time)+getMinute(time))%_this.props.intervals!=0&&classes.push("react-datepicker__time-list-item--injected"),classes.join(" ")},_this.renderTimes=function(){for(var times=[],format=_this.props.format?_this.props.format:"hh:mm A",intervals=_this.props.intervals,activeTime=_this.props.selected?_this.props.selected:newDate(),currH=getHour(activeTime),currM=getMinute(activeTime),base=function getStartOfDay(date){return getStartOf(date,"day")}(newDate()),multiplier=1440/intervals,sortedInjectTimes=_this.props.injectTimes&&_this.props.injectTimes.sort((function(a,b){return a-b})),i=0;i<multiplier;i++){var currentTime=addMinutes(cloneDate(base),i*intervals);if(times.push(currentTime),sortedInjectTimes){var timesToInject=timesToInjectAfter(base,currentTime,i,intervals,sortedInjectTimes);times=times.concat(timesToInject)}}return times.map((function(time,i){return react.createElement("li",{key:i,onClick:_this.handleClick.bind(_this,time),className:_this.liClasses(time,currH,currM)},formatDate(time,format))}))},possibleConstructorReturn(_this,_temp)}return inherits(Time,_React$Component),Time.prototype.componentDidMount=function componentDidMount(){var multiplier=60/this.props.intervals,currH=this.props.selected?getHour(this.props.selected):getHour(newDate());this.list.scrollTop=multiplier*currH*30},Time.prototype.render=function render(){var _this2=this,height=null;return this.props.monthRef&&(height=this.props.monthRef.clientHeight-39),react.createElement("div",{className:"react-datepicker__time-container "+(this.props.todayButton?"react-datepicker__time-container--with-today-button":"")},react.createElement("div",{className:"react-datepicker__header react-datepicker__header--time"},react.createElement("div",{className:"react-datepicker-time__header"},this.props.timeCaption)),react.createElement("div",{className:"react-datepicker__time"},react.createElement("div",{className:"react-datepicker__time-box"},react.createElement("ul",{className:"react-datepicker__time-list",ref:function ref(list){_this2.list=list},style:height?{height}:{}},this.renderTimes.bind(this)()))))},es_createClass(Time,null,[{key:"defaultProps",get:function get$$1(){return{intervals:30,onTimeChange:function onTimeChange(){},todayButton:null,timeCaption:"Time"}}}]),Time}(react.Component);function CalendarContainer(_ref){var className=_ref.className,children=_ref.children;return react.createElement("div",{className},react.createElement("div",{className:"react-datepicker__triangle"}),children)}Time.propTypes={format:prop_types_default().string,includeTimes:prop_types_default().array,intervals:prop_types_default().number,selected:prop_types_default().object,onChange:prop_types_default().func,todayButton:prop_types_default().string,minTime:prop_types_default().object,maxTime:prop_types_default().object,excludeTimes:prop_types_default().array,monthRef:prop_types_default().object,timeCaption:prop_types_default().string,injectTimes:prop_types_default().array},CalendarContainer.propTypes={className:prop_types_default().string,children:prop_types_default().node};var DROPDOWN_FOCUS_CLASSNAMES=["react-datepicker__year-select","react-datepicker__month-select","react-datepicker__month-year-select"],Calendar=function(_React$Component){function Calendar(props){es_classCallCheck(this,Calendar);var _this=possibleConstructorReturn(this,_React$Component.call(this,props));return _this.handleClickOutside=function(event){_this.props.onClickOutside(event)},_this.handleDropdownFocus=function(event){(function isDropdownSelect(){var classNames=((arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).className||"").split(/\s+/);return DROPDOWN_FOCUS_CLASSNAMES.some((function(testClassname){return classNames.indexOf(testClassname)>=0}))})(event.target)&&_this.props.onDropdownFocus()},_this.getDateInView=function(){var _this$props=_this.props,preSelection=_this$props.preSelection,selected=_this$props.selected,openToDate=_this$props.openToDate,utcOffset=_this$props.utcOffset,minDate=getEffectiveMinDate(_this.props),maxDate=getEffectiveMaxDate(_this.props),current=now(utcOffset),initialDate=openToDate||selected||preSelection;return initialDate||(minDate&&isBefore(current,minDate)?minDate:maxDate&&isAfter(current,maxDate)?maxDate:current)},_this.localizeDate=function(date){return localizeDate(date,_this.props.locale)},_this.increaseMonth=function(){_this.setState({date:addMonths(cloneDate(_this.state.date),1)},(function(){return _this.handleMonthChange(_this.state.date)}))},_this.decreaseMonth=function(){_this.setState({date:subtractMonths(cloneDate(_this.state.date),1)},(function(){return _this.handleMonthChange(_this.state.date)}))},_this.handleDayClick=function(day,event){return _this.props.onSelect(day,event)},_this.handleDayMouseEnter=function(day){return _this.setState({selectingDate:day})},_this.handleMonthMouseLeave=function(){return _this.setState({selectingDate:null})},_this.handleYearChange=function(date){_this.props.onYearChange&&_this.props.onYearChange(date)},_this.handleMonthChange=function(date){_this.props.onMonthChange&&_this.props.onMonthChange(date),_this.props.adjustDateOnChange&&(_this.props.onSelect&&_this.props.onSelect(date),_this.props.setOpen&&_this.props.setOpen(!0))},_this.handleMonthYearChange=function(date){_this.handleYearChange(date),_this.handleMonthChange(date)},_this.changeYear=function(year){_this.setState({date:setYear(cloneDate(_this.state.date),year)},(function(){return _this.handleYearChange(_this.state.date)}))},_this.changeMonth=function(month){_this.setState({date:setMonth(cloneDate(_this.state.date),month)},(function(){return _this.handleMonthChange(_this.state.date)}))},_this.changeMonthYear=function(monthYear){_this.setState({date:setYear(setMonth(cloneDate(_this.state.date),getMonth(monthYear)),getYear(monthYear))},(function(){return _this.handleMonthYearChange(_this.state.date)}))},_this.header=function(){var startOfWeek=getStartOfWeek(cloneDate(arguments.length>0&&void 0!==arguments[0]?arguments[0]:_this.state.date)),dayNames=[];return _this.props.showWeekNumbers&&dayNames.push(react.createElement("div",{key:"W",className:"react-datepicker__day-name"},_this.props.weekLabel||"#")),dayNames.concat([0,1,2,3,4,5,6].map((function(offset){var day=addDays(cloneDate(startOfWeek),offset),localeData=function getLocaleData(date){return date.localeData()}(day),weekDayName=_this.formatWeekday(localeData,day);return react.createElement("div",{key:offset,className:"react-datepicker__day-name"},weekDayName)})))},_this.formatWeekday=function(localeData,day){return _this.props.formatWeekDay?function getFormattedWeekdayInLocale(locale,date,formatFunc){return formatFunc(locale.weekdays(date))}(localeData,day,_this.props.formatWeekDay):_this.props.useWeekdaysShort?function getWeekdayShortInLocale(locale,date){return locale.weekdaysShort(date)}(localeData,day):function getWeekdayMinInLocale(locale,date){return locale.weekdaysMin(date)}(localeData,day)},_this.renderPreviousMonthButton=function(){var allPrevDaysDisabled=function allDaysDisabledBefore(day,unit){var _ref6=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},minDate=_ref6.minDate,includeDates=_ref6.includeDates,dateBefore=day.clone().subtract(1,unit);return minDate&&dateBefore.isBefore(minDate,unit)||includeDates&&includeDates.every((function(includeDate){return dateBefore.isBefore(includeDate,unit)}))||!1}(_this.state.date,"month",_this.props);if((_this.props.forceShowMonthNavigation||_this.props.showDisabledMonthNavigation||!allPrevDaysDisabled)&&!_this.props.showTimeSelectOnly){var classes=["react-datepicker__navigation","react-datepicker__navigation--previous"],clickHandler=_this.decreaseMonth;return allPrevDaysDisabled&&_this.props.showDisabledMonthNavigation&&(classes.push("react-datepicker__navigation--previous--disabled"),clickHandler=null),react.createElement("button",{type:"button",className:classes.join(" "),onClick:clickHandler},_this.props.previousMonthButtonLabel)}},_this.renderNextMonthButton=function(){var allNextDaysDisabled=function allDaysDisabledAfter(day,unit){var _ref7=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},maxDate=_ref7.maxDate,includeDates=_ref7.includeDates,dateAfter=day.clone().add(1,unit);return maxDate&&dateAfter.isAfter(maxDate,unit)||includeDates&&includeDates.every((function(includeDate){return dateAfter.isAfter(includeDate,unit)}))||!1}(_this.state.date,"month",_this.props);if((_this.props.forceShowMonthNavigation||_this.props.showDisabledMonthNavigation||!allNextDaysDisabled)&&!_this.props.showTimeSelectOnly){var classes=["react-datepicker__navigation","react-datepicker__navigation--next"];_this.props.showTimeSelect&&classes.push("react-datepicker__navigation--next--with-time"),_this.props.todayButton&&classes.push("react-datepicker__navigation--next--with-today-button");var clickHandler=_this.increaseMonth;return allNextDaysDisabled&&_this.props.showDisabledMonthNavigation&&(classes.push("react-datepicker__navigation--next--disabled"),clickHandler=null),react.createElement("button",{type:"button",className:classes.join(" "),onClick:clickHandler},_this.props.nextMonthButtonLabel)}},_this.renderCurrentMonth=function(){var date=arguments.length>0&&void 0!==arguments[0]?arguments[0]:_this.state.date,classes=["react-datepicker__current-month"];return _this.props.showYearDropdown&&classes.push("react-datepicker__current-month--hasYearDropdown"),_this.props.showMonthDropdown&&classes.push("react-datepicker__current-month--hasMonthDropdown"),_this.props.showMonthYearDropdown&&classes.push("react-datepicker__current-month--hasMonthYearDropdown"),react.createElement("div",{className:classes.join(" ")},formatDate(date,_this.props.dateFormat))},_this.renderYearDropdown=function(){var overrideHide=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(_this.props.showYearDropdown&&!overrideHide)return react.createElement(YearDropdown,{adjustDateOnChange:_this.props.adjustDateOnChange,date:_this.state.date,onSelect:_this.props.onSelect,setOpen:_this.props.setOpen,dropdownMode:_this.props.dropdownMode,onChange:_this.changeYear,minDate:_this.props.minDate,maxDate:_this.props.maxDate,year:getYear(_this.state.date),scrollableYearDropdown:_this.props.scrollableYearDropdown,yearDropdownItemNumber:_this.props.yearDropdownItemNumber})},_this.renderMonthDropdown=function(){var overrideHide=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(_this.props.showMonthDropdown&&!overrideHide)return react.createElement(MonthDropdown,{dropdownMode:_this.props.dropdownMode,locale:_this.props.locale,dateFormat:_this.props.dateFormat,onChange:_this.changeMonth,month:getMonth(_this.state.date),useShortMonthInDropdown:_this.props.useShortMonthInDropdown})},_this.renderMonthYearDropdown=function(){var overrideHide=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(_this.props.showMonthYearDropdown&&!overrideHide)return react.createElement(MonthYearDropdown,{dropdownMode:_this.props.dropdownMode,locale:_this.props.locale,dateFormat:_this.props.dateFormat,onChange:_this.changeMonthYear,minDate:_this.props.minDate,maxDate:_this.props.maxDate,date:_this.state.date,scrollableMonthYearDropdown:_this.props.scrollableMonthYearDropdown})},_this.renderTodayButton=function(){if(_this.props.todayButton&&!_this.props.showTimeSelectOnly)return react.createElement("div",{className:"react-datepicker__today-button",onClick:function onClick(e){return _this.props.onSelect(function getStartOfDate(date){return getStartOf(date,"date")}(now(_this.props.utcOffset)),e)}},_this.props.todayButton)},_this.renderMonths=function(){if(!_this.props.showTimeSelectOnly){for(var monthList=[],i=0;i<_this.props.monthsShown;++i){var monthDate=addMonths(cloneDate(_this.state.date),i),monthKey="month-"+i;monthList.push(react.createElement("div",{key:monthKey,ref:function ref(div){_this.monthContainer=div},className:"react-datepicker__month-container"},react.createElement("div",{className:"react-datepicker__header"},_this.renderCurrentMonth(monthDate),react.createElement("div",{className:"react-datepicker__header__dropdown react-datepicker__header__dropdown--"+_this.props.dropdownMode,onFocus:_this.handleDropdownFocus},_this.renderMonthDropdown(0!==i),_this.renderMonthYearDropdown(0!==i),_this.renderYearDropdown(0!==i)),react.createElement("div",{className:"react-datepicker__day-names"},_this.header(monthDate))),react.createElement(Month,{day:monthDate,dayClassName:_this.props.dayClassName,onDayClick:_this.handleDayClick,onDayMouseEnter:_this.handleDayMouseEnter,onMouseLeave:_this.handleMonthMouseLeave,onWeekSelect:_this.props.onWeekSelect,formatWeekNumber:_this.props.formatWeekNumber,minDate:_this.props.minDate,maxDate:_this.props.maxDate,excludeDates:_this.props.excludeDates,highlightDates:_this.props.highlightDates,selectingDate:_this.state.selectingDate,includeDates:_this.props.includeDates,inline:_this.props.inline,fixedHeight:_this.props.fixedHeight,filterDate:_this.props.filterDate,preSelection:_this.props.preSelection,selected:_this.props.selected,selectsStart:_this.props.selectsStart,selectsEnd:_this.props.selectsEnd,showWeekNumbers:_this.props.showWeekNumbers,startDate:_this.props.startDate,endDate:_this.props.endDate,peekNextMonth:_this.props.peekNextMonth,utcOffset:_this.props.utcOffset})))}return monthList}},_this.renderTimeSection=function(){if(_this.props.showTimeSelect)return react.createElement(Time,{selected:_this.props.selected,onChange:_this.props.onTimeChange,format:_this.props.timeFormat,includeTimes:_this.props.includeTimes,intervals:_this.props.timeIntervals,minTime:_this.props.minTime,maxTime:_this.props.maxTime,excludeTimes:_this.props.excludeTimes,timeCaption:_this.props.timeCaption,todayButton:_this.props.todayButton,showMonthDropdown:_this.props.showMonthDropdown,showMonthYearDropdown:_this.props.showMonthYearDropdown,showYearDropdown:_this.props.showYearDropdown,withPortal:_this.props.withPortal,monthRef:_this.state.monthContainer,injectTimes:_this.props.injectTimes})},_this.state={date:_this.localizeDate(_this.getDateInView()),selectingDate:null,monthContainer:_this.monthContainer},_this}return inherits(Calendar,_React$Component),es_createClass(Calendar,null,[{key:"defaultProps",get:function get$$1(){var _ref;return(_ref={onDropdownFocus:function onDropdownFocus(){},monthsShown:1,forceShowMonthNavigation:!1,timeCaption:"Time",previousMonthButtonLabel:"Previous Month"}).previousMonthButtonLabel="Next Month",_ref}}]),Calendar.prototype.componentDidMount=function componentDidMount(){var _this2=this;this.props.showTimeSelect&&(this.assignMonthContainer=void _this2.setState({monthContainer:_this2.monthContainer}))},Calendar.prototype.componentDidUpdate=function componentDidUpdate(prevProps){this.props.preSelection&&!isSameDay(this.props.preSelection,prevProps.preSelection)?this.setState({date:this.localizeDate(this.props.preSelection)}):this.props.openToDate&&!isSameDay(this.props.openToDate,prevProps.openToDate)&&this.setState({date:this.localizeDate(this.props.openToDate)})},Calendar.prototype.render=function render(){var Container=this.props.container||CalendarContainer;return react.createElement(Container,{className:classnames_default()("react-datepicker",this.props.className,{"react-datepicker--time-only":this.props.showTimeSelectOnly})},this.renderPreviousMonthButton(),this.renderNextMonthButton(),this.renderMonths(),this.renderTodayButton(),this.renderTimeSection(),this.props.children)},Calendar}(react.Component);Calendar.propTypes={adjustDateOnChange:prop_types_default().bool,className:prop_types_default().string,children:prop_types_default().node,container:prop_types_default().func,dateFormat:prop_types_default().oneOfType([prop_types_default().string,prop_types_default().array]).isRequired,dayClassName:prop_types_default().func,dropdownMode:prop_types_default().oneOf(["scroll","select"]),endDate:prop_types_default().object,excludeDates:prop_types_default().array,filterDate:prop_types_default().func,fixedHeight:prop_types_default().bool,formatWeekNumber:prop_types_default().func,highlightDates:prop_types_default().instanceOf(Map),includeDates:prop_types_default().array,includeTimes:prop_types_default().array,injectTimes:prop_types_default().array,inline:prop_types_default().bool,locale:prop_types_default().string,maxDate:prop_types_default().object,minDate:prop_types_default().object,monthsShown:prop_types_default().number,onClickOutside:prop_types_default().func.isRequired,onMonthChange:prop_types_default().func,onYearChange:prop_types_default().func,forceShowMonthNavigation:prop_types_default().bool,onDropdownFocus:prop_types_default().func,onSelect:prop_types_default().func.isRequired,onWeekSelect:prop_types_default().func,showTimeSelect:prop_types_default().bool,showTimeSelectOnly:prop_types_default().bool,timeFormat:prop_types_default().string,timeIntervals:prop_types_default().number,onTimeChange:prop_types_default().func,minTime:prop_types_default().object,maxTime:prop_types_default().object,excludeTimes:prop_types_default().array,timeCaption:prop_types_default().string,openToDate:prop_types_default().object,peekNextMonth:prop_types_default().bool,scrollableYearDropdown:prop_types_default().bool,scrollableMonthYearDropdown:prop_types_default().bool,preSelection:prop_types_default().object,selected:prop_types_default().object,selectsEnd:prop_types_default().bool,selectsStart:prop_types_default().bool,showMonthDropdown:prop_types_default().bool,showMonthYearDropdown:prop_types_default().bool,showWeekNumbers:prop_types_default().bool,showYearDropdown:prop_types_default().bool,startDate:prop_types_default().object,todayButton:prop_types_default().string,useWeekdaysShort:prop_types_default().bool,formatWeekDay:prop_types_default().func,withPortal:prop_types_default().bool,utcOffset:prop_types_default().number,weekLabel:prop_types_default().string,yearDropdownItemNumber:prop_types_default().number,setOpen:prop_types_default().func,useShortMonthInDropdown:prop_types_default().bool,showDisabledMonthNavigation:prop_types_default().bool,previousMonthButtonLabel:prop_types_default().string,nextMonthButtonLabel:prop_types_default().string};var popperPlacementPositions=["auto","auto-left","auto-right","bottom","bottom-end","bottom-start","left","left-end","left-start","right","right-end","right-start","top","top-end","top-start"],PopperComponent=function(_React$Component){function PopperComponent(){return es_classCallCheck(this,PopperComponent),possibleConstructorReturn(this,_React$Component.apply(this,arguments))}return inherits(PopperComponent,_React$Component),PopperComponent.prototype.render=function render(){var _props=this.props,className=_props.className,hidePopper=_props.hidePopper,popperComponent=_props.popperComponent,popperModifiers=_props.popperModifiers,popperPlacement=_props.popperPlacement,targetComponent=_props.targetComponent,popper=void 0;if(!hidePopper){var classes=classnames_default()("react-datepicker-popper",className);popper=react.createElement(lib_Popper,{className:classes,modifiers:popperModifiers,placement:popperPlacement},popperComponent)}return this.props.popperContainer&&(popper=react.createElement(this.props.popperContainer,{},popper)),react.createElement(lib_Manager,null,react.createElement(lib_Target,{className:"react-datepicker-wrapper"},targetComponent),popper)},es_createClass(PopperComponent,null,[{key:"defaultProps",get:function get$$1(){return{hidePopper:!0,popperModifiers:{preventOverflow:{enabled:!0,escapeWithReference:!0,boundariesElement:"viewport"}},popperPlacement:"bottom-start"}}}]),PopperComponent}(react.Component);PopperComponent.propTypes={className:prop_types_default().string,hidePopper:prop_types_default().bool,popperComponent:prop_types_default().element,popperModifiers:prop_types_default().object,popperPlacement:prop_types_default().oneOf(popperPlacementPositions),popperContainer:prop_types_default().func,targetComponent:prop_types_default().element};var WrappedCalendar=react_onclickoutside_es(Calendar);var DatePicker=function(_React$Component){function DatePicker(props){es_classCallCheck(this,DatePicker);var _this=possibleConstructorReturn(this,_React$Component.call(this,props));return _this.getPreSelection=function(){return _this.props.openToDate?newDate(_this.props.openToDate):_this.props.selectsEnd&&_this.props.startDate?newDate(_this.props.startDate):_this.props.selectsStart&&_this.props.endDate?newDate(_this.props.endDate):now(_this.props.utcOffset)},_this.calcInitialState=function(){var defaultPreSelection=_this.getPreSelection(),minDate=getEffectiveMinDate(_this.props),maxDate=getEffectiveMaxDate(_this.props),boundedPreSelection=minDate&&isBefore(defaultPreSelection,minDate)?minDate:maxDate&&isAfter(defaultPreSelection,maxDate)?maxDate:defaultPreSelection;return{open:_this.props.startOpen||!1,preventFocus:!1,preSelection:_this.props.selected?newDate(_this.props.selected):boundedPreSelection,highlightDates:getHightLightDaysMap(_this.props.highlightDates),focused:!1}},_this.clearPreventFocusTimeout=function(){_this.preventFocusTimeout&&clearTimeout(_this.preventFocusTimeout)},_this.setFocus=function(){_this.input&&_this.input.focus&&_this.input.focus()},_this.setOpen=function(open){_this.setState({open,preSelection:open&&_this.state.open?_this.state.preSelection:_this.calcInitialState().preSelection,lastPreSelectChange:PRESELECT_CHANGE_VIA_NAVIGATE})},_this.handleFocus=function(event){_this.state.preventFocus||(_this.props.onFocus(event),_this.props.preventOpenOnFocus||_this.props.readOnly||_this.setOpen(!0)),_this.setState({focused:!0})},_this.cancelFocusInput=function(){clearTimeout(_this.inputFocusTimeout),_this.inputFocusTimeout=null},_this.deferFocusInput=function(){_this.cancelFocusInput(),_this.inputFocusTimeout=setTimeout((function(){return _this.setFocus()}),1)},_this.handleDropdownFocus=function(){_this.cancelFocusInput()},_this.handleBlur=function(event){_this.state.open&&!_this.props.withPortal?_this.deferFocusInput():_this.props.onBlur(event),_this.setState({focused:!1})},_this.handleCalendarClickOutside=function(event){_this.props.inline||_this.setOpen(!1),_this.props.onClickOutside(event),_this.props.withPortal&&event.preventDefault()},_this.handleChange=function(){for(var _len=arguments.length,allArgs=Array(_len),_key=0;_key<_len;_key++)allArgs[_key]=arguments[_key];var event=allArgs[0];if(!_this.props.onChangeRaw||(_this.props.onChangeRaw.apply(_this,allArgs),"function"==typeof event.isDefaultPrevented&&!event.isDefaultPrevented())){_this.setState({inputValue:event.target.value,lastPreSelectChange:PRESELECT_CHANGE_VIA_INPUT});var date=function parseDate(value,_ref){var dateFormat=_ref.dateFormat,locale=_ref.locale,m=moment_default()(value,dateFormat,locale||moment_default().locale(),!0);return m.isValid()?m:null}(event.target.value,_this.props);!date&&event.target.value||_this.setSelected(date,event,!0)}},_this.handleSelect=function(date,event){_this.setState({preventFocus:!0},(function(){return _this.preventFocusTimeout=setTimeout((function(){return _this.setState({preventFocus:!1})}),50),_this.preventFocusTimeout})),_this.setSelected(date,event),!_this.props.shouldCloseOnSelect||_this.props.showTimeSelect?_this.setPreSelection(date):_this.props.inline||_this.setOpen(!1)},_this.setSelected=function(date,event,keepInput){var changedDate=date;if(null===changedDate||!isDayDisabled(changedDate,_this.props)){if(!isSameDay(_this.props.selected,changedDate)||_this.props.allowSameDay){if(null!==changedDate){if(_this.props.selected){var selected=_this.props.selected;keepInput&&(selected=newDate(changedDate)),changedDate=setTime(newDate(changedDate),{hour:getHour(selected),minute:getMinute(selected),second:getSecond(selected)})}_this.props.inline||_this.setState({preSelection:changedDate})}_this.props.onChange(changedDate,event)}_this.props.onSelect(changedDate,event),keepInput||_this.setState({inputValue:null})}},_this.setPreSelection=function(date){(!(void 0!==_this.props.minDate&&void 0!==_this.props.maxDate)||!date||isDayInRange(date,_this.props.minDate,_this.props.maxDate))&&_this.setState({preSelection:date})},_this.handleTimeChange=function(time){var changedDate=setTime(cloneDate(_this.props.selected?_this.props.selected:_this.getPreSelection()),{hour:getHour(time),minute:getMinute(time)});_this.setState({preSelection:changedDate}),_this.props.onChange(changedDate),_this.setOpen(!1),_this.setState({inputValue:null})},_this.onInputClick=function(){_this.props.disabled||_this.props.readOnly||_this.setOpen(!0)},_this.onInputKeyDown=function(event){_this.props.onKeyDown(event);var eventKey=event.key;if(_this.state.open||_this.props.inline||_this.props.preventOpenOnFocus){var copy=newDate(_this.state.preSelection);if("Enter"===eventKey)event.preventDefault(),(isMoment(_this.state.preSelection)||function isDate(date){return moment_default().isDate(date)}(_this.state.preSelection))&&_this.state.lastPreSelectChange===PRESELECT_CHANGE_VIA_NAVIGATE?(_this.handleSelect(copy,event),!_this.props.shouldCloseOnSelect&&_this.setPreSelection(copy)):_this.setOpen(!1);else if("Escape"===eventKey)event.preventDefault(),_this.setOpen(!1);else if("Tab"===eventKey)_this.setOpen(!1);else if(!_this.props.disabledKeyboardNavigation){var newSelection=void 0;switch(eventKey){case"ArrowLeft":newSelection=function subtractDays(date,amount){return subtract(date,amount,"days")}(copy,1);break;case"ArrowRight":newSelection=addDays(copy,1);break;case"ArrowUp":newSelection=function subtractWeeks(date,amount){return subtract(date,amount,"weeks")}(copy,1);break;case"ArrowDown":newSelection=addWeeks(copy,1);break;case"PageUp":newSelection=subtractMonths(copy,1);break;case"PageDown":newSelection=addMonths(copy,1);break;case"Home":newSelection=function subtractYears(date,amount){return subtract(date,amount,"years")}(copy,1);break;case"End":newSelection=function addYears(date,amount){return add(date,amount,"years")}(copy,1)}if(!newSelection)return;event.preventDefault(),_this.setState({lastPreSelectChange:PRESELECT_CHANGE_VIA_NAVIGATE}),_this.props.adjustDateOnChange&&_this.setSelected(newSelection),_this.setPreSelection(newSelection)}}else"ArrowDown"!==eventKey&&"ArrowUp"!==eventKey||_this.onInputClick()},_this.onClearClick=function(event){event&&event.preventDefault&&event.preventDefault(),_this.props.onChange(null,event),_this.setState({inputValue:null})},_this.clear=function(){_this.onClearClick()},_this.renderCalendar=function(){return _this.props.inline||_this.state.open&&!_this.props.disabled&&!_this.props.readOnly?react.createElement(WrappedCalendar,{ref:function ref(elem){_this.calendar=elem},locale:_this.props.locale,adjustDateOnChange:_this.props.adjustDateOnChange,setOpen:_this.setOpen,dateFormat:_this.props.dateFormatCalendar,useWeekdaysShort:_this.props.useWeekdaysShort,formatWeekDay:_this.props.formatWeekDay,dropdownMode:_this.props.dropdownMode,selected:_this.props.selected,preSelection:_this.state.preSelection,onSelect:_this.handleSelect,onWeekSelect:_this.props.onWeekSelect,openToDate:_this.props.openToDate,minDate:_this.props.minDate,maxDate:_this.props.maxDate,selectsStart:_this.props.selectsStart,selectsEnd:_this.props.selectsEnd,startDate:_this.props.startDate,endDate:_this.props.endDate,excludeDates:_this.props.excludeDates,filterDate:_this.props.filterDate,onClickOutside:_this.handleCalendarClickOutside,formatWeekNumber:_this.props.formatWeekNumber,highlightDates:_this.state.highlightDates,includeDates:_this.props.includeDates,includeTimes:_this.props.includeTimes,injectTimes:_this.props.injectTimes,inline:_this.props.inline,peekNextMonth:_this.props.peekNextMonth,showMonthDropdown:_this.props.showMonthDropdown,useShortMonthInDropdown:_this.props.useShortMonthInDropdown,showMonthYearDropdown:_this.props.showMonthYearDropdown,showWeekNumbers:_this.props.showWeekNumbers,showYearDropdown:_this.props.showYearDropdown,withPortal:_this.props.withPortal,forceShowMonthNavigation:_this.props.forceShowMonthNavigation,showDisabledMonthNavigation:_this.props.showDisabledMonthNavigation,scrollableYearDropdown:_this.props.scrollableYearDropdown,scrollableMonthYearDropdown:_this.props.scrollableMonthYearDropdown,todayButton:_this.props.todayButton,weekLabel:_this.props.weekLabel,utcOffset:_this.props.utcOffset,outsideClickIgnoreClass:"react-datepicker-ignore-onclickoutside",fixedHeight:_this.props.fixedHeight,monthsShown:_this.props.monthsShown,onDropdownFocus:_this.handleDropdownFocus,onMonthChange:_this.props.onMonthChange,onYearChange:_this.props.onYearChange,dayClassName:_this.props.dayClassName,showTimeSelect:_this.props.showTimeSelect,showTimeSelectOnly:_this.props.showTimeSelectOnly,onTimeChange:_this.handleTimeChange,timeFormat:_this.props.timeFormat,timeIntervals:_this.props.timeIntervals,minTime:_this.props.minTime,maxTime:_this.props.maxTime,excludeTimes:_this.props.excludeTimes,timeCaption:_this.props.timeCaption,className:_this.props.calendarClassName,container:_this.props.calendarContainer,yearDropdownItemNumber:_this.props.yearDropdownItemNumber,previousMonthButtonLabel:_this.props.previousMonthButtonLabel,nextMonthButtonLabel:_this.props.nextMonthButtonLabel},_this.props.children):null},_this.renderDateInput=function(){var _classnames,_React$cloneElement,className=classnames_default()(_this.props.className,((_classnames={})["react-datepicker-ignore-onclickoutside"]=_this.state.open,_classnames)),customInput=_this.props.customInput||react.createElement("input",{type:"text"}),customInputRef=_this.props.customInputRef||"ref",inputValue="string"==typeof _this.props.value?_this.props.value:"string"==typeof _this.state.inputValue?_this.state.inputValue:function safeDateFormat(date,_ref2){var dateFormat=_ref2.dateFormat,locale=_ref2.locale;return date&&date.clone().locale(locale||moment_default().locale()).format(Array.isArray(dateFormat)?dateFormat[0]:dateFormat)||""}(_this.props.selected,_this.props);return react.cloneElement(customInput,((_React$cloneElement={})[customInputRef]=function(input){_this.input=input},_React$cloneElement.value=inputValue,_React$cloneElement.onBlur=_this.handleBlur,_React$cloneElement.onChange=_this.handleChange,_React$cloneElement.onClick=_this.onInputClick,_React$cloneElement.onFocus=_this.handleFocus,_React$cloneElement.onKeyDown=_this.onInputKeyDown,_React$cloneElement.id=_this.props.id,_React$cloneElement.name=_this.props.name,_React$cloneElement.autoFocus=_this.props.autoFocus,_React$cloneElement.placeholder=_this.props.placeholderText,_React$cloneElement.disabled=_this.props.disabled,_React$cloneElement.autoComplete=_this.props.autoComplete,_React$cloneElement.className=className,_React$cloneElement.title=_this.props.title,_React$cloneElement.readOnly=_this.props.readOnly,_React$cloneElement.required=_this.props.required,_React$cloneElement.tabIndex=_this.props.tabIndex,_React$cloneElement))},_this.renderClearButton=function(){return _this.props.isClearable&&null!=_this.props.selected?react.createElement("button",{type:"button",className:"react-datepicker__close-icon",onClick:_this.onClearClick,title:_this.props.clearButtonTitle,tabIndex:-1}):null},_this.state=_this.calcInitialState(),_this}return inherits(DatePicker,_React$Component),es_createClass(DatePicker,null,[{key:"defaultProps",get:function get$$1(){return{allowSameDay:!1,dateFormat:"L",dateFormatCalendar:"MMMM YYYY",onChange:function onChange(){},disabled:!1,disabledKeyboardNavigation:!1,dropdownMode:"scroll",onFocus:function onFocus(){},onBlur:function onBlur(){},onKeyDown:function onKeyDown(){},onSelect:function onSelect(){},onClickOutside:function onClickOutside$$1(){},onMonthChange:function onMonthChange(){},preventOpenOnFocus:!1,onYearChange:function onYearChange(){},monthsShown:1,readOnly:!1,withPortal:!1,shouldCloseOnSelect:!0,showTimeSelect:!1,timeIntervals:30,timeCaption:"Time",previousMonthButtonLabel:"Previous Month",nextMonthButtonLabel:"Next month"}}}]),DatePicker.prototype.componentDidUpdate=function componentDidUpdate(prevProps,prevState){prevProps.inline&&function hasPreSelectionChanged(date1,date2){return date1&&date2?getMonth(date1)!==getMonth(date2)||getYear(date1)!==getYear(date2):date1!==date2}(prevProps.selected,this.props.selected)&&this.setPreSelection(this.props.selected),prevProps.highlightDates!==this.props.highlightDates&&this.setState({highlightDates:getHightLightDaysMap(this.props.highlightDates)}),!prevState.focused&&function hasSelectionChanged(date1,date2){return!(!date1||!date2||function equals(date1,date2){return date1.isSame(date2)}(date1,date2))}(prevProps.selected,this.props.selected)&&this.setState({inputValue:null})},DatePicker.prototype.componentWillUnmount=function componentWillUnmount(){this.clearPreventFocusTimeout()},DatePicker.prototype.render=function render(){var calendar=this.renderCalendar();return this.props.inline&&!this.props.withPortal?calendar:this.props.withPortal?react.createElement("div",null,this.props.inline?null:react.createElement("div",{className:"react-datepicker__input-container"},this.renderDateInput(),this.renderClearButton()),this.state.open||this.props.inline?react.createElement("div",{className:"react-datepicker__portal"},calendar):null):react.createElement(PopperComponent,{className:this.props.popperClassName,hidePopper:!this.state.open||this.props.disabled||this.props.readOnly,popperModifiers:this.props.popperModifiers,targetComponent:react.createElement("div",{className:"react-datepicker__input-container"},this.renderDateInput(),this.renderClearButton()),popperContainer:this.props.popperContainer,popperComponent:calendar,popperPlacement:this.props.popperPlacement})},DatePicker}(react.Component);DatePicker.propTypes={adjustDateOnChange:prop_types_default().bool,allowSameDay:prop_types_default().bool,autoComplete:prop_types_default().string,autoFocus:prop_types_default().bool,calendarClassName:prop_types_default().string,calendarContainer:prop_types_default().func,children:prop_types_default().node,className:prop_types_default().string,customInput:prop_types_default().element,customInputRef:prop_types_default().string,dateFormat:prop_types_default().oneOfType([prop_types_default().string,prop_types_default().array]),dateFormatCalendar:prop_types_default().string,dayClassName:prop_types_default().func,disabled:prop_types_default().bool,disabledKeyboardNavigation:prop_types_default().bool,dropdownMode:prop_types_default().oneOf(["scroll","select"]).isRequired,endDate:prop_types_default().object,excludeDates:prop_types_default().array,filterDate:prop_types_default().func,fixedHeight:prop_types_default().bool,formatWeekNumber:prop_types_default().func,highlightDates:prop_types_default().array,id:prop_types_default().string,includeDates:prop_types_default().array,includeTimes:prop_types_default().array,injectTimes:prop_types_default().array,inline:prop_types_default().bool,isClearable:prop_types_default().bool,locale:prop_types_default().string,maxDate:prop_types_default().object,minDate:prop_types_default().object,monthsShown:prop_types_default().number,name:prop_types_default().string,onBlur:prop_types_default().func,onChange:prop_types_default().func.isRequired,onSelect:prop_types_default().func,onWeekSelect:prop_types_default().func,onClickOutside:prop_types_default().func,onChangeRaw:prop_types_default().func,onFocus:prop_types_default().func,onKeyDown:prop_types_default().func,onMonthChange:prop_types_default().func,onYearChange:prop_types_default().func,openToDate:prop_types_default().object,peekNextMonth:prop_types_default().bool,placeholderText:prop_types_default().string,popperContainer:prop_types_default().func,popperClassName:prop_types_default().string,popperModifiers:prop_types_default().object,popperPlacement:prop_types_default().oneOf(popperPlacementPositions),preventOpenOnFocus:prop_types_default().bool,readOnly:prop_types_default().bool,required:prop_types_default().bool,scrollableYearDropdown:prop_types_default().bool,scrollableMonthYearDropdown:prop_types_default().bool,selected:prop_types_default().object,selectsEnd:prop_types_default().bool,selectsStart:prop_types_default().bool,showMonthDropdown:prop_types_default().bool,showMonthYearDropdown:prop_types_default().bool,showWeekNumbers:prop_types_default().bool,showYearDropdown:prop_types_default().bool,forceShowMonthNavigation:prop_types_default().bool,showDisabledMonthNavigation:prop_types_default().bool,startDate:prop_types_default().object,startOpen:prop_types_default().bool,tabIndex:prop_types_default().number,timeCaption:prop_types_default().string,title:prop_types_default().string,todayButton:prop_types_default().string,useWeekdaysShort:prop_types_default().bool,formatWeekDay:prop_types_default().func,utcOffset:prop_types_default().number,value:prop_types_default().string,weekLabel:prop_types_default().string,withPortal:prop_types_default().bool,yearDropdownItemNumber:prop_types_default().number,shouldCloseOnSelect:prop_types_default().bool,showTimeSelect:prop_types_default().bool,showTimeSelectOnly:prop_types_default().bool,timeFormat:prop_types_default().string,timeIntervals:prop_types_default().number,minTime:prop_types_default().object,maxTime:prop_types_default().object,excludeTimes:prop_types_default().array,useShortMonthInDropdown:prop_types_default().bool,clearButtonTitle:prop_types_default().string,previousMonthButtonLabel:prop_types_default().string,nextMonthButtonLabel:prop_types_default().string};var PRESELECT_CHANGE_VIA_INPUT="input",PRESELECT_CHANGE_VIA_NAVIGATE="navigate";const es=DatePicker},"./node_modules/react-datepicker/node_modules/classnames/index.js":(module,exports)=>{var __WEBPACK_AMD_DEFINE_RESULT__;!function(){"use strict";var hasOwn={}.hasOwnProperty;function classNames(){for(var classes=[],i=0;i<arguments.length;i++){var arg=arguments[i];if(arg){var argType=typeof arg;if("string"===argType||"number"===argType)classes.push(arg);else if(Array.isArray(arg))classes.push(classNames.apply(null,arg));else if("object"===argType)for(var key in arg)hasOwn.call(arg,key)&&arg[key]&&classes.push(key)}}return classes.join(" ")}module.exports?module.exports=classNames:void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return classNames}.apply(exports,[]))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}()},"./node_modules/react-datepicker/dist/react-datepicker.css":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js"),_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__),_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/style-loader/dist/runtime/styleDomAPI.js"),_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__),_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/style-loader/dist/runtime/insertBySelector.js"),_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__),_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js"),_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__),_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/style-loader/dist/runtime/insertStyleElement.js"),_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default=__webpack_require__.n(_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__),_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./node_modules/style-loader/dist/runtime/styleTagTransform.js"),_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__),_css_loader_dist_cjs_js_react_datepicker_css__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./node_modules/css-loader/dist/cjs.js!./node_modules/react-datepicker/dist/react-datepicker.css"),options={};options.styleTagTransform=_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default(),options.setAttributes=_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default(),options.insert=_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null,"head"),options.domAPI=_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default(),options.insertStyleElement=_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default();_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_css_loader_dist_cjs_js_react_datepicker_css__WEBPACK_IMPORTED_MODULE_6__.A,options);const __WEBPACK_DEFAULT_EXPORT__=_css_loader_dist_cjs_js_react_datepicker_css__WEBPACK_IMPORTED_MODULE_6__.A&&_css_loader_dist_cjs_js_react_datepicker_css__WEBPACK_IMPORTED_MODULE_6__.A.locals?_css_loader_dist_cjs_js_react_datepicker_css__WEBPACK_IMPORTED_MODULE_6__.A.locals:void 0},"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":module=>{"use strict";var stylesInDOM=[];function getIndexByIdentifier(identifier){for(var result=-1,i=0;i<stylesInDOM.length;i++)if(stylesInDOM[i].identifier===identifier){result=i;break}return result}function modulesToDom(list,options){for(var idCountMap={},identifiers=[],i=0;i<list.length;i++){var item=list[i],id=options.base?item[0]+options.base:item[0],count=idCountMap[id]||0,identifier="".concat(id," ").concat(count);idCountMap[id]=count+1;var indexByIdentifier=getIndexByIdentifier(identifier),obj={css:item[1],media:item[2],sourceMap:item[3],supports:item[4],layer:item[5]};if(-1!==indexByIdentifier)stylesInDOM[indexByIdentifier].references++,stylesInDOM[indexByIdentifier].updater(obj);else{var updater=addElementStyle(obj,options);options.byIndex=i,stylesInDOM.splice(i,0,{identifier,updater,references:1})}identifiers.push(identifier)}return identifiers}function addElementStyle(obj,options){var api=options.domAPI(options);api.update(obj);return function updater(newObj){if(newObj){if(newObj.css===obj.css&&newObj.media===obj.media&&newObj.sourceMap===obj.sourceMap&&newObj.supports===obj.supports&&newObj.layer===obj.layer)return;api.update(obj=newObj)}else api.remove()}}module.exports=function(list,options){var lastIdentifiers=modulesToDom(list=list||[],options=options||{});return function update(newList){newList=newList||[];for(var i=0;i<lastIdentifiers.length;i++){var index=getIndexByIdentifier(lastIdentifiers[i]);stylesInDOM[index].references--}for(var newLastIdentifiers=modulesToDom(newList,options),_i=0;_i<lastIdentifiers.length;_i++){var _index=getIndexByIdentifier(lastIdentifiers[_i]);0===stylesInDOM[_index].references&&(stylesInDOM[_index].updater(),stylesInDOM.splice(_index,1))}lastIdentifiers=newLastIdentifiers}}},"./node_modules/style-loader/dist/runtime/insertBySelector.js":module=>{"use strict";var memo={};module.exports=function insertBySelector(insert,style){var target=function getTarget(target){if(void 0===memo[target]){var styleTarget=document.querySelector(target);if(window.HTMLIFrameElement&&styleTarget instanceof window.HTMLIFrameElement)try{styleTarget=styleTarget.contentDocument.head}catch(e){styleTarget=null}memo[target]=styleTarget}return memo[target]}(insert);if(!target)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");target.appendChild(style)}},"./node_modules/style-loader/dist/runtime/insertStyleElement.js":module=>{"use strict";module.exports=function insertStyleElement(options){var element=document.createElement("style");return options.setAttributes(element,options.attributes),options.insert(element,options.options),element}},"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":(module,__unused_webpack_exports,__webpack_require__)=>{"use strict";module.exports=function setAttributesWithoutAttributes(styleElement){var nonce=__webpack_require__.nc;nonce&&styleElement.setAttribute("nonce",nonce)}},"./node_modules/style-loader/dist/runtime/styleDomAPI.js":module=>{"use strict";module.exports=function domAPI(options){var styleElement=options.insertStyleElement(options);return{update:function update(obj){!function apply(styleElement,options,obj){var css="";obj.supports&&(css+="@supports (".concat(obj.supports,") {")),obj.media&&(css+="@media ".concat(obj.media," {"));var needLayer=void 0!==obj.layer;needLayer&&(css+="@layer".concat(obj.layer.length>0?" ".concat(obj.layer):""," {")),css+=obj.css,needLayer&&(css+="}"),obj.media&&(css+="}"),obj.supports&&(css+="}");var sourceMap=obj.sourceMap;sourceMap&&"undefined"!=typeof btoa&&(css+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))))," */")),options.styleTagTransform(css,styleElement,options.options)}(styleElement,options,obj)},remove:function remove(){!function removeStyleElement(styleElement){if(null===styleElement.parentNode)return!1;styleElement.parentNode.removeChild(styleElement)}(styleElement)}}}},"./node_modules/style-loader/dist/runtime/styleTagTransform.js":module=>{"use strict";module.exports=function styleTagTransform(css,styleElement){if(styleElement.styleSheet)styleElement.styleSheet.cssText=css;else{for(;styleElement.firstChild;)styleElement.removeChild(styleElement.firstChild);styleElement.appendChild(document.createTextNode(css))}}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUtDLFVBQVV1L0IsY0FBZSxRQU10SXI2QixRQUFRdzVCLGtCQUFrQjF4QixJQUFLOHpCLGFBQWM1N0IsUUFBUUEsUUFDdkQsQ0FpQk04RSxDQUFNODJCLGFBQWM1N0IsUUFBUzRGLElBQy9CLEVBQ0FpMUIsT0FBUSxTQUFTQSxVQWpCckIsU0FBU2lCLG1CQUFtQkYsY0FFMUIsR0FBZ0MsT0FBNUJBLGFBQWF4NkIsV0FDZixPQUFPLEVBR1R3NkIsYUFBYXg2QixXQUFXa1MsWUFBWXNvQixhQUN0QyxDQVdNRSxDQUFtQkYsYUFDckIsRUFFSix5RkNwREE1aUMsT0FBT0UsUUFaUCxTQUFTc2dDLGtCQUFrQjF4QixJQUFLOHpCLGNBQzlCLEdBQUlBLGFBQWFHLFdBQ2ZILGFBQWFHLFdBQVdDLFFBQVVsMEIsUUFDN0IsQ0FDTCxLQUFPOHpCLGFBQWFLLFlBQ2xCTCxhQUFhdG9CLFlBQVlzb0IsYUFBYUssWUFHeENMLGFBQWFGLFlBQVkvN0IsU0FBU3U4QixlQUFlcDBCLEtBQ25ELENBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3QtZGF0ZXBpY2tlci9kaXN0L3JlYWN0LWRhdGVwaWNrZXIuY3NzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3QtZGF0ZXBpY2tlci9ub2RlX21vZHVsZXMvcmVhY3Qtb25jbGlja291dHNpZGUvZGlzdC9yZWFjdC1vbmNsaWNrb3V0c2lkZS5lcy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9NYW5hZ2VyLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9yZWFjdC1wb3BwZXIvbGliL1RhcmdldC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcG9wcGVyLmpzL2Rpc3QvZXNtL3BvcHBlci5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcmVhY3QtcG9wcGVyL2xpYi9Qb3BwZXIuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXBvcHBlci9saWIvQXJyb3cuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRhdGVwaWNrZXIvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRhdGVwaWNrZXIvbm9kZV9tb2R1bGVzL2NsYXNzbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRhdGVwaWNrZXIvZGlzdC9yZWFjdC1kYXRlcGlja2VyLmNzcz85ZGY5Iiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyB7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdywgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcInRvcFxcXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3JkZXI6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAxcHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGU6OmJlZm9yZSwgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgei1pbmRleDogLTE7XFxuICBib3JkZXItd2lkdGg6IDhweDtcXG4gIGxlZnQ6IC04cHg7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjYWVhZWFlO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUge1xcbiAgdG9wOiAwO1xcbiAgbWFyZ2luLXRvcDogLThweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGU6OmJlZm9yZSB7XFxuICBib3JkZXItdG9wOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2YwZjBmMDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUge1xcbiAgdG9wOiAtMXB4O1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2FlYWVhZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3cge1xcbiAgYm90dG9tOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogLThweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcInRvcFxcXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcInRvcFxcXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUge1xcbiAgYm90dG9tOiAtMXB4O1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2FlYWVhZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItd3JhcHBlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyIHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgY29sb3I6ICMwMDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjYWVhZWFlO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci0tdGltZS1vbmx5IC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSB7XFxuICBsZWZ0OiAzNXB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci0tdGltZS1vbmx5IC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwcHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlciB7XFxuICB6LWluZGV4OiAxO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBtYXJnaW4tdG9wOiAxMHB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSB7XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIHtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcInJpZ2h0XFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogNDJweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcXG4gIGxlZnQ6IDQycHg7XFxuICByaWdodDogYXV0bztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhZWFlYWU7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogOHB4O1xcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tc2VsZWN0LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93bi1jb250YWluZXItLXNlbGVjdCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1kcm9wZG93bi1jb250YWluZXItLXNlbGVjdCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXItLXNjcm9sbCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyLS1zY3JvbGwsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tY29udGFpbmVyLS1zY3JvbGwge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiAwIDJweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGgsXFxuLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBjb2xvcjogIzAwMDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgZm9udC1zaXplOiAwLjk0NHJlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBsaW5lLWhlaWdodDogMS43cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMHB4O1xcbiAgd2lkdGg6IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiAwLjQ1cmVtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgei1pbmRleDogMTtcXG4gIGhlaWdodDogMTBweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgdGV4dC1pbmRlbnQ6IC05OTllbTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cyB7XFxuICBsZWZ0OiAxMHB4O1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXM6aG92ZXIge1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjYjNiM2IzO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkOmhvdmVyIHtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2U2ZTZlNjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQge1xcbiAgcmlnaHQ6IDEwcHg7XFxuICBib3JkZXItbGVmdC1jb2xvcjogI2NjYztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdGltZTpub3QoLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdG9kYXktYnV0dG9uKSB7XFxuICByaWdodDogODBweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQ6aG92ZXIge1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNiM2IzYjM7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZCwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLWRpc2FibGVkOmhvdmVyIHtcXG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZTZlNmU2O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdG9wOiAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzIHtcXG4gIHRvcDogNHB4O1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2NjYztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzOmhvdmVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNiM2IzYjM7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZyB7XFxuICB0b3A6IC00cHg7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjY2NjO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmc6aG92ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2IzYjNiMztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWNvbnRhaW5lciB7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoIHtcXG4gIG1hcmdpbjogMC40cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYWVhZWFlO1xcbiAgd2lkdGg6IDcwcHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lci0td2l0aC10b2RheS1idXR0b24ge1xcbiAgZGlzcGxheTogaW5saW5lO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2FlYWVhZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAtNzJweDtcXG4gIHRvcDogMDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyX190aW1lIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHtcXG4gIHdpZHRoOiA3MHB4O1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3ggdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0IHtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxuICBoZWlnaHQ6IGNhbGMoMTk1cHggKyAoMS43cmVtIC8gMikpO1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbiAgcGFkZGluZy1yaWdodDogMzBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3ggdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0IGxpLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtIHtcXG4gIHBhZGRpbmc6IDVweCAxMHB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbTpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxNmJhNTtcXG4gIGNvbG9yOiB3aGl0ZTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxNmJhNTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyX190aW1lIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveCB1bC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QgbGkucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWRpc2FibGVkIHtcXG4gIGNvbG9yOiAjY2NjO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tZGlzYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlciB7XFxuICBjb2xvcjogI2NjYztcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAxLjdyZW07XFxuICBsaW5lLWhlaWdodDogMS43cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWFyZ2luOiAwLjE2NnJlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLS1jbGlja2FibGUge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXIucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXItLWNsaWNrYWJsZTpob3ZlciB7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVzLFxcbi5yZWFjdC1kYXRlcGlja2VyX193ZWVrIHtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LFxcbi5yZWFjdC1kYXRlcGlja2VyX190aW1lLW5hbWUge1xcbiAgY29sb3I6ICMwMDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMS43cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuN3JlbTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1hcmdpbjogMC4xNjZyZW07XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5OmhvdmVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktLXRvZGF5IHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1oaWdobGlnaHRlZCB7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2RjYzRhO1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMmJlM2Y7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkLWN1c3RvbS0xIHtcXG4gIGNvbG9yOiBtYWdlbnRhO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1oaWdobGlnaHRlZC1jdXN0b20tMiB7XFxuICBjb2xvcjogZ3JlZW47XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1zZWxlY3RpbmctcmFuZ2UsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTZiYTU7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0ZWQ6aG92ZXIsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXNlbGVjdGluZy1yYW5nZTpob3ZlciwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2U6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFkNWQ5MDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0ta2V5Ym9hcmQtc2VsZWN0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJhODdkMDtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1rZXlib2FyZC1zZWxlY3RlZDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQ1ZDkwO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1zZWxlY3RpbmctcmFuZ2U6bm90KC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXJhbmdlKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDMzLCAxMDcsIDE2NSwgMC41KTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2UgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2U6bm90KC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXNlbGVjdGluZy1yYW5nZSkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1kaXNhYmxlZCB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBjb2xvcjogI2NjYztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0tZGlzYWJsZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC1jb250YWluZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXcsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXcge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldzpob3ZlcixcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3OmhvdmVyLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldzpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3OmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3OmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3cge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2IzYjNiMztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93IHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNjY2M7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBtYXJnaW4tbGVmdDogMjBweDtcXG4gIHRvcDogOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjQ1cmVtO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bixcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24sXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiA1MCU7XFxuICBsZWZ0OiAyNSU7XFxuICB0b3A6IDMwcHg7XFxuICB6LWluZGV4OiAxO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2FlYWVhZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd246aG92ZXIsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duOmhvdmVyLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tLXNjcm9sbGFibGUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLS1zY3JvbGxhYmxlLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlIHtcXG4gIGhlaWdodDogMTUwcHg7XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbixcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbiB7XFxuICBsaW5lLWhlaWdodDogMjBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmZpcnN0LW9mLXR5cGUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpmaXJzdC1vZi10eXBlLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbjpmaXJzdC1vZi10eXBlIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuM3JlbTtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbjpsYXN0LW9mLXR5cGUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpsYXN0LW9mLXR5cGUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmxhc3Qtb2YtdHlwZSB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4zcmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuM3JlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmhvdmVyLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb246aG92ZXIsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbjpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZyB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjYjNiM2IzO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246aG92ZXIgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb246aG92ZXIgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbjpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtcHJldmlvdXMge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2IzYjNiMztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uLS1zZWxlY3RlZCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uLS1zZWxlY3RlZCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24tLXNlbGVjdGVkIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDE1cHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19jbG9zZS1pY29uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3V0bGluZTogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgd2lkdGg6IDE2cHg7XFxuICB0b3A6IDI1JTtcXG4gIHJpZ2h0OiA3cHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19jbG9zZS1pY29uOjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjE2YmE1O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm90dG9tOiAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgY29udGVudDogXFxcIlxcXFwwMGQ3XFxcIjtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBtYXJnaW46IC04cHggYXV0byAwO1xcbiAgcGFkZGluZzogMnB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDBweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3RvZGF5LWJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhZWFlYWU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIHBhZGRpbmc6IDVweCAwO1xcbiAgY2xlYXI6IGxlZnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgei1pbmRleDogMjE0NzQ4MzY0NztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LFxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbmFtZSB7XFxuICB3aWR0aDogM3JlbTtcXG4gIGxpbmUtaGVpZ2h0OiAzcmVtO1xcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogNDAwcHgpLCAobWF4LWhlaWdodDogNTUwcHgpIHtcXG4gIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lLFxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LFxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1uYW1lIHtcXG4gICAgd2lkdGg6IDJyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAycmVtO1xcbiAgfVxcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLFxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcXG4gIGZvbnQtc2l6ZTogMS40NHJlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiB7XFxuICBib3JkZXI6IDAuODFyZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzIHtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2NjYztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXM6aG92ZXIge1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjYjNiM2IzO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cy0tZGlzYWJsZWQsIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzLS1kaXNhYmxlZDpob3ZlciB7XFxuICBib3JkZXItcmlnaHQtY29sb3I6ICNlNmU2ZTY7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQge1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNjY2M7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQ6aG92ZXIge1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNiM2IzYjM7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLWRpc2FibGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZDpob3ZlciB7XFxuICBib3JkZXItbGVmdC1jb2xvcjogI2U2ZTZlNjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWRhdGVwaWNrZXIvZGlzdC9yZWFjdC1kYXRlcGlja2VyLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTs7O0VBR0UsaUJBQWlCO0VBQ2pCLGtCQUFrQjtBQUNwQjs7QUFFQTs7Ozs7RUFLRSx1QkFBdUI7RUFDdkIsa0JBQWtCO0VBQ2xCLDZCQUE2QjtFQUM3QixTQUFTO0VBQ1QsVUFBVTtBQUNaOztBQUVBOzs7RUFHRSxXQUFXO0VBQ1gsV0FBVztFQUNYLGlCQUFpQjtFQUNqQixVQUFVO0VBQ1YsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsTUFBTTtFQUNOLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQiw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRSxTQUFTO0VBQ1QsNEJBQTRCO0FBQzlCOztBQUVBOzs7RUFHRSxTQUFTO0VBQ1QsbUJBQW1CO0FBQ3JCOztBQUVBOzs7OztFQUtFLG1CQUFtQjtFQUNuQixzQkFBc0I7QUFDeEI7O0FBRUE7OztFQUdFLFlBQVk7RUFDWix5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSwyREFBMkQ7RUFDM0QsaUJBQWlCO0VBQ2pCLHNCQUFzQjtFQUN0QixXQUFXO0VBQ1gseUJBQXlCO0VBQ3pCLHFCQUFxQjtFQUNyQixxQkFBcUI7RUFDckIsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsVUFBVTtBQUNaOztBQUVBO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTtFQUNFLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxVQUFVO0FBQ1o7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxVQUFVO0VBQ1YsV0FBVztBQUNiOztBQUVBO0VBQ0UsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsVUFBVTtFQUNWLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQix5QkFBeUI7RUFDekIsZ0NBQWdDO0VBQ2hDLDhCQUE4QjtFQUM5QiwrQkFBK0I7RUFDL0IsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQixpQkFBaUI7RUFDakIsa0JBQWtCO0FBQ3BCOztBQUVBOzs7Ozs7RUFNRSxxQkFBcUI7RUFDckIsYUFBYTtBQUNmOztBQUVBOztFQUVFLGFBQWE7RUFDYixXQUFXO0VBQ1gsaUJBQWlCO0VBQ2pCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLHVCQUF1QjtFQUN2QixtQkFBbUI7RUFDbkIsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsZUFBZTtFQUNmLGtCQUFrQjtFQUNsQixTQUFTO0VBQ1QsUUFBUTtFQUNSLFVBQVU7RUFDVixpQ0FBaUM7RUFDakMsVUFBVTtFQUNWLFlBQVk7RUFDWixXQUFXO0VBQ1gsbUJBQW1CO0VBQ25CLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLFVBQVU7RUFDVix3QkFBd0I7QUFDMUI7O0FBRUE7RUFDRSwyQkFBMkI7QUFDN0I7O0FBRUE7RUFDRSwyQkFBMkI7RUFDM0IsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLFdBQVc7RUFDWCx1QkFBdUI7QUFDekI7O0FBRUE7RUFDRSxXQUFXO0FBQ2I7O0FBRUE7RUFDRSwwQkFBMEI7QUFDNUI7O0FBRUE7RUFDRSwwQkFBMEI7RUFDMUIsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixNQUFNO0VBQ04sY0FBYztFQUNkLGlCQUFpQjtFQUNqQixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxRQUFRO0VBQ1Isc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsU0FBUztFQUNULHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGNBQWM7RUFDZCxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxZQUFZO0VBQ1osOEJBQThCO0VBQzlCLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGVBQWU7RUFDZix5QkFBeUI7RUFDekIscUJBQXFCO0VBQ3JCLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osTUFBTTtBQUNSOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxrQkFBa0I7RUFDbEIsY0FBYztFQUNkLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixTQUFTO0VBQ1Qsa0NBQWtDO0VBQ2xDLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsV0FBVztFQUNYLHVCQUF1QjtBQUN6Qjs7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGVBQWU7RUFDZix5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsWUFBWTtFQUNaLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGVBQWU7RUFDZiw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSxXQUFXO0VBQ1gscUJBQXFCO0VBQ3JCLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsa0JBQWtCO0VBQ2xCLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxxQkFBcUI7RUFDckIseUJBQXlCO0FBQzNCOztBQUVBOztFQUVFLG1CQUFtQjtBQUNyQjs7QUFFQTs7O0VBR0UsV0FBVztFQUNYLHFCQUFxQjtFQUNyQixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLGtCQUFrQjtFQUNsQixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UscUJBQXFCO0VBQ3JCLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQix5QkFBeUI7RUFDekIsV0FBVztBQUNiOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTtFQUNFLFlBQVk7QUFDZDs7QUFFQTtFQUNFLHFCQUFxQjtFQUNyQix5QkFBeUI7RUFDekIsV0FBVztBQUNiOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UscUJBQXFCO0VBQ3JCLHlCQUF5QjtFQUN6QixXQUFXO0FBQ2I7O0FBRUE7RUFDRSx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSx5Q0FBeUM7QUFDM0M7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsV0FBVztBQUNiOztBQUVBO0VBQ0UsZUFBZTtFQUNmLFdBQVc7QUFDYjs7QUFFQTtFQUNFLDZCQUE2QjtBQUMvQjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixxQkFBcUI7QUFDdkI7O0FBRUE7OztFQUdFLDZCQUE2QjtFQUM3QixxQkFBcUI7QUFDdkI7O0FBRUE7OztFQUdFLGVBQWU7QUFDakI7O0FBRUE7Ozs7OztFQU1FLHlCQUF5QjtBQUMzQjs7QUFFQTs7O0VBR0Usc0JBQXNCO0VBQ3RCLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsUUFBUTtFQUNSLGtCQUFrQjtFQUNsQixxQkFBcUI7QUFDdkI7O0FBRUE7OztFQUdFLHlCQUF5QjtFQUN6QixrQkFBa0I7RUFDbEIsVUFBVTtFQUNWLFNBQVM7RUFDVCxTQUFTO0VBQ1QsVUFBVTtFQUNWLGtCQUFrQjtFQUNsQixxQkFBcUI7RUFDckIseUJBQXlCO0FBQzNCOztBQUVBOzs7RUFHRSxlQUFlO0FBQ2pCOztBQUVBOzs7RUFHRSxhQUFhO0VBQ2Isa0JBQWtCO0FBQ3BCOztBQUVBOzs7RUFHRSxpQkFBaUI7RUFDakIsV0FBVztFQUNYLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsa0JBQWtCO0FBQ3BCOztBQUVBOzs7RUFHRSw4QkFBOEI7RUFDOUIsK0JBQStCO0FBQ2pDOztBQUVBOzs7RUFHRSx5QkFBeUI7RUFDekIsc0JBQXNCO0VBQ3RCLHFCQUFxQjtFQUNyQixpQkFBaUI7RUFDakIsaUNBQWlDO0VBQ2pDLGtDQUFrQztBQUNwQzs7QUFFQTs7O0VBR0Usc0JBQXNCO0FBQ3hCOztBQUVBOzs7RUFHRSw0QkFBNEI7QUFDOUI7O0FBRUE7OztFQUdFLHlCQUF5QjtBQUMzQjs7QUFFQTs7O0VBR0Usa0JBQWtCO0VBQ2xCLFVBQVU7QUFDWjs7QUFFQTtFQUNFLDZCQUE2QjtFQUM3QixTQUFTO0VBQ1QsZUFBZTtFQUNmLFVBQVU7RUFDVixVQUFVO0VBQ1Ysc0JBQXNCO0VBQ3RCLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osV0FBVztFQUNYLFFBQVE7RUFDUixVQUFVO0FBQ1o7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsa0JBQWtCO0VBQ2xCLFNBQVM7RUFDVCxzQkFBc0I7RUFDdEIsV0FBVztFQUNYLGdCQUFnQjtFQUNoQixlQUFlO0VBQ2YsZUFBZTtFQUNmLFlBQVk7RUFDWixXQUFXO0VBQ1gsY0FBYztFQUNkLG1CQUFtQjtFQUNuQixZQUFZO0VBQ1osa0JBQWtCO0VBQ2xCLFVBQVU7RUFDVixrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxtQkFBbUI7RUFDbkIsNkJBQTZCO0VBQzdCLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsaUJBQWlCO0VBQ2pCLGNBQWM7RUFDZCxXQUFXO0FBQ2I7O0FBRUE7RUFDRSxlQUFlO0VBQ2YsWUFBWTtFQUNaLGFBQWE7RUFDYixvQ0FBb0M7RUFDcEMsT0FBTztFQUNQLE1BQU07RUFDTix1QkFBdUI7RUFDdkIsbUJBQW1CO0VBQ25CLGFBQWE7RUFDYixtQkFBbUI7QUFDckI7O0FBRUE7OztFQUdFLFdBQVc7RUFDWCxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRTs7O0lBR0UsV0FBVztJQUNYLGlCQUFpQjtFQUNuQjtBQUNGOztBQUVBOztFQUVFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGlDQUFpQztBQUNuQzs7QUFFQTtFQUNFLHdCQUF3QjtBQUMxQjs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLDJCQUEyQjtFQUMzQixlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsdUJBQXVCO0FBQ3pCOztBQUVBO0VBQ0UsMEJBQTBCO0FBQzVCOztBQUVBO0VBQ0UsMEJBQTBCO0VBQzFCLGVBQWU7QUFDakJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyB7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUsIC5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdywgLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUsIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcInRvcFxcXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUge1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3JkZXI6IDhweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAxcHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcImJvdHRvbVxcXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGU6OmJlZm9yZSwgLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tZG93bi1hcnJvdzo6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgei1pbmRleDogLTE7XFxuICBib3JkZXItd2lkdGg6IDhweDtcXG4gIGxlZnQ6IC04cHg7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjYWVhZWFlO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGUge1xcbiAgdG9wOiAwO1xcbiAgbWFyZ2luLXRvcDogLThweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSAucmVhY3QtZGF0ZXBpY2tlcl9fdHJpYW5nbGU6OmJlZm9yZSB7XFxuICBib3JkZXItdG9wOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2YwZjBmMDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwiYm90dG9tXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlOjpiZWZvcmUge1xcbiAgdG9wOiAtMXB4O1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2FlYWVhZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3cge1xcbiAgYm90dG9tOiAwO1xcbiAgbWFyZ2luLWJvdHRvbTogLThweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwidG9wXFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldy0tZG93bi1hcnJvdyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csIC5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcInRvcFxcXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUge1xcbiAgYm9yZGVyLWJvdHRvbTogbm9uZTtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcInRvcFxcXCJdIC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZTo6YmVmb3JlLCAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3c6OmJlZm9yZSxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93OjpiZWZvcmUge1xcbiAgYm90dG9tOiAtMXB4O1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2FlYWVhZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItd3JhcHBlciB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyIHtcXG4gIGZvbnQtZmFtaWx5OiBcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbiAgZm9udC1zaXplOiAwLjhyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgY29sb3I6ICMwMDA7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjYWVhZWFlO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci0tdGltZS1vbmx5IC5yZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZSB7XFxuICBsZWZ0OiAzNXB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci0tdGltZS1vbmx5IC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSB7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLS10aW1lLW9ubHkgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDUwcHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlciB7XFxuICB6LWluZGV4OiAxO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJib3R0b21cXFwiXSB7XFxuICBtYXJnaW4tdG9wOiAxMHB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJ0b3BcXFwiXSB7XFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJyaWdodFxcXCJdIHtcXG4gIG1hcmdpbi1sZWZ0OiA4cHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyLXBvcHBlcltkYXRhLXBsYWNlbWVudF49XFxcInJpZ2h0XFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcXG4gIGxlZnQ6IGF1dG87XFxuICByaWdodDogNDJweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItcG9wcGVyW2RhdGEtcGxhY2VtZW50Xj1cXFwibGVmdFxcXCJdIHtcXG4gIG1hcmdpbi1yaWdodDogOHB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJbZGF0YS1wbGFjZW1lbnRePVxcXCJsZWZ0XFxcIl0gLnJlYWN0LWRhdGVwaWNrZXJfX3RyaWFuZ2xlIHtcXG4gIGxlZnQ6IDQycHg7XFxuICByaWdodDogYXV0bztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlciB7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhZWFlYWU7XFxuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwLjNyZW07XFxuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMC4zcmVtO1xcbiAgcGFkZGluZy10b3A6IDhweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlci0tdGltZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogOHB4O1xcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLWRyb3Bkb3duLWNvbnRhaW5lci0tc2VsZWN0LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93bi1jb250YWluZXItLXNlbGVjdCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1kcm9wZG93bi1jb250YWluZXItLXNlbGVjdCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi1jb250YWluZXItLXNjcm9sbCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24tY29udGFpbmVyLS1zY3JvbGwsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tY29udGFpbmVyLS1zY3JvbGwge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luOiAwIDJweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2N1cnJlbnQtbW9udGgsXFxuLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcXG4gIG1hcmdpbi10b3A6IDA7XFxuICBjb2xvcjogIzAwMDtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgZm9udC1zaXplOiAwLjk0NHJlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBsaW5lLWhlaWdodDogMS43cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMHB4O1xcbiAgd2lkdGg6IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm9yZGVyOiAwLjQ1cmVtIHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgei1pbmRleDogMTtcXG4gIGhlaWdodDogMTBweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgdGV4dC1pbmRlbnQ6IC05OTllbTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cyB7XFxuICBsZWZ0OiAxMHB4O1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXM6aG92ZXIge1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjYjNiM2IzO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXMtLWRpc2FibGVkOmhvdmVyIHtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2U2ZTZlNjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQge1xcbiAgcmlnaHQ6IDEwcHg7XFxuICBib3JkZXItbGVmdC1jb2xvcjogI2NjYztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdGltZTpub3QoLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLXdpdGgtdG9kYXktYnV0dG9uKSB7XFxuICByaWdodDogODBweDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQ6aG92ZXIge1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNiM2IzYjM7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZCwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLWRpc2FibGVkOmhvdmVyIHtcXG4gIGJvcmRlci1sZWZ0LWNvbG9yOiAjZTZlNmU2O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgdG9wOiAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzIHtcXG4gIHRvcDogNHB4O1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2NjYztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzOmhvdmVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNiM2IzYjM7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZyB7XFxuICB0b3A6IC00cHg7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjY2NjO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmc6aG92ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2IzYjNiMztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWNvbnRhaW5lciB7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoIHtcXG4gIG1hcmdpbjogMC40cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIge1xcbiAgZmxvYXQ6IHJpZ2h0O1xcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYWVhZWFlO1xcbiAgd2lkdGg6IDcwcHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lci0td2l0aC10b2RheS1idXR0b24ge1xcbiAgZGlzcGxheTogaW5saW5lO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2FlYWVhZTtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAtNzJweDtcXG4gIHRvcDogMDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyX190aW1lIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJhY2tncm91bmQ6IHdoaXRlO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHtcXG4gIHdpZHRoOiA3MHB4O1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgbWFyZ2luOiAwIGF1dG87XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3ggdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0IHtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxuICBoZWlnaHQ6IGNhbGMoMTk1cHggKyAoMS43cmVtIC8gMikpO1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbiAgcGFkZGluZy1yaWdodDogMzBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX190aW1lLWNvbnRhaW5lciAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZSAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1ib3ggdWwucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0IGxpLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtIHtcXG4gIHBhZGRpbmc6IDVweCAxMHB4O1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbTpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxNmJhNTtcXG4gIGNvbG9yOiB3aGl0ZTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tc2VsZWN0ZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIxNmJhNTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIC5yZWFjdC1kYXRlcGlja2VyX190aW1lIC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWJveCB1bC5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QgbGkucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWRpc2FibGVkIHtcXG4gIGNvbG9yOiAjY2NjO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1jb250YWluZXIgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94IHVsLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdCBsaS5yZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tZGlzYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlciB7XFxuICBjb2xvcjogI2NjYztcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAxLjdyZW07XFxuICBsaW5lLWhlaWdodDogMS43cmVtO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWFyZ2luOiAwLjE2NnJlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLnJlYWN0LWRhdGVwaWNrZXJfX3dlZWstbnVtYmVyLS1jbGlja2FibGUge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXIucmVhY3QtZGF0ZXBpY2tlcl9fd2Vlay1udW1iZXItLWNsaWNrYWJsZTpob3ZlciB7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVzLFxcbi5yZWFjdC1kYXRlcGlja2VyX193ZWVrIHtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktbmFtZSxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LFxcbi5yZWFjdC1kYXRlcGlja2VyX190aW1lLW5hbWUge1xcbiAgY29sb3I6ICMwMDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMS43cmVtO1xcbiAgbGluZS1oZWlnaHQ6IDEuN3JlbTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1hcmdpbjogMC4xNjZyZW07XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5OmhvdmVyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmMGYwZjA7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktLXRvZGF5IHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1oaWdobGlnaHRlZCB7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM2RjYzRhO1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMmJlM2Y7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkLWN1c3RvbS0xIHtcXG4gIGNvbG9yOiBtYWdlbnRhO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1oaWdobGlnaHRlZC1jdXN0b20tMiB7XFxuICBjb2xvcjogZ3JlZW47XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1zZWxlY3RpbmctcmFuZ2UsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyMTZiYTU7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0tc2VsZWN0ZWQ6aG92ZXIsIC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXNlbGVjdGluZy1yYW5nZTpob3ZlciwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2U6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzFkNWQ5MDtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0ta2V5Ym9hcmQtc2VsZWN0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzJhODdkMDtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1rZXlib2FyZC1zZWxlY3RlZDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWQ1ZDkwO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1zZWxlY3RpbmctcmFuZ2U6bm90KC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXJhbmdlKSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDMzLCAxMDcsIDE2NSwgMC41KTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLS1zZWxlY3RpbmctcmFuZ2UgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0taW4tcmFuZ2U6bm90KC5yZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXNlbGVjdGluZy1yYW5nZSkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG4gIGNvbG9yOiAjMDAwO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1kaXNhYmxlZCB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBjb2xvcjogI2NjYztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX2RheS0tZGlzYWJsZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19pbnB1dC1jb250YWluZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXcsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldyxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXcge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldzpob3ZlcixcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3OmhvdmVyLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldzpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3OmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtcmVhZC12aWV3LS1kb3duLWFycm93LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldzpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3OmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3cge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2IzYjNiMztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItcmVhZC12aWV3LS1kb3duLWFycm93LFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3csXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItcmVhZC12aWV3LS1kb3duLWFycm93IHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNjY2M7XFxuICBmbG9hdDogcmlnaHQ7XFxuICBtYXJnaW4tbGVmdDogMjBweDtcXG4gIHRvcDogOHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm9yZGVyLXdpZHRoOiAwLjQ1cmVtO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bixcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtZHJvcGRvd24sXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiA1MCU7XFxuICBsZWZ0OiAyNSU7XFxuICB0b3A6IDMwcHg7XFxuICB6LWluZGV4OiAxO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgYm9yZGVyLXJhZGl1czogMC4zcmVtO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2FlYWVhZTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd246aG92ZXIsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duOmhvdmVyLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tLXNjcm9sbGFibGUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLS1zY3JvbGxhYmxlLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duLS1zY3JvbGxhYmxlIHtcXG4gIGhlaWdodDogMTUwcHg7XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbixcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbiB7XFxuICBsaW5lLWhlaWdodDogMjBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG4gIG1hcmdpbi1yaWdodDogYXV0bztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmZpcnN0LW9mLXR5cGUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpmaXJzdC1vZi10eXBlLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbjpmaXJzdC1vZi10eXBlIHtcXG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDAuM3JlbTtcXG4gIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwLjNyZW07XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbjpsYXN0LW9mLXR5cGUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpsYXN0LW9mLXR5cGUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmxhc3Qtb2YtdHlwZSB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMC4zcmVtO1xcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDAuM3JlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uOmhvdmVyLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb246aG92ZXIsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbjpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbjpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtdXBjb21pbmcsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uOmhvdmVyIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS15ZWFycy11cGNvbWluZyB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiAjYjNiM2IzO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9feWVhci1vcHRpb246aG92ZXIgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb246aG92ZXIgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzLFxcbi5yZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLW9wdGlvbjpob3ZlciAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0teWVhcnMtcHJldmlvdXMge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2IzYjNiMztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uLS1zZWxlY3RlZCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtb3B0aW9uLS1zZWxlY3RlZCxcXG4ucmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24tLXNlbGVjdGVkIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGxlZnQ6IDE1cHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19jbG9zZS1pY29uIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyOiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3V0bGluZTogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgd2lkdGg6IDE2cHg7XFxuICB0b3A6IDI1JTtcXG4gIHJpZ2h0OiA3cHg7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19jbG9zZS1pY29uOjphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjE2YmE1O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm90dG9tOiAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgY29udGVudDogXFxcIlxcXFwwMGQ3XFxcIjtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHdpZHRoOiAxNnB4O1xcbiAgbGluZS1oZWlnaHQ6IDE7XFxuICBtYXJnaW46IC04cHggYXV0byAwO1xcbiAgcGFkZGluZzogMnB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDBweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3RvZGF5LWJ1dHRvbiB7XFxuICBiYWNrZ3JvdW5kOiAjZjBmMGYwO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhZWFlYWU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmb250LXdlaWdodDogYm9sZDtcXG4gIHBhZGRpbmc6IDVweCAwO1xcbiAgY2xlYXI6IGxlZnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwge1xcbiAgcG9zaXRpb246IGZpeGVkO1xcbiAgd2lkdGg6IDEwMHZ3O1xcbiAgaGVpZ2h0OiAxMDB2aDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gIGxlZnQ6IDA7XFxuICB0b3A6IDA7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgei1pbmRleDogMjE0NzQ4MzY0NztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWUsXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LFxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbmFtZSB7XFxuICB3aWR0aDogM3JlbTtcXG4gIGxpbmUtaGVpZ2h0OiAzcmVtO1xcbn1cXG5cXG5AbWVkaWEgKG1heC13aWR0aDogNDAwcHgpLCAobWF4LWhlaWdodDogNTUwcHgpIHtcXG4gIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lLFxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fZGF5LFxcbiAgLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1uYW1lIHtcXG4gICAgd2lkdGg6IDJyZW07XFxuICAgIGxpbmUtaGVpZ2h0OiAycmVtO1xcbiAgfVxcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLFxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyIHtcXG4gIGZvbnQtc2l6ZTogMS40NHJlbTtcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbiB7XFxuICBib3JkZXI6IDAuODFyZW0gc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzIHtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogI2NjYztcXG59XFxuXFxuLnJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbCAucmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tcHJldmlvdXM6aG92ZXIge1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiAjYjNiM2IzO1xcbn1cXG5cXG4ucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1wcmV2aW91cy0tZGlzYWJsZWQsIC5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzLS1kaXNhYmxlZDpob3ZlciB7XFxuICBib3JkZXItcmlnaHQtY29sb3I6ICNlNmU2ZTY7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQge1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNjY2M7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQ6aG92ZXIge1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6ICNiM2IzYjM7XFxufVxcblxcbi5yZWFjdC1kYXRlcGlja2VyX19wb3J0YWwgLnJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLW5leHQtLWRpc2FibGVkLCAucmVhY3QtZGF0ZXBpY2tlcl9fcG9ydGFsIC5yZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS1kaXNhYmxlZDpob3ZlciB7XFxuICBib3JkZXItbGVmdC1jb2xvcjogI2U2ZTZlNjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge31cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJvb2w6IHNoaW0sXG4gICAgZnVuYzogc2hpbSxcbiAgICBudW1iZXI6IHNoaW0sXG4gICAgb2JqZWN0OiBzaGltLFxuICAgIHN0cmluZzogc2hpbSxcbiAgICBzeW1ib2w6IHNoaW0sXG5cbiAgICBhbnk6IHNoaW0sXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcbiAgICBlbGVtZW50OiBzaGltLFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXG4gICAgbm9kZTogc2hpbSxcbiAgICBvYmplY3RPZjogZ2V0U2hpbSxcbiAgICBvbmVPZjogZ2V0U2hpbSxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXG4gICAgc2hhcGU6IGdldFNoaW0sXG4gICAgZXhhY3Q6IGdldFNoaW1cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGVtcHR5RnVuY3Rpb247XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIFN5bWJvbC5mb3IgJiZcbiAgICBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykpIHx8XG4gICAgMHhlYWM3O1xuXG4gIHZhciBpc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXG4gICAgICBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbiAgfTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsImltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZpbmRET01Ob2RlIH0gZnJvbSAncmVhY3QtZG9tJztcblxuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2Uoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHtcbiAgc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzLnByb3RvdHlwZSk7XG4gIHN1YkNsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHN1YkNsYXNzO1xuICBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTtcbiAgICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgc29tZSBET00gbm9kZSBpcyBvdXIgQ29tcG9uZW50J3Mgbm9kZS5cbiAqL1xuZnVuY3Rpb24gaXNOb2RlRm91bmQoY3VycmVudCwgY29tcG9uZW50Tm9kZSwgaWdub3JlQ2xhc3MpIHtcbiAgaWYgKGN1cnJlbnQgPT09IGNvbXBvbmVudE5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBTVkcgPHVzZS8+IGVsZW1lbnRzIGRvIG5vdCB0ZWNobmljYWxseSByZXNpZGUgaW4gdGhlIHJlbmRlcmVkIERPTSwgc29cbiAgLy8gdGhleSBkbyBub3QgaGF2ZSBjbGFzc0xpc3QgZGlyZWN0bHksIGJ1dCB0aGV5IG9mZmVyIGEgbGluayB0byB0aGVpclxuICAvLyBjb3JyZXNwb25kaW5nIGVsZW1lbnQsIHdoaWNoIGNhbiBoYXZlIGNsYXNzTGlzdC4gVGhpcyBleHRyYSBjaGVjayBpcyBmb3JcbiAgLy8gdGhhdCBjYXNlLlxuICAvLyBTZWU6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL3N0cnVjdC5odG1sI0ludGVyZmFjZVNWR1VzZUVsZW1lbnRcbiAgLy8gRGlzY3Vzc2lvbjogaHR0cHM6Ly9naXRodWIuY29tL1BvbWF4L3JlYWN0LW9uY2xpY2tvdXRzaWRlL3B1bGwvMTdcblxuXG4gIGlmIChjdXJyZW50LmNvcnJlc3BvbmRpbmdFbGVtZW50KSB7XG4gICAgcmV0dXJuIGN1cnJlbnQuY29ycmVzcG9uZGluZ0VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGlnbm9yZUNsYXNzKTtcbiAgfVxuXG4gIHJldHVybiBjdXJyZW50LmNsYXNzTGlzdC5jb250YWlucyhpZ25vcmVDbGFzcyk7XG59XG4vKipcbiAqIFRyeSB0byBmaW5kIG91ciBub2RlIGluIGEgaGllcmFyY2h5IG9mIG5vZGVzLCByZXR1cm5pbmcgdGhlIGRvY3VtZW50XG4gKiBub2RlIGFzIGhpZ2hlc3Qgbm9kZSBpZiBvdXIgbm9kZSBpcyBub3QgZm91bmQgaW4gdGhlIHBhdGggdXAuXG4gKi9cblxuZnVuY3Rpb24gZmluZEhpZ2hlc3QoY3VycmVudCwgY29tcG9uZW50Tm9kZSwgaWdub3JlQ2xhc3MpIHtcbiAgaWYgKGN1cnJlbnQgPT09IGNvbXBvbmVudE5vZGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBzb3VyY2U9bG9jYWwgdGhlbiB0aGlzIGV2ZW50IGNhbWUgZnJvbSAnc29tZXdoZXJlJ1xuICAvLyBpbnNpZGUgYW5kIHNob3VsZCBiZSBpZ25vcmVkLiBXZSBjb3VsZCBoYW5kbGUgdGhpcyB3aXRoXG4gIC8vIGEgbGF5ZXJlZCBhcHByb2FjaCwgdG9vLCBidXQgdGhhdCByZXF1aXJlcyBnb2luZyBiYWNrIHRvXG4gIC8vIHRoaW5raW5nIGluIHRlcm1zIG9mIERvbSBub2RlIG5lc3RpbmcsIHJ1bm5pbmcgY291bnRlclxuICAvLyB0byBSZWFjdCdzICd5b3Ugc2hvdWxkbid0IGNhcmUgYWJvdXQgdGhlIERPTScgcGhpbG9zb3BoeS5cblxuXG4gIHdoaWxlIChjdXJyZW50LnBhcmVudE5vZGUpIHtcbiAgICBpZiAoaXNOb2RlRm91bmQoY3VycmVudCwgY29tcG9uZW50Tm9kZSwgaWdub3JlQ2xhc3MpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnROb2RlO1xuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnQ7XG59XG4vKipcbiAqIENoZWNrIGlmIHRoZSBicm93c2VyIHNjcm9sbGJhciB3YXMgY2xpY2tlZFxuICovXG5cbmZ1bmN0aW9uIGNsaWNrZWRTY3JvbGxiYXIoZXZ0KSB7XG4gIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPD0gZXZ0LmNsaWVudFggfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA8PSBldnQuY2xpZW50WTtcbn1cblxuLy8gaWRlYWxseSB3aWxsIGdldCByZXBsYWNlZCB3aXRoIGV4dGVybmFsIGRlcFxuLy8gd2hlbiByYWZyZXgvZGV0ZWN0LXBhc3NpdmUtZXZlbnRzIzQgYW5kIHJhZnJleC9kZXRlY3QtcGFzc2l2ZS1ldmVudHMjNSBnZXQgbWVyZ2VkIGluXG52YXIgdGVzdFBhc3NpdmVFdmVudFN1cHBvcnQgPSBmdW5jdGlvbiB0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCgpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYXNzaXZlID0gZmFsc2U7XG4gIHZhciBvcHRpb25zID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHBhc3NpdmUgPSB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Jywgbm9vcCwgb3B0aW9ucyk7XG4gIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCcsIG5vb3AsIG9wdGlvbnMpO1xuICByZXR1cm4gcGFzc2l2ZTtcbn07XG5cbmZ1bmN0aW9uIGF1dG9JbmMoc2VlZCkge1xuICBpZiAoc2VlZCA9PT0gdm9pZCAwKSB7XG4gICAgc2VlZCA9IDA7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiArK3NlZWQ7XG4gIH07XG59XG5cbnZhciB1aWQgPSBhdXRvSW5jKCk7XG5cbnZhciBwYXNzaXZlRXZlbnRTdXBwb3J0O1xudmFyIGhhbmRsZXJzTWFwID0ge307XG52YXIgZW5hYmxlZEluc3RhbmNlcyA9IHt9O1xudmFyIHRvdWNoRXZlbnRzID0gWyd0b3VjaHN0YXJ0JywgJ3RvdWNobW92ZSddO1xudmFyIElHTk9SRV9DTEFTU19OQU1FID0gJ2lnbm9yZS1yZWFjdC1vbmNsaWNrb3V0c2lkZSc7XG4vKipcbiAqIE9wdGlvbnMgZm9yIGFkZEV2ZW50SGFuZGxlciBhbmQgcmVtb3ZlRXZlbnRIYW5kbGVyXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRIYW5kbGVyT3B0aW9ucyhpbnN0YW5jZSwgZXZlbnROYW1lKSB7XG4gIHZhciBoYW5kbGVyT3B0aW9ucyA9IG51bGw7XG4gIHZhciBpc1RvdWNoRXZlbnQgPSB0b3VjaEV2ZW50cy5pbmRleE9mKGV2ZW50TmFtZSkgIT09IC0xO1xuXG4gIGlmIChpc1RvdWNoRXZlbnQgJiYgcGFzc2l2ZUV2ZW50U3VwcG9ydCkge1xuICAgIGhhbmRsZXJPcHRpb25zID0ge1xuICAgICAgcGFzc2l2ZTogIWluc3RhbmNlLnByb3BzLnByZXZlbnREZWZhdWx0XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVyT3B0aW9ucztcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZW5lcmF0ZXMgdGhlIEhPQyBmdW5jdGlvbiB0aGF0IHlvdSdsbCB1c2VcbiAqIGluIG9yZGVyIHRvIGltcGFydCBvbk91dHNpZGVDbGljayBsaXN0ZW5pbmcgdG8gYW5cbiAqIGFyYml0cmFyeSBjb21wb25lbnQuIEl0IGdldHMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgdGhlXG4gKiBib290c3RyYXBwaW5nIGNvZGUgdG8geWllbGQgYW4gaW5zdGFuY2Ugb2YgdGhlXG4gKiBvbkNsaWNrT3V0c2lkZUhPQyBmdW5jdGlvbiBkZWZpbmVkIGluc2lkZSBzZXR1cEhPQygpLlxuICovXG5cblxuZnVuY3Rpb24gb25DbGlja091dHNpZGVIT0MoV3JhcHBlZENvbXBvbmVudCwgY29uZmlnKSB7XG4gIHZhciBfY2xhc3MsIF90ZW1wO1xuXG4gIHJldHVybiBfdGVtcCA9IF9jbGFzcyA9XG4gIC8qI19fUFVSRV9fKi9cbiAgZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShvbkNsaWNrT3V0c2lkZSwgX0NvbXBvbmVudCk7XG5cbiAgICBmdW5jdGlvbiBvbkNsaWNrT3V0c2lkZShwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9Db21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcblxuICAgICAgX3RoaXMuX19vdXRzaWRlQ2xpY2tIYW5kbGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICh0eXBlb2YgX3RoaXMuX19jbGlja091dHNpZGVIYW5kbGVyUHJvcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIF90aGlzLl9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3AoZXZlbnQpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGluc3RhbmNlID0gX3RoaXMuZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLnByb3BzLmhhbmRsZUNsaWNrT3V0c2lkZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGluc3RhbmNlLnByb3BzLmhhbmRsZUNsaWNrT3V0c2lkZShldmVudCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5oYW5kbGVDbGlja091dHNpZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBpbnN0YW5jZS5oYW5kbGVDbGlja091dHNpZGUoZXZlbnQpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignV3JhcHBlZENvbXBvbmVudCBsYWNrcyBhIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudCkgZnVuY3Rpb24gZm9yIHByb2Nlc3Npbmcgb3V0c2lkZSBjbGljayBldmVudHMuJyk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5lbmFibGVPbkNsaWNrT3V0c2lkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgfHwgZW5hYmxlZEluc3RhbmNlc1tfdGhpcy5fdWlkXSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgcGFzc2l2ZUV2ZW50U3VwcG9ydCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBwYXNzaXZlRXZlbnRTdXBwb3J0ID0gdGVzdFBhc3NpdmVFdmVudFN1cHBvcnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVuYWJsZWRJbnN0YW5jZXNbX3RoaXMuX3VpZF0gPSB0cnVlO1xuICAgICAgICB2YXIgZXZlbnRzID0gX3RoaXMucHJvcHMuZXZlbnRUeXBlcztcblxuICAgICAgICBpZiAoIWV2ZW50cy5mb3JFYWNoKSB7XG4gICAgICAgICAgZXZlbnRzID0gW2V2ZW50c107XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVyc01hcFtfdGhpcy5fdWlkXSA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5kaXNhYmxlT25DbGlja091dHNpZGUpIHJldHVybjtcbiAgICAgICAgICBpZiAoX3RoaXMuY29tcG9uZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgICAgaWYgKF90aGlzLnByb3BzLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy5leGNsdWRlU2Nyb2xsYmFyICYmIGNsaWNrZWRTY3JvbGxiYXIoZXZlbnQpKSByZXR1cm47XG4gICAgICAgICAgdmFyIGN1cnJlbnQgPSBldmVudC50YXJnZXQ7XG5cbiAgICAgICAgICBpZiAoZmluZEhpZ2hlc3QoY3VycmVudCwgX3RoaXMuY29tcG9uZW50Tm9kZSwgX3RoaXMucHJvcHMub3V0c2lkZUNsaWNrSWdub3JlQ2xhc3MpICE9PSBkb2N1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF90aGlzLl9fb3V0c2lkZUNsaWNrSGFuZGxlcihldmVudCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TmFtZSkge1xuICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyc01hcFtfdGhpcy5fdWlkXSwgZ2V0RXZlbnRIYW5kbGVyT3B0aW9ucyhfdGhpcywgZXZlbnROYW1lKSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuZGlzYWJsZU9uQ2xpY2tPdXRzaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBkZWxldGUgZW5hYmxlZEluc3RhbmNlc1tfdGhpcy5fdWlkXTtcbiAgICAgICAgdmFyIGZuID0gaGFuZGxlcnNNYXBbX3RoaXMuX3VpZF07XG5cbiAgICAgICAgaWYgKGZuICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB2YXIgZXZlbnRzID0gX3RoaXMucHJvcHMuZXZlbnRUeXBlcztcblxuICAgICAgICAgIGlmICghZXZlbnRzLmZvckVhY2gpIHtcbiAgICAgICAgICAgIGV2ZW50cyA9IFtldmVudHNdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChldmVudE5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZm4sIGdldEV2ZW50SGFuZGxlck9wdGlvbnMoX3RoaXMsIGV2ZW50TmFtZSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc01hcFtfdGhpcy5fdWlkXTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuZ2V0UmVmID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICByZXR1cm4gX3RoaXMuaW5zdGFuY2VSZWYgPSByZWY7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fdWlkID0gdWlkKCk7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFjY2VzcyB0aGUgV3JhcHBlZENvbXBvbmVudCdzIGluc3RhbmNlLlxuICAgICAqL1xuXG5cbiAgICB2YXIgX3Byb3RvID0gb25DbGlja091dHNpZGUucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLmdldEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKSB7XG4gICAgICBpZiAoIVdyYXBwZWRDb21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSB0aGlzLmluc3RhbmNlUmVmO1xuICAgICAgcmV0dXJuIHJlZi5nZXRJbnN0YW5jZSA/IHJlZi5nZXRJbnN0YW5jZSgpIDogcmVmO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBBZGQgY2xpY2sgbGlzdGVuZXJzIHRvIHRoZSBjdXJyZW50IGRvY3VtZW50LFxuICAgICAqIGxpbmtlZCB0byB0aGlzIGNvbXBvbmVudCdzIHN0YXRlLlxuICAgICAqL1xuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgLy8gSWYgd2UgYXJlIGluIGFuIGVudmlyb25tZW50IHdpdGhvdXQgYSBET00gc3VjaFxuICAgICAgLy8gYXMgc2hhbGxvdyByZW5kZXJpbmcgb3Igc25hcHNob3RzIHRoZW4gd2UgZXhpdFxuICAgICAgLy8gZWFybHkgdG8gcHJldmVudCBhbnkgdW5oYW5kbGVkIGVycm9ycyBiZWluZyB0aHJvd24uXG4gICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyB8fCAhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZ2V0SW5zdGFuY2UoKTtcblxuICAgICAgaWYgKGNvbmZpZyAmJiB0eXBlb2YgY29uZmlnLmhhbmRsZUNsaWNrT3V0c2lkZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLl9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3AgPSBjb25maWcuaGFuZGxlQ2xpY2tPdXRzaWRlKGluc3RhbmNlKTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX19jbGlja091dHNpZGVIYW5kbGVyUHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JhcHBlZENvbXBvbmVudCBsYWNrcyBhIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIG91dHNpZGUgY2xpY2sgZXZlbnRzIHNwZWNpZmllZCBieSB0aGUgaGFuZGxlQ2xpY2tPdXRzaWRlIGNvbmZpZyBvcHRpb24uJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5jb21wb25lbnROb2RlID0gZmluZERPTU5vZGUodGhpcy5nZXRJbnN0YW5jZSgpKTtcbiAgICAgIHRoaXMuZW5hYmxlT25DbGlja091dHNpZGUoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50Tm9kZSA9IGZpbmRET01Ob2RlKHRoaXMuZ2V0SW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmUgYWxsIGRvY3VtZW50J3MgZXZlbnQgbGlzdGVuZXJzIGZvciB0aGlzIGNvbXBvbmVudFxuICAgICAqL1xuXG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIHRoaXMuZGlzYWJsZU9uQ2xpY2tPdXRzaWRlKCk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDYW4gYmUgY2FsbGVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGV2ZW50IGxpc3RlbmluZ1xuICAgICAqIGZvciBjbGlja3MgYW5kIHRvdWNoZXMgb3V0c2lkZSBvZiB0aGlzIGVsZW1lbnQuXG4gICAgICovXG5cblxuICAgIC8qKlxuICAgICAqIFBhc3MtdGhyb3VnaCByZW5kZXJcbiAgICAgKi9cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBleGNsdWRlU2Nyb2xsYmFyID0gX3Byb3BzLmV4Y2x1ZGVTY3JvbGxiYXIsXG4gICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbXCJleGNsdWRlU2Nyb2xsYmFyXCJdKTtcblxuICAgICAgaWYgKFdyYXBwZWRDb21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpIHtcbiAgICAgICAgcHJvcHMucmVmID0gdGhpcy5nZXRSZWY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wcy53cmFwcGVkUmVmID0gdGhpcy5nZXRSZWY7XG4gICAgICB9XG5cbiAgICAgIHByb3BzLmRpc2FibGVPbkNsaWNrT3V0c2lkZSA9IHRoaXMuZGlzYWJsZU9uQ2xpY2tPdXRzaWRlO1xuICAgICAgcHJvcHMuZW5hYmxlT25DbGlja091dHNpZGUgPSB0aGlzLmVuYWJsZU9uQ2xpY2tPdXRzaWRlO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoV3JhcHBlZENvbXBvbmVudCwgcHJvcHMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gb25DbGlja091dHNpZGU7XG4gIH0oQ29tcG9uZW50KSwgX2NsYXNzLmRpc3BsYXlOYW1lID0gXCJPbkNsaWNrT3V0c2lkZShcIiArIChXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgKyBcIilcIiwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBldmVudFR5cGVzOiBbJ21vdXNlZG93bicsICd0b3VjaHN0YXJ0J10sXG4gICAgZXhjbHVkZVNjcm9sbGJhcjogY29uZmlnICYmIGNvbmZpZy5leGNsdWRlU2Nyb2xsYmFyIHx8IGZhbHNlLFxuICAgIG91dHNpZGVDbGlja0lnbm9yZUNsYXNzOiBJR05PUkVfQ0xBU1NfTkFNRSxcbiAgICBwcmV2ZW50RGVmYXVsdDogZmFsc2UsXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBmYWxzZVxuICB9LCBfY2xhc3MuZ2V0Q2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFdyYXBwZWRDb21wb25lbnQuZ2V0Q2xhc3MgPyBXcmFwcGVkQ29tcG9uZW50LmdldENsYXNzKCkgOiBXcmFwcGVkQ29tcG9uZW50O1xuICB9LCBfdGVtcDtcbn1cblxuZXhwb3J0IHsgSUdOT1JFX0NMQVNTX05BTUUgfTtcbmV4cG9ydCBkZWZhdWx0IG9uQ2xpY2tPdXRzaWRlSE9DO1xuIiwidmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCB7IENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbnZhciBNYW5hZ2VyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE1hbmFnZXIsIF9Db21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE1hbmFnZXIoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1hbmFnZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IE1hbmFnZXIuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihNYW5hZ2VyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX3NldFRhcmdldE5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgX3RoaXMuX3RhcmdldE5vZGUgPSBub2RlO1xuICAgIH0sIF90aGlzLl9nZXRUYXJnZXROb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLl90YXJnZXROb2RlO1xuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKE1hbmFnZXIsIFt7XG4gICAga2V5OiAnZ2V0Q2hpbGRDb250ZXh0JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcG9wcGVyTWFuYWdlcjoge1xuICAgICAgICAgIHNldFRhcmdldE5vZGU6IHRoaXMuX3NldFRhcmdldE5vZGUsXG4gICAgICAgICAgZ2V0VGFyZ2V0Tm9kZTogdGhpcy5fZ2V0VGFyZ2V0Tm9kZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHRhZyA9IF9wcm9wcy50YWcsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWyd0YWcnLCAnY2hpbGRyZW4nXSk7XG5cbiAgICAgIGlmICh0YWcgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KHRhZywgcmVzdFByb3BzLCBjaGlsZHJlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIE1hbmFnZXI7XG59KENvbXBvbmVudCk7XG5cbk1hbmFnZXIuY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gIHBvcHBlck1hbmFnZXI6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufTtcbk1hbmFnZXIucHJvcFR5cGVzID0ge1xuICB0YWc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5ib29sXSksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKVxufTtcbk1hbmFnZXIuZGVmYXVsdFByb3BzID0ge1xuICB0YWc6ICdkaXYnXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IE1hbmFnZXI7IiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxudmFyIFRhcmdldCA9IGZ1bmN0aW9uIFRhcmdldChwcm9wcywgY29udGV4dCkge1xuICB2YXIgX3Byb3BzJGNvbXBvbmVudCA9IHByb3BzLmNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudCA9IF9wcm9wcyRjb21wb25lbnQgPT09IHVuZGVmaW5lZCA/ICdkaXYnIDogX3Byb3BzJGNvbXBvbmVudCxcbiAgICAgIGlubmVyUmVmID0gcHJvcHMuaW5uZXJSZWYsXG4gICAgICBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgcmVzdFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBbJ2NvbXBvbmVudCcsICdpbm5lclJlZicsICdjaGlsZHJlbiddKTtcblxuICB2YXIgcG9wcGVyTWFuYWdlciA9IGNvbnRleHQucG9wcGVyTWFuYWdlcjtcblxuICB2YXIgdGFyZ2V0UmVmID0gZnVuY3Rpb24gdGFyZ2V0UmVmKG5vZGUpIHtcbiAgICBwb3BwZXJNYW5hZ2VyLnNldFRhcmdldE5vZGUobm9kZSk7XG4gICAgaWYgKHR5cGVvZiBpbm5lclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaW5uZXJSZWYobm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgdGFyZ2V0UHJvcHMgPSB7IHJlZjogdGFyZ2V0UmVmIH07XG4gICAgcmV0dXJuIGNoaWxkcmVuKHsgdGFyZ2V0UHJvcHM6IHRhcmdldFByb3BzLCByZXN0UHJvcHM6IHJlc3RQcm9wcyB9KTtcbiAgfVxuXG4gIHZhciBjb21wb25lbnRQcm9wcyA9IF9leHRlbmRzKHt9LCByZXN0UHJvcHMpO1xuXG4gIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgIGNvbXBvbmVudFByb3BzLnJlZiA9IHRhcmdldFJlZjtcbiAgfSBlbHNlIHtcbiAgICBjb21wb25lbnRQcm9wcy5pbm5lclJlZiA9IHRhcmdldFJlZjtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVFbGVtZW50KGNvbXBvbmVudCwgY29tcG9uZW50UHJvcHMsIGNoaWxkcmVuKTtcbn07XG5cblRhcmdldC5jb250ZXh0VHlwZXMgPSB7XG4gIHBvcHBlck1hbmFnZXI6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufTtcblxuVGFyZ2V0LnByb3BUeXBlcyA9IHtcbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgaW5uZXJSZWY6IFByb3BUeXBlcy5mdW5jLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRhcmdldDsiLCIvKiohXG4gKiBAZmlsZU92ZXJ2aWV3IEtpY2thc3MgbGlicmFyeSB0byBjcmVhdGUgYW5kIHBsYWNlIHBvcHBlcnMgbmVhciB0aGVpciByZWZlcmVuY2UgZWxlbWVudHMuXG4gKiBAdmVyc2lvbiAxLjE0LjNcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgRmVkZXJpY28gWml2b2xvIGFuZCBjb250cmlidXRvcnNcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG52YXIgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxudmFyIGxvbmdlclRpbWVvdXRCcm93c2VycyA9IFsnRWRnZScsICdUcmlkZW50JywgJ0ZpcmVmb3gnXTtcbnZhciB0aW1lb3V0RHVyYXRpb24gPSAwO1xuZm9yICh2YXIgaSA9IDA7IGkgPCBsb25nZXJUaW1lb3V0QnJvd3NlcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgaWYgKGlzQnJvd3NlciAmJiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YobG9uZ2VyVGltZW91dEJyb3dzZXJzW2ldKSA+PSAwKSB7XG4gICAgdGltZW91dER1cmF0aW9uID0gMTtcbiAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBtaWNyb3Rhc2tEZWJvdW5jZShmbikge1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjYWxsZWQgPSB0cnVlO1xuICAgIHdpbmRvdy5Qcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxlZCA9IGZhbHNlO1xuICAgICAgZm4oKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdGFza0RlYm91bmNlKGZuKSB7XG4gIHZhciBzY2hlZHVsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXNjaGVkdWxlZCkge1xuICAgICAgc2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBzY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0sIHRpbWVvdXREdXJhdGlvbik7XG4gICAgfVxuICB9O1xufVxuXG52YXIgc3VwcG9ydHNNaWNyb1Rhc2tzID0gaXNCcm93c2VyICYmIHdpbmRvdy5Qcm9taXNlO1xuXG4vKipcbiogQ3JlYXRlIGEgZGVib3VuY2VkIHZlcnNpb24gb2YgYSBtZXRob2QsIHRoYXQncyBhc3luY2hyb25vdXNseSBkZWZlcnJlZFxuKiBidXQgY2FsbGVkIGluIHRoZSBtaW5pbXVtIHRpbWUgcG9zc2libGUuXG4qXG4qIEBtZXRob2RcbiogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuKiBAYXJndW1lbnQge0Z1bmN0aW9ufSBmblxuKiBAcmV0dXJucyB7RnVuY3Rpb259XG4qL1xudmFyIGRlYm91bmNlID0gc3VwcG9ydHNNaWNyb1Rhc2tzID8gbWljcm90YXNrRGVib3VuY2UgOiB0YXNrRGVib3VuY2U7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIHZhcmlhYmxlIGlzIGEgZnVuY3Rpb25cbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7QW55fSBmdW5jdGlvblRvQ2hlY2sgLSB2YXJpYWJsZSB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IGFuc3dlciB0bzogaXMgYSBmdW5jdGlvbj9cbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spIHtcbiAgdmFyIGdldFR5cGUgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uVG9DaGVjayAmJiBnZXRUeXBlLnRvU3RyaW5nLmNhbGwoZnVuY3Rpb25Ub0NoZWNrKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBHZXQgQ1NTIGNvbXB1dGVkIHByb3BlcnR5IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHByb3BlcnR5XG4gKi9cbmZ1bmN0aW9uIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eSkge1xuICBpZiAoZWxlbWVudC5ub2RlVHlwZSAhPT0gMSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50LCBudWxsKTtcbiAgcmV0dXJuIHByb3BlcnR5ID8gY3NzW3Byb3BlcnR5XSA6IGNzcztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBwYXJlbnROb2RlIG9yIHRoZSBob3N0IG9mIHRoZSBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50Lm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuICByZXR1cm4gZWxlbWVudC5wYXJlbnROb2RlIHx8IGVsZW1lbnQuaG9zdDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBzY3JvbGxpbmcgcGFyZW50IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBzY3JvbGwgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIFJldHVybiBib2R5LCBgZ2V0U2Nyb2xsYCB3aWxsIHRha2UgY2FyZSB0byBnZXQgdGhlIGNvcnJlY3QgYHNjcm9sbFRvcGAgZnJvbSBpdFxuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIHN3aXRjaCAoZWxlbWVudC5ub2RlTmFtZSkge1xuICAgIGNhc2UgJ0hUTUwnOlxuICAgIGNhc2UgJ0JPRFknOlxuICAgICAgcmV0dXJuIGVsZW1lbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICByZXR1cm4gZWxlbWVudC5ib2R5O1xuICB9XG5cbiAgLy8gRmlyZWZveCB3YW50IHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG5cbiAgdmFyIF9nZXRTdHlsZUNvbXB1dGVkUHJvcCA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldFN0eWxlQ29tcHV0ZWRQcm9wLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRTdHlsZUNvbXB1dGVkUHJvcC5vdmVyZmxvd1k7XG5cbiAgaWYgKC8oYXV0b3xzY3JvbGx8b3ZlcmxheSkvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xufVxuXG52YXIgaXNJRTExID0gaXNCcm93c2VyICYmICEhKHdpbmRvdy5NU0lucHV0TWV0aG9kQ29udGV4dCAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUpO1xudmFyIGlzSUUxMCA9IGlzQnJvd3NlciAmJiAvTVNJRSAxMC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBicm93c2VyIGlzIEludGVybmV0IEV4cGxvcmVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge051bWJlcn0gdmVyc2lvbiB0byBjaGVja1xuICogQHJldHVybnMge0Jvb2xlYW59IGlzSUVcbiAqL1xuZnVuY3Rpb24gaXNJRSh2ZXJzaW9uKSB7XG4gIGlmICh2ZXJzaW9uID09PSAxMSkge1xuICAgIHJldHVybiBpc0lFMTE7XG4gIH1cbiAgaWYgKHZlcnNpb24gPT09IDEwKSB7XG4gICAgcmV0dXJuIGlzSUUxMDtcbiAgfVxuICByZXR1cm4gaXNJRTExIHx8IGlzSUUxMDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvZmZzZXQgcGFyZW50IG9mIHRoZSBnaXZlbiBlbGVtZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm5zIHtFbGVtZW50fSBvZmZzZXQgcGFyZW50XG4gKi9cbmZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH1cblxuICB2YXIgbm9PZmZzZXRQYXJlbnQgPSBpc0lFKDEwKSA/IGRvY3VtZW50LmJvZHkgOiBudWxsO1xuXG4gIC8vIE5PVEU6IDEgRE9NIGFjY2VzcyBoZXJlXG4gIHZhciBvZmZzZXRQYXJlbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgLy8gU2tpcCBoaWRkZW4gZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhbiBvZmZzZXRQYXJlbnRcbiAgd2hpbGUgKG9mZnNldFBhcmVudCA9PT0gbm9PZmZzZXRQYXJlbnQgJiYgZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSAoZWxlbWVudCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKS5vZmZzZXRQYXJlbnQ7XG4gIH1cblxuICB2YXIgbm9kZU5hbWUgPSBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50Lm5vZGVOYW1lO1xuXG4gIGlmICghbm9kZU5hbWUgfHwgbm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gLm9mZnNldFBhcmVudCB3aWxsIHJldHVybiB0aGUgY2xvc2VzdCBURCBvciBUQUJMRSBpbiBjYXNlXG4gIC8vIG5vIG9mZnNldFBhcmVudCBpcyBwcmVzZW50LCBJIGhhdGUgdGhpcyBqb2IuLi5cbiAgaWYgKFsnVEQnLCAnVEFCTEUnXS5pbmRleE9mKG9mZnNldFBhcmVudC5ub2RlTmFtZSkgIT09IC0xICYmIGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShvZmZzZXRQYXJlbnQsICdwb3NpdGlvbicpID09PSAnc3RhdGljJykge1xuICAgIHJldHVybiBnZXRPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIGlzT2Zmc2V0Q29udGFpbmVyKGVsZW1lbnQpIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbm9kZU5hbWUgPT09ICdIVE1MJyB8fCBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZCkgPT09IGVsZW1lbnQ7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHJvb3Qgbm9kZSAoZG9jdW1lbnQsIHNoYWRvd0RPTSByb290KSBvZiB0aGUgZ2l2ZW4gZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBub2RlXG4gKiBAcmV0dXJucyB7RWxlbWVudH0gcm9vdCBub2RlXG4gKi9cbmZ1bmN0aW9uIGdldFJvb3Qobm9kZSkge1xuICBpZiAobm9kZS5wYXJlbnROb2RlICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIGdldFJvb3Qobm9kZS5wYXJlbnROb2RlKTtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBvZmZzZXQgcGFyZW50IGNvbW1vbiB0byB0aGUgdHdvIHByb3ZpZGVkIG5vZGVzXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQxXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQyXG4gKiBAcmV0dXJucyB7RWxlbWVudH0gY29tbW9uIG9mZnNldCBwYXJlbnRcbiAqL1xuZnVuY3Rpb24gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MSwgZWxlbWVudDIpIHtcbiAgLy8gVGhpcyBjaGVjayBpcyBuZWVkZWQgdG8gYXZvaWQgZXJyb3JzIGluIGNhc2Ugb25lIG9mIHRoZSBlbGVtZW50cyBpc24ndCBkZWZpbmVkIGZvciBhbnkgcmVhc29uXG4gIGlmICghZWxlbWVudDEgfHwgIWVsZW1lbnQxLm5vZGVUeXBlIHx8ICFlbGVtZW50MiB8fCAhZWxlbWVudDIubm9kZVR5cGUpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gSGVyZSB3ZSBtYWtlIHN1cmUgdG8gZ2l2ZSBhcyBcInN0YXJ0XCIgdGhlIGVsZW1lbnQgdGhhdCBjb21lcyBmaXJzdCBpbiB0aGUgRE9NXG4gIHZhciBvcmRlciA9IGVsZW1lbnQxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGVsZW1lbnQyKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HO1xuICB2YXIgc3RhcnQgPSBvcmRlciA/IGVsZW1lbnQxIDogZWxlbWVudDI7XG4gIHZhciBlbmQgPSBvcmRlciA/IGVsZW1lbnQyIDogZWxlbWVudDE7XG5cbiAgLy8gR2V0IGNvbW1vbiBhbmNlc3RvciBjb250YWluZXJcbiAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnQsIDApO1xuICByYW5nZS5zZXRFbmQoZW5kLCAwKTtcbiAgdmFyIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyID0gcmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG5cbiAgLy8gQm90aCBub2RlcyBhcmUgaW5zaWRlICNkb2N1bWVudFxuXG4gIGlmIChlbGVtZW50MSAhPT0gY29tbW9uQW5jZXN0b3JDb250YWluZXIgJiYgZWxlbWVudDIgIT09IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIHx8IHN0YXJ0LmNvbnRhaW5zKGVuZCkpIHtcbiAgICBpZiAoaXNPZmZzZXRDb250YWluZXIoY29tbW9uQW5jZXN0b3JDb250YWluZXIpKSB7XG4gICAgICByZXR1cm4gY29tbW9uQW5jZXN0b3JDb250YWluZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdldE9mZnNldFBhcmVudChjb21tb25BbmNlc3RvckNvbnRhaW5lcik7XG4gIH1cblxuICAvLyBvbmUgb2YgdGhlIG5vZGVzIGlzIGluc2lkZSBzaGFkb3dET00sIGZpbmQgd2hpY2ggb25lXG4gIHZhciBlbGVtZW50MXJvb3QgPSBnZXRSb290KGVsZW1lbnQxKTtcbiAgaWYgKGVsZW1lbnQxcm9vdC5ob3N0KSB7XG4gICAgcmV0dXJuIGZpbmRDb21tb25PZmZzZXRQYXJlbnQoZWxlbWVudDFyb290Lmhvc3QsIGVsZW1lbnQyKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmluZENvbW1vbk9mZnNldFBhcmVudChlbGVtZW50MSwgZ2V0Um9vdChlbGVtZW50MikuaG9zdCk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBzY3JvbGwgdmFsdWUgb2YgdGhlIGdpdmVuIGVsZW1lbnQgaW4gdGhlIGdpdmVuIHNpZGUgKHRvcCBhbmQgbGVmdClcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQGFyZ3VtZW50IHtTdHJpbmd9IHNpZGUgYHRvcGAgb3IgYGxlZnRgXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbW91bnQgb2Ygc2Nyb2xsZWQgcGl4ZWxzXG4gKi9cbmZ1bmN0aW9uIGdldFNjcm9sbChlbGVtZW50KSB7XG4gIHZhciBzaWRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAndG9wJztcblxuICB2YXIgdXBwZXJTaWRlID0gc2lkZSA9PT0gJ3RvcCcgPyAnc2Nyb2xsVG9wJyA6ICdzY3JvbGxMZWZ0JztcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdCT0RZJyB8fCBub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgdmFyIGh0bWwgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIHZhciBzY3JvbGxpbmdFbGVtZW50ID0gZWxlbWVudC5vd25lckRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQgfHwgaHRtbDtcbiAgICByZXR1cm4gc2Nyb2xsaW5nRWxlbWVudFt1cHBlclNpZGVdO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRbdXBwZXJTaWRlXTtcbn1cblxuLypcbiAqIFN1bSBvciBzdWJ0cmFjdCB0aGUgZWxlbWVudCBzY3JvbGwgdmFsdWVzIChsZWZ0IGFuZCB0b3ApIGZyb20gYSBnaXZlbiByZWN0IG9iamVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHJlY3QgLSBSZWN0IG9iamVjdCB5b3Ugd2FudCB0byBjaGFuZ2VcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgZWxlbWVudCBmcm9tIHRoZSBmdW5jdGlvbiByZWFkcyB0aGUgc2Nyb2xsIHZhbHVlc1xuICogQHBhcmFtIHtCb29sZWFufSBzdWJ0cmFjdCAtIHNldCB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHN1YnRyYWN0IHRoZSBzY3JvbGwgdmFsdWVzXG4gKiBAcmV0dXJuIHtPYmplY3R9IHJlY3QgLSBUaGUgbW9kaWZpZXIgcmVjdCBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaW5jbHVkZVNjcm9sbChyZWN0LCBlbGVtZW50KSB7XG4gIHZhciBzdWJ0cmFjdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgdmFyIHNjcm9sbFRvcCA9IGdldFNjcm9sbChlbGVtZW50LCAndG9wJyk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gZ2V0U2Nyb2xsKGVsZW1lbnQsICdsZWZ0Jyk7XG4gIHZhciBtb2RpZmllciA9IHN1YnRyYWN0ID8gLTEgOiAxO1xuICByZWN0LnRvcCArPSBzY3JvbGxUb3AgKiBtb2RpZmllcjtcbiAgcmVjdC5ib3R0b20gKz0gc2Nyb2xsVG9wICogbW9kaWZpZXI7XG4gIHJlY3QubGVmdCArPSBzY3JvbGxMZWZ0ICogbW9kaWZpZXI7XG4gIHJlY3QucmlnaHQgKz0gc2Nyb2xsTGVmdCAqIG1vZGlmaWVyO1xuICByZXR1cm4gcmVjdDtcbn1cblxuLypcbiAqIEhlbHBlciB0byBkZXRlY3QgYm9yZGVycyBvZiBhIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7Q1NTU3R5bGVEZWNsYXJhdGlvbn0gc3R5bGVzXG4gKiBSZXN1bHQgb2YgYGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eWAgb24gdGhlIGdpdmVuIGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBheGlzIC0gYHhgIG9yIGB5YFxuICogQHJldHVybiB7bnVtYmVyfSBib3JkZXJzIC0gVGhlIGJvcmRlcnMgc2l6ZSBvZiB0aGUgZ2l2ZW4gYXhpc1xuICovXG5cbmZ1bmN0aW9uIGdldEJvcmRlcnNTaXplKHN0eWxlcywgYXhpcykge1xuICB2YXIgc2lkZUEgPSBheGlzID09PSAneCcgPyAnTGVmdCcgOiAnVG9wJztcbiAgdmFyIHNpZGVCID0gc2lkZUEgPT09ICdMZWZ0JyA/ICdSaWdodCcgOiAnQm90dG9tJztcblxuICByZXR1cm4gcGFyc2VGbG9hdChzdHlsZXNbJ2JvcmRlcicgKyBzaWRlQSArICdXaWR0aCddLCAxMCkgKyBwYXJzZUZsb2F0KHN0eWxlc1snYm9yZGVyJyArIHNpZGVCICsgJ1dpZHRoJ10sIDEwKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2l6ZShheGlzLCBib2R5LCBodG1sLCBjb21wdXRlZFN0eWxlKSB7XG4gIHJldHVybiBNYXRoLm1heChib2R5WydvZmZzZXQnICsgYXhpc10sIGJvZHlbJ3Njcm9sbCcgKyBheGlzXSwgaHRtbFsnY2xpZW50JyArIGF4aXNdLCBodG1sWydvZmZzZXQnICsgYXhpc10sIGh0bWxbJ3Njcm9sbCcgKyBheGlzXSwgaXNJRSgxMCkgPyBodG1sWydvZmZzZXQnICsgYXhpc10gKyBjb21wdXRlZFN0eWxlWydtYXJnaW4nICsgKGF4aXMgPT09ICdIZWlnaHQnID8gJ1RvcCcgOiAnTGVmdCcpXSArIGNvbXB1dGVkU3R5bGVbJ21hcmdpbicgKyAoYXhpcyA9PT0gJ0hlaWdodCcgPyAnQm90dG9tJyA6ICdSaWdodCcpXSA6IDApO1xufVxuXG5mdW5jdGlvbiBnZXRXaW5kb3dTaXplcygpIHtcbiAgdmFyIGJvZHkgPSBkb2N1bWVudC5ib2R5O1xuICB2YXIgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgdmFyIGNvbXB1dGVkU3R5bGUgPSBpc0lFKDEwKSAmJiBnZXRDb21wdXRlZFN0eWxlKGh0bWwpO1xuXG4gIHJldHVybiB7XG4gICAgaGVpZ2h0OiBnZXRTaXplKCdIZWlnaHQnLCBib2R5LCBodG1sLCBjb21wdXRlZFN0eWxlKSxcbiAgICB3aWR0aDogZ2V0U2l6ZSgnV2lkdGgnLCBib2R5LCBodG1sLCBjb21wdXRlZFN0eWxlKVxuICB9O1xufVxuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cblxuXG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKGtleSBpbiBvYmopIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbi8qKlxuICogR2l2ZW4gZWxlbWVudCBvZmZzZXRzLCBnZW5lcmF0ZSBhbiBvdXRwdXQgc2ltaWxhciB0byBnZXRCb3VuZGluZ0NsaWVudFJlY3RcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvZmZzZXRzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBDbGllbnRSZWN0IGxpa2Ugb3V0cHV0XG4gKi9cbmZ1bmN0aW9uIGdldENsaWVudFJlY3Qob2Zmc2V0cykge1xuICByZXR1cm4gX2V4dGVuZHMoe30sIG9mZnNldHMsIHtcbiAgICByaWdodDogb2Zmc2V0cy5sZWZ0ICsgb2Zmc2V0cy53aWR0aCxcbiAgICBib3R0b206IG9mZnNldHMudG9wICsgb2Zmc2V0cy5oZWlnaHRcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IGJvdW5kaW5nIGNsaWVudCByZWN0IG9mIGdpdmVuIGVsZW1lbnRcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge09iamVjdH0gY2xpZW50IHJlY3RcbiAqL1xuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSB7fTtcblxuICAvLyBJRTEwIDEwIEZJWDogUGxlYXNlLCBkb24ndCBhc2ssIHRoZSBlbGVtZW50IGlzbid0XG4gIC8vIGNvbnNpZGVyZWQgaW4gRE9NIGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4uLlxuICAvLyBUaGlzIGlzbid0IHJlcHJvZHVjaWJsZSBpbiBJRTEwIGNvbXBhdGliaWxpdHkgbW9kZSBvZiBJRTExXG4gIHRyeSB7XG4gICAgaWYgKGlzSUUoMTApKSB7XG4gICAgICByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHZhciBzY3JvbGxUb3AgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ3RvcCcpO1xuICAgICAgdmFyIHNjcm9sbExlZnQgPSBnZXRTY3JvbGwoZWxlbWVudCwgJ2xlZnQnKTtcbiAgICAgIHJlY3QudG9wICs9IHNjcm9sbFRvcDtcbiAgICAgIHJlY3QubGVmdCArPSBzY3JvbGxMZWZ0O1xuICAgICAgcmVjdC5ib3R0b20gKz0gc2Nyb2xsVG9wO1xuICAgICAgcmVjdC5yaWdodCArPSBzY3JvbGxMZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgdmFyIHJlc3VsdCA9IHtcbiAgICBsZWZ0OiByZWN0LmxlZnQsXG4gICAgdG9wOiByZWN0LnRvcCxcbiAgICB3aWR0aDogcmVjdC5yaWdodCAtIHJlY3QubGVmdCxcbiAgICBoZWlnaHQ6IHJlY3QuYm90dG9tIC0gcmVjdC50b3BcbiAgfTtcblxuICAvLyBzdWJ0cmFjdCBzY3JvbGxiYXIgc2l6ZSBmcm9tIHNpemVzXG4gIHZhciBzaXplcyA9IGVsZW1lbnQubm9kZU5hbWUgPT09ICdIVE1MJyA/IGdldFdpbmRvd1NpemVzKCkgOiB7fTtcbiAgdmFyIHdpZHRoID0gc2l6ZXMud2lkdGggfHwgZWxlbWVudC5jbGllbnRXaWR0aCB8fCByZXN1bHQucmlnaHQgLSByZXN1bHQubGVmdDtcbiAgdmFyIGhlaWdodCA9IHNpemVzLmhlaWdodCB8fCBlbGVtZW50LmNsaWVudEhlaWdodCB8fCByZXN1bHQuYm90dG9tIC0gcmVzdWx0LnRvcDtcblxuICB2YXIgaG9yaXpTY3JvbGxiYXIgPSBlbGVtZW50Lm9mZnNldFdpZHRoIC0gd2lkdGg7XG4gIHZhciB2ZXJ0U2Nyb2xsYmFyID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgLSBoZWlnaHQ7XG5cbiAgLy8gaWYgYW4gaHlwb3RoZXRpY2FsIHNjcm9sbGJhciBpcyBkZXRlY3RlZCwgd2UgbXVzdCBiZSBzdXJlIGl0J3Mgbm90IGEgYGJvcmRlcmBcbiAgLy8gd2UgbWFrZSB0aGlzIGNoZWNrIGNvbmRpdGlvbmFsIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gIGlmIChob3JpelNjcm9sbGJhciB8fCB2ZXJ0U2Nyb2xsYmFyKSB7XG4gICAgdmFyIHN0eWxlcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShlbGVtZW50KTtcbiAgICBob3JpelNjcm9sbGJhciAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd4Jyk7XG4gICAgdmVydFNjcm9sbGJhciAtPSBnZXRCb3JkZXJzU2l6ZShzdHlsZXMsICd5Jyk7XG5cbiAgICByZXN1bHQud2lkdGggLT0gaG9yaXpTY3JvbGxiYXI7XG4gICAgcmVzdWx0LmhlaWdodCAtPSB2ZXJ0U2Nyb2xsYmFyO1xuICB9XG5cbiAgcmV0dXJuIGdldENsaWVudFJlY3QocmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKGNoaWxkcmVuLCBwYXJlbnQpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuXG4gIHZhciBpc0lFMTAgPSBpc0lFKDEwKTtcbiAgdmFyIGlzSFRNTCA9IHBhcmVudC5ub2RlTmFtZSA9PT0gJ0hUTUwnO1xuICB2YXIgY2hpbGRyZW5SZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGNoaWxkcmVuKTtcbiAgdmFyIHBhcmVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocGFyZW50KTtcbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChjaGlsZHJlbik7XG5cbiAgdmFyIHN0eWxlcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQpO1xuICB2YXIgYm9yZGVyVG9wV2lkdGggPSBwYXJzZUZsb2F0KHN0eWxlcy5ib3JkZXJUb3BXaWR0aCwgMTApO1xuICB2YXIgYm9yZGVyTGVmdFdpZHRoID0gcGFyc2VGbG9hdChzdHlsZXMuYm9yZGVyTGVmdFdpZHRoLCAxMCk7XG5cbiAgLy8gSW4gY2FzZXMgd2hlcmUgdGhlIHBhcmVudCBpcyBmaXhlZCwgd2UgbXVzdCBpZ25vcmUgbmVnYXRpdmUgc2Nyb2xsIGluIG9mZnNldCBjYWxjXG4gIGlmIChmaXhlZFBvc2l0aW9uICYmIHBhcmVudC5ub2RlTmFtZSA9PT0gJ0hUTUwnKSB7XG4gICAgcGFyZW50UmVjdC50b3AgPSBNYXRoLm1heChwYXJlbnRSZWN0LnRvcCwgMCk7XG4gICAgcGFyZW50UmVjdC5sZWZ0ID0gTWF0aC5tYXgocGFyZW50UmVjdC5sZWZ0LCAwKTtcbiAgfVxuICB2YXIgb2Zmc2V0cyA9IGdldENsaWVudFJlY3Qoe1xuICAgIHRvcDogY2hpbGRyZW5SZWN0LnRvcCAtIHBhcmVudFJlY3QudG9wIC0gYm9yZGVyVG9wV2lkdGgsXG4gICAgbGVmdDogY2hpbGRyZW5SZWN0LmxlZnQgLSBwYXJlbnRSZWN0LmxlZnQgLSBib3JkZXJMZWZ0V2lkdGgsXG4gICAgd2lkdGg6IGNoaWxkcmVuUmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IGNoaWxkcmVuUmVjdC5oZWlnaHRcbiAgfSk7XG4gIG9mZnNldHMubWFyZ2luVG9wID0gMDtcbiAgb2Zmc2V0cy5tYXJnaW5MZWZ0ID0gMDtcblxuICAvLyBTdWJ0cmFjdCBtYXJnaW5zIG9mIGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGl0J3MgYmVpbmcgdXNlZCBhcyBwYXJlbnRcbiAgLy8gd2UgZG8gdGhpcyBvbmx5IG9uIEhUTUwgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IGVsZW1lbnQgdGhhdCBiZWhhdmVzXG4gIC8vIGRpZmZlcmVudGx5IHdoZW4gbWFyZ2lucyBhcmUgYXBwbGllZCB0byBpdC4gVGhlIG1hcmdpbnMgYXJlIGluY2x1ZGVkIGluXG4gIC8vIHRoZSBib3ggb2YgdGhlIGRvY3VtZW50RWxlbWVudCwgaW4gdGhlIG90aGVyIGNhc2VzIG5vdC5cbiAgaWYgKCFpc0lFMTAgJiYgaXNIVE1MKSB7XG4gICAgdmFyIG1hcmdpblRvcCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCwgMTApO1xuICAgIHZhciBtYXJnaW5MZWZ0ID0gcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luTGVmdCwgMTApO1xuXG4gICAgb2Zmc2V0cy50b3AgLT0gYm9yZGVyVG9wV2lkdGggLSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5ib3R0b20gLT0gYm9yZGVyVG9wV2lkdGggLSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5sZWZ0IC09IGJvcmRlckxlZnRXaWR0aCAtIG1hcmdpbkxlZnQ7XG4gICAgb2Zmc2V0cy5yaWdodCAtPSBib3JkZXJMZWZ0V2lkdGggLSBtYXJnaW5MZWZ0O1xuXG4gICAgLy8gQXR0YWNoIG1hcmdpblRvcCBhbmQgbWFyZ2luTGVmdCBiZWNhdXNlIGluIHNvbWUgY2lyY3Vtc3RhbmNlcyB3ZSBtYXkgbmVlZCB0aGVtXG4gICAgb2Zmc2V0cy5tYXJnaW5Ub3AgPSBtYXJnaW5Ub3A7XG4gICAgb2Zmc2V0cy5tYXJnaW5MZWZ0ID0gbWFyZ2luTGVmdDtcbiAgfVxuXG4gIGlmIChpc0lFMTAgJiYgIWZpeGVkUG9zaXRpb24gPyBwYXJlbnQuY29udGFpbnMoc2Nyb2xsUGFyZW50KSA6IHBhcmVudCA9PT0gc2Nyb2xsUGFyZW50ICYmIHNjcm9sbFBhcmVudC5ub2RlTmFtZSAhPT0gJ0JPRFknKSB7XG4gICAgb2Zmc2V0cyA9IGluY2x1ZGVTY3JvbGwob2Zmc2V0cywgcGFyZW50KTtcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufVxuXG5mdW5jdGlvbiBnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUoZWxlbWVudCkge1xuICB2YXIgZXhjbHVkZVNjcm9sbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG5cbiAgdmFyIGh0bWwgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICB2YXIgcmVsYXRpdmVPZmZzZXQgPSBnZXRPZmZzZXRSZWN0UmVsYXRpdmVUb0FyYml0cmFyeU5vZGUoZWxlbWVudCwgaHRtbCk7XG4gIHZhciB3aWR0aCA9IE1hdGgubWF4KGh0bWwuY2xpZW50V2lkdGgsIHdpbmRvdy5pbm5lcldpZHRoIHx8IDApO1xuICB2YXIgaGVpZ2h0ID0gTWF0aC5tYXgoaHRtbC5jbGllbnRIZWlnaHQsIHdpbmRvdy5pbm5lckhlaWdodCB8fCAwKTtcblxuICB2YXIgc2Nyb2xsVG9wID0gIWV4Y2x1ZGVTY3JvbGwgPyBnZXRTY3JvbGwoaHRtbCkgOiAwO1xuICB2YXIgc2Nyb2xsTGVmdCA9ICFleGNsdWRlU2Nyb2xsID8gZ2V0U2Nyb2xsKGh0bWwsICdsZWZ0JykgOiAwO1xuXG4gIHZhciBvZmZzZXQgPSB7XG4gICAgdG9wOiBzY3JvbGxUb3AgLSByZWxhdGl2ZU9mZnNldC50b3AgKyByZWxhdGl2ZU9mZnNldC5tYXJnaW5Ub3AsXG4gICAgbGVmdDogc2Nyb2xsTGVmdCAtIHJlbGF0aXZlT2Zmc2V0LmxlZnQgKyByZWxhdGl2ZU9mZnNldC5tYXJnaW5MZWZ0LFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xuXG4gIHJldHVybiBnZXRDbGllbnRSZWN0KG9mZnNldCk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIGdpdmVuIGVsZW1lbnQgaXMgZml4ZWQgb3IgaXMgaW5zaWRlIGEgZml4ZWQgcGFyZW50XG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gY3VzdG9tQ29udGFpbmVyXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gYW5zd2VyIHRvIFwiaXNGaXhlZD9cIlxuICovXG5mdW5jdGlvbiBpc0ZpeGVkKGVsZW1lbnQpIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbWVudC5ub2RlTmFtZTtcbiAgaWYgKG5vZGVOYW1lID09PSAnQk9EWScgfHwgbm9kZU5hbWUgPT09ICdIVE1MJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoZ2V0U3R5bGVDb21wdXRlZFByb3BlcnR5KGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHBhcmVudCBvZiBhbiBlbGVtZW50IHRoYXQgaGFzIGEgdHJhbnNmb3JtZWQgcHJvcGVydHkgZGVmaW5lZFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RWxlbWVudH0gZmlyc3QgdHJhbnNmb3JtZWQgcGFyZW50IG9yIGRvY3VtZW50RWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGdldEZpeGVkUG9zaXRpb25PZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICAvLyBUaGlzIGNoZWNrIGlzIG5lZWRlZCB0byBhdm9pZCBlcnJvcnMgaW4gY2FzZSBvbmUgb2YgdGhlIGVsZW1lbnRzIGlzbid0IGRlZmluZWQgZm9yIGFueSByZWFzb25cbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LnBhcmVudEVsZW1lbnQgfHwgaXNJRSgpKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgfVxuICB2YXIgZWwgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIHdoaWxlIChlbCAmJiBnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkoZWwsICd0cmFuc2Zvcm0nKSA9PT0gJ25vbmUnKSB7XG4gICAgZWwgPSBlbC5wYXJlbnRFbGVtZW50O1xuICB9XG4gIHJldHVybiBlbCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG59XG5cbi8qKlxuICogQ29tcHV0ZWQgdGhlIGJvdW5kYXJpZXMgbGltaXRzIGFuZCByZXR1cm4gdGhlbVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcG9wcGVyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSByZWZlcmVuY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWRkaW5nXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBib3VuZGFyaWVzRWxlbWVudCAtIEVsZW1lbnQgdXNlZCB0byBkZWZpbmUgdGhlIGJvdW5kYXJpZXNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZml4ZWRQb3NpdGlvbiAtIElzIGluIGZpeGVkIHBvc2l0aW9uIG1vZGVcbiAqIEByZXR1cm5zIHtPYmplY3R9IENvb3JkaW5hdGVzIG9mIHRoZSBib3VuZGFyaWVzXG4gKi9cbmZ1bmN0aW9uIGdldEJvdW5kYXJpZXMocG9wcGVyLCByZWZlcmVuY2UsIHBhZGRpbmcsIGJvdW5kYXJpZXNFbGVtZW50KSB7XG4gIHZhciBmaXhlZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiBmYWxzZTtcblxuICAvLyBOT1RFOiAxIERPTSBhY2Nlc3MgaGVyZVxuXG4gIHZhciBib3VuZGFyaWVzID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGZpeGVkUG9zaXRpb24gPyBnZXRGaXhlZFBvc2l0aW9uT2Zmc2V0UGFyZW50KHBvcHBlcikgOiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KHBvcHBlciwgcmVmZXJlbmNlKTtcblxuICAvLyBIYW5kbGUgdmlld3BvcnQgY2FzZVxuICBpZiAoYm91bmRhcmllc0VsZW1lbnQgPT09ICd2aWV3cG9ydCcpIHtcbiAgICBib3VuZGFyaWVzID0gZ2V0Vmlld3BvcnRPZmZzZXRSZWN0UmVsYXRpdmVUb0FydGJpdHJhcnlOb2RlKG9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgLy8gSGFuZGxlIG90aGVyIGNhc2VzIGJhc2VkIG9uIERPTSBlbGVtZW50IHVzZWQgYXMgYm91bmRhcmllc1xuICAgIHZhciBib3VuZGFyaWVzTm9kZSA9IHZvaWQgMDtcbiAgICBpZiAoYm91bmRhcmllc0VsZW1lbnQgPT09ICdzY3JvbGxQYXJlbnQnKSB7XG4gICAgICBib3VuZGFyaWVzTm9kZSA9IGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKHJlZmVyZW5jZSkpO1xuICAgICAgaWYgKGJvdW5kYXJpZXNOb2RlLm5vZGVOYW1lID09PSAnQk9EWScpIHtcbiAgICAgICAgYm91bmRhcmllc05vZGUgPSBwb3BwZXIub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChib3VuZGFyaWVzRWxlbWVudCA9PT0gJ3dpbmRvdycpIHtcbiAgICAgIGJvdW5kYXJpZXNOb2RlID0gcG9wcGVyLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBib3VuZGFyaWVzTm9kZSA9IGJvdW5kYXJpZXNFbGVtZW50O1xuICAgIH1cblxuICAgIHZhciBvZmZzZXRzID0gZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlKGJvdW5kYXJpZXNOb2RlLCBvZmZzZXRQYXJlbnQsIGZpeGVkUG9zaXRpb24pO1xuXG4gICAgLy8gSW4gY2FzZSBvZiBIVE1MLCB3ZSBuZWVkIGEgZGlmZmVyZW50IGNvbXB1dGF0aW9uXG4gICAgaWYgKGJvdW5kYXJpZXNOb2RlLm5vZGVOYW1lID09PSAnSFRNTCcgJiYgIWlzRml4ZWQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgdmFyIF9nZXRXaW5kb3dTaXplcyA9IGdldFdpbmRvd1NpemVzKCksXG4gICAgICAgICAgaGVpZ2h0ID0gX2dldFdpbmRvd1NpemVzLmhlaWdodCxcbiAgICAgICAgICB3aWR0aCA9IF9nZXRXaW5kb3dTaXplcy53aWR0aDtcblxuICAgICAgYm91bmRhcmllcy50b3AgKz0gb2Zmc2V0cy50b3AgLSBvZmZzZXRzLm1hcmdpblRvcDtcbiAgICAgIGJvdW5kYXJpZXMuYm90dG9tID0gaGVpZ2h0ICsgb2Zmc2V0cy50b3A7XG4gICAgICBib3VuZGFyaWVzLmxlZnQgKz0gb2Zmc2V0cy5sZWZ0IC0gb2Zmc2V0cy5tYXJnaW5MZWZ0O1xuICAgICAgYm91bmRhcmllcy5yaWdodCA9IHdpZHRoICsgb2Zmc2V0cy5sZWZ0O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3IgYWxsIHRoZSBvdGhlciBET00gZWxlbWVudHMsIHRoaXMgb25lIGlzIGdvb2RcbiAgICAgIGJvdW5kYXJpZXMgPSBvZmZzZXRzO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBwYWRkaW5nc1xuICBib3VuZGFyaWVzLmxlZnQgKz0gcGFkZGluZztcbiAgYm91bmRhcmllcy50b3AgKz0gcGFkZGluZztcbiAgYm91bmRhcmllcy5yaWdodCAtPSBwYWRkaW5nO1xuICBib3VuZGFyaWVzLmJvdHRvbSAtPSBwYWRkaW5nO1xuXG4gIHJldHVybiBib3VuZGFyaWVzO1xufVxuXG5mdW5jdGlvbiBnZXRBcmVhKF9yZWYpIHtcbiAgdmFyIHdpZHRoID0gX3JlZi53aWR0aCxcbiAgICAgIGhlaWdodCA9IF9yZWYuaGVpZ2h0O1xuXG4gIHJldHVybiB3aWR0aCAqIGhlaWdodDtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHVzZWQgdG8gdHJhbnNmb3JtIHRoZSBgYXV0b2AgcGxhY2VtZW50IHRvIHRoZSBwbGFjZW1lbnQgd2l0aCBtb3JlXG4gKiBhdmFpbGFibGUgc3BhY2UuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChwbGFjZW1lbnQsIHJlZlJlY3QsIHBvcHBlciwgcmVmZXJlbmNlLCBib3VuZGFyaWVzRWxlbWVudCkge1xuICB2YXIgcGFkZGluZyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ICYmIGFyZ3VtZW50c1s1XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzVdIDogMDtcblxuICBpZiAocGxhY2VtZW50LmluZGV4T2YoJ2F1dG8nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gcGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKHBvcHBlciwgcmVmZXJlbmNlLCBwYWRkaW5nLCBib3VuZGFyaWVzRWxlbWVudCk7XG5cbiAgdmFyIHJlY3RzID0ge1xuICAgIHRvcDoge1xuICAgICAgd2lkdGg6IGJvdW5kYXJpZXMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHJlZlJlY3QudG9wIC0gYm91bmRhcmllcy50b3BcbiAgICB9LFxuICAgIHJpZ2h0OiB7XG4gICAgICB3aWR0aDogYm91bmRhcmllcy5yaWdodCAtIHJlZlJlY3QucmlnaHQsXG4gICAgICBoZWlnaHQ6IGJvdW5kYXJpZXMuaGVpZ2h0XG4gICAgfSxcbiAgICBib3R0b206IHtcbiAgICAgIHdpZHRoOiBib3VuZGFyaWVzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBib3VuZGFyaWVzLmJvdHRvbSAtIHJlZlJlY3QuYm90dG9tXG4gICAgfSxcbiAgICBsZWZ0OiB7XG4gICAgICB3aWR0aDogcmVmUmVjdC5sZWZ0IC0gYm91bmRhcmllcy5sZWZ0LFxuICAgICAgaGVpZ2h0OiBib3VuZGFyaWVzLmhlaWdodFxuICAgIH1cbiAgfTtcblxuICB2YXIgc29ydGVkQXJlYXMgPSBPYmplY3Qua2V5cyhyZWN0cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAga2V5OiBrZXlcbiAgICB9LCByZWN0c1trZXldLCB7XG4gICAgICBhcmVhOiBnZXRBcmVhKHJlY3RzW2tleV0pXG4gICAgfSk7XG4gIH0pLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYi5hcmVhIC0gYS5hcmVhO1xuICB9KTtcblxuICB2YXIgZmlsdGVyZWRBcmVhcyA9IHNvcnRlZEFyZWFzLmZpbHRlcihmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICB2YXIgd2lkdGggPSBfcmVmMi53aWR0aCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0O1xuICAgIHJldHVybiB3aWR0aCA+PSBwb3BwZXIuY2xpZW50V2lkdGggJiYgaGVpZ2h0ID49IHBvcHBlci5jbGllbnRIZWlnaHQ7XG4gIH0pO1xuXG4gIHZhciBjb21wdXRlZFBsYWNlbWVudCA9IGZpbHRlcmVkQXJlYXMubGVuZ3RoID4gMCA/IGZpbHRlcmVkQXJlYXNbMF0ua2V5IDogc29ydGVkQXJlYXNbMF0ua2V5O1xuXG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcblxuICByZXR1cm4gY29tcHV0ZWRQbGFjZW1lbnQgKyAodmFyaWF0aW9uID8gJy0nICsgdmFyaWF0aW9uIDogJycpO1xufVxuXG4vKipcbiAqIEdldCBvZmZzZXRzIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHBvcHBlciAtIHRoZSBwb3BwZXIgZWxlbWVudFxuICogQHBhcmFtIHtFbGVtZW50fSByZWZlcmVuY2UgLSB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgKHRoZSBwb3BwZXIgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGlzKVxuICogQHBhcmFtIHtFbGVtZW50fSBmaXhlZFBvc2l0aW9uIC0gaXMgaW4gZml4ZWQgcG9zaXRpb24gbW9kZVxuICogQHJldHVybnMge09iamVjdH0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9mZnNldHMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXJcbiAqL1xuZnVuY3Rpb24gZ2V0UmVmZXJlbmNlT2Zmc2V0cyhzdGF0ZSwgcG9wcGVyLCByZWZlcmVuY2UpIHtcbiAgdmFyIGZpeGVkUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG5cbiAgdmFyIGNvbW1vbk9mZnNldFBhcmVudCA9IGZpeGVkUG9zaXRpb24gPyBnZXRGaXhlZFBvc2l0aW9uT2Zmc2V0UGFyZW50KHBvcHBlcikgOiBmaW5kQ29tbW9uT2Zmc2V0UGFyZW50KHBvcHBlciwgcmVmZXJlbmNlKTtcbiAgcmV0dXJuIGdldE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJiaXRyYXJ5Tm9kZShyZWZlcmVuY2UsIGNvbW1vbk9mZnNldFBhcmVudCwgZml4ZWRQb3NpdGlvbik7XG59XG5cbi8qKlxuICogR2V0IHRoZSBvdXRlciBzaXplcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCAob2Zmc2V0IHNpemUgKyBtYXJnaW5zKVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3QgY29udGFpbmluZyB3aWR0aCBhbmQgaGVpZ2h0IHByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gZ2V0T3V0ZXJTaXplcyhlbGVtZW50KSB7XG4gIHZhciBzdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICB2YXIgeCA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpblRvcCkgKyBwYXJzZUZsb2F0KHN0eWxlcy5tYXJnaW5Cb3R0b20pO1xuICB2YXIgeSA9IHBhcnNlRmxvYXQoc3R5bGVzLm1hcmdpbkxlZnQpICsgcGFyc2VGbG9hdChzdHlsZXMubWFyZ2luUmlnaHQpO1xuICB2YXIgcmVzdWx0ID0ge1xuICAgIHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoICsgeSxcbiAgICBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgeFxuICB9O1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IG9mIHRoZSBnaXZlbiBvbmVcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBwbGFjZW1lbnRcbiAqIEByZXR1cm5zIHtTdHJpbmd9IGZsaXBwZWQgcGxhY2VtZW50XG4gKi9cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICB2YXIgaGFzaCA9IHsgbGVmdDogJ3JpZ2h0JywgcmlnaHQ6ICdsZWZ0JywgYm90dG9tOiAndG9wJywgdG9wOiAnYm90dG9tJyB9O1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgb2Zmc2V0cyB0byB0aGUgcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcGFyYW0ge09iamVjdH0gcG9zaXRpb24gLSBDU1MgcG9zaXRpb24gdGhlIFBvcHBlciB3aWxsIGdldCBhcHBsaWVkXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBwb3BwZXIgLSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPZmZzZXRzIC0gdGhlIHJlZmVyZW5jZSBvZmZzZXRzICh0aGUgcG9wcGVyIHdpbGwgYmUgcmVsYXRpdmUgdG8gdGhpcylcbiAqIEBwYXJhbSB7U3RyaW5nfSBwbGFjZW1lbnQgLSBvbmUgb2YgdGhlIHZhbGlkIHBsYWNlbWVudCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBwb3BwZXJPZmZzZXRzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9mZnNldHMgd2hpY2ggd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXJcbiAqL1xuZnVuY3Rpb24gZ2V0UG9wcGVyT2Zmc2V0cyhwb3BwZXIsIHJlZmVyZW5jZU9mZnNldHMsIHBsYWNlbWVudCkge1xuICBwbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcblxuICAvLyBHZXQgcG9wcGVyIG5vZGUgc2l6ZXNcbiAgdmFyIHBvcHBlclJlY3QgPSBnZXRPdXRlclNpemVzKHBvcHBlcik7XG5cbiAgLy8gQWRkIHBvc2l0aW9uLCB3aWR0aCBhbmQgaGVpZ2h0IHRvIG91ciBvZmZzZXRzIG9iamVjdFxuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHtcbiAgICB3aWR0aDogcG9wcGVyUmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHBvcHBlclJlY3QuaGVpZ2h0XG4gIH07XG5cbiAgLy8gZGVwZW5kaW5nIGJ5IHRoZSBwb3BwZXIgcGxhY2VtZW50IHdlIGhhdmUgdG8gY29tcHV0ZSBpdHMgb2Zmc2V0cyBzbGlnaHRseSBkaWZmZXJlbnRseVxuICB2YXIgaXNIb3JpeiA9IFsncmlnaHQnLCAnbGVmdCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBtYWluU2lkZSA9IGlzSG9yaXogPyAndG9wJyA6ICdsZWZ0JztcbiAgdmFyIHNlY29uZGFyeVNpZGUgPSBpc0hvcml6ID8gJ2xlZnQnIDogJ3RvcCc7XG4gIHZhciBtZWFzdXJlbWVudCA9IGlzSG9yaXogPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gIHZhciBzZWNvbmRhcnlNZWFzdXJlbWVudCA9ICFpc0hvcml6ID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIHBvcHBlck9mZnNldHNbbWFpblNpZGVdID0gcmVmZXJlbmNlT2Zmc2V0c1ttYWluU2lkZV0gKyByZWZlcmVuY2VPZmZzZXRzW21lYXN1cmVtZW50XSAvIDIgLSBwb3BwZXJSZWN0W21lYXN1cmVtZW50XSAvIDI7XG4gIGlmIChwbGFjZW1lbnQgPT09IHNlY29uZGFyeVNpZGUpIHtcbiAgICBwb3BwZXJPZmZzZXRzW3NlY29uZGFyeVNpZGVdID0gcmVmZXJlbmNlT2Zmc2V0c1tzZWNvbmRhcnlTaWRlXSAtIHBvcHBlclJlY3Rbc2Vjb25kYXJ5TWVhc3VyZW1lbnRdO1xuICB9IGVsc2Uge1xuICAgIHBvcHBlck9mZnNldHNbc2Vjb25kYXJ5U2lkZV0gPSByZWZlcmVuY2VPZmZzZXRzW2dldE9wcG9zaXRlUGxhY2VtZW50KHNlY29uZGFyeVNpZGUpXTtcbiAgfVxuXG4gIHJldHVybiBwb3BwZXJPZmZzZXRzO1xufVxuXG4vKipcbiAqIE1pbWljcyB0aGUgYGZpbmRgIG1ldGhvZCBvZiBBcnJheVxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBcnJheX0gYXJyXG4gKiBAYXJndW1lbnQgcHJvcFxuICogQGFyZ3VtZW50IHZhbHVlXG4gKiBAcmV0dXJucyBpbmRleCBvciAtMVxuICovXG5mdW5jdGlvbiBmaW5kKGFyciwgY2hlY2spIHtcbiAgLy8gdXNlIG5hdGl2ZSBmaW5kIGlmIHN1cHBvcnRlZFxuICBpZiAoQXJyYXkucHJvdG90eXBlLmZpbmQpIHtcbiAgICByZXR1cm4gYXJyLmZpbmQoY2hlY2spO1xuICB9XG5cbiAgLy8gdXNlIGBmaWx0ZXJgIHRvIG9idGFpbiB0aGUgc2FtZSBiZWhhdmlvciBvZiBgZmluZGBcbiAgcmV0dXJuIGFyci5maWx0ZXIoY2hlY2spWzBdO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIG1hdGNoaW5nIG9iamVjdFxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtBcnJheX0gYXJyXG4gKiBAYXJndW1lbnQgcHJvcFxuICogQGFyZ3VtZW50IHZhbHVlXG4gKiBAcmV0dXJucyBpbmRleCBvciAtMVxuICovXG5mdW5jdGlvbiBmaW5kSW5kZXgoYXJyLCBwcm9wLCB2YWx1ZSkge1xuICAvLyB1c2UgbmF0aXZlIGZpbmRJbmRleCBpZiBzdXBwb3J0ZWRcbiAgaWYgKEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgpIHtcbiAgICByZXR1cm4gYXJyLmZpbmRJbmRleChmdW5jdGlvbiAoY3VyKSB7XG4gICAgICByZXR1cm4gY3VyW3Byb3BdID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIHVzZSBgZmluZGAgKyBgaW5kZXhPZmAgaWYgYGZpbmRJbmRleGAgaXNuJ3Qgc3VwcG9ydGVkXG4gIHZhciBtYXRjaCA9IGZpbmQoYXJyLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIG9ialtwcm9wXSA9PT0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gYXJyLmluZGV4T2YobWF0Y2gpO1xufVxuXG4vKipcbiAqIExvb3AgdHJvdWdoIHRoZSBsaXN0IG9mIG1vZGlmaWVycyBhbmQgcnVuIHRoZW0gaW4gb3JkZXIsXG4gKiBlYWNoIG9mIHRoZW0gd2lsbCB0aGVuIGVkaXQgdGhlIGRhdGEgb2JqZWN0LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtkYXRhT2JqZWN0fSBkYXRhXG4gKiBAcGFyYW0ge0FycmF5fSBtb2RpZmllcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBlbmRzIC0gT3B0aW9uYWwgbW9kaWZpZXIgbmFtZSB1c2VkIGFzIHN0b3BwZXJcbiAqIEByZXR1cm5zIHtkYXRhT2JqZWN0fVxuICovXG5mdW5jdGlvbiBydW5Nb2RpZmllcnMobW9kaWZpZXJzLCBkYXRhLCBlbmRzKSB7XG4gIHZhciBtb2RpZmllcnNUb1J1biA9IGVuZHMgPT09IHVuZGVmaW5lZCA/IG1vZGlmaWVycyA6IG1vZGlmaWVycy5zbGljZSgwLCBmaW5kSW5kZXgobW9kaWZpZXJzLCAnbmFtZScsIGVuZHMpKTtcblxuICBtb2RpZmllcnNUb1J1bi5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmIChtb2RpZmllclsnZnVuY3Rpb24nXSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICAgIGNvbnNvbGUud2FybignYG1vZGlmaWVyLmZ1bmN0aW9uYCBpcyBkZXByZWNhdGVkLCB1c2UgYG1vZGlmaWVyLmZuYCEnKTtcbiAgICB9XG4gICAgdmFyIGZuID0gbW9kaWZpZXJbJ2Z1bmN0aW9uJ10gfHwgbW9kaWZpZXIuZm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG4gICAgaWYgKG1vZGlmaWVyLmVuYWJsZWQgJiYgaXNGdW5jdGlvbihmbikpIHtcbiAgICAgIC8vIEFkZCBwcm9wZXJ0aWVzIHRvIG9mZnNldHMgdG8gbWFrZSB0aGVtIGEgY29tcGxldGUgY2xpZW50UmVjdCBvYmplY3RcbiAgICAgIC8vIHdlIGRvIHRoaXMgYmVmb3JlIGVhY2ggbW9kaWZpZXIgdG8gbWFrZSBzdXJlIHRoZSBwcmV2aW91cyBvbmUgZG9lc24ndFxuICAgICAgLy8gbWVzcyB3aXRoIHRoZXNlIHZhbHVlc1xuICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IGdldENsaWVudFJlY3QoZGF0YS5vZmZzZXRzLnBvcHBlcik7XG4gICAgICBkYXRhLm9mZnNldHMucmVmZXJlbmNlID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucmVmZXJlbmNlKTtcblxuICAgICAgZGF0YSA9IGZuKGRhdGEsIG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BwZXIsIGNvbXB1dGluZyB0aGUgbmV3IG9mZnNldHMgYW5kIGFwcGx5aW5nXG4gKiB0aGUgbmV3IHN0eWxlLjxiciAvPlxuICogUHJlZmVyIGBzY2hlZHVsZVVwZGF0ZWAgb3ZlciBgdXBkYXRlYCBiZWNhdXNlIG9mIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgLy8gaWYgcG9wcGVyIGlzIGRlc3Ryb3llZCwgZG9uJ3QgcGVyZm9ybSBhbnkgZnVydGhlciB1cGRhdGVcbiAgaWYgKHRoaXMuc3RhdGUuaXNEZXN0cm95ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZGF0YSA9IHtcbiAgICBpbnN0YW5jZTogdGhpcyxcbiAgICBzdHlsZXM6IHt9LFxuICAgIGFycm93U3R5bGVzOiB7fSxcbiAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICBmbGlwcGVkOiBmYWxzZSxcbiAgICBvZmZzZXRzOiB7fVxuICB9O1xuXG4gIC8vIGNvbXB1dGUgcmVmZXJlbmNlIGVsZW1lbnQgb2Zmc2V0c1xuICBkYXRhLm9mZnNldHMucmVmZXJlbmNlID0gZ2V0UmVmZXJlbmNlT2Zmc2V0cyh0aGlzLnN0YXRlLCB0aGlzLnBvcHBlciwgdGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBjb21wdXRlIGF1dG8gcGxhY2VtZW50LCBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCxcbiAgLy8gbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAvLyBhbmQgcmVmZXIgdG8gb3JpZ2luYWxQbGFjZW1lbnQgdG8ga25vdyB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgZGF0YS5wbGFjZW1lbnQgPSBjb21wdXRlQXV0b1BsYWNlbWVudCh0aGlzLm9wdGlvbnMucGxhY2VtZW50LCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCB0aGlzLnBvcHBlciwgdGhpcy5yZWZlcmVuY2UsIHRoaXMub3B0aW9ucy5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCwgdGhpcy5vcHRpb25zLm1vZGlmaWVycy5mbGlwLnBhZGRpbmcpO1xuXG4gIC8vIHN0b3JlIHRoZSBjb21wdXRlZCBwbGFjZW1lbnQgaW5zaWRlIGBvcmlnaW5hbFBsYWNlbWVudGBcbiAgZGF0YS5vcmlnaW5hbFBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50O1xuXG4gIGRhdGEucG9zaXRpb25GaXhlZCA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkO1xuXG4gIC8vIGNvbXB1dGUgdGhlIHBvcHBlciBvZmZzZXRzXG4gIGRhdGEub2Zmc2V0cy5wb3BwZXIgPSBnZXRQb3BwZXJPZmZzZXRzKHRoaXMucG9wcGVyLCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCk7XG5cbiAgZGF0YS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvbiA9IHRoaXMub3B0aW9ucy5wb3NpdGlvbkZpeGVkID8gJ2ZpeGVkJyA6ICdhYnNvbHV0ZSc7XG5cbiAgLy8gcnVuIHRoZSBtb2RpZmllcnNcbiAgZGF0YSA9IHJ1bk1vZGlmaWVycyh0aGlzLm1vZGlmaWVycywgZGF0YSk7XG5cbiAgLy8gdGhlIGZpcnN0IGB1cGRhdGVgIHdpbGwgY2FsbCBgb25DcmVhdGVgIGNhbGxiYWNrXG4gIC8vIHRoZSBvdGhlciBvbmVzIHdpbGwgY2FsbCBgb25VcGRhdGVgIGNhbGxiYWNrXG4gIGlmICghdGhpcy5zdGF0ZS5pc0NyZWF0ZWQpIHtcbiAgICB0aGlzLnN0YXRlLmlzQ3JlYXRlZCA9IHRydWU7XG4gICAgdGhpcy5vcHRpb25zLm9uQ3JlYXRlKGRhdGEpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMub3B0aW9ucy5vblVwZGF0ZShkYXRhKTtcbiAgfVxufVxuXG4vKipcbiAqIEhlbHBlciB1c2VkIHRvIGtub3cgaWYgdGhlIGdpdmVuIG1vZGlmaWVyIGlzIGVuYWJsZWQuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNNb2RpZmllckVuYWJsZWQobW9kaWZpZXJzLCBtb2RpZmllck5hbWUpIHtcbiAgcmV0dXJuIG1vZGlmaWVycy5zb21lKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgIGVuYWJsZWQgPSBfcmVmLmVuYWJsZWQ7XG4gICAgcmV0dXJuIGVuYWJsZWQgJiYgbmFtZSA9PT0gbW9kaWZpZXJOYW1lO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHByZWZpeGVkIHN1cHBvcnRlZCBwcm9wZXJ0eSBuYW1lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcHJvcGVydHkgKGNhbWVsQ2FzZSlcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHByZWZpeGVkIHByb3BlcnR5IChjYW1lbENhc2Ugb3IgUGFzY2FsQ2FzZSwgZGVwZW5kaW5nIG9uIHRoZSB2ZW5kb3IgcHJlZml4KVxuICovXG5mdW5jdGlvbiBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUocHJvcGVydHkpIHtcbiAgdmFyIHByZWZpeGVzID0gW2ZhbHNlLCAnbXMnLCAnV2Via2l0JywgJ01veicsICdPJ107XG4gIHZhciB1cHBlclByb3AgPSBwcm9wZXJ0eS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHByb3BlcnR5LnNsaWNlKDEpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJlZml4ZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcHJlZml4ID0gcHJlZml4ZXNbaV07XG4gICAgdmFyIHRvQ2hlY2sgPSBwcmVmaXggPyAnJyArIHByZWZpeCArIHVwcGVyUHJvcCA6IHByb3BlcnR5O1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQuYm9keS5zdHlsZVt0b0NoZWNrXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiB0b0NoZWNrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBEZXN0cm95IHRoZSBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xuZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgdGhpcy5zdGF0ZS5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgLy8gdG91Y2ggRE9NIG9ubHkgaWYgYGFwcGx5U3R5bGVgIG1vZGlmaWVyIGlzIGVuYWJsZWRcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKHRoaXMubW9kaWZpZXJzLCAnYXBwbHlTdHlsZScpKSB7XG4gICAgdGhpcy5wb3BwZXIucmVtb3ZlQXR0cmlidXRlKCd4LXBsYWNlbWVudCcpO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnBvc2l0aW9uID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUudG9wID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUubGVmdCA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlLnJpZ2h0ID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUuYm90dG9tID0gJyc7XG4gICAgdGhpcy5wb3BwZXIuc3R5bGUud2lsbENoYW5nZSA9ICcnO1xuICAgIHRoaXMucG9wcGVyLnN0eWxlW2dldFN1cHBvcnRlZFByb3BlcnR5TmFtZSgndHJhbnNmb3JtJyldID0gJyc7XG4gIH1cblxuICB0aGlzLmRpc2FibGVFdmVudExpc3RlbmVycygpO1xuXG4gIC8vIHJlbW92ZSB0aGUgcG9wcGVyIGlmIHVzZXIgZXhwbGljaXR5IGFza2VkIGZvciB0aGUgZGVsZXRpb24gb24gZGVzdHJveVxuICAvLyBkbyBub3QgdXNlIGByZW1vdmVgIGJlY2F1c2UgSUUxMSBkb2Vzbid0IHN1cHBvcnQgaXRcbiAgaWYgKHRoaXMub3B0aW9ucy5yZW1vdmVPbkRlc3Ryb3kpIHtcbiAgICB0aGlzLnBvcHBlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucG9wcGVyKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHdpbmRvdyBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybnMge1dpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KGVsZW1lbnQpIHtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyA6IHdpbmRvdztcbn1cblxuZnVuY3Rpb24gYXR0YWNoVG9TY3JvbGxQYXJlbnRzKHNjcm9sbFBhcmVudCwgZXZlbnQsIGNhbGxiYWNrLCBzY3JvbGxQYXJlbnRzKSB7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQubm9kZU5hbWUgPT09ICdCT0RZJztcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IHNjcm9sbFBhcmVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IDogc2Nyb2xsUGFyZW50O1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIHsgcGFzc2l2ZTogdHJ1ZSB9KTtcblxuICBpZiAoIWlzQm9keSkge1xuICAgIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhnZXRTY3JvbGxQYXJlbnQodGFyZ2V0LnBhcmVudE5vZGUpLCBldmVudCwgY2FsbGJhY2ssIHNjcm9sbFBhcmVudHMpO1xuICB9XG4gIHNjcm9sbFBhcmVudHMucHVzaCh0YXJnZXQpO1xufVxuXG4vKipcbiAqIFNldHVwIG5lZWRlZCBldmVudCBsaXN0ZW5lcnMgdXNlZCB0byB1cGRhdGUgdGhlIHBvcHBlciBwb3NpdGlvblxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0dXBFdmVudExpc3RlbmVycyhyZWZlcmVuY2UsIG9wdGlvbnMsIHN0YXRlLCB1cGRhdGVCb3VuZCkge1xuICAvLyBSZXNpemUgZXZlbnQgbGlzdGVuZXIgb24gd2luZG93XG4gIHN0YXRlLnVwZGF0ZUJvdW5kID0gdXBkYXRlQm91bmQ7XG4gIGdldFdpbmRvdyhyZWZlcmVuY2UpLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN0YXRlLnVwZGF0ZUJvdW5kLCB7IHBhc3NpdmU6IHRydWUgfSk7XG5cbiAgLy8gU2Nyb2xsIGV2ZW50IGxpc3RlbmVyIG9uIHNjcm9sbCBwYXJlbnRzXG4gIHZhciBzY3JvbGxFbGVtZW50ID0gZ2V0U2Nyb2xsUGFyZW50KHJlZmVyZW5jZSk7XG4gIGF0dGFjaFRvU2Nyb2xsUGFyZW50cyhzY3JvbGxFbGVtZW50LCAnc2Nyb2xsJywgc3RhdGUudXBkYXRlQm91bmQsIHN0YXRlLnNjcm9sbFBhcmVudHMpO1xuICBzdGF0ZS5zY3JvbGxFbGVtZW50ID0gc2Nyb2xsRWxlbWVudDtcbiAgc3RhdGUuZXZlbnRzRW5hYmxlZCA9IHRydWU7XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG4vKipcbiAqIEl0IHdpbGwgYWRkIHJlc2l6ZS9zY3JvbGwgZXZlbnRzIGFuZCBzdGFydCByZWNhbGN1bGF0aW5nXG4gKiBwb3NpdGlvbiBvZiB0aGUgcG9wcGVyIGVsZW1lbnQgd2hlbiB0aGV5IGFyZSB0cmlnZ2VyZWQuXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbmZ1bmN0aW9uIGVuYWJsZUV2ZW50TGlzdGVuZXJzKCkge1xuICBpZiAoIXRoaXMuc3RhdGUuZXZlbnRzRW5hYmxlZCkge1xuICAgIHRoaXMuc3RhdGUgPSBzZXR1cEV2ZW50TGlzdGVuZXJzKHRoaXMucmVmZXJlbmNlLCB0aGlzLm9wdGlvbnMsIHRoaXMuc3RhdGUsIHRoaXMuc2NoZWR1bGVVcGRhdGUpO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlIGV2ZW50IGxpc3RlbmVycyB1c2VkIHRvIHVwZGF0ZSB0aGUgcG9wcGVyIHBvc2l0aW9uXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycyhyZWZlcmVuY2UsIHN0YXRlKSB7XG4gIC8vIFJlbW92ZSByZXNpemUgZXZlbnQgbGlzdGVuZXIgb24gd2luZG93XG4gIGdldFdpbmRvdyhyZWZlcmVuY2UpLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcblxuICAvLyBSZW1vdmUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyIG9uIHNjcm9sbCBwYXJlbnRzXG4gIHN0YXRlLnNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHN0YXRlLnVwZGF0ZUJvdW5kKTtcbiAgfSk7XG5cbiAgLy8gUmVzZXQgc3RhdGVcbiAgc3RhdGUudXBkYXRlQm91bmQgPSBudWxsO1xuICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0gW107XG4gIHN0YXRlLnNjcm9sbEVsZW1lbnQgPSBudWxsO1xuICBzdGF0ZS5ldmVudHNFbmFibGVkID0gZmFsc2U7XG4gIHJldHVybiBzdGF0ZTtcbn1cblxuLyoqXG4gKiBJdCB3aWxsIHJlbW92ZSByZXNpemUvc2Nyb2xsIGV2ZW50cyBhbmQgd29uJ3QgcmVjYWxjdWxhdGUgcG9wcGVyIHBvc2l0aW9uXG4gKiB3aGVuIHRoZXkgYXJlIHRyaWdnZXJlZC4gSXQgYWxzbyB3b24ndCB0cmlnZ2VyIG9uVXBkYXRlIGNhbGxiYWNrIGFueW1vcmUsXG4gKiB1bmxlc3MgeW91IGNhbGwgYHVwZGF0ZWAgbWV0aG9kIG1hbnVhbGx5LlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlclxuICovXG5mdW5jdGlvbiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICh0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQpIHtcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnNjaGVkdWxlVXBkYXRlKTtcbiAgICB0aGlzLnN0YXRlID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5yZWZlcmVuY2UsIHRoaXMuc3RhdGUpO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgaWYgYSBnaXZlbiBpbnB1dCBpcyBhIG51bWJlclxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHsqfSBpbnB1dCB0byBjaGVja1xuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNOdW1lcmljKG4pIHtcbiAgcmV0dXJuIG4gIT09ICcnICYmICFpc05hTihwYXJzZUZsb2F0KG4pKSAmJiBpc0Zpbml0ZShuKTtcbn1cblxuLyoqXG4gKiBTZXQgdGhlIHN0eWxlIHRvIHRoZSBnaXZlbiBwb3BwZXJcbiAqIEBtZXRob2RcbiAqIEBtZW1iZXJvZiBQb3BwZXIuVXRpbHNcbiAqIEBhcmd1bWVudCB7RWxlbWVudH0gZWxlbWVudCAtIEVsZW1lbnQgdG8gYXBwbHkgdGhlIHN0eWxlIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRTdHlsZXMoZWxlbWVudCwgc3R5bGVzKSB7XG4gIE9iamVjdC5rZXlzKHN0eWxlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB1bml0ID0gJyc7XG4gICAgLy8gYWRkIHVuaXQgaWYgdGhlIHZhbHVlIGlzIG51bWVyaWMgYW5kIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nXG4gICAgaWYgKFsnd2lkdGgnLCAnaGVpZ2h0JywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLmluZGV4T2YocHJvcCkgIT09IC0xICYmIGlzTnVtZXJpYyhzdHlsZXNbcHJvcF0pKSB7XG4gICAgICB1bml0ID0gJ3B4JztcbiAgICB9XG4gICAgZWxlbWVudC5zdHlsZVtwcm9wXSA9IHN0eWxlc1twcm9wXSArIHVuaXQ7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldCB0aGUgYXR0cmlidXRlcyB0byB0aGUgZ2l2ZW4gcG9wcGVyXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge0VsZW1lbnR9IGVsZW1lbnQgLSBFbGVtZW50IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGVzIHRvXG4gKiBAYXJndW1lbnQge09iamVjdH0gc3R5bGVzXG4gKiBPYmplY3Qgd2l0aCBhIGxpc3Qgb2YgcHJvcGVydGllcyBhbmQgdmFsdWVzIHdoaWNoIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudFxuICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIGF0dHJpYnV0ZXMpIHtcbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbcHJvcF07XG4gICAgaWYgKHZhbHVlICE9PSBmYWxzZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUocHJvcCwgYXR0cmlidXRlc1twcm9wXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YS5zdHlsZXMgLSBMaXN0IG9mIHN0eWxlIHByb3BlcnRpZXMgLSB2YWx1ZXMgdG8gYXBwbHkgdG8gcG9wcGVyIGVsZW1lbnRcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhLmF0dHJpYnV0ZXMgLSBMaXN0IG9mIGF0dHJpYnV0ZSBwcm9wZXJ0aWVzIC0gdmFsdWVzIHRvIGFwcGx5IHRvIHBvcHBlciBlbGVtZW50XG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgc2FtZSBkYXRhIG9iamVjdFxuICovXG5mdW5jdGlvbiBhcHBseVN0eWxlKGRhdGEpIHtcbiAgLy8gYW55IHByb3BlcnR5IHByZXNlbnQgaW4gYGRhdGEuc3R5bGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gaW4gdGhpcyB3YXkgd2UgY2FuIG1ha2UgdGhlIDNyZCBwYXJ0eSBtb2RpZmllcnMgYWRkIGN1c3RvbSBzdHlsZXMgdG8gaXRcbiAgLy8gQmUgYXdhcmUsIG1vZGlmaWVycyBjb3VsZCBvdmVycmlkZSB0aGUgcHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91c1xuICAvLyBsaW5lcyBvZiB0aGlzIG1vZGlmaWVyIVxuICBzZXRTdHlsZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuc3R5bGVzKTtcblxuICAvLyBhbnkgcHJvcGVydHkgcHJlc2VudCBpbiBgZGF0YS5hdHRyaWJ1dGVzYCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlcixcbiAgLy8gdGhleSB3aWxsIGJlIHNldCBhcyBIVE1MIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnRcbiAgc2V0QXR0cmlidXRlcyhkYXRhLmluc3RhbmNlLnBvcHBlciwgZGF0YS5hdHRyaWJ1dGVzKTtcblxuICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgZGVmaW5lZCBhbmQgYXJyb3dTdHlsZXMgaGFzIHNvbWUgcHJvcGVydGllc1xuICBpZiAoZGF0YS5hcnJvd0VsZW1lbnQgJiYgT2JqZWN0LmtleXMoZGF0YS5hcnJvd1N0eWxlcykubGVuZ3RoKSB7XG4gICAgc2V0U3R5bGVzKGRhdGEuYXJyb3dFbGVtZW50LCBkYXRhLmFycm93U3R5bGVzKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNldCB0aGUgeC1wbGFjZW1lbnQgYXR0cmlidXRlIGJlZm9yZSBldmVyeXRoaW5nIGVsc2UgYmVjYXVzZSBpdCBjb3VsZCBiZSB1c2VkXG4gKiB0byBhZGQgbWFyZ2lucyB0byB0aGUgcG9wcGVyIG1hcmdpbnMgbmVlZHMgdG8gYmUgY2FsY3VsYXRlZCB0byBnZXQgdGhlXG4gKiBjb3JyZWN0IHBvcHBlciBvZmZzZXRzLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5tb2RpZmllcnNcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgZWxlbWVudCB1c2VkIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXJcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUG9wcGVyLmpzIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gYXBwbHlTdHlsZU9uTG9hZChyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucywgbW9kaWZpZXJPcHRpb25zLCBzdGF0ZSkge1xuICAvLyBjb21wdXRlIHJlZmVyZW5jZSBlbGVtZW50IG9mZnNldHNcbiAgdmFyIHJlZmVyZW5jZU9mZnNldHMgPSBnZXRSZWZlcmVuY2VPZmZzZXRzKHN0YXRlLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBjb21wdXRlIGF1dG8gcGxhY2VtZW50LCBzdG9yZSBwbGFjZW1lbnQgaW5zaWRlIHRoZSBkYXRhIG9iamVjdCxcbiAgLy8gbW9kaWZpZXJzIHdpbGwgYmUgYWJsZSB0byBlZGl0IGBwbGFjZW1lbnRgIGlmIG5lZWRlZFxuICAvLyBhbmQgcmVmZXIgdG8gb3JpZ2luYWxQbGFjZW1lbnQgdG8ga25vdyB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgdmFyIHBsYWNlbWVudCA9IGNvbXB1dGVBdXRvUGxhY2VtZW50KG9wdGlvbnMucGxhY2VtZW50LCByZWZlcmVuY2VPZmZzZXRzLCBwb3BwZXIsIHJlZmVyZW5jZSwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5ib3VuZGFyaWVzRWxlbWVudCwgb3B0aW9ucy5tb2RpZmllcnMuZmxpcC5wYWRkaW5nKTtcblxuICBwb3BwZXIuc2V0QXR0cmlidXRlKCd4LXBsYWNlbWVudCcsIHBsYWNlbWVudCk7XG5cbiAgLy8gQXBwbHkgYHBvc2l0aW9uYCB0byBwb3BwZXIgYmVmb3JlIGFueXRoaW5nIGVsc2UgYmVjYXVzZVxuICAvLyB3aXRob3V0IHRoZSBwb3NpdGlvbiBhcHBsaWVkIHdlIGNhbid0IGd1YXJhbnRlZSBjb3JyZWN0IGNvbXB1dGF0aW9uc1xuICBzZXRTdHlsZXMocG9wcGVyLCB7IHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uRml4ZWQgPyAnZml4ZWQnIDogJ2Fic29sdXRlJyB9KTtcblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZVN0eWxlKGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIHggPSBvcHRpb25zLngsXG4gICAgICB5ID0gb3B0aW9ucy55O1xuICB2YXIgcG9wcGVyID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcblxuICAvLyBSZW1vdmUgdGhpcyBsZWdhY3kgc3VwcG9ydCBpbiBQb3BwZXIuanMgdjJcblxuICB2YXIgbGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uID0gZmluZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09ICdhcHBseVN0eWxlJztcbiAgfSkuZ3B1QWNjZWxlcmF0aW9uO1xuICBpZiAobGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zb2xlLndhcm4oJ1dBUk5JTkc6IGBncHVBY2NlbGVyYXRpb25gIG9wdGlvbiBtb3ZlZCB0byBgY29tcHV0ZVN0eWxlYCBtb2RpZmllciBhbmQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBQb3BwZXIuanMhJyk7XG4gIH1cbiAgdmFyIGdwdUFjY2VsZXJhdGlvbiA9IGxlZ2FjeUdwdUFjY2VsZXJhdGlvbk9wdGlvbiAhPT0gdW5kZWZpbmVkID8gbGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uIDogb3B0aW9ucy5ncHVBY2NlbGVyYXRpb247XG5cbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChkYXRhLmluc3RhbmNlLnBvcHBlcik7XG4gIHZhciBvZmZzZXRQYXJlbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG5cbiAgLy8gU3R5bGVzXG4gIHZhciBzdHlsZXMgPSB7XG4gICAgcG9zaXRpb246IHBvcHBlci5wb3NpdGlvblxuICB9O1xuXG4gIC8vIEF2b2lkIGJsdXJyeSB0ZXh0IGJ5IHVzaW5nIGZ1bGwgcGl4ZWwgaW50ZWdlcnMuXG4gIC8vIEZvciBwaXhlbC1wZXJmZWN0IHBvc2l0aW9uaW5nLCB0b3AvYm90dG9tIHByZWZlcnMgcm91bmRlZFxuICAvLyB2YWx1ZXMsIHdoaWxlIGxlZnQvcmlnaHQgcHJlZmVycyBmbG9vcmVkIHZhbHVlcy5cbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgbGVmdDogTWF0aC5mbG9vcihwb3BwZXIubGVmdCksXG4gICAgdG9wOiBNYXRoLnJvdW5kKHBvcHBlci50b3ApLFxuICAgIGJvdHRvbTogTWF0aC5yb3VuZChwb3BwZXIuYm90dG9tKSxcbiAgICByaWdodDogTWF0aC5mbG9vcihwb3BwZXIucmlnaHQpXG4gIH07XG5cbiAgdmFyIHNpZGVBID0geCA9PT0gJ2JvdHRvbScgPyAndG9wJyA6ICdib3R0b20nO1xuICB2YXIgc2lkZUIgPSB5ID09PSAncmlnaHQnID8gJ2xlZnQnIDogJ3JpZ2h0JztcblxuICAvLyBpZiBncHVBY2NlbGVyYXRpb24gaXMgc2V0IHRvIGB0cnVlYCBhbmQgdHJhbnNmb3JtIGlzIHN1cHBvcnRlZCxcbiAgLy8gIHdlIHVzZSBgdHJhbnNsYXRlM2RgIHRvIGFwcGx5IHRoZSBwb3NpdGlvbiB0byB0aGUgcG9wcGVyIHdlXG4gIC8vIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBzdXBwb3J0ZWQgcHJlZml4ZWQgdmVyc2lvbiBpZiBuZWVkZWRcbiAgdmFyIHByZWZpeGVkUHJvcGVydHkgPSBnZXRTdXBwb3J0ZWRQcm9wZXJ0eU5hbWUoJ3RyYW5zZm9ybScpO1xuXG4gIC8vIG5vdywgbGV0J3MgbWFrZSBhIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGlzIGNvZGUgY2xvc2VseSAod3RmPylcbiAgLy8gSWYgdGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlciBncm93cyBvbmNlIGl0J3MgYmVlbiBwb3NpdGlvbmVkLCBpdFxuICAvLyBtYXkgaGFwcGVuIHRoYXQgdGhlIHBvcHBlciBnZXRzIG1pc3BsYWNlZCBiZWNhdXNlIG9mIHRoZSBuZXcgY29udGVudFxuICAvLyBvdmVyZmxvd2luZyBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVG8gYXZvaWQgdGhpcyBwcm9ibGVtLCB3ZSBwcm92aWRlIHR3byBvcHRpb25zICh4IGFuZCB5KSwgd2hpY2ggYWxsb3dcbiAgLy8gdGhlIGNvbnN1bWVyIHRvIGRlZmluZSB0aGUgb2Zmc2V0IG9yaWdpbi5cbiAgLy8gSWYgd2UgcG9zaXRpb24gYSBwb3BwZXIgb24gdG9wIG9mIGEgcmVmZXJlbmNlIGVsZW1lbnQsIHdlIGNhbiBzZXRcbiAgLy8gYHhgIHRvIGB0b3BgIHRvIG1ha2UgdGhlIHBvcHBlciBncm93IHRvd2FyZHMgaXRzIHRvcCBpbnN0ZWFkIG9mXG4gIC8vIGl0cyBib3R0b20uXG4gIHZhciBsZWZ0ID0gdm9pZCAwLFxuICAgICAgdG9wID0gdm9pZCAwO1xuICBpZiAoc2lkZUEgPT09ICdib3R0b20nKSB7XG4gICAgdG9wID0gLW9mZnNldFBhcmVudFJlY3QuaGVpZ2h0ICsgb2Zmc2V0cy5ib3R0b207XG4gIH0gZWxzZSB7XG4gICAgdG9wID0gb2Zmc2V0cy50b3A7XG4gIH1cbiAgaWYgKHNpZGVCID09PSAncmlnaHQnKSB7XG4gICAgbGVmdCA9IC1vZmZzZXRQYXJlbnRSZWN0LndpZHRoICsgb2Zmc2V0cy5yaWdodDtcbiAgfSBlbHNlIHtcbiAgICBsZWZ0ID0gb2Zmc2V0cy5sZWZ0O1xuICB9XG4gIGlmIChncHVBY2NlbGVyYXRpb24gJiYgcHJlZml4ZWRQcm9wZXJ0eSkge1xuICAgIHN0eWxlc1twcmVmaXhlZFByb3BlcnR5XSA9ICd0cmFuc2xhdGUzZCgnICsgbGVmdCArICdweCwgJyArIHRvcCArICdweCwgMCknO1xuICAgIHN0eWxlc1tzaWRlQV0gPSAwO1xuICAgIHN0eWxlc1tzaWRlQl0gPSAwO1xuICAgIHN0eWxlcy53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG4gIH0gZWxzZSB7XG4gICAgLy8gb3Rod2VyaXNlLCB3ZSB1c2UgdGhlIHN0YW5kYXJkIGB0b3BgLCBgbGVmdGAsIGBib3R0b21gIGFuZCBgcmlnaHRgIHByb3BlcnRpZXNcbiAgICB2YXIgaW52ZXJ0VG9wID0gc2lkZUEgPT09ICdib3R0b20nID8gLTEgOiAxO1xuICAgIHZhciBpbnZlcnRMZWZ0ID0gc2lkZUIgPT09ICdyaWdodCcgPyAtMSA6IDE7XG4gICAgc3R5bGVzW3NpZGVBXSA9IHRvcCAqIGludmVydFRvcDtcbiAgICBzdHlsZXNbc2lkZUJdID0gbGVmdCAqIGludmVydExlZnQ7XG4gICAgc3R5bGVzLndpbGxDaGFuZ2UgPSBzaWRlQSArICcsICcgKyBzaWRlQjtcbiAgfVxuXG4gIC8vIEF0dHJpYnV0ZXNcbiAgdmFyIGF0dHJpYnV0ZXMgPSB7XG4gICAgJ3gtcGxhY2VtZW50JzogZGF0YS5wbGFjZW1lbnRcbiAgfTtcblxuICAvLyBVcGRhdGUgYGRhdGFgIGF0dHJpYnV0ZXMsIHN0eWxlcyBhbmQgYXJyb3dTdHlsZXNcbiAgZGF0YS5hdHRyaWJ1dGVzID0gX2V4dGVuZHMoe30sIGF0dHJpYnV0ZXMsIGRhdGEuYXR0cmlidXRlcyk7XG4gIGRhdGEuc3R5bGVzID0gX2V4dGVuZHMoe30sIHN0eWxlcywgZGF0YS5zdHlsZXMpO1xuICBkYXRhLmFycm93U3R5bGVzID0gX2V4dGVuZHMoe30sIGRhdGEub2Zmc2V0cy5hcnJvdywgZGF0YS5hcnJvd1N0eWxlcyk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogSGVscGVyIHVzZWQgdG8ga25vdyBpZiB0aGUgZ2l2ZW4gbW9kaWZpZXIgZGVwZW5kcyBmcm9tIGFub3RoZXIgb25lLjxiciAvPlxuICogSXQgY2hlY2tzIGlmIHRoZSBuZWVkZWQgbW9kaWZpZXIgaXMgbGlzdGVkIGFuZCBlbmFibGVkLlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQHBhcmFtIHtBcnJheX0gbW9kaWZpZXJzIC0gbGlzdCBvZiBtb2RpZmllcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0aW5nTmFtZSAtIG5hbWUgb2YgcmVxdWVzdGluZyBtb2RpZmllclxuICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RlZE5hbWUgLSBuYW1lIG9mIHJlcXVlc3RlZCBtb2RpZmllclxuICogQHJldHVybnMge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzTW9kaWZpZXJSZXF1aXJlZChtb2RpZmllcnMsIHJlcXVlc3RpbmdOYW1lLCByZXF1ZXN0ZWROYW1lKSB7XG4gIHZhciByZXF1ZXN0aW5nID0gZmluZChtb2RpZmllcnMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmLm5hbWU7XG4gICAgcmV0dXJuIG5hbWUgPT09IHJlcXVlc3RpbmdOYW1lO1xuICB9KTtcblxuICB2YXIgaXNSZXF1aXJlZCA9ICEhcmVxdWVzdGluZyAmJiBtb2RpZmllcnMuc29tZShmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICByZXR1cm4gbW9kaWZpZXIubmFtZSA9PT0gcmVxdWVzdGVkTmFtZSAmJiBtb2RpZmllci5lbmFibGVkICYmIG1vZGlmaWVyLm9yZGVyIDwgcmVxdWVzdGluZy5vcmRlcjtcbiAgfSk7XG5cbiAgaWYgKCFpc1JlcXVpcmVkKSB7XG4gICAgdmFyIF9yZXF1ZXN0aW5nID0gJ2AnICsgcmVxdWVzdGluZ05hbWUgKyAnYCc7XG4gICAgdmFyIHJlcXVlc3RlZCA9ICdgJyArIHJlcXVlc3RlZE5hbWUgKyAnYCc7XG4gICAgY29uc29sZS53YXJuKHJlcXVlc3RlZCArICcgbW9kaWZpZXIgaXMgcmVxdWlyZWQgYnkgJyArIF9yZXF1ZXN0aW5nICsgJyBtb2RpZmllciBpbiBvcmRlciB0byB3b3JrLCBiZSBzdXJlIHRvIGluY2x1ZGUgaXQgYmVmb3JlICcgKyBfcmVxdWVzdGluZyArICchJyk7XG4gIH1cbiAgcmV0dXJuIGlzUmVxdWlyZWQ7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBhcnJvdyhkYXRhLCBvcHRpb25zKSB7XG4gIHZhciBfZGF0YSRvZmZzZXRzJGFycm93O1xuXG4gIC8vIGFycm93IGRlcGVuZHMgb24ga2VlcFRvZ2V0aGVyIGluIG9yZGVyIHRvIHdvcmtcbiAgaWYgKCFpc01vZGlmaWVyUmVxdWlyZWQoZGF0YS5pbnN0YW5jZS5tb2RpZmllcnMsICdhcnJvdycsICdrZWVwVG9nZXRoZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgdmFyIGFycm93RWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudDtcblxuICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgYSBzdHJpbmcsIHN1cHBvc2UgaXQncyBhIENTUyBzZWxlY3RvclxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBkYXRhLmluc3RhbmNlLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICAvLyBpZiBhcnJvd0VsZW1lbnQgaXMgbm90IGZvdW5kLCBkb24ndCBydW4gdGhlIG1vZGlmaWVyXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBpZiB0aGUgYXJyb3dFbGVtZW50IGlzbid0IGEgcXVlcnkgc2VsZWN0b3Igd2UgbXVzdCBjaGVjayB0aGF0IHRoZVxuICAgIC8vIHByb3ZpZGVkIERPTSBub2RlIGlzIGNoaWxkIG9mIGl0cyBwb3BwZXIgbm9kZVxuICAgIGlmICghZGF0YS5pbnN0YW5jZS5wb3BwZXIuY29udGFpbnMoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS53YXJuKCdXQVJOSU5HOiBgYXJyb3cuZWxlbWVudGAgbXVzdCBiZSBjaGlsZCBvZiBpdHMgcG9wcGVyIGVsZW1lbnQhJyk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cblxuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBpc1ZlcnRpY2FsID0gWydsZWZ0JywgJ3JpZ2h0J10uaW5kZXhPZihwbGFjZW1lbnQpICE9PSAtMTtcblxuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgdmFyIHNpZGVDYXBpdGFsaXplZCA9IGlzVmVydGljYWwgPyAnVG9wJyA6ICdMZWZ0JztcbiAgdmFyIHNpZGUgPSBzaWRlQ2FwaXRhbGl6ZWQudG9Mb3dlckNhc2UoKTtcbiAgdmFyIGFsdFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2xlZnQnIDogJ3RvcCc7XG4gIHZhciBvcFNpZGUgPSBpc1ZlcnRpY2FsID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICB2YXIgYXJyb3dFbGVtZW50U2l6ZSA9IGdldE91dGVyU2l6ZXMoYXJyb3dFbGVtZW50KVtsZW5dO1xuXG4gIC8vXG4gIC8vIGV4dGVuZHMga2VlcFRvZ2V0aGVyIGJlaGF2aW9yIG1ha2luZyBzdXJlIHRoZSBwb3BwZXIgYW5kIGl0c1xuICAvLyByZWZlcmVuY2UgaGF2ZSBlbm91Z2ggcGl4ZWxzIGluIGNvbmp1Y3Rpb25cbiAgLy9cblxuICAvLyB0b3AvbGVmdCBzaWRlXG4gIGlmIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUgPCBwb3BwZXJbc2lkZV0pIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdIC09IHBvcHBlcltzaWRlXSAtIChyZWZlcmVuY2Vbb3BTaWRlXSAtIGFycm93RWxlbWVudFNpemUpO1xuICB9XG4gIC8vIGJvdHRvbS9yaWdodCBzaWRlXG4gIGlmIChyZWZlcmVuY2Vbc2lkZV0gKyBhcnJvd0VsZW1lbnRTaXplID4gcG9wcGVyW29wU2lkZV0pIHtcbiAgICBkYXRhLm9mZnNldHMucG9wcGVyW3NpZGVdICs9IHJlZmVyZW5jZVtzaWRlXSArIGFycm93RWxlbWVudFNpemUgLSBwb3BwZXJbb3BTaWRlXTtcbiAgfVxuICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChkYXRhLm9mZnNldHMucG9wcGVyKTtcblxuICAvLyBjb21wdXRlIGNlbnRlciBvZiB0aGUgcG9wcGVyXG4gIHZhciBjZW50ZXIgPSByZWZlcmVuY2Vbc2lkZV0gKyByZWZlcmVuY2VbbGVuXSAvIDIgLSBhcnJvd0VsZW1lbnRTaXplIC8gMjtcblxuICAvLyBDb21wdXRlIHRoZSBzaWRlVmFsdWUgdXNpbmcgdGhlIHVwZGF0ZWQgcG9wcGVyIG9mZnNldHNcbiAgLy8gdGFrZSBwb3BwZXIgbWFyZ2luIGluIGFjY291bnQgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoaXMgaW5mbyBhdmFpbGFibGVcbiAgdmFyIGNzcyA9IGdldFN0eWxlQ29tcHV0ZWRQcm9wZXJ0eShkYXRhLmluc3RhbmNlLnBvcHBlcik7XG4gIHZhciBwb3BwZXJNYXJnaW5TaWRlID0gcGFyc2VGbG9hdChjc3NbJ21hcmdpbicgKyBzaWRlQ2FwaXRhbGl6ZWRdLCAxMCk7XG4gIHZhciBwb3BwZXJCb3JkZXJTaWRlID0gcGFyc2VGbG9hdChjc3NbJ2JvcmRlcicgKyBzaWRlQ2FwaXRhbGl6ZWQgKyAnV2lkdGgnXSwgMTApO1xuICB2YXIgc2lkZVZhbHVlID0gY2VudGVyIC0gZGF0YS5vZmZzZXRzLnBvcHBlcltzaWRlXSAtIHBvcHBlck1hcmdpblNpZGUgLSBwb3BwZXJCb3JkZXJTaWRlO1xuXG4gIC8vIHByZXZlbnQgYXJyb3dFbGVtZW50IGZyb20gYmVpbmcgcGxhY2VkIG5vdCBjb250aWd1b3VzbHkgdG8gaXRzIHBvcHBlclxuICBzaWRlVmFsdWUgPSBNYXRoLm1heChNYXRoLm1pbihwb3BwZXJbbGVuXSAtIGFycm93RWxlbWVudFNpemUsIHNpZGVWYWx1ZSksIDApO1xuXG4gIGRhdGEuYXJyb3dFbGVtZW50ID0gYXJyb3dFbGVtZW50O1xuICBkYXRhLm9mZnNldHMuYXJyb3cgPSAoX2RhdGEkb2Zmc2V0cyRhcnJvdyA9IHt9LCBkZWZpbmVQcm9wZXJ0eShfZGF0YSRvZmZzZXRzJGFycm93LCBzaWRlLCBNYXRoLnJvdW5kKHNpZGVWYWx1ZSkpLCBkZWZpbmVQcm9wZXJ0eShfZGF0YSRvZmZzZXRzJGFycm93LCBhbHRTaWRlLCAnJyksIF9kYXRhJG9mZnNldHMkYXJyb3cpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEdldCB0aGUgb3Bwb3NpdGUgcGxhY2VtZW50IHZhcmlhdGlvbiBvZiB0aGUgZ2l2ZW4gb25lXG4gKiBAbWV0aG9kXG4gKiBAbWVtYmVyb2YgUG9wcGVyLlV0aWxzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gcGxhY2VtZW50IHZhcmlhdGlvblxuICogQHJldHVybnMge1N0cmluZ30gZmxpcHBlZCBwbGFjZW1lbnQgdmFyaWF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uKHZhcmlhdGlvbikge1xuICBpZiAodmFyaWF0aW9uID09PSAnZW5kJykge1xuICAgIHJldHVybiAnc3RhcnQnO1xuICB9IGVsc2UgaWYgKHZhcmlhdGlvbiA9PT0gJ3N0YXJ0Jykge1xuICAgIHJldHVybiAnZW5kJztcbiAgfVxuICByZXR1cm4gdmFyaWF0aW9uO1xufVxuXG4vKipcbiAqIExpc3Qgb2YgYWNjZXB0ZWQgcGxhY2VtZW50cyB0byB1c2UgYXMgdmFsdWVzIG9mIHRoZSBgcGxhY2VtZW50YCBvcHRpb24uPGJyIC8+XG4gKiBWYWxpZCBwbGFjZW1lbnRzIGFyZTpcbiAqIC0gYGF1dG9gXG4gKiAtIGB0b3BgXG4gKiAtIGByaWdodGBcbiAqIC0gYGJvdHRvbWBcbiAqIC0gYGxlZnRgXG4gKlxuICogRWFjaCBwbGFjZW1lbnQgY2FuIGhhdmUgYSB2YXJpYXRpb24gZnJvbSB0aGlzIGxpc3Q6XG4gKiAtIGAtc3RhcnRgXG4gKiAtIGAtZW5kYFxuICpcbiAqIFZhcmlhdGlvbnMgYXJlIGludGVycHJldGVkIGVhc2lseSBpZiB5b3UgdGhpbmsgb2YgdGhlbSBhcyB0aGUgbGVmdCB0byByaWdodFxuICogd3JpdHRlbiBsYW5ndWFnZXMuIEhvcml6b250YWxseSAoYHRvcGAgYW5kIGBib3R0b21gKSwgYHN0YXJ0YCBpcyBsZWZ0IGFuZCBgZW5kYFxuICogaXMgcmlnaHQuPGJyIC8+XG4gKiBWZXJ0aWNhbGx5IChgbGVmdGAgYW5kIGByaWdodGApLCBgc3RhcnRgIGlzIHRvcCBhbmQgYGVuZGAgaXMgYm90dG9tLlxuICpcbiAqIFNvbWUgdmFsaWQgZXhhbXBsZXMgYXJlOlxuICogLSBgdG9wLWVuZGAgKG9uIHRvcCBvZiByZWZlcmVuY2UsIHJpZ2h0IGFsaWduZWQpXG4gKiAtIGByaWdodC1zdGFydGAgKG9uIHJpZ2h0IG9mIHJlZmVyZW5jZSwgdG9wIGFsaWduZWQpXG4gKiAtIGBib3R0b21gIChvbiBib3R0b20sIGNlbnRlcmVkKVxuICogLSBgYXV0by1yaWdodGAgKG9uIHRoZSBzaWRlIHdpdGggbW9yZSBzcGFjZSBhdmFpbGFibGUsIGFsaWdubWVudCBkZXBlbmRzIGJ5IHBsYWNlbWVudClcbiAqXG4gKiBAc3RhdGljXG4gKiBAdHlwZSB7QXJyYXl9XG4gKiBAZW51bSB7U3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWV0aG9kIHBsYWNlbWVudHNcbiAqIEBtZW1iZXJvZiBQb3BwZXJcbiAqL1xudmFyIHBsYWNlbWVudHMgPSBbJ2F1dG8tc3RhcnQnLCAnYXV0bycsICdhdXRvLWVuZCcsICd0b3Atc3RhcnQnLCAndG9wJywgJ3RvcC1lbmQnLCAncmlnaHQtc3RhcnQnLCAncmlnaHQnLCAncmlnaHQtZW5kJywgJ2JvdHRvbS1lbmQnLCAnYm90dG9tJywgJ2JvdHRvbS1zdGFydCcsICdsZWZ0LWVuZCcsICdsZWZ0JywgJ2xlZnQtc3RhcnQnXTtcblxuLy8gR2V0IHJpZCBvZiBgYXV0b2AgYGF1dG8tc3RhcnRgIGFuZCBgYXV0by1lbmRgXG52YXIgdmFsaWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5zbGljZSgzKTtcblxuLyoqXG4gKiBHaXZlbiBhbiBpbml0aWFsIHBsYWNlbWVudCwgcmV0dXJucyBhbGwgdGhlIHN1YnNlcXVlbnQgcGxhY2VtZW50c1xuICogY2xvY2t3aXNlIChvciBjb3VudGVyLWNsb2Nrd2lzZSkuXG4gKlxuICogQG1ldGhvZFxuICogQG1lbWJlcm9mIFBvcHBlci5VdGlsc1xuICogQGFyZ3VtZW50IHtTdHJpbmd9IHBsYWNlbWVudCAtIEEgdmFsaWQgcGxhY2VtZW50IChpdCBhY2NlcHRzIHZhcmlhdGlvbnMpXG4gKiBAYXJndW1lbnQge0Jvb2xlYW59IGNvdW50ZXIgLSBTZXQgdG8gdHJ1ZSB0byB3YWxrIHRoZSBwbGFjZW1lbnRzIGNvdW50ZXJjbG9ja3dpc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gcGxhY2VtZW50cyBpbmNsdWRpbmcgdGhlaXIgdmFyaWF0aW9uc1xuICovXG5mdW5jdGlvbiBjbG9ja3dpc2UocGxhY2VtZW50KSB7XG4gIHZhciBjb3VudGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcblxuICB2YXIgaW5kZXggPSB2YWxpZFBsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpO1xuICB2YXIgYXJyID0gdmFsaWRQbGFjZW1lbnRzLnNsaWNlKGluZGV4ICsgMSkuY29uY2F0KHZhbGlkUGxhY2VtZW50cy5zbGljZSgwLCBpbmRleCkpO1xuICByZXR1cm4gY291bnRlciA/IGFyci5yZXZlcnNlKCkgOiBhcnI7XG59XG5cbnZhciBCRUhBVklPUlMgPSB7XG4gIEZMSVA6ICdmbGlwJyxcbiAgQ0xPQ0tXSVNFOiAnY2xvY2t3aXNlJyxcbiAgQ09VTlRFUkNMT0NLV0lTRTogJ2NvdW50ZXJjbG9ja3dpc2UnXG59O1xuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gZmxpcChkYXRhLCBvcHRpb25zKSB7XG4gIC8vIGlmIGBpbm5lcmAgbW9kaWZpZXIgaXMgZW5hYmxlZCwgd2UgY2FuJ3QgdXNlIHRoZSBgZmxpcGAgbW9kaWZpZXJcbiAgaWYgKGlzTW9kaWZpZXJFbmFibGVkKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCAnaW5uZXInKSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgaWYgKGRhdGEuZmxpcHBlZCAmJiBkYXRhLnBsYWNlbWVudCA9PT0gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCkge1xuICAgIC8vIHNlZW1zIGxpa2UgZmxpcCBpcyB0cnlpbmcgdG8gbG9vcCwgcHJvYmFibHkgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIG9uIGFueSBvZiB0aGUgZmxpcHBhYmxlIHNpZGVzXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICB2YXIgYm91bmRhcmllcyA9IGdldEJvdW5kYXJpZXMoZGF0YS5pbnN0YW5jZS5wb3BwZXIsIGRhdGEuaW5zdGFuY2UucmVmZXJlbmNlLCBvcHRpb25zLnBhZGRpbmcsIG9wdGlvbnMuYm91bmRhcmllc0VsZW1lbnQsIGRhdGEucG9zaXRpb25GaXhlZCk7XG5cbiAgdmFyIHBsYWNlbWVudCA9IGRhdGEucGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBwbGFjZW1lbnRPcHBvc2l0ZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzFdIHx8ICcnO1xuXG4gIHZhciBmbGlwT3JkZXIgPSBbXTtcblxuICBzd2l0Y2ggKG9wdGlvbnMuYmVoYXZpb3IpIHtcbiAgICBjYXNlIEJFSEFWSU9SUy5GTElQOlxuICAgICAgZmxpcE9yZGVyID0gW3BsYWNlbWVudCwgcGxhY2VtZW50T3Bwb3NpdGVdO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBCRUhBVklPUlMuQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIEJFSEFWSU9SUy5DT1VOVEVSQ0xPQ0tXSVNFOlxuICAgICAgZmxpcE9yZGVyID0gY2xvY2t3aXNlKHBsYWNlbWVudCwgdHJ1ZSk7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmxpcE9yZGVyID0gb3B0aW9ucy5iZWhhdmlvcjtcbiAgfVxuXG4gIGZsaXBPcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChzdGVwLCBpbmRleCkge1xuICAgIGlmIChwbGFjZW1lbnQgIT09IHN0ZXAgfHwgZmxpcE9yZGVyLmxlbmd0aCA9PT0gaW5kZXggKyAxKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICAgIHBsYWNlbWVudE9wcG9zaXRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBwb3BwZXJPZmZzZXRzID0gZGF0YS5vZmZzZXRzLnBvcHBlcjtcbiAgICB2YXIgcmVmT2Zmc2V0cyA9IGRhdGEub2Zmc2V0cy5yZWZlcmVuY2U7XG5cbiAgICAvLyB1c2luZyBmbG9vciBiZWNhdXNlIHRoZSByZWZlcmVuY2Ugb2Zmc2V0cyBtYXkgY29udGFpbiBkZWNpbWFscyB3ZSBhcmUgbm90IGdvaW5nIHRvIGNvbnNpZGVyIGhlcmVcbiAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgIHZhciBvdmVybGFwc1JlZiA9IHBsYWNlbWVudCA9PT0gJ2xlZnQnICYmIGZsb29yKHBvcHBlck9mZnNldHMucmlnaHQpID4gZmxvb3IocmVmT2Zmc2V0cy5sZWZ0KSB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5sZWZ0KSA8IGZsb29yKHJlZk9mZnNldHMucmlnaHQpIHx8IHBsYWNlbWVudCA9PT0gJ3RvcCcgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy5ib3R0b20pID4gZmxvb3IocmVmT2Zmc2V0cy50b3ApIHx8IHBsYWNlbWVudCA9PT0gJ2JvdHRvbScgJiYgZmxvb3IocG9wcGVyT2Zmc2V0cy50b3ApIDwgZmxvb3IocmVmT2Zmc2V0cy5ib3R0b20pO1xuXG4gICAgdmFyIG92ZXJmbG93c0xlZnQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLmxlZnQpIDwgZmxvb3IoYm91bmRhcmllcy5sZWZ0KTtcbiAgICB2YXIgb3ZlcmZsb3dzUmlnaHQgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnJpZ2h0KSA+IGZsb29yKGJvdW5kYXJpZXMucmlnaHQpO1xuICAgIHZhciBvdmVyZmxvd3NUb3AgPSBmbG9vcihwb3BwZXJPZmZzZXRzLnRvcCkgPCBmbG9vcihib3VuZGFyaWVzLnRvcCk7XG4gICAgdmFyIG92ZXJmbG93c0JvdHRvbSA9IGZsb29yKHBvcHBlck9mZnNldHMuYm90dG9tKSA+IGZsb29yKGJvdW5kYXJpZXMuYm90dG9tKTtcblxuICAgIHZhciBvdmVyZmxvd3NCb3VuZGFyaWVzID0gcGxhY2VtZW50ID09PSAnbGVmdCcgJiYgb3ZlcmZsb3dzTGVmdCB8fCBwbGFjZW1lbnQgPT09ICdyaWdodCcgJiYgb3ZlcmZsb3dzUmlnaHQgfHwgcGxhY2VtZW50ID09PSAndG9wJyAmJiBvdmVyZmxvd3NUb3AgfHwgcGxhY2VtZW50ID09PSAnYm90dG9tJyAmJiBvdmVyZmxvd3NCb3R0b207XG5cbiAgICAvLyBmbGlwIHRoZSB2YXJpYXRpb24gaWYgcmVxdWlyZWRcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG4gICAgdmFyIGZsaXBwZWRWYXJpYXRpb24gPSAhIW9wdGlvbnMuZmxpcFZhcmlhdGlvbnMgJiYgKGlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnc3RhcnQnICYmIG92ZXJmbG93c0xlZnQgfHwgaXNWZXJ0aWNhbCAmJiB2YXJpYXRpb24gPT09ICdlbmQnICYmIG92ZXJmbG93c1JpZ2h0IHx8ICFpc1ZlcnRpY2FsICYmIHZhcmlhdGlvbiA9PT0gJ3N0YXJ0JyAmJiBvdmVyZmxvd3NUb3AgfHwgIWlzVmVydGljYWwgJiYgdmFyaWF0aW9uID09PSAnZW5kJyAmJiBvdmVyZmxvd3NCb3R0b20pO1xuXG4gICAgaWYgKG92ZXJsYXBzUmVmIHx8IG92ZXJmbG93c0JvdW5kYXJpZXMgfHwgZmxpcHBlZFZhcmlhdGlvbikge1xuICAgICAgLy8gdGhpcyBib29sZWFuIHRvIGRldGVjdCBhbnkgZmxpcCBsb29wXG4gICAgICBkYXRhLmZsaXBwZWQgPSB0cnVlO1xuXG4gICAgICBpZiAob3ZlcmxhcHNSZWYgfHwgb3ZlcmZsb3dzQm91bmRhcmllcykge1xuICAgICAgICBwbGFjZW1lbnQgPSBmbGlwT3JkZXJbaW5kZXggKyAxXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZsaXBwZWRWYXJpYXRpb24pIHtcbiAgICAgICAgdmFyaWF0aW9uID0gZ2V0T3Bwb3NpdGVWYXJpYXRpb24odmFyaWF0aW9uKTtcbiAgICAgIH1cblxuICAgICAgZGF0YS5wbGFjZW1lbnQgPSBwbGFjZW1lbnQgKyAodmFyaWF0aW9uID8gJy0nICsgdmFyaWF0aW9uIDogJycpO1xuXG4gICAgICAvLyB0aGlzIG9iamVjdCBjb250YWlucyBgcG9zaXRpb25gLCB3ZSB3YW50IHRvIHByZXNlcnZlIGl0IGFsb25nIHdpdGhcbiAgICAgIC8vIGFueSBhZGRpdGlvbmFsIHByb3BlcnR5IHdlIG1heSBhZGQgaW4gdGhlIGZ1dHVyZVxuICAgICAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IF9leHRlbmRzKHt9LCBkYXRhLm9mZnNldHMucG9wcGVyLCBnZXRQb3BwZXJPZmZzZXRzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLm9mZnNldHMucmVmZXJlbmNlLCBkYXRhLnBsYWNlbWVudCkpO1xuXG4gICAgICBkYXRhID0gcnVuTW9kaWZpZXJzKGRhdGEuaW5zdGFuY2UubW9kaWZpZXJzLCBkYXRhLCAnZmxpcCcpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IHVwZGF0ZSBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24ga2VlcFRvZ2V0aGVyKGRhdGEpIHtcbiAgdmFyIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTE7XG4gIHZhciBzaWRlID0gaXNWZXJ0aWNhbCA/ICdyaWdodCcgOiAnYm90dG9tJztcbiAgdmFyIG9wU2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgdmFyIG1lYXN1cmVtZW50ID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICBpZiAocG9wcGVyW3NpZGVdIDwgZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW29wU2lkZV0pIC0gcG9wcGVyW21lYXN1cmVtZW50XTtcbiAgfVxuICBpZiAocG9wcGVyW29wU2lkZV0gPiBmbG9vcihyZWZlcmVuY2Vbc2lkZV0pKSB7XG4gICAgZGF0YS5vZmZzZXRzLnBvcHBlcltvcFNpZGVdID0gZmxvb3IocmVmZXJlbmNlW3NpZGVdKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgdmFsdWUgKyB1bml0IGludG8gYSBweCB2YWx1ZSBudW1iZXJcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIHttb2RpZmllcnN+b2Zmc2V0fVxuICogQHByaXZhdGVcbiAqIEBhcmd1bWVudCB7U3RyaW5nfSBzdHIgLSBWYWx1ZSArIHVuaXQgc3RyaW5nXG4gKiBAYXJndW1lbnQge1N0cmluZ30gbWVhc3VyZW1lbnQgLSBgaGVpZ2h0YCBvciBgd2lkdGhgXG4gKiBAYXJndW1lbnQge09iamVjdH0gcG9wcGVyT2Zmc2V0c1xuICogQGFyZ3VtZW50IHtPYmplY3R9IHJlZmVyZW5jZU9mZnNldHNcbiAqIEByZXR1cm5zIHtOdW1iZXJ8U3RyaW5nfVxuICogVmFsdWUgaW4gcGl4ZWxzLCBvciBvcmlnaW5hbCBzdHJpbmcgaWYgbm8gdmFsdWVzIHdlcmUgZXh0cmFjdGVkXG4gKi9cbmZ1bmN0aW9uIHRvVmFsdWUoc3RyLCBtZWFzdXJlbWVudCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cykge1xuICAvLyBzZXBhcmF0ZSB2YWx1ZSBmcm9tIHVuaXRcbiAgdmFyIHNwbGl0ID0gc3RyLm1hdGNoKC8oKD86XFwtfFxcKyk/XFxkKlxcLj9cXGQqKSguKikvKTtcbiAgdmFyIHZhbHVlID0gK3NwbGl0WzFdO1xuICB2YXIgdW5pdCA9IHNwbGl0WzJdO1xuXG4gIC8vIElmIGl0J3Mgbm90IGEgbnVtYmVyIGl0J3MgYW4gb3BlcmF0b3IsIEkgZ3Vlc3NcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAodW5pdC5pbmRleE9mKCclJykgPT09IDApIHtcbiAgICB2YXIgZWxlbWVudCA9IHZvaWQgMDtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJyVwJzpcbiAgICAgICAgZWxlbWVudCA9IHBvcHBlck9mZnNldHM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnJSc6XG4gICAgICBjYXNlICclcic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBlbGVtZW50ID0gcmVmZXJlbmNlT2Zmc2V0cztcbiAgICB9XG5cbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3QoZWxlbWVudCk7XG4gICAgcmV0dXJuIHJlY3RbbWVhc3VyZW1lbnRdIC8gMTAwICogdmFsdWU7XG4gIH0gZWxzZSBpZiAodW5pdCA9PT0gJ3ZoJyB8fCB1bml0ID09PSAndncnKSB7XG4gICAgLy8gaWYgaXMgYSB2aCBvciB2dywgd2UgY2FsY3VsYXRlIHRoZSBzaXplIGJhc2VkIG9uIHRoZSB2aWV3cG9ydFxuICAgIHZhciBzaXplID0gdm9pZCAwO1xuICAgIGlmICh1bml0ID09PSAndmgnKSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaXplID0gTWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLCB3aW5kb3cuaW5uZXJXaWR0aCB8fCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIHNpemUgLyAxMDAgKiB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBpZiBpcyBhbiBleHBsaWNpdCBwaXhlbCB1bml0LCB3ZSBnZXQgcmlkIG9mIHRoZSB1bml0IGFuZCBrZWVwIHRoZSB2YWx1ZVxuICAgIC8vIGlmIGlzIGFuIGltcGxpY2l0IHVuaXQsIGl0J3MgcHgsIGFuZCB3ZSByZXR1cm4ganVzdCB0aGUgdmFsdWVcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBgb2Zmc2V0YCBzdHJpbmcgdG8gZXh0cmFwb2xhdGUgYHhgIGFuZCBgeWAgbnVtZXJpYyBvZmZzZXRzLlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2Yge21vZGlmaWVyc35vZmZzZXR9XG4gKiBAcHJpdmF0ZVxuICogQGFyZ3VtZW50IHtTdHJpbmd9IG9mZnNldFxuICogQGFyZ3VtZW50IHtPYmplY3R9IHBvcHBlck9mZnNldHNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSByZWZlcmVuY2VPZmZzZXRzXG4gKiBAYXJndW1lbnQge1N0cmluZ30gYmFzZVBsYWNlbWVudFxuICogQHJldHVybnMge0FycmF5fSBhIHR3byBjZWxscyBhcnJheSB3aXRoIHggYW5kIHkgb2Zmc2V0cyBpbiBudW1iZXJzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT2Zmc2V0KG9mZnNldCwgcG9wcGVyT2Zmc2V0cywgcmVmZXJlbmNlT2Zmc2V0cywgYmFzZVBsYWNlbWVudCkge1xuICB2YXIgb2Zmc2V0cyA9IFswLCAwXTtcblxuICAvLyBVc2UgaGVpZ2h0IGlmIHBsYWNlbWVudCBpcyBsZWZ0IG9yIHJpZ2h0IGFuZCBpbmRleCBpcyAwIG90aGVyd2lzZSB1c2Ugd2lkdGhcbiAgLy8gaW4gdGhpcyB3YXkgdGhlIGZpcnN0IG9mZnNldCB3aWxsIHVzZSBhbiBheGlzIGFuZCB0aGUgc2Vjb25kIG9uZVxuICAvLyB3aWxsIHVzZSB0aGUgb3RoZXIgb25lXG4gIHZhciB1c2VIZWlnaHQgPSBbJ3JpZ2h0JywgJ2xlZnQnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAvLyBTcGxpdCB0aGUgb2Zmc2V0IHN0cmluZyB0byBvYnRhaW4gYSBsaXN0IG9mIHZhbHVlcyBhbmQgb3BlcmFuZHNcbiAgLy8gVGhlIHJlZ2V4IGFkZHJlc3NlcyB2YWx1ZXMgd2l0aCB0aGUgcGx1cyBvciBtaW51cyBzaWduIGluIGZyb250ICgrMTAsIC0yMCwgZXRjKVxuICB2YXIgZnJhZ21lbnRzID0gb2Zmc2V0LnNwbGl0KC8oXFwrfFxcLSkvKS5tYXAoZnVuY3Rpb24gKGZyYWcpIHtcbiAgICByZXR1cm4gZnJhZy50cmltKCk7XG4gIH0pO1xuXG4gIC8vIERldGVjdCBpZiB0aGUgb2Zmc2V0IHN0cmluZyBjb250YWlucyBhIHBhaXIgb2YgdmFsdWVzIG9yIGEgc2luZ2xlIG9uZVxuICAvLyB0aGV5IGNvdWxkIGJlIHNlcGFyYXRlZCBieSBjb21tYSBvciBzcGFjZVxuICB2YXIgZGl2aWRlciA9IGZyYWdtZW50cy5pbmRleE9mKGZpbmQoZnJhZ21lbnRzLCBmdW5jdGlvbiAoZnJhZykge1xuICAgIHJldHVybiBmcmFnLnNlYXJjaCgvLHxcXHMvKSAhPT0gLTE7XG4gIH0pKTtcblxuICBpZiAoZnJhZ21lbnRzW2RpdmlkZXJdICYmIGZyYWdtZW50c1tkaXZpZGVyXS5pbmRleE9mKCcsJykgPT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKCdPZmZzZXRzIHNlcGFyYXRlZCBieSB3aGl0ZSBzcGFjZShzKSBhcmUgZGVwcmVjYXRlZCwgdXNlIGEgY29tbWEgKCwpIGluc3RlYWQuJyk7XG4gIH1cblxuICAvLyBJZiBkaXZpZGVyIGlzIGZvdW5kLCB3ZSBkaXZpZGUgdGhlIGxpc3Qgb2YgdmFsdWVzIGFuZCBvcGVyYW5kcyB0byBkaXZpZGVcbiAgLy8gdGhlbSBieSBvZnNldCBYIGFuZCBZLlxuICB2YXIgc3BsaXRSZWdleCA9IC9cXHMqLFxccyp8XFxzKy87XG4gIHZhciBvcHMgPSBkaXZpZGVyICE9PSAtMSA/IFtmcmFnbWVudHMuc2xpY2UoMCwgZGl2aWRlcikuY29uY2F0KFtmcmFnbWVudHNbZGl2aWRlcl0uc3BsaXQoc3BsaXRSZWdleClbMF1dKSwgW2ZyYWdtZW50c1tkaXZpZGVyXS5zcGxpdChzcGxpdFJlZ2V4KVsxXV0uY29uY2F0KGZyYWdtZW50cy5zbGljZShkaXZpZGVyICsgMSkpXSA6IFtmcmFnbWVudHNdO1xuXG4gIC8vIENvbnZlcnQgdGhlIHZhbHVlcyB3aXRoIHVuaXRzIHRvIGFic29sdXRlIHBpeGVscyB0byBhbGxvdyBvdXIgY29tcHV0YXRpb25zXG4gIG9wcyA9IG9wcy5tYXAoZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIC8vIE1vc3Qgb2YgdGhlIHVuaXRzIHJlbHkgb24gdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBwb3BwZXJcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSAoaW5kZXggPT09IDEgPyAhdXNlSGVpZ2h0IDogdXNlSGVpZ2h0KSA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgbWVyZ2VXaXRoUHJldmlvdXMgPSBmYWxzZTtcbiAgICByZXR1cm4gb3BcbiAgICAvLyBUaGlzIGFnZ3JlZ2F0ZXMgYW55IGArYCBvciBgLWAgc2lnbiB0aGF0IGFyZW4ndCBjb25zaWRlcmVkIG9wZXJhdG9yc1xuICAgIC8vIGUuZy46IDEwICsgKzUgPT4gWzEwLCArLCArNV1cbiAgICAucmVkdWNlKGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICBpZiAoYVthLmxlbmd0aCAtIDFdID09PSAnJyAmJiBbJysnLCAnLSddLmluZGV4T2YoYikgIT09IC0xKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSA9IGI7XG4gICAgICAgIG1lcmdlV2l0aFByZXZpb3VzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9IGVsc2UgaWYgKG1lcmdlV2l0aFByZXZpb3VzKSB7XG4gICAgICAgIGFbYS5sZW5ndGggLSAxXSArPSBiO1xuICAgICAgICBtZXJnZVdpdGhQcmV2aW91cyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdGhlIHN0cmluZyB2YWx1ZXMgaW50byBudW1iZXIgdmFsdWVzIChpbiBweClcbiAgICAubWFwKGZ1bmN0aW9uIChzdHIpIHtcbiAgICAgIHJldHVybiB0b1ZhbHVlKHN0ciwgbWVhc3VyZW1lbnQsIHBvcHBlck9mZnNldHMsIHJlZmVyZW5jZU9mZnNldHMpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBMb29wIHRyb3VnaCB0aGUgb2Zmc2V0cyBhcnJheXMgYW5kIGV4ZWN1dGUgdGhlIG9wZXJhdGlvbnNcbiAgb3BzLmZvckVhY2goZnVuY3Rpb24gKG9wLCBpbmRleCkge1xuICAgIG9wLmZvckVhY2goZnVuY3Rpb24gKGZyYWcsIGluZGV4Mikge1xuICAgICAgaWYgKGlzTnVtZXJpYyhmcmFnKSkge1xuICAgICAgICBvZmZzZXRzW2luZGV4XSArPSBmcmFnICogKG9wW2luZGV4MiAtIDFdID09PSAnLScgPyAtMSA6IDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9mZnNldHM7XG59XG5cbi8qKlxuICogQGZ1bmN0aW9uXG4gKiBAbWVtYmVyb2YgTW9kaWZpZXJzXG4gKiBAYXJndW1lbnQge09iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgdXBkYXRlIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQGFyZ3VtZW50IHtOdW1iZXJ8U3RyaW5nfSBvcHRpb25zLm9mZnNldD0wXG4gKiBUaGUgb2Zmc2V0IHZhbHVlIGFzIGRlc2NyaWJlZCBpbiB0aGUgbW9kaWZpZXIgZGVzY3JpcHRpb25cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gb2Zmc2V0KGRhdGEsIF9yZWYpIHtcbiAgdmFyIG9mZnNldCA9IF9yZWYub2Zmc2V0O1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQsXG4gICAgICBfZGF0YSRvZmZzZXRzID0gZGF0YS5vZmZzZXRzLFxuICAgICAgcG9wcGVyID0gX2RhdGEkb2Zmc2V0cy5wb3BwZXIsXG4gICAgICByZWZlcmVuY2UgPSBfZGF0YSRvZmZzZXRzLnJlZmVyZW5jZTtcblxuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xuXG4gIHZhciBvZmZzZXRzID0gdm9pZCAwO1xuICBpZiAoaXNOdW1lcmljKCtvZmZzZXQpKSB7XG4gICAgb2Zmc2V0cyA9IFsrb2Zmc2V0LCAwXTtcbiAgfSBlbHNlIHtcbiAgICBvZmZzZXRzID0gcGFyc2VPZmZzZXQob2Zmc2V0LCBwb3BwZXIsIHJlZmVyZW5jZSwgYmFzZVBsYWNlbWVudCk7XG4gIH1cblxuICBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgcG9wcGVyLnRvcCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci5sZWZ0IC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ3JpZ2h0Jykge1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzFdO1xuICB9IGVsc2UgaWYgKGJhc2VQbGFjZW1lbnQgPT09ICd0b3AnKSB7XG4gICAgcG9wcGVyLmxlZnQgKz0gb2Zmc2V0c1swXTtcbiAgICBwb3BwZXIudG9wIC09IG9mZnNldHNbMV07XG4gIH0gZWxzZSBpZiAoYmFzZVBsYWNlbWVudCA9PT0gJ2JvdHRvbScpIHtcbiAgICBwb3BwZXIubGVmdCArPSBvZmZzZXRzWzBdO1xuICAgIHBvcHBlci50b3AgKz0gb2Zmc2V0c1sxXTtcbiAgfVxuXG4gIGRhdGEucG9wcGVyID0gcG9wcGVyO1xuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KGRhdGEsIG9wdGlvbnMpIHtcbiAgdmFyIGJvdW5kYXJpZXNFbGVtZW50ID0gb3B0aW9ucy5ib3VuZGFyaWVzRWxlbWVudCB8fCBnZXRPZmZzZXRQYXJlbnQoZGF0YS5pbnN0YW5jZS5wb3BwZXIpO1xuXG4gIC8vIElmIG9mZnNldFBhcmVudCBpcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQsIHdlIHJlYWxseSB3YW50IHRvXG4gIC8vIGdvIG9uZSBzdGVwIHVwIGFuZCB1c2UgdGhlIG5leHQgb2Zmc2V0UGFyZW50IGFzIHJlZmVyZW5jZSB0b1xuICAvLyBhdm9pZCB0byBtYWtlIHRoaXMgbW9kaWZpZXIgY29tcGxldGVseSB1c2VsZXNzIGFuZCBsb29rIGxpa2UgYnJva2VuXG4gIGlmIChkYXRhLmluc3RhbmNlLnJlZmVyZW5jZSA9PT0gYm91bmRhcmllc0VsZW1lbnQpIHtcbiAgICBib3VuZGFyaWVzRWxlbWVudCA9IGdldE9mZnNldFBhcmVudChib3VuZGFyaWVzRWxlbWVudCk7XG4gIH1cblxuICAvLyBOT1RFOiBET00gYWNjZXNzIGhlcmVcbiAgLy8gcmVzZXRzIHRoZSBwb3BwZXIncyBwb3NpdGlvbiBzbyB0aGF0IHRoZSBkb2N1bWVudCBzaXplIGNhbiBiZSBjYWxjdWxhdGVkIGV4Y2x1ZGluZ1xuICAvLyB0aGUgc2l6ZSBvZiB0aGUgcG9wcGVyIGVsZW1lbnQgaXRzZWxmXG4gIHZhciB0cmFuc2Zvcm1Qcm9wID0gZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lKCd0cmFuc2Zvcm0nKTtcbiAgdmFyIHBvcHBlclN0eWxlcyA9IGRhdGEuaW5zdGFuY2UucG9wcGVyLnN0eWxlOyAvLyBhc3NpZ25tZW50IHRvIGhlbHAgbWluaWZpY2F0aW9uXG4gIHZhciB0b3AgPSBwb3BwZXJTdHlsZXMudG9wLFxuICAgICAgbGVmdCA9IHBvcHBlclN0eWxlcy5sZWZ0LFxuICAgICAgdHJhbnNmb3JtID0gcG9wcGVyU3R5bGVzW3RyYW5zZm9ybVByb3BdO1xuXG4gIHBvcHBlclN0eWxlcy50b3AgPSAnJztcbiAgcG9wcGVyU3R5bGVzLmxlZnQgPSAnJztcbiAgcG9wcGVyU3R5bGVzW3RyYW5zZm9ybVByb3BdID0gJyc7XG5cbiAgdmFyIGJvdW5kYXJpZXMgPSBnZXRCb3VuZGFyaWVzKGRhdGEuaW5zdGFuY2UucG9wcGVyLCBkYXRhLmluc3RhbmNlLnJlZmVyZW5jZSwgb3B0aW9ucy5wYWRkaW5nLCBib3VuZGFyaWVzRWxlbWVudCwgZGF0YS5wb3NpdGlvbkZpeGVkKTtcblxuICAvLyBOT1RFOiBET00gYWNjZXNzIGhlcmVcbiAgLy8gcmVzdG9yZXMgdGhlIG9yaWdpbmFsIHN0eWxlIHByb3BlcnRpZXMgYWZ0ZXIgdGhlIG9mZnNldHMgaGF2ZSBiZWVuIGNvbXB1dGVkXG4gIHBvcHBlclN0eWxlcy50b3AgPSB0b3A7XG4gIHBvcHBlclN0eWxlcy5sZWZ0ID0gbGVmdDtcbiAgcG9wcGVyU3R5bGVzW3RyYW5zZm9ybVByb3BdID0gdHJhbnNmb3JtO1xuXG4gIG9wdGlvbnMuYm91bmRhcmllcyA9IGJvdW5kYXJpZXM7XG5cbiAgdmFyIG9yZGVyID0gb3B0aW9ucy5wcmlvcml0eTtcbiAgdmFyIHBvcHBlciA9IGRhdGEub2Zmc2V0cy5wb3BwZXI7XG5cbiAgdmFyIGNoZWNrID0ge1xuICAgIHByaW1hcnk6IGZ1bmN0aW9uIHByaW1hcnkocGxhY2VtZW50KSB7XG4gICAgICB2YXIgdmFsdWUgPSBwb3BwZXJbcGxhY2VtZW50XTtcbiAgICAgIGlmIChwb3BwZXJbcGxhY2VtZW50XSA8IGJvdW5kYXJpZXNbcGxhY2VtZW50XSAmJiAhb3B0aW9ucy5lc2NhcGVXaXRoUmVmZXJlbmNlKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5tYXgocG9wcGVyW3BsYWNlbWVudF0sIGJvdW5kYXJpZXNbcGxhY2VtZW50XSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoe30sIHBsYWNlbWVudCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2Vjb25kYXJ5OiBmdW5jdGlvbiBzZWNvbmRhcnkocGxhY2VtZW50KSB7XG4gICAgICB2YXIgbWFpblNpZGUgPSBwbGFjZW1lbnQgPT09ICdyaWdodCcgPyAnbGVmdCcgOiAndG9wJztcbiAgICAgIHZhciB2YWx1ZSA9IHBvcHBlclttYWluU2lkZV07XG4gICAgICBpZiAocG9wcGVyW3BsYWNlbWVudF0gPiBib3VuZGFyaWVzW3BsYWNlbWVudF0gJiYgIW9wdGlvbnMuZXNjYXBlV2l0aFJlZmVyZW5jZSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgubWluKHBvcHBlclttYWluU2lkZV0sIGJvdW5kYXJpZXNbcGxhY2VtZW50XSAtIChwbGFjZW1lbnQgPT09ICdyaWdodCcgPyBwb3BwZXIud2lkdGggOiBwb3BwZXIuaGVpZ2h0KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVmaW5lUHJvcGVydHkoe30sIG1haW5TaWRlLCB2YWx1ZSk7XG4gICAgfVxuICB9O1xuXG4gIG9yZGVyLmZvckVhY2goZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHZhciBzaWRlID0gWydsZWZ0JywgJ3RvcCddLmluZGV4T2YocGxhY2VtZW50KSAhPT0gLTEgPyAncHJpbWFyeScgOiAnc2Vjb25kYXJ5JztcbiAgICBwb3BwZXIgPSBfZXh0ZW5kcyh7fSwgcG9wcGVyLCBjaGVja1tzaWRlXShwbGFjZW1lbnQpKTtcbiAgfSk7XG5cbiAgZGF0YS5vZmZzZXRzLnBvcHBlciA9IHBvcHBlcjtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSBgdXBkYXRlYCBtZXRob2RcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBvcHRpb25zIC0gTW9kaWZpZXJzIGNvbmZpZ3VyYXRpb24gYW5kIG9wdGlvbnNcbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkYXRhIG9iamVjdCwgcHJvcGVybHkgbW9kaWZpZWRcbiAqL1xuZnVuY3Rpb24gc2hpZnQoZGF0YSkge1xuICB2YXIgcGxhY2VtZW50ID0gZGF0YS5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG4gIHZhciBzaGlmdHZhcmlhdGlvbiA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xuXG4gIC8vIGlmIHNoaWZ0IHNoaWZ0dmFyaWF0aW9uIGlzIHNwZWNpZmllZCwgcnVuIHRoZSBtb2RpZmllclxuICBpZiAoc2hpZnR2YXJpYXRpb24pIHtcbiAgICB2YXIgX2RhdGEkb2Zmc2V0cyA9IGRhdGEub2Zmc2V0cyxcbiAgICAgICAgcmVmZXJlbmNlID0gX2RhdGEkb2Zmc2V0cy5yZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlciA9IF9kYXRhJG9mZnNldHMucG9wcGVyO1xuXG4gICAgdmFyIGlzVmVydGljYWwgPSBbJ2JvdHRvbScsICd0b3AnXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcbiAgICB2YXIgc2lkZSA9IGlzVmVydGljYWwgPyAnbGVmdCcgOiAndG9wJztcbiAgICB2YXIgbWVhc3VyZW1lbnQgPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuXG4gICAgdmFyIHNoaWZ0T2Zmc2V0cyA9IHtcbiAgICAgIHN0YXJ0OiBkZWZpbmVQcm9wZXJ0eSh7fSwgc2lkZSwgcmVmZXJlbmNlW3NpZGVdKSxcbiAgICAgIGVuZDogZGVmaW5lUHJvcGVydHkoe30sIHNpZGUsIHJlZmVyZW5jZVtzaWRlXSArIHJlZmVyZW5jZVttZWFzdXJlbWVudF0gLSBwb3BwZXJbbWVhc3VyZW1lbnRdKVxuICAgIH07XG5cbiAgICBkYXRhLm9mZnNldHMucG9wcGVyID0gX2V4dGVuZHMoe30sIHBvcHBlciwgc2hpZnRPZmZzZXRzW3NoaWZ0dmFyaWF0aW9uXSk7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBAZnVuY3Rpb25cbiAqIEBtZW1iZXJvZiBNb2RpZmllcnNcbiAqIEBhcmd1bWVudCB7T2JqZWN0fSBkYXRhIC0gVGhlIGRhdGEgb2JqZWN0IGdlbmVyYXRlZCBieSB1cGRhdGUgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZGF0YSBvYmplY3QsIHByb3Blcmx5IG1vZGlmaWVkXG4gKi9cbmZ1bmN0aW9uIGhpZGUoZGF0YSkge1xuICBpZiAoIWlzTW9kaWZpZXJSZXF1aXJlZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgJ2hpZGUnLCAncHJldmVudE92ZXJmbG93JykpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciByZWZSZWN0ID0gZGF0YS5vZmZzZXRzLnJlZmVyZW5jZTtcbiAgdmFyIGJvdW5kID0gZmluZChkYXRhLmluc3RhbmNlLm1vZGlmaWVycywgZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgcmV0dXJuIG1vZGlmaWVyLm5hbWUgPT09ICdwcmV2ZW50T3ZlcmZsb3cnO1xuICB9KS5ib3VuZGFyaWVzO1xuXG4gIGlmIChyZWZSZWN0LmJvdHRvbSA8IGJvdW5kLnRvcCB8fCByZWZSZWN0LmxlZnQgPiBib3VuZC5yaWdodCB8fCByZWZSZWN0LnRvcCA+IGJvdW5kLmJvdHRvbSB8fCByZWZSZWN0LnJpZ2h0IDwgYm91bmQubGVmdCkge1xuICAgIC8vIEF2b2lkIHVubmVjZXNzYXJ5IERPTSBhY2Nlc3MgaWYgdmlzaWJpbGl0eSBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChkYXRhLmhpZGUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGRhdGEuaGlkZSA9IHRydWU7XG4gICAgZGF0YS5hdHRyaWJ1dGVzWyd4LW91dC1vZi1ib3VuZGFyaWVzJ10gPSAnJztcbiAgfSBlbHNlIHtcbiAgICAvLyBBdm9pZCB1bm5lY2Vzc2FyeSBET00gYWNjZXNzIGlmIHZpc2liaWxpdHkgaGFzbid0IGNoYW5nZWRcbiAgICBpZiAoZGF0YS5oaWRlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgZGF0YS5oaWRlID0gZmFsc2U7XG4gICAgZGF0YS5hdHRyaWJ1dGVzWyd4LW91dC1vZi1ib3VuZGFyaWVzJ10gPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIEBmdW5jdGlvblxuICogQG1lbWJlcm9mIE1vZGlmaWVyc1xuICogQGFyZ3VtZW50IHtPYmplY3R9IGRhdGEgLSBUaGUgZGF0YSBvYmplY3QgZ2VuZXJhdGVkIGJ5IGB1cGRhdGVgIG1ldGhvZFxuICogQGFyZ3VtZW50IHtPYmplY3R9IG9wdGlvbnMgLSBNb2RpZmllcnMgY29uZmlndXJhdGlvbiBhbmQgb3B0aW9uc1xuICogQHJldHVybnMge09iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5mdW5jdGlvbiBpbm5lcihkYXRhKSB7XG4gIHZhciBwbGFjZW1lbnQgPSBkYXRhLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbiAgdmFyIF9kYXRhJG9mZnNldHMgPSBkYXRhLm9mZnNldHMsXG4gICAgICBwb3BwZXIgPSBfZGF0YSRvZmZzZXRzLnBvcHBlcixcbiAgICAgIHJlZmVyZW5jZSA9IF9kYXRhJG9mZnNldHMucmVmZXJlbmNlO1xuXG4gIHZhciBpc0hvcml6ID0gWydsZWZ0JywgJ3JpZ2h0J10uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgdmFyIHN1YnRyYWN0TGVuZ3RoID0gWyd0b3AnLCAnbGVmdCddLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPT09IC0xO1xuXG4gIHBvcHBlcltpc0hvcml6ID8gJ2xlZnQnIDogJ3RvcCddID0gcmVmZXJlbmNlW2Jhc2VQbGFjZW1lbnRdIC0gKHN1YnRyYWN0TGVuZ3RoID8gcG9wcGVyW2lzSG9yaXogPyAnd2lkdGgnIDogJ2hlaWdodCddIDogMCk7XG5cbiAgZGF0YS5wbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICBkYXRhLm9mZnNldHMucG9wcGVyID0gZ2V0Q2xpZW50UmVjdChwb3BwZXIpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIE1vZGlmaWVyIGZ1bmN0aW9uLCBlYWNoIG1vZGlmaWVyIGNhbiBoYXZlIGEgZnVuY3Rpb24gb2YgdGhpcyB0eXBlIGFzc2lnbmVkXG4gKiB0byBpdHMgYGZuYCBwcm9wZXJ0eS48YnIgLz5cbiAqIFRoZXNlIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIHVwZGF0ZSwgdGhpcyBtZWFucyB0aGF0IHlvdSBtdXN0XG4gKiBtYWtlIHN1cmUgdGhleSBhcmUgcGVyZm9ybWFudCBlbm91Z2ggdG8gYXZvaWQgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuXG4gKlxuICogQGZ1bmN0aW9uIE1vZGlmaWVyRm5cbiAqIEBhcmd1bWVudCB7ZGF0YU9iamVjdH0gZGF0YSAtIFRoZSBkYXRhIG9iamVjdCBnZW5lcmF0ZWQgYnkgYHVwZGF0ZWAgbWV0aG9kXG4gKiBAYXJndW1lbnQge09iamVjdH0gb3B0aW9ucyAtIE1vZGlmaWVycyBjb25maWd1cmF0aW9uIGFuZCBvcHRpb25zXG4gKiBAcmV0dXJucyB7ZGF0YU9iamVjdH0gVGhlIGRhdGEgb2JqZWN0LCBwcm9wZXJseSBtb2RpZmllZFxuICovXG5cbi8qKlxuICogTW9kaWZpZXJzIGFyZSBwbHVnaW5zIHVzZWQgdG8gYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHlvdXIgcG9wcGVycy48YnIgLz5cbiAqIFBvcHBlci5qcyB1c2VzIGEgc2V0IG9mIDkgbW9kaWZpZXJzIHRvIHByb3ZpZGUgYWxsIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXRpZXNcbiAqIG5lZWRlZCBieSB0aGUgbGlicmFyeS5cbiAqXG4gKiBVc3VhbGx5IHlvdSBkb24ndCB3YW50IHRvIG92ZXJyaWRlIHRoZSBgb3JkZXJgLCBgZm5gIGFuZCBgb25Mb2FkYCBwcm9wcy5cbiAqIEFsbCB0aGUgb3RoZXIgcHJvcGVydGllcyBhcmUgY29uZmlndXJhdGlvbnMgdGhhdCBjb3VsZCBiZSB0d2Vha2VkLlxuICogQG5hbWVzcGFjZSBtb2RpZmllcnNcbiAqL1xudmFyIG1vZGlmaWVycyA9IHtcbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gc2hpZnQgdGhlIHBvcHBlciBvbiB0aGUgc3RhcnQgb3IgZW5kIG9mIGl0cyByZWZlcmVuY2VcbiAgICogZWxlbWVudC48YnIgLz5cbiAgICogSXQgd2lsbCByZWFkIHRoZSB2YXJpYXRpb24gb2YgdGhlIGBwbGFjZW1lbnRgIHByb3BlcnR5LjxiciAvPlxuICAgKiBJdCBjYW4gYmUgb25lIGVpdGhlciBgLWVuZGAgb3IgYC1zdGFydGAuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBzaGlmdDoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj0xMDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDEwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IHNoaWZ0XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoZSBgb2Zmc2V0YCBtb2RpZmllciBjYW4gc2hpZnQgeW91ciBwb3BwZXIgb24gYm90aCBpdHMgYXhpcy5cbiAgICpcbiAgICogSXQgYWNjZXB0cyB0aGUgZm9sbG93aW5nIHVuaXRzOlxuICAgKiAtIGBweGAgb3IgdW5pdGxlc3MsIGludGVycHJldGVkIGFzIHBpeGVsc1xuICAgKiAtIGAlYCBvciBgJXJgLCBwZXJjZW50YWdlIHJlbGF0aXZlIHRvIHRoZSBsZW5ndGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50XG4gICAqIC0gYCVwYCwgcGVyY2VudGFnZSByZWxhdGl2ZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBwb3BwZXIgZWxlbWVudFxuICAgKiAtIGB2d2AsIENTUyB2aWV3cG9ydCB3aWR0aCB1bml0XG4gICAqIC0gYHZoYCwgQ1NTIHZpZXdwb3J0IGhlaWdodCB1bml0XG4gICAqXG4gICAqIEZvciBsZW5ndGggaXMgaW50ZW5kZWQgdGhlIG1haW4gYXhpcyByZWxhdGl2ZSB0byB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BwZXIuPGJyIC8+XG4gICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgcGxhY2VtZW50IGlzIGB0b3BgIG9yIGBib3R0b21gLCB0aGUgbGVuZ3RoIHdpbGwgYmUgdGhlXG4gICAqIGB3aWR0aGAuIEluIGNhc2Ugb2YgYGxlZnRgIG9yIGByaWdodGAsIGl0IHdpbGwgYmUgdGhlIGhlaWdodC5cbiAgICpcbiAgICogWW91IGNhbiBwcm92aWRlIGEgc2luZ2xlIHZhbHVlIChhcyBgTnVtYmVyYCBvciBgU3RyaW5nYCksIG9yIGEgcGFpciBvZiB2YWx1ZXNcbiAgICogYXMgYFN0cmluZ2AgZGl2aWRlZCBieSBhIGNvbW1hIG9yIG9uZSAob3IgbW9yZSkgd2hpdGUgc3BhY2VzLjxiciAvPlxuICAgKiBUaGUgbGF0dGVyIGlzIGEgZGVwcmVjYXRlZCBtZXRob2QgYmVjYXVzZSBpdCBsZWFkcyB0byBjb25mdXNpb24gYW5kIHdpbGwgYmVcbiAgICogcmVtb3ZlZCBpbiB2Mi48YnIgLz5cbiAgICogQWRkaXRpb25hbGx5LCBpdCBhY2NlcHRzIGFkZGl0aW9ucyBhbmQgc3VidHJhY3Rpb25zIGJldHdlZW4gZGlmZmVyZW50IHVuaXRzLlxuICAgKiBOb3RlIHRoYXQgbXVsdGlwbGljYXRpb25zIGFuZCBkaXZpc2lvbnMgYXJlbid0IHN1cHBvcnRlZC5cbiAgICpcbiAgICogVmFsaWQgZXhhbXBsZXMgYXJlOlxuICAgKiBgYGBcbiAgICogMTBcbiAgICogJzEwJSdcbiAgICogJzEwLCAxMCdcbiAgICogJzEwJSwgMTAnXG4gICAqICcxMCArIDEwJSdcbiAgICogJzEwIC0gNXZoICsgMyUnXG4gICAqICctMTBweCArIDV2aCwgNXB4IC0gNiUnXG4gICAqIGBgYFxuICAgKiA+ICoqTkIqKjogSWYgeW91IGRlc2lyZSB0byBhcHBseSBvZmZzZXRzIHRvIHlvdXIgcG9wcGVycyBpbiBhIHdheSB0aGF0IG1heSBtYWtlIHRoZW0gb3ZlcmxhcFxuICAgKiA+IHdpdGggdGhlaXIgcmVmZXJlbmNlIGVsZW1lbnQsIHVuZm9ydHVuYXRlbHksIHlvdSB3aWxsIGhhdmUgdG8gZGlzYWJsZSB0aGUgYGZsaXBgIG1vZGlmaWVyLlxuICAgKiA+IE1vcmUgb24gdGhpcyBbcmVhZGluZyB0aGlzIGlzc3VlXShodHRwczovL2dpdGh1Yi5jb20vRmV6VnJhc3RhL3BvcHBlci5qcy9pc3N1ZXMvMzczKVxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgb2Zmc2V0OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTIwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogMjAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogb2Zmc2V0LFxuICAgIC8qKiBAcHJvcCB7TnVtYmVyfFN0cmluZ30gb2Zmc2V0PTBcbiAgICAgKiBUaGUgb2Zmc2V0IHZhbHVlIGFzIGRlc2NyaWJlZCBpbiB0aGUgbW9kaWZpZXIgZGVzY3JpcHRpb25cbiAgICAgKi9cbiAgICBvZmZzZXQ6IDBcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBwcmV2ZW50IHRoZSBwb3BwZXIgZnJvbSBiZWluZyBwb3NpdGlvbmVkIG91dHNpZGUgdGhlIGJvdW5kYXJ5LlxuICAgKlxuICAgKiBBbiBzY2VuYXJpbyBleGlzdHMgd2hlcmUgdGhlIHJlZmVyZW5jZSBpdHNlbGYgaXMgbm90IHdpdGhpbiB0aGUgYm91bmRhcmllcy48YnIgLz5cbiAgICogV2UgY2FuIHNheSBpdCBoYXMgXCJlc2NhcGVkIHRoZSBib3VuZGFyaWVzXCIg4oCUIG9yIGp1c3QgXCJlc2NhcGVkXCIuPGJyIC8+XG4gICAqIEluIHRoaXMgY2FzZSB3ZSBuZWVkIHRvIGRlY2lkZSB3aGV0aGVyIHRoZSBwb3BwZXIgc2hvdWxkIGVpdGhlcjpcbiAgICpcbiAgICogLSBkZXRhY2ggZnJvbSB0aGUgcmVmZXJlbmNlIGFuZCByZW1haW4gXCJ0cmFwcGVkXCIgaW4gdGhlIGJvdW5kYXJpZXMsIG9yXG4gICAqIC0gaWYgaXQgc2hvdWxkIGlnbm9yZSB0aGUgYm91bmRhcnkgYW5kIFwiZXNjYXBlIHdpdGggaXRzIHJlZmVyZW5jZVwiXG4gICAqXG4gICAqIFdoZW4gYGVzY2FwZVdpdGhSZWZlcmVuY2VgIGlzIHNldCB0b2B0cnVlYCBhbmQgcmVmZXJlbmNlIGlzIGNvbXBsZXRlbHlcbiAgICogb3V0c2lkZSBpdHMgYm91bmRhcmllcywgdGhlIHBvcHBlciB3aWxsIG92ZXJmbG93IChvciBjb21wbGV0ZWx5IGxlYXZlKVxuICAgKiB0aGUgYm91bmRhcmllcyBpbiBvcmRlciB0byByZW1haW4gYXR0YWNoZWQgdG8gdGhlIGVkZ2Ugb2YgdGhlIHJlZmVyZW5jZS5cbiAgICpcbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIHByZXZlbnRPdmVyZmxvdzoge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj0zMDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDMwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7QXJyYXl9IFtwcmlvcml0eT1bJ2xlZnQnLCdyaWdodCcsJ3RvcCcsJ2JvdHRvbSddXVxuICAgICAqIFBvcHBlciB3aWxsIHRyeSB0byBwcmV2ZW50IG92ZXJmbG93IGZvbGxvd2luZyB0aGVzZSBwcmlvcml0aWVzIGJ5IGRlZmF1bHQsXG4gICAgICogdGhlbiwgaXQgY291bGQgb3ZlcmZsb3cgb24gdGhlIGxlZnQgYW5kIG9uIHRvcCBvZiB0aGUgYGJvdW5kYXJpZXNFbGVtZW50YFxuICAgICAqL1xuICAgIHByaW9yaXR5OiBbJ2xlZnQnLCAncmlnaHQnLCAndG9wJywgJ2JvdHRvbSddLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtudW1iZXJ9IHBhZGRpbmc9NVxuICAgICAqIEFtb3VudCBvZiBwaXhlbCB1c2VkIHRvIGRlZmluZSBhIG1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiB0aGUgYm91bmRhcmllc1xuICAgICAqIGFuZCB0aGUgcG9wcGVyIHRoaXMgbWFrZXMgc3VyZSB0aGUgcG9wcGVyIGhhcyBhbHdheXMgYSBsaXR0bGUgcGFkZGluZ1xuICAgICAqIGJldHdlZW4gdGhlIGVkZ2VzIG9mIGl0cyBjb250YWluZXJcbiAgICAgKi9cbiAgICBwYWRkaW5nOiA1LFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGJvdW5kYXJpZXNFbGVtZW50PSdzY3JvbGxQYXJlbnQnXG4gICAgICogQm91bmRhcmllcyB1c2VkIGJ5IHRoZSBtb2RpZmllciwgY2FuIGJlIGBzY3JvbGxQYXJlbnRgLCBgd2luZG93YCxcbiAgICAgKiBgdmlld3BvcnRgIG9yIGFueSBET00gZWxlbWVudC5cbiAgICAgKi9cbiAgICBib3VuZGFyaWVzRWxlbWVudDogJ3Njcm9sbFBhcmVudCdcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBtYWtlIHN1cmUgdGhlIHJlZmVyZW5jZSBhbmQgaXRzIHBvcHBlciBzdGF5IG5lYXIgZWFjaG90aGVyc1xuICAgKiB3aXRob3V0IGxlYXZpbmcgYW55IGdhcCBiZXR3ZWVuIHRoZSB0d28uIEV4cGVjaWFsbHkgdXNlZnVsIHdoZW4gdGhlIGFycm93IGlzXG4gICAqIGVuYWJsZWQgYW5kIHlvdSB3YW50IHRvIGFzc3VyZSBpdCB0byBwb2ludCB0byBpdHMgcmVmZXJlbmNlIGVsZW1lbnQuXG4gICAqIEl0IGNhcmVzIG9ubHkgYWJvdXQgdGhlIGZpcnN0IGF4aXMsIHlvdSBjYW4gc3RpbGwgaGF2ZSBwb3BwZXJzIHdpdGggbWFyZ2luXG4gICAqIGJldHdlZW4gdGhlIHBvcHBlciBhbmQgaXRzIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAga2VlcFRvZ2V0aGVyOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTQwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNDAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjoga2VlcFRvZ2V0aGVyXG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoaXMgbW9kaWZpZXIgaXMgdXNlZCB0byBtb3ZlIHRoZSBgYXJyb3dFbGVtZW50YCBvZiB0aGUgcG9wcGVyIHRvIG1ha2VcbiAgICogc3VyZSBpdCBpcyBwb3NpdGlvbmVkIGJldHdlZW4gdGhlIHJlZmVyZW5jZSBlbGVtZW50IGFuZCBpdHMgcG9wcGVyIGVsZW1lbnQuXG4gICAqIEl0IHdpbGwgcmVhZCB0aGUgb3V0ZXIgc2l6ZSBvZiB0aGUgYGFycm93RWxlbWVudGAgbm9kZSB0byBkZXRlY3QgaG93IG1hbnlcbiAgICogcGl4ZWxzIG9mIGNvbmp1Y3Rpb24gYXJlIG5lZWRlZC5cbiAgICpcbiAgICogSXQgaGFzIG5vIGVmZmVjdCBpZiBubyBgYXJyb3dFbGVtZW50YCBpcyBwcm92aWRlZC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGFycm93OiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTUwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogNTAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogYXJyb3csXG4gICAgLyoqIEBwcm9wIHtTdHJpbmd8SFRNTEVsZW1lbnR9IGVsZW1lbnQ9J1t4LWFycm93XScgLSBTZWxlY3RvciBvciBub2RlIHVzZWQgYXMgYXJyb3cgKi9cbiAgICBlbGVtZW50OiAnW3gtYXJyb3ddJ1xuICB9LFxuXG4gIC8qKlxuICAgKiBNb2RpZmllciB1c2VkIHRvIGZsaXAgdGhlIHBvcHBlcidzIHBsYWNlbWVudCB3aGVuIGl0IHN0YXJ0cyB0byBvdmVybGFwIGl0c1xuICAgKiByZWZlcmVuY2UgZWxlbWVudC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBwcmV2ZW50T3ZlcmZsb3dgIG1vZGlmaWVyIGJlZm9yZSBpdCBpbiBvcmRlciB0byB3b3JrLlxuICAgKlxuICAgKiAqKk5PVEU6KiogdGhpcyBtb2RpZmllciB3aWxsIGludGVycnVwdCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUgYW5kIHdpbGxcbiAgICogcmVzdGFydCBpdCBpZiBpdCBkZXRlY3RzIHRoZSBuZWVkIHRvIGZsaXAgdGhlIHBsYWNlbWVudC5cbiAgICogQG1lbWJlcm9mIG1vZGlmaWVyc1xuICAgKiBAaW5uZXJcbiAgICovXG4gIGZsaXA6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NjAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA2MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBmbGlwLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtTdHJpbmd8QXJyYXl9IGJlaGF2aW9yPSdmbGlwJ1xuICAgICAqIFRoZSBiZWhhdmlvciB1c2VkIHRvIGNoYW5nZSB0aGUgcG9wcGVyJ3MgcGxhY2VtZW50LiBJdCBjYW4gYmUgb25lIG9mXG4gICAgICogYGZsaXBgLCBgY2xvY2t3aXNlYCwgYGNvdW50ZXJjbG9ja3dpc2VgIG9yIGFuIGFycmF5IHdpdGggYSBsaXN0IG9mIHZhbGlkXG4gICAgICogcGxhY2VtZW50cyAod2l0aCBvcHRpb25hbCB2YXJpYXRpb25zKS5cbiAgICAgKi9cbiAgICBiZWhhdmlvcjogJ2ZsaXAnLFxuICAgIC8qKlxuICAgICAqIEBwcm9wIHtudW1iZXJ9IHBhZGRpbmc9NVxuICAgICAqIFRoZSBwb3BwZXIgd2lsbCBmbGlwIGlmIGl0IGhpdHMgdGhlIGVkZ2VzIG9mIHRoZSBgYm91bmRhcmllc0VsZW1lbnRgXG4gICAgICovXG4gICAgcGFkZGluZzogNSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7U3RyaW5nfEhUTUxFbGVtZW50fSBib3VuZGFyaWVzRWxlbWVudD0ndmlld3BvcnQnXG4gICAgICogVGhlIGVsZW1lbnQgd2hpY2ggd2lsbCBkZWZpbmUgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHBvcHBlciBwb3NpdGlvbixcbiAgICAgKiB0aGUgcG9wcGVyIHdpbGwgbmV2ZXIgYmUgcGxhY2VkIG91dHNpZGUgb2YgdGhlIGRlZmluZWQgYm91bmRhcmllc1xuICAgICAqIChleGNlcHQgaWYga2VlcFRvZ2V0aGVyIGlzIGVuYWJsZWQpXG4gICAgICovXG4gICAgYm91bmRhcmllc0VsZW1lbnQ6ICd2aWV3cG9ydCdcbiAgfSxcblxuICAvKipcbiAgICogTW9kaWZpZXIgdXNlZCB0byBtYWtlIHRoZSBwb3BwZXIgZmxvdyB0b3dhcmQgdGhlIGlubmVyIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAgICogQnkgZGVmYXVsdCwgd2hlbiB0aGlzIG1vZGlmaWVyIGlzIGRpc2FibGVkLCB0aGUgcG9wcGVyIHdpbGwgYmUgcGxhY2VkIG91dHNpZGVcbiAgICogdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgaW5uZXI6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9NzAwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA3MDAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPWZhbHNlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGlubmVyXG4gIH0sXG5cbiAgLyoqXG4gICAqIE1vZGlmaWVyIHVzZWQgdG8gaGlkZSB0aGUgcG9wcGVyIHdoZW4gaXRzIHJlZmVyZW5jZSBlbGVtZW50IGlzIG91dHNpZGUgb2YgdGhlXG4gICAqIHBvcHBlciBib3VuZGFyaWVzLiBJdCB3aWxsIHNldCBhIGB4LW91dC1vZi1ib3VuZGFyaWVzYCBhdHRyaWJ1dGUgd2hpY2ggY2FuXG4gICAqIGJlIHVzZWQgdG8gaGlkZSB3aXRoIGEgQ1NTIHNlbGVjdG9yIHRoZSBwb3BwZXIgd2hlbiBpdHMgcmVmZXJlbmNlIGlzXG4gICAqIG91dCBvZiBib3VuZGFyaWVzLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYHByZXZlbnRPdmVyZmxvd2AgbW9kaWZpZXIgYmVmb3JlIGl0IGluIG9yZGVyIHRvIHdvcmsuXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBoaWRlOiB7XG4gICAgLyoqIEBwcm9wIHtudW1iZXJ9IG9yZGVyPTgwMCAtIEluZGV4IHVzZWQgdG8gZGVmaW5lIHRoZSBvcmRlciBvZiBleGVjdXRpb24gKi9cbiAgICBvcmRlcjogODAwLFxuICAgIC8qKiBAcHJvcCB7Qm9vbGVhbn0gZW5hYmxlZD10cnVlIC0gV2hldGhlciB0aGUgbW9kaWZpZXIgaXMgZW5hYmxlZCBvciBub3QgKi9cbiAgICBlbmFibGVkOiB0cnVlLFxuICAgIC8qKiBAcHJvcCB7TW9kaWZpZXJGbn0gKi9cbiAgICBmbjogaGlkZVxuICB9LFxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgc3R5bGUgdGhhdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlciBlbGVtZW50IHRvIGdldHNcbiAgICogcHJvcGVybHkgcG9zaXRpb25lZC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHRoaXMgbW9kaWZpZXIgd2lsbCBub3QgdG91Y2ggdGhlIERPTSwgaXQganVzdCBwcmVwYXJlcyB0aGUgc3R5bGVzXG4gICAqIHNvIHRoYXQgYGFwcGx5U3R5bGVgIG1vZGlmaWVyIGNhbiBhcHBseSBpdC4gVGhpcyBzZXBhcmF0aW9uIGlzIHVzZWZ1bFxuICAgKiBpbiBjYXNlIHlvdSBuZWVkIHRvIHJlcGxhY2UgYGFwcGx5U3R5bGVgIHdpdGggYSBjdXN0b20gaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIFRoaXMgbW9kaWZpZXIgaGFzIGA4NTBgIGFzIGBvcmRlcmAgdmFsdWUgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgKiB3aXRoIHByZXZpb3VzIHZlcnNpb25zIG9mIFBvcHBlci5qcy4gRXhwZWN0IHRoZSBtb2RpZmllcnMgb3JkZXJpbmcgbWV0aG9kXG4gICAqIHRvIGNoYW5nZSBpbiBmdXR1cmUgbWFqb3IgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBtb2RpZmllcnNcbiAgICogQGlubmVyXG4gICAqL1xuICBjb21wdXRlU3R5bGU6IHtcbiAgICAvKiogQHByb3Age251bWJlcn0gb3JkZXI9ODUwIC0gSW5kZXggdXNlZCB0byBkZWZpbmUgdGhlIG9yZGVyIG9mIGV4ZWN1dGlvbiAqL1xuICAgIG9yZGVyOiA4NTAsXG4gICAgLyoqIEBwcm9wIHtCb29sZWFufSBlbmFibGVkPXRydWUgLSBXaGV0aGVyIHRoZSBtb2RpZmllciBpcyBlbmFibGVkIG9yIG5vdCAqL1xuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgLyoqIEBwcm9wIHtNb2RpZmllckZufSAqL1xuICAgIGZuOiBjb21wdXRlU3R5bGUsXG4gICAgLyoqXG4gICAgICogQHByb3Age0Jvb2xlYW59IGdwdUFjY2VsZXJhdGlvbj10cnVlXG4gICAgICogSWYgdHJ1ZSwgaXQgdXNlcyB0aGUgQ1NTIDNkIHRyYW5zZm9ybWF0aW9uIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIuXG4gICAgICogT3RoZXJ3aXNlLCBpdCB3aWxsIHVzZSB0aGUgYHRvcGAgYW5kIGBsZWZ0YCBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIGdwdUFjY2VsZXJhdGlvbjogdHJ1ZSxcbiAgICAvKipcbiAgICAgKiBAcHJvcCB7c3RyaW5nfSBbeD0nYm90dG9tJ11cbiAgICAgKiBXaGVyZSB0byBhbmNob3IgdGhlIFggYXhpcyAoYGJvdHRvbWAgb3IgYHRvcGApLiBBS0EgWCBvZmZzZXQgb3JpZ2luLlxuICAgICAqIENoYW5nZSB0aGlzIGlmIHlvdXIgcG9wcGVyIHNob3VsZCBncm93IGluIGEgZGlyZWN0aW9uIGRpZmZlcmVudCBmcm9tIGBib3R0b21gXG4gICAgICovXG4gICAgeDogJ2JvdHRvbScsXG4gICAgLyoqXG4gICAgICogQHByb3Age3N0cmluZ30gW3g9J2xlZnQnXVxuICAgICAqIFdoZXJlIHRvIGFuY2hvciB0aGUgWSBheGlzIChgbGVmdGAgb3IgYHJpZ2h0YCkuIEFLQSBZIG9mZnNldCBvcmlnaW4uXG4gICAgICogQ2hhbmdlIHRoaXMgaWYgeW91ciBwb3BwZXIgc2hvdWxkIGdyb3cgaW4gYSBkaXJlY3Rpb24gZGlmZmVyZW50IGZyb20gYHJpZ2h0YFxuICAgICAqL1xuICAgIHk6ICdyaWdodCdcbiAgfSxcblxuICAvKipcbiAgICogQXBwbGllcyB0aGUgY29tcHV0ZWQgc3R5bGVzIHRvIHRoZSBwb3BwZXIgZWxlbWVudC5cbiAgICpcbiAgICogQWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyBhcmUgbGltaXRlZCB0byB0aGlzIG1vZGlmaWVyLiBUaGlzIGlzIHVzZWZ1bCBpbiBjYXNlXG4gICAqIHlvdSB3YW50IHRvIGludGVncmF0ZSBQb3BwZXIuanMgaW5zaWRlIGEgZnJhbWV3b3JrIG9yIHZpZXcgbGlicmFyeSBhbmQgeW91XG4gICAqIHdhbnQgdG8gZGVsZWdhdGUgYWxsIHRoZSBET00gbWFuaXB1bGF0aW9ucyB0byBpdC5cbiAgICpcbiAgICogTm90ZSB0aGF0IGlmIHlvdSBkaXNhYmxlIHRoaXMgbW9kaWZpZXIsIHlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcG9wcGVyIGVsZW1lbnRcbiAgICogaGFzIGl0cyBwb3NpdGlvbiBzZXQgdG8gYGFic29sdXRlYCBiZWZvcmUgUG9wcGVyLmpzIGNhbiBkbyBpdHMgd29yayFcbiAgICpcbiAgICogSnVzdCBkaXNhYmxlIHRoaXMgbW9kaWZpZXIgYW5kIGRlZmluZSB5b3Ugb3duIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgZWZmZWN0LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgbW9kaWZpZXJzXG4gICAqIEBpbm5lclxuICAgKi9cbiAgYXBwbHlTdHlsZToge1xuICAgIC8qKiBAcHJvcCB7bnVtYmVyfSBvcmRlcj05MDAgLSBJbmRleCB1c2VkIHRvIGRlZmluZSB0aGUgb3JkZXIgb2YgZXhlY3V0aW9uICovXG4gICAgb3JkZXI6IDkwMCxcbiAgICAvKiogQHByb3Age0Jvb2xlYW59IGVuYWJsZWQ9dHJ1ZSAtIFdoZXRoZXIgdGhlIG1vZGlmaWVyIGlzIGVuYWJsZWQgb3Igbm90ICovXG4gICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAvKiogQHByb3Age01vZGlmaWVyRm59ICovXG4gICAgZm46IGFwcGx5U3R5bGUsXG4gICAgLyoqIEBwcm9wIHtGdW5jdGlvbn0gKi9cbiAgICBvbkxvYWQ6IGFwcGx5U3R5bGVPbkxvYWQsXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEwLjAsIHRoZSBwcm9wZXJ0eSBtb3ZlZCB0byBgY29tcHV0ZVN0eWxlYCBtb2RpZmllclxuICAgICAqIEBwcm9wIHtCb29sZWFufSBncHVBY2NlbGVyYXRpb249dHJ1ZVxuICAgICAqIElmIHRydWUsIGl0IHVzZXMgdGhlIENTUyAzZCB0cmFuc2Zvcm1hdGlvbiB0byBwb3NpdGlvbiB0aGUgcG9wcGVyLlxuICAgICAqIE90aGVyd2lzZSwgaXQgd2lsbCB1c2UgdGhlIGB0b3BgIGFuZCBgbGVmdGAgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBncHVBY2NlbGVyYXRpb246IHVuZGVmaW5lZFxuICB9XG59O1xuXG4vKipcbiAqIFRoZSBgZGF0YU9iamVjdGAgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBpbmZvcm1hdGlvbnMgdXNlZCBieSBQb3BwZXIuanNcbiAqIHRoaXMgb2JqZWN0IGdldCBwYXNzZWQgdG8gbW9kaWZpZXJzIGFuZCB0byB0aGUgYG9uQ3JlYXRlYCBhbmQgYG9uVXBkYXRlYCBjYWxsYmFja3MuXG4gKiBAbmFtZSBkYXRhT2JqZWN0XG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5pbnN0YW5jZSBUaGUgUG9wcGVyLmpzIGluc3RhbmNlXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGF0YS5wbGFjZW1lbnQgUGxhY2VtZW50IGFwcGxpZWQgdG8gcG9wcGVyXG4gKiBAcHJvcGVydHkge1N0cmluZ30gZGF0YS5vcmlnaW5hbFBsYWNlbWVudCBQbGFjZW1lbnQgb3JpZ2luYWxseSBkZWZpbmVkIG9uIGluaXRcbiAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGF0YS5mbGlwcGVkIFRydWUgaWYgcG9wcGVyIGhhcyBiZWVuIGZsaXBwZWQgYnkgZmxpcCBtb2RpZmllclxuICogQHByb3BlcnR5IHtCb29sZWFufSBkYXRhLmhpZGUgVHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIGVsZW1lbnQgaXMgb3V0IG9mIGJvdW5kYXJpZXMsIHVzZWZ1bCB0byBrbm93IHdoZW4gdG8gaGlkZSB0aGUgcG9wcGVyLlxuICogQHByb3BlcnR5IHtIVE1MRWxlbWVudH0gZGF0YS5hcnJvd0VsZW1lbnQgTm9kZSB1c2VkIGFzIGFycm93IGJ5IGFycm93IG1vZGlmaWVyXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5zdHlsZXMgQW55IENTUyBwcm9wZXJ0eSBkZWZpbmVkIGhlcmUgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3BwZXIsIGl0IGV4cGVjdHMgdGhlIEphdmFTY3JpcHQgbm9tZW5jbGF0dXJlIChlZy4gYG1hcmdpbkJvdHRvbWApXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5hcnJvd1N0eWxlcyBBbnkgQ1NTIHByb3BlcnR5IGRlZmluZWQgaGVyZSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlciBhcnJvdywgaXQgZXhwZWN0cyB0aGUgSmF2YVNjcmlwdCBub21lbmNsYXR1cmUgKGVnLiBgbWFyZ2luQm90dG9tYClcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLmJvdW5kYXJpZXMgT2Zmc2V0cyBvZiB0aGUgcG9wcGVyIGJvdW5kYXJpZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMgVGhlIG1lYXN1cmVtZW50cyBvZiBwb3BwZXIsIHJlZmVyZW5jZSBhbmQgYXJyb3cgZWxlbWVudHMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gZGF0YS5vZmZzZXRzLnBvcHBlciBgdG9wYCwgYGxlZnRgLCBgd2lkdGhgLCBgaGVpZ2h0YCB2YWx1ZXNcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkYXRhLm9mZnNldHMucmVmZXJlbmNlIGB0b3BgLCBgbGVmdGAsIGB3aWR0aGAsIGBoZWlnaHRgIHZhbHVlc1xuICogQHByb3BlcnR5IHtPYmplY3R9IGRhdGEub2Zmc2V0cy5hcnJvd10gYHRvcGAgYW5kIGBsZWZ0YCBvZmZzZXRzLCBvbmx5IG9uZSBvZiB0aGVtIHdpbGwgYmUgZGlmZmVyZW50IGZyb20gMFxuICovXG5cbi8qKlxuICogRGVmYXVsdCBvcHRpb25zIHByb3ZpZGVkIHRvIFBvcHBlci5qcyBjb25zdHJ1Y3Rvci48YnIgLz5cbiAqIFRoZXNlIGNhbiBiZSBvdmVycmlkZW4gdXNpbmcgdGhlIGBvcHRpb25zYCBhcmd1bWVudCBvZiBQb3BwZXIuanMuPGJyIC8+XG4gKiBUbyBvdmVycmlkZSBhbiBvcHRpb24sIHNpbXBseSBwYXNzIGFzIDNyZCBhcmd1bWVudCBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZVxuICogc3RydWN0dXJlIG9mIHRoaXMgb2JqZWN0LCBleGFtcGxlOlxuICogYGBgXG4gKiBuZXcgUG9wcGVyKHJlZiwgcG9wLCB7XG4gKiAgIG1vZGlmaWVyczoge1xuICogICAgIHByZXZlbnRPdmVyZmxvdzogeyBlbmFibGVkOiBmYWxzZSB9XG4gKiAgIH1cbiAqIH0pXG4gKiBgYGBcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyb2YgUG9wcGVyXG4gKi9cbnZhciBEZWZhdWx0cyA9IHtcbiAgLyoqXG4gICAqIFBvcHBlcidzIHBsYWNlbWVudFxuICAgKiBAcHJvcCB7UG9wcGVyLnBsYWNlbWVudHN9IHBsYWNlbWVudD0nYm90dG9tJ1xuICAgKi9cbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcblxuICAvKipcbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSBpZiB5b3Ugd2FudCBwb3BwZXIgdG8gcG9zaXRpb24gaXQgc2VsZiBpbiAnZml4ZWQnIG1vZGVcbiAgICogQHByb3Age0Jvb2xlYW59IHBvc2l0aW9uRml4ZWQ9ZmFsc2VcbiAgICovXG4gIHBvc2l0aW9uRml4ZWQ6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGV2ZW50cyAocmVzaXplLCBzY3JvbGwpIGFyZSBpbml0aWFsbHkgZW5hYmxlZFxuICAgKiBAcHJvcCB7Qm9vbGVhbn0gZXZlbnRzRW5hYmxlZD10cnVlXG4gICAqL1xuICBldmVudHNFbmFibGVkOiB0cnVlLFxuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlbW92ZSB0aGUgcG9wcGVyIHdoZW5cbiAgICogeW91IGNhbGwgdGhlIGBkZXN0cm95YCBtZXRob2QuXG4gICAqIEBwcm9wIHtCb29sZWFufSByZW1vdmVPbkRlc3Ryb3k9ZmFsc2VcbiAgICovXG4gIHJlbW92ZU9uRGVzdHJveTogZmFsc2UsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGNhbGxlZCB3aGVuIHRoZSBwb3BwZXIgaXMgY3JlYXRlZC48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25DcmVhdGV9XG4gICAqL1xuICBvbkNyZWF0ZTogZnVuY3Rpb24gb25DcmVhdGUoKSB7fSxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgY2FsbGVkIHdoZW4gdGhlIHBvcHBlciBpcyB1cGRhdGVkLCB0aGlzIGNhbGxiYWNrIGlzIG5vdCBjYWxsZWRcbiAgICogb24gdGhlIGluaXRpYWxpemF0aW9uL2NyZWF0aW9uIG9mIHRoZSBwb3BwZXIsIGJ1dCBvbmx5IG9uIHN1YnNlcXVlbnRcbiAgICogdXBkYXRlcy48YnIgLz5cbiAgICogQnkgZGVmYXVsdCwgaXMgc2V0IHRvIG5vLW9wLjxiciAvPlxuICAgKiBBY2Nlc3MgUG9wcGVyLmpzIGluc3RhbmNlIHdpdGggYGRhdGEuaW5zdGFuY2VgLlxuICAgKiBAcHJvcCB7b25VcGRhdGV9XG4gICAqL1xuICBvblVwZGF0ZTogZnVuY3Rpb24gb25VcGRhdGUoKSB7fSxcblxuICAvKipcbiAgICogTGlzdCBvZiBtb2RpZmllcnMgdXNlZCB0byBtb2RpZnkgdGhlIG9mZnNldHMgYmVmb3JlIHRoZXkgYXJlIGFwcGxpZWQgdG8gdGhlIHBvcHBlci5cbiAgICogVGhleSBwcm92aWRlIG1vc3Qgb2YgdGhlIGZ1bmN0aW9uYWxpdGllcyBvZiBQb3BwZXIuanNcbiAgICogQHByb3Age21vZGlmaWVyc31cbiAgICovXG4gIG1vZGlmaWVyczogbW9kaWZpZXJzXG59O1xuXG4vKipcbiAqIEBjYWxsYmFjayBvbkNyZWF0ZVxuICogQHBhcmFtIHtkYXRhT2JqZWN0fSBkYXRhXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgb25VcGRhdGVcbiAqIEBwYXJhbSB7ZGF0YU9iamVjdH0gZGF0YVxuICovXG5cbi8vIFV0aWxzXG4vLyBNZXRob2RzXG52YXIgUG9wcGVyID0gZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFBvcHBlci5qcyBpbnN0YW5jZVxuICAgKiBAY2xhc3MgUG9wcGVyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8cmVmZXJlbmNlT2JqZWN0fSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIGVsZW1lbnQgdXNlZCB0byBwb3NpdGlvbiB0aGUgcG9wcGVyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHBvcHBlciAtIFRoZSBIVE1MIGVsZW1lbnQgdXNlZCBhcyBwb3BwZXIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gWW91ciBjdXN0b20gb3B0aW9ucyB0byBvdmVycmlkZSB0aGUgb25lcyBkZWZpbmVkIGluIFtEZWZhdWx0c10oI2RlZmF1bHRzKVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IGluc3RhbmNlIC0gVGhlIGdlbmVyYXRlZCBQb3BwZXIuanMgaW5zdGFuY2VcbiAgICovXG4gIGZ1bmN0aW9uIFBvcHBlcihyZWZlcmVuY2UsIHBvcHBlcikge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDoge307XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9wcGVyKTtcblxuICAgIHRoaXMuc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLnVwZGF0ZSk7XG4gICAgfTtcblxuICAgIC8vIG1ha2UgdXBkYXRlKCkgZGVib3VuY2VkLCBzbyB0aGF0IGl0IG9ubHkgcnVucyBhdCBtb3N0IG9uY2UtcGVyLXRpY2tcbiAgICB0aGlzLnVwZGF0ZSA9IGRlYm91bmNlKHRoaXMudXBkYXRlLmJpbmQodGhpcykpO1xuXG4gICAgLy8gd2l0aCB7fSB3ZSBjcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdGhlIG9wdGlvbnMgaW5zaWRlIGl0XG4gICAgdGhpcy5vcHRpb25zID0gX2V4dGVuZHMoe30sIFBvcHBlci5EZWZhdWx0cywgb3B0aW9ucyk7XG5cbiAgICAvLyBpbml0IHN0YXRlXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzRGVzdHJveWVkOiBmYWxzZSxcbiAgICAgIGlzQ3JlYXRlZDogZmFsc2UsXG4gICAgICBzY3JvbGxQYXJlbnRzOiBbXVxuICAgIH07XG5cbiAgICAvLyBnZXQgcmVmZXJlbmNlIGFuZCBwb3BwZXIgZWxlbWVudHMgKGFsbG93IGpRdWVyeSB3cmFwcGVycylcbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZSAmJiByZWZlcmVuY2UuanF1ZXJ5ID8gcmVmZXJlbmNlWzBdIDogcmVmZXJlbmNlO1xuICAgIHRoaXMucG9wcGVyID0gcG9wcGVyICYmIHBvcHBlci5qcXVlcnkgPyBwb3BwZXJbMF0gOiBwb3BwZXI7XG5cbiAgICAvLyBEZWVwIG1lcmdlIG1vZGlmaWVycyBvcHRpb25zXG4gICAgdGhpcy5vcHRpb25zLm1vZGlmaWVycyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKF9leHRlbmRzKHt9LCBQb3BwZXIuRGVmYXVsdHMubW9kaWZpZXJzLCBvcHRpb25zLm1vZGlmaWVycykpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIF90aGlzLm9wdGlvbnMubW9kaWZpZXJzW25hbWVdID0gX2V4dGVuZHMoe30sIFBvcHBlci5EZWZhdWx0cy5tb2RpZmllcnNbbmFtZV0gfHwge30sIG9wdGlvbnMubW9kaWZpZXJzID8gb3B0aW9ucy5tb2RpZmllcnNbbmFtZV0gOiB7fSk7XG4gICAgfSk7XG5cbiAgICAvLyBSZWZhY3RvcmluZyBtb2RpZmllcnMnIGxpc3QgKE9iamVjdCA9PiBBcnJheSlcbiAgICB0aGlzLm1vZGlmaWVycyA9IE9iamVjdC5rZXlzKHRoaXMub3B0aW9ucy5tb2RpZmllcnMpLm1hcChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICAgICAgbmFtZTogbmFtZVxuICAgICAgfSwgX3RoaXMub3B0aW9ucy5tb2RpZmllcnNbbmFtZV0pO1xuICAgIH0pXG4gICAgLy8gc29ydCB0aGUgbW9kaWZpZXJzIGJ5IG9yZGVyXG4gICAgLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLm9yZGVyIC0gYi5vcmRlcjtcbiAgICB9KTtcblxuICAgIC8vIG1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgd2hlbiBQb3BwZXIuanMgZ2V0IGluaXRlZFxuICAgIC8vIHN1Y2ggY29kZSBpcyBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBvZiBpdHMgbW9kaWZpZXJcbiAgICAvLyB0aGV5IGNvdWxkIGFkZCBuZXcgcHJvcGVydGllcyB0byB0aGVpciBvcHRpb25zIGNvbmZpZ3VyYXRpb25cbiAgICAvLyBCRSBBV0FSRTogZG9uJ3QgYWRkIG9wdGlvbnMgdG8gYG9wdGlvbnMubW9kaWZpZXJzLm5hbWVgIGJ1dCB0byBgbW9kaWZpZXJPcHRpb25zYCFcbiAgICB0aGlzLm1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllck9wdGlvbnMpIHtcbiAgICAgIGlmIChtb2RpZmllck9wdGlvbnMuZW5hYmxlZCAmJiBpc0Z1bmN0aW9uKG1vZGlmaWVyT3B0aW9ucy5vbkxvYWQpKSB7XG4gICAgICAgIG1vZGlmaWVyT3B0aW9ucy5vbkxvYWQoX3RoaXMucmVmZXJlbmNlLCBfdGhpcy5wb3BwZXIsIF90aGlzLm9wdGlvbnMsIG1vZGlmaWVyT3B0aW9ucywgX3RoaXMuc3RhdGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gZmlyZSB0aGUgZmlyc3QgdXBkYXRlIHRvIHBvc2l0aW9uIHRoZSBwb3BwZXIgaW4gdGhlIHJpZ2h0IHBsYWNlXG4gICAgdGhpcy51cGRhdGUoKTtcblxuICAgIHZhciBldmVudHNFbmFibGVkID0gdGhpcy5vcHRpb25zLmV2ZW50c0VuYWJsZWQ7XG4gICAgaWYgKGV2ZW50c0VuYWJsZWQpIHtcbiAgICAgIC8vIHNldHVwIGV2ZW50IGxpc3RlbmVycywgdGhleSB3aWxsIHRha2UgY2FyZSBvZiB1cGRhdGUgdGhlIHBvc2l0aW9uIGluIHNwZWNpZmljIHNpdHVhdGlvbnNcbiAgICAgIHRoaXMuZW5hYmxlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlLmV2ZW50c0VuYWJsZWQgPSBldmVudHNFbmFibGVkO1xuICB9XG5cbiAgLy8gV2UgY2FuJ3QgdXNlIGNsYXNzIHByb3BlcnRpZXMgYmVjYXVzZSB0aGV5IGRvbid0IGdldCBsaXN0ZWQgaW4gdGhlXG4gIC8vIGNsYXNzIHByb3RvdHlwZSBhbmQgYnJlYWsgc3R1ZmYgbGlrZSBTaW5vbiBzdHVic1xuXG5cbiAgY3JlYXRlQ2xhc3MoUG9wcGVyLCBbe1xuICAgIGtleTogJ3VwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZSQkMSgpIHtcbiAgICAgIHJldHVybiB1cGRhdGUuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdkZXN0cm95JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSQkMSgpIHtcbiAgICAgIHJldHVybiBkZXN0cm95LmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnZW5hYmxlRXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBlbmFibGVFdmVudExpc3RlbmVycyQkMSgpIHtcbiAgICAgIHJldHVybiBlbmFibGVFdmVudExpc3RlbmVycy5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2Rpc2FibGVFdmVudExpc3RlbmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpc2FibGVFdmVudExpc3RlbmVycyQkMSgpIHtcbiAgICAgIHJldHVybiBkaXNhYmxlRXZlbnRMaXN0ZW5lcnMuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY2hlZHVsZSBhbiB1cGRhdGUsIGl0IHdpbGwgcnVuIG9uIHRoZSBuZXh0IFVJIHVwZGF0ZSBhdmFpbGFibGVcbiAgICAgKiBAbWV0aG9kIHNjaGVkdWxlVXBkYXRlXG4gICAgICogQG1lbWJlcm9mIFBvcHBlclxuICAgICAqL1xuXG5cbiAgICAvKipcbiAgICAgKiBDb2xsZWN0aW9uIG9mIHV0aWxpdGllcyB1c2VmdWwgd2hlbiB3cml0aW5nIGN1c3RvbSBtb2RpZmllcnMuXG4gICAgICogU3RhcnRpbmcgZnJvbSB2ZXJzaW9uIDEuNywgdGhpcyBtZXRob2QgaXMgYXZhaWxhYmxlIG9ubHkgaWYgeW91XG4gICAgICogaW5jbHVkZSBgcG9wcGVyLXV0aWxzLmpzYCBiZWZvcmUgYHBvcHBlci5qc2AuXG4gICAgICpcbiAgICAgKiAqKkRFUFJFQ0FUSU9OKio6IFRoaXMgd2F5IHRvIGFjY2VzcyBQb3BwZXJVdGlscyBpcyBkZXByZWNhdGVkXG4gICAgICogYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MiEgVXNlIHRoZSBQb3BwZXJVdGlscyBtb2R1bGUgZGlyZWN0bHkgaW5zdGVhZC5cbiAgICAgKiBEdWUgdG8gdGhlIGhpZ2ggaW5zdGFiaWxpdHkgb2YgdGhlIG1ldGhvZHMgY29udGFpbmVkIGluIFV0aWxzLCB3ZSBjYW4ndFxuICAgICAqIGd1YXJhbnRlZSB0aGVtIHRvIGZvbGxvdyBzZW12ZXIuIFVzZSB0aGVtIGF0IHlvdXIgb3duIHJpc2shXG4gICAgICogQHN0YXRpY1xuICAgICAqIEBwcml2YXRlXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDEuOFxuICAgICAqIEBtZW1iZXIgVXRpbHNcbiAgICAgKiBAbWVtYmVyb2YgUG9wcGVyXG4gICAgICovXG5cbiAgfV0pO1xuICByZXR1cm4gUG9wcGVyO1xufSgpO1xuXG4vKipcbiAqIFRoZSBgcmVmZXJlbmNlT2JqZWN0YCBpcyBhbiBvYmplY3QgdGhhdCBwcm92aWRlcyBhbiBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIFBvcHBlci5qc1xuICogYW5kIGxldHMgeW91IHVzZSBpdCBhcyByZXBsYWNlbWVudCBvZiBhIHJlYWwgRE9NIG5vZGUuPGJyIC8+XG4gKiBZb3UgY2FuIHVzZSB0aGlzIG1ldGhvZCB0byBwb3NpdGlvbiBhIHBvcHBlciByZWxhdGl2ZWx5IHRvIGEgc2V0IG9mIGNvb3JkaW5hdGVzXG4gKiBpbiBjYXNlIHlvdSBkb24ndCBoYXZlIGEgRE9NIG5vZGUgdG8gdXNlIGFzIHJlZmVyZW5jZS5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQb3BwZXIocmVmZXJlbmNlT2JqZWN0LCBwb3BwZXJOb2RlKTtcbiAqIGBgYFxuICpcbiAqIE5COiBUaGlzIGZlYXR1cmUgaXNuJ3Qgc3VwcG9ydGVkIGluIEludGVybmV0IEV4cGxvcmVyIDEwXG4gKiBAbmFtZSByZWZlcmVuY2VPYmplY3RcbiAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IGRhdGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gKiBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHNldCBvZiBjb29yZGluYXRlcyBjb21wYXRpYmxlIHdpdGggdGhlIG5hdGl2ZSBgZ2V0Qm91bmRpbmdDbGllbnRSZWN0YCBtZXRob2QuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGF0YS5jbGllbnRXaWR0aFxuICogQW4gRVM2IGdldHRlciB0aGF0IHdpbGwgcmV0dXJuIHRoZSB3aWR0aCBvZiB0aGUgdmlydHVhbCByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkYXRhLmNsaWVudEhlaWdodFxuICogQW4gRVM2IGdldHRlciB0aGF0IHdpbGwgcmV0dXJuIHRoZSBoZWlnaHQgb2YgdGhlIHZpcnR1YWwgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKi9cblxuXG5Qb3BwZXIuVXRpbHMgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWwpLlBvcHBlclV0aWxzO1xuUG9wcGVyLnBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuUG9wcGVyLkRlZmF1bHRzID0gRGVmYXVsdHM7XG5cbmV4cG9ydCBkZWZhdWx0IFBvcHBlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBvcHBlci5qcy5tYXBcbiIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFBvcHBlckpTIGZyb20gJ3BvcHBlci5qcyc7XG5cbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IFBvcHBlckpTLnBsYWNlbWVudHM7XG5cbnZhciBQb3BwZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUG9wcGVyLCBfQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBQb3BwZXIoKSB7XG4gICAgdmFyIF9yZWY7XG5cbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHBlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmID0gUG9wcGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUG9wcGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7fSwgX3RoaXMuX3NldEFycm93Tm9kZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5fYXJyb3dOb2RlID0gbm9kZTtcbiAgICB9LCBfdGhpcy5fZ2V0VGFyZ2V0Tm9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy50YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLnRhcmdldDtcbiAgICAgIH0gZWxzZSBpZiAoIV90aGlzLmNvbnRleHQucG9wcGVyTWFuYWdlciB8fCAhX3RoaXMuY29udGV4dC5wb3BwZXJNYW5hZ2VyLmdldFRhcmdldE5vZGUoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RhcmdldCBtaXNzaW5nLiBQb3BwZXIgbXVzdCBiZSBnaXZlbiBhIHRhcmdldCBmcm9tIHRoZSBQb3BwZXIgTWFuYWdlciwgb3IgYXMgYSBwcm9wLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLmNvbnRleHQucG9wcGVyTWFuYWdlci5nZXRUYXJnZXROb2RlKCk7XG4gICAgfSwgX3RoaXMuX2dldE9mZnNldHMgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGRhdGEub2Zmc2V0cykubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEub2Zmc2V0c1trZXldO1xuICAgICAgfSk7XG4gICAgfSwgX3RoaXMuX2lzRGF0YURpcnR5ID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5kYXRhKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShfdGhpcy5fZ2V0T2Zmc2V0cyhfdGhpcy5zdGF0ZS5kYXRhKSkgIT09IEpTT04uc3RyaW5naWZ5KF90aGlzLl9nZXRPZmZzZXRzKGRhdGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0sIF90aGlzLl91cGRhdGVTdGF0ZU1vZGlmaWVyID0ge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIG9yZGVyOiA5MDAsXG4gICAgICBmbjogZnVuY3Rpb24gZm4oZGF0YSkge1xuICAgICAgICBpZiAoX3RoaXMuX2lzRGF0YURpcnR5KGRhdGEpKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBkYXRhOiBkYXRhIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgIH0sIF90aGlzLl9nZXRQb3BwZXJTdHlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkYXRhID0gX3RoaXMuc3RhdGUuZGF0YTtcblxuXG4gICAgICBpZiAoIV90aGlzLl9wb3BwZXIgfHwgIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgb3BhY2l0eTogMFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe1xuICAgICAgICBwb3NpdGlvbjogZGF0YS5vZmZzZXRzLnBvcHBlci5wb3NpdGlvblxuICAgICAgfSwgZGF0YS5zdHlsZXMpO1xuICAgIH0sIF90aGlzLl9nZXRQb3BwZXJQbGFjZW1lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUuZGF0YSA/IF90aGlzLnN0YXRlLmRhdGEucGxhY2VtZW50IDogdW5kZWZpbmVkO1xuICAgIH0sIF90aGlzLl9nZXRQb3BwZXJIaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICEhX3RoaXMuc3RhdGUuZGF0YSAmJiBfdGhpcy5zdGF0ZS5kYXRhLmhpZGUgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICB9LCBfdGhpcy5fZ2V0QXJyb3dTdHlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMuc3RhdGUuZGF0YSB8fCAhX3RoaXMuc3RhdGUuZGF0YS5vZmZzZXRzLmFycm93KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZSRkYXRhJG9mZnMgPSBfdGhpcy5zdGF0ZS5kYXRhLm9mZnNldHMuYXJyb3csXG4gICAgICAgICAgICB0b3AgPSBfdGhpcyRzdGF0ZSRkYXRhJG9mZnMudG9wLFxuICAgICAgICAgICAgbGVmdCA9IF90aGlzJHN0YXRlJGRhdGEkb2Zmcy5sZWZ0O1xuXG4gICAgICAgIHJldHVybiB7IHRvcDogdG9wLCBsZWZ0OiBsZWZ0IH07XG4gICAgICB9XG4gICAgfSwgX3RoaXMuX2hhbmRsZVBvcHBlclJlZiA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBfdGhpcy5fcG9wcGVyTm9kZSA9IG5vZGU7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBfdGhpcy5fY3JlYXRlUG9wcGVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfdGhpcy5fZGVzdHJveVBvcHBlcigpO1xuICAgICAgfVxuICAgICAgaWYgKF90aGlzLnByb3BzLmlubmVyUmVmKSB7XG4gICAgICAgIF90aGlzLnByb3BzLmlubmVyUmVmKG5vZGUpO1xuICAgICAgfVxuICAgIH0sIF90aGlzLl9zY2hlZHVsZVVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLl9wb3BwZXIgJiYgX3RoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0ZSgpO1xuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFBvcHBlciwgW3tcbiAgICBrZXk6ICdnZXRDaGlsZENvbnRleHQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwb3BwZXI6IHtcbiAgICAgICAgICBzZXRBcnJvd05vZGU6IHRoaXMuX3NldEFycm93Tm9kZSxcbiAgICAgICAgICBnZXRBcnJvd1N0eWxlOiB0aGlzLl9nZXRBcnJvd1N0eWxlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkVXBkYXRlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKGxhc3RQcm9wcykge1xuICAgICAgaWYgKGxhc3RQcm9wcy5wbGFjZW1lbnQgIT09IHRoaXMucHJvcHMucGxhY2VtZW50IHx8IGxhc3RQcm9wcy5ldmVudHNFbmFibGVkICE9PSB0aGlzLnByb3BzLmV2ZW50c0VuYWJsZWQgfHwgbGFzdFByb3BzLnRhcmdldCAhPT0gdGhpcy5wcm9wcy50YXJnZXQpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveVBvcHBlcigpO1xuICAgICAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKTtcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0UHJvcHMuY2hpbGRyZW4gIT09IHRoaXMucHJvcHMuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5fc2NoZWR1bGVVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgdGhpcy5fZGVzdHJveVBvcHBlcigpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19jcmVhdGVQb3BwZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlUG9wcGVyKCkge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIHBsYWNlbWVudCA9IF9wcm9wcy5wbGFjZW1lbnQsXG4gICAgICAgICAgZXZlbnRzRW5hYmxlZCA9IF9wcm9wcy5ldmVudHNFbmFibGVkO1xuXG4gICAgICB2YXIgbW9kaWZpZXJzID0gX2V4dGVuZHMoe30sIHRoaXMucHJvcHMubW9kaWZpZXJzLCB7XG4gICAgICAgIGFwcGx5U3R5bGU6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgICAgdXBkYXRlU3RhdGU6IHRoaXMuX3VwZGF0ZVN0YXRlTW9kaWZpZXJcbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuX2Fycm93Tm9kZSkge1xuICAgICAgICBtb2RpZmllcnMuYXJyb3cgPSBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcy5tb2RpZmllcnMuYXJyb3cgfHwge30sIHtcbiAgICAgICAgICBlbGVtZW50OiB0aGlzLl9hcnJvd05vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9wb3BwZXIgPSBuZXcgUG9wcGVySlModGhpcy5fZ2V0VGFyZ2V0Tm9kZSgpLCB0aGlzLl9wb3BwZXJOb2RlLCB7XG4gICAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgICBldmVudHNFbmFibGVkOiBldmVudHNFbmFibGVkLFxuICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVyc1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRPRE86IGxvb2sgaW50byBzZXRUaW1lb3V0IHNjaGVkdWxlVXBkYXRlIGNhbGwsIHdpdGhvdXQgaXQsIHRoZSBwb3BwZXIgd2lsbCBub3QgcG9zaXRpb24gcHJvcGVybHkgb24gY3JlYXRpb25cbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMyLl9zY2hlZHVsZVVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2Rlc3Ryb3lQb3BwZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZGVzdHJveVBvcHBlcigpIHtcbiAgICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzMi5jb21wb25lbnQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfcHJvcHMyLmlubmVyUmVmLFxuICAgICAgICAgIHBsYWNlbWVudCA9IF9wcm9wczIucGxhY2VtZW50LFxuICAgICAgICAgIGV2ZW50c0VuYWJsZWQgPSBfcHJvcHMyLmV2ZW50c0VuYWJsZWQsXG4gICAgICAgICAgbW9kaWZpZXJzID0gX3Byb3BzMi5tb2RpZmllcnMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMyLCBbJ2NvbXBvbmVudCcsICdpbm5lclJlZicsICdwbGFjZW1lbnQnLCAnZXZlbnRzRW5hYmxlZCcsICdtb2RpZmllcnMnLCAnY2hpbGRyZW4nXSk7XG5cbiAgICAgIHZhciBwb3BwZXJTdHlsZSA9IHRoaXMuX2dldFBvcHBlclN0eWxlKCk7XG4gICAgICB2YXIgcG9wcGVyUGxhY2VtZW50ID0gdGhpcy5fZ2V0UG9wcGVyUGxhY2VtZW50KCk7XG4gICAgICB2YXIgcG9wcGVySGlkZSA9IHRoaXMuX2dldFBvcHBlckhpZGUoKTtcblxuICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgcG9wcGVyUHJvcHMgPSB7XG4gICAgICAgICAgcmVmOiB0aGlzLl9oYW5kbGVQb3BwZXJSZWYsXG4gICAgICAgICAgc3R5bGU6IHBvcHBlclN0eWxlLFxuICAgICAgICAgICdkYXRhLXBsYWNlbWVudCc6IHBvcHBlclBsYWNlbWVudCxcbiAgICAgICAgICAnZGF0YS14LW91dC1vZi1ib3VuZGFyaWVzJzogcG9wcGVySGlkZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgICAgIHBvcHBlclByb3BzOiBwb3BwZXJQcm9wcyxcbiAgICAgICAgICByZXN0UHJvcHM6IHJlc3RQcm9wcyxcbiAgICAgICAgICBzY2hlZHVsZVVwZGF0ZTogdGhpcy5fc2NoZWR1bGVVcGRhdGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21wb25lbnRQcm9wcyA9IF9leHRlbmRzKHt9LCByZXN0UHJvcHMsIHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHt9LCByZXN0UHJvcHMuc3R5bGUsIHBvcHBlclN0eWxlKSxcbiAgICAgICAgJ2RhdGEtcGxhY2VtZW50JzogcG9wcGVyUGxhY2VtZW50LFxuICAgICAgICAnZGF0YS14LW91dC1vZi1ib3VuZGFyaWVzJzogcG9wcGVySGlkZVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb21wb25lbnRQcm9wcy5yZWYgPSB0aGlzLl9oYW5kbGVQb3BwZXJSZWY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wb25lbnRQcm9wcy5pbm5lclJlZiA9IHRoaXMuX2hhbmRsZVBvcHBlclJlZjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoY29tcG9uZW50LCBjb21wb25lbnRQcm9wcywgY2hpbGRyZW4pO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBQb3BwZXI7XG59KENvbXBvbmVudCk7XG5cblBvcHBlci5jb250ZXh0VHlwZXMgPSB7XG4gIHBvcHBlck1hbmFnZXI6IFByb3BUeXBlcy5vYmplY3Rcbn07XG5Qb3BwZXIuY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gIHBvcHBlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59O1xuUG9wcGVyLnByb3BUeXBlcyA9IHtcbiAgY29tcG9uZW50OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubm9kZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgaW5uZXJSZWY6IFByb3BUeXBlcy5mdW5jLFxuICBwbGFjZW1lbnQ6IFByb3BUeXBlcy5vbmVPZihwbGFjZW1lbnRzKSxcbiAgZXZlbnRzRW5hYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIG1vZGlmaWVyczogUHJvcFR5cGVzLm9iamVjdCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMuZnVuY10pLFxuICB0YXJnZXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAvLyB0aGUgZm9sbG93aW5nIGNoZWNrIGlzIG5lZWRlZCBmb3IgU1NSXG4gIFByb3BUeXBlcy5pbnN0YW5jZU9mKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyA/IEVsZW1lbnQgOiBPYmplY3QpLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjbGllbnRXaWR0aDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIGNsaWVudEhlaWdodDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pXSlcbn07XG5Qb3BwZXIuZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBldmVudHNFbmFibGVkOiB0cnVlLFxuICBtb2RpZmllcnM6IHt9XG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFBvcHBlcjsiLCJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG52YXIgQXJyb3cgPSBmdW5jdGlvbiBBcnJvdyhwcm9wcywgY29udGV4dCkge1xuICB2YXIgX3Byb3BzJGNvbXBvbmVudCA9IHByb3BzLmNvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudCA9IF9wcm9wcyRjb21wb25lbnQgPT09IHVuZGVmaW5lZCA/ICdzcGFuJyA6IF9wcm9wcyRjb21wb25lbnQsXG4gICAgICBpbm5lclJlZiA9IHByb3BzLmlubmVyUmVmLFxuICAgICAgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbixcbiAgICAgIHJlc3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcm9wcywgWydjb21wb25lbnQnLCAnaW5uZXJSZWYnLCAnY2hpbGRyZW4nXSk7XG5cbiAgdmFyIHBvcHBlciA9IGNvbnRleHQucG9wcGVyO1xuXG4gIHZhciBhcnJvd1JlZiA9IGZ1bmN0aW9uIGFycm93UmVmKG5vZGUpIHtcbiAgICBwb3BwZXIuc2V0QXJyb3dOb2RlKG5vZGUpO1xuICAgIGlmICh0eXBlb2YgaW5uZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlubmVyUmVmKG5vZGUpO1xuICAgIH1cbiAgfTtcbiAgdmFyIGFycm93U3R5bGUgPSBwb3BwZXIuZ2V0QXJyb3dTdHlsZSgpO1xuXG4gIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYXJyb3dQcm9wcyA9IHtcbiAgICAgIHJlZjogYXJyb3dSZWYsXG4gICAgICBzdHlsZTogYXJyb3dTdHlsZVxuICAgIH07XG4gICAgcmV0dXJuIGNoaWxkcmVuKHsgYXJyb3dQcm9wczogYXJyb3dQcm9wcywgcmVzdFByb3BzOiByZXN0UHJvcHMgfSk7XG4gIH1cblxuICB2YXIgY29tcG9uZW50UHJvcHMgPSBfZXh0ZW5kcyh7fSwgcmVzdFByb3BzLCB7XG4gICAgc3R5bGU6IF9leHRlbmRzKHt9LCBhcnJvd1N0eWxlLCByZXN0UHJvcHMuc3R5bGUpXG4gIH0pO1xuXG4gIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xuICAgIGNvbXBvbmVudFByb3BzLnJlZiA9IGFycm93UmVmO1xuICB9IGVsc2Uge1xuICAgIGNvbXBvbmVudFByb3BzLmlubmVyUmVmID0gYXJyb3dSZWY7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChjb21wb25lbnQsIGNvbXBvbmVudFByb3BzLCBjaGlsZHJlbik7XG59O1xuXG5BcnJvdy5jb250ZXh0VHlwZXMgPSB7XG4gIHBvcHBlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59O1xuXG5BcnJvdy5wcm9wVHlwZXMgPSB7XG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIGlubmVyUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMuZnVuY10pXG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcnJvdzsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IG9uQ2xpY2tPdXRzaWRlIGZyb20gJ3JlYWN0LW9uY2xpY2tvdXRzaWRlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IE1hbmFnZXIsIFBvcHBlciwgVGFyZ2V0IH0gZnJvbSAncmVhY3QtcG9wcGVyJztcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmo7XG59IDogZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajtcbn07XG5cblxuXG5cblxuXG5cblxuXG52YXIgY2xhc3NDYWxsQ2hlY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTtcblxudmFyIGNyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9O1xufSgpO1xuXG5cblxuXG5cblxuXG5cblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxuXG5cblxuXG5cblxuXG5cblxuXG52YXIgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiA9IGZ1bmN0aW9uIChzZWxmLCBjYWxsKSB7XG4gIGlmICghc2VsZikge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmO1xufTtcblxuZnVuY3Rpb24gZ2VuZXJhdGVZZWFycyh5ZWFyLCBub09mWWVhciwgbWluRGF0ZSwgbWF4RGF0ZSkge1xuICB2YXIgbGlzdCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDIgKiBub09mWWVhciArIDE7IGkrKykge1xuICAgIHZhciBuZXdZZWFyID0geWVhciArIG5vT2ZZZWFyIC0gaTtcbiAgICB2YXIgaXNJblJhbmdlID0gdHJ1ZTtcblxuICAgIGlmIChtaW5EYXRlKSB7XG4gICAgICBpc0luUmFuZ2UgPSBtaW5EYXRlLnllYXIoKSA8PSBuZXdZZWFyO1xuICAgIH1cblxuICAgIGlmIChtYXhEYXRlICYmIGlzSW5SYW5nZSkge1xuICAgICAgaXNJblJhbmdlID0gbWF4RGF0ZS55ZWFyKCkgPj0gbmV3WWVhcjtcbiAgICB9XG5cbiAgICBpZiAoaXNJblJhbmdlKSB7XG4gICAgICBsaXN0LnB1c2gobmV3WWVhcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG5cbnZhciBZZWFyRHJvcGRvd25PcHRpb25zID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoWWVhckRyb3Bkb3duT3B0aW9ucywgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gWWVhckRyb3Bkb3duT3B0aW9ucyhwcm9wcykge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFllYXJEcm9wZG93bk9wdGlvbnMpO1xuXG4gICAgdmFyIF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpKTtcblxuICAgIF90aGlzLnJlbmRlck9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRZZWFyID0gX3RoaXMucHJvcHMueWVhcjtcbiAgICAgIHZhciBvcHRpb25zID0gX3RoaXMuc3RhdGUueWVhcnNMaXN0Lm1hcChmdW5jdGlvbiAoeWVhcikge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogc2VsZWN0ZWRZZWFyID09PSB5ZWFyID8gXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbiByZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvbi0tc2VsZWN0ZWRfeWVhclwiIDogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvblwiLFxuICAgICAgICAgICAga2V5OiB5ZWFyLFxuICAgICAgICAgICAgcmVmOiB5ZWFyLFxuICAgICAgICAgICAgb25DbGljazogX3RoaXMub25DaGFuZ2UuYmluZChfdGhpcywgeWVhcilcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGVkWWVhciA9PT0geWVhciA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICAgIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItb3B0aW9uLS1zZWxlY3RlZFwiIH0sXG4gICAgICAgICAgICBcIlxcdTI3MTNcIlxuICAgICAgICAgICkgOiBcIlwiLFxuICAgICAgICAgIHllYXJcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgbWluWWVhciA9IF90aGlzLnByb3BzLm1pbkRhdGUgPyBfdGhpcy5wcm9wcy5taW5EYXRlLnllYXIoKSA6IG51bGw7XG4gICAgICB2YXIgbWF4WWVhciA9IF90aGlzLnByb3BzLm1heERhdGUgPyBfdGhpcy5wcm9wcy5tYXhEYXRlLnllYXIoKSA6IG51bGw7XG5cbiAgICAgIGlmICghbWF4WWVhciB8fCAhX3RoaXMuc3RhdGUueWVhcnNMaXN0LmZpbmQoZnVuY3Rpb24gKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIHllYXIgPT09IG1heFllYXI7XG4gICAgICB9KSkge1xuICAgICAgICBvcHRpb25zLnVuc2hpZnQoUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvblwiLFxuICAgICAgICAgICAgcmVmOiBcInVwY29taW5nXCIsXG4gICAgICAgICAgICBrZXk6IFwidXBjb21pbmdcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6IF90aGlzLmluY3JlbWVudFllYXJzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzIHJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXVwY29taW5nXCIgfSlcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbWluWWVhciB8fCAhX3RoaXMuc3RhdGUueWVhcnNMaXN0LmZpbmQoZnVuY3Rpb24gKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIHllYXIgPT09IG1pblllYXI7XG4gICAgICB9KSkge1xuICAgICAgICBvcHRpb25zLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLW9wdGlvblwiLFxuICAgICAgICAgICAgcmVmOiBcInByZXZpb3VzXCIsXG4gICAgICAgICAgICBrZXk6IFwicHJldmlvdXNcIixcbiAgICAgICAgICAgIG9uQ2xpY2s6IF90aGlzLmRlY3JlbWVudFllYXJzXG4gICAgICAgICAgfSxcbiAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uIHJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzIHJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXllYXJzLXByZXZpb3VzXCIgfSlcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH07XG5cbiAgICBfdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uICh5ZWFyKSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbkNoYW5nZSh5ZWFyKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucHJvcHMub25DYW5jZWwoKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuc2hpZnRZZWFycyA9IGZ1bmN0aW9uIChhbW91bnQpIHtcbiAgICAgIHZhciB5ZWFycyA9IF90aGlzLnN0YXRlLnllYXJzTGlzdC5tYXAoZnVuY3Rpb24gKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIHllYXIgKyBhbW91bnQ7XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICB5ZWFyc0xpc3Q6IHllYXJzXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaW5jcmVtZW50WWVhcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc2hpZnRZZWFycygxKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuZGVjcmVtZW50WWVhcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc2hpZnRZZWFycygtMSk7XG4gICAgfTtcblxuICAgIHZhciB5ZWFyRHJvcGRvd25JdGVtTnVtYmVyID0gcHJvcHMueWVhckRyb3Bkb3duSXRlbU51bWJlcixcbiAgICAgICAgc2Nyb2xsYWJsZVllYXJEcm9wZG93biA9IHByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd247XG5cbiAgICB2YXIgbm9PZlllYXIgPSB5ZWFyRHJvcGRvd25JdGVtTnVtYmVyIHx8IChzY3JvbGxhYmxlWWVhckRyb3Bkb3duID8gMTAgOiA1KTtcblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgeWVhcnNMaXN0OiBnZW5lcmF0ZVllYXJzKF90aGlzLnByb3BzLnllYXIsIG5vT2ZZZWFyLCBfdGhpcy5wcm9wcy5taW5EYXRlLCBfdGhpcy5wcm9wcy5tYXhEYXRlKVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgWWVhckRyb3Bkb3duT3B0aW9ucy5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBkcm9wZG93bkNsYXNzID0gY2xhc3NuYW1lcyh7XG4gICAgICBcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd25cIjogdHJ1ZSxcbiAgICAgIFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1kcm9wZG93bi0tc2Nyb2xsYWJsZVwiOiB0aGlzLnByb3BzLnNjcm9sbGFibGVZZWFyRHJvcGRvd25cbiAgICB9KTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgY2xhc3NOYW1lOiBkcm9wZG93bkNsYXNzIH0sXG4gICAgICB0aGlzLnJlbmRlck9wdGlvbnMoKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFllYXJEcm9wZG93bk9wdGlvbnM7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblllYXJEcm9wZG93bk9wdGlvbnMucHJvcFR5cGVzID0ge1xuICBtaW5EYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtYXhEYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkNhbmNlbDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHNjcm9sbGFibGVZZWFyRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuICB5ZWFyOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIHllYXJEcm9wZG93bkl0ZW1OdW1iZXI6IFByb3BUeXBlcy5udW1iZXJcbn07XG5cbnZhciBkYXlPZldlZWtDb2RlcyA9IHtcbiAgMTogXCJtb25cIixcbiAgMjogXCJ0dWVcIixcbiAgMzogXCJ3ZWRcIixcbiAgNDogXCJ0aHVcIixcbiAgNTogXCJmcmlcIixcbiAgNjogXCJzYXRcIixcbiAgNzogXCJzdW5cIlxufTtcblxuLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgZXhwb3J0ZWQgc29cbi8vIHRoYXQgd2UgYXZvaWQgbWFnaWMgc3RyaW5ncyBsaWtlICdkYXlzJ1xuZnVuY3Rpb24gc2V0JDEoZGF0ZSwgdW5pdCwgdG8pIHtcbiAgcmV0dXJuIGRhdGUuc2V0KHVuaXQsIHRvKTtcbn1cblxuZnVuY3Rpb24gYWRkKGRhdGUsIGFtb3VudCwgdW5pdCkge1xuICByZXR1cm4gZGF0ZS5hZGQoYW1vdW50LCB1bml0KTtcbn1cblxuZnVuY3Rpb24gc3VidHJhY3QoZGF0ZSwgYW1vdW50LCB1bml0KSB7XG4gIHJldHVybiBkYXRlLnN1YnRyYWN0KGFtb3VudCwgdW5pdCk7XG59XG5cbmZ1bmN0aW9uIGdldCQxKGRhdGUsIHVuaXQpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0KHVuaXQpO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE9mKGRhdGUsIHVuaXQpIHtcbiAgcmV0dXJuIGRhdGUuc3RhcnRPZih1bml0KTtcbn1cblxuLy8gKiogRGF0ZSBDb25zdHJ1Y3RvcnMgKipcblxuZnVuY3Rpb24gbmV3RGF0ZShwb2ludCkge1xuICByZXR1cm4gbW9tZW50KHBvaW50KTtcbn1cblxuZnVuY3Rpb24gbmV3RGF0ZVdpdGhPZmZzZXQodXRjT2Zmc2V0KSB7XG4gIHJldHVybiBtb21lbnQoKS51dGMoKS51dGNPZmZzZXQodXRjT2Zmc2V0KTtcbn1cblxuZnVuY3Rpb24gbm93KG1heWJlRml4ZWRVdGNPZmZzZXQpIHtcbiAgaWYgKG1heWJlRml4ZWRVdGNPZmZzZXQgPT0gbnVsbCkge1xuICAgIHJldHVybiBuZXdEYXRlKCk7XG4gIH1cbiAgcmV0dXJuIG5ld0RhdGVXaXRoT2Zmc2V0KG1heWJlRml4ZWRVdGNPZmZzZXQpO1xufVxuXG5mdW5jdGlvbiBjbG9uZURhdGUoZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5jbG9uZSgpO1xufVxuXG5mdW5jdGlvbiBwYXJzZURhdGUodmFsdWUsIF9yZWYpIHtcbiAgdmFyIGRhdGVGb3JtYXQgPSBfcmVmLmRhdGVGb3JtYXQsXG4gICAgICBsb2NhbGUgPSBfcmVmLmxvY2FsZTtcblxuICB2YXIgbSA9IG1vbWVudCh2YWx1ZSwgZGF0ZUZvcm1hdCwgbG9jYWxlIHx8IG1vbWVudC5sb2NhbGUoKSwgdHJ1ZSk7XG4gIHJldHVybiBtLmlzVmFsaWQoKSA/IG0gOiBudWxsO1xufVxuXG4vLyAqKiBEYXRlIFwiUmVmbGVjdGlvblwiICoqXG5cbmZ1bmN0aW9uIGlzTW9tZW50KGRhdGUpIHtcbiAgcmV0dXJuIG1vbWVudC5pc01vbWVudChkYXRlKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRlKGRhdGUpIHtcbiAgcmV0dXJuIG1vbWVudC5pc0RhdGUoZGF0ZSk7XG59XG5cbi8vICoqIERhdGUgRm9ybWF0dGluZyAqKlxuXG5mdW5jdGlvbiBmb3JtYXREYXRlKGRhdGUsIGZvcm1hdCkge1xuICByZXR1cm4gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbn1cblxuZnVuY3Rpb24gc2FmZURhdGVGb3JtYXQoZGF0ZSwgX3JlZjIpIHtcbiAgdmFyIGRhdGVGb3JtYXQgPSBfcmVmMi5kYXRlRm9ybWF0LFxuICAgICAgbG9jYWxlID0gX3JlZjIubG9jYWxlO1xuXG4gIHJldHVybiBkYXRlICYmIGRhdGUuY2xvbmUoKS5sb2NhbGUobG9jYWxlIHx8IG1vbWVudC5sb2NhbGUoKSkuZm9ybWF0KEFycmF5LmlzQXJyYXkoZGF0ZUZvcm1hdCkgPyBkYXRlRm9ybWF0WzBdIDogZGF0ZUZvcm1hdCkgfHwgXCJcIjtcbn1cblxuLy8gKiogRGF0ZSBTZXR0ZXJzICoqXG5cbmZ1bmN0aW9uIHNldFRpbWUoZGF0ZSwgX3JlZjMpIHtcbiAgdmFyIGhvdXIgPSBfcmVmMy5ob3VyLFxuICAgICAgbWludXRlID0gX3JlZjMubWludXRlLFxuICAgICAgc2Vjb25kID0gX3JlZjMuc2Vjb25kO1xuXG4gIGRhdGUuc2V0KHsgaG91cjogaG91ciwgbWludXRlOiBtaW51dGUsIHNlY29uZDogc2Vjb25kIH0pO1xuICByZXR1cm4gZGF0ZTtcbn1cblxuZnVuY3Rpb24gc2V0TW9udGgoZGF0ZSwgbW9udGgpIHtcbiAgcmV0dXJuIHNldCQxKGRhdGUsIFwibW9udGhcIiwgbW9udGgpO1xufVxuXG5mdW5jdGlvbiBzZXRZZWFyKGRhdGUsIHllYXIpIHtcbiAgcmV0dXJuIHNldCQxKGRhdGUsIFwieWVhclwiLCB5ZWFyKTtcbn1cblxuXG5cbi8vICoqIERhdGUgR2V0dGVycyAqKlxuXG5mdW5jdGlvbiBnZXRTZWNvbmQoZGF0ZSkge1xuICByZXR1cm4gZ2V0JDEoZGF0ZSwgXCJzZWNvbmRcIik7XG59XG5cbmZ1bmN0aW9uIGdldE1pbnV0ZShkYXRlKSB7XG4gIHJldHVybiBnZXQkMShkYXRlLCBcIm1pbnV0ZVwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0SG91cihkYXRlKSB7XG4gIHJldHVybiBnZXQkMShkYXRlLCBcImhvdXJcIik7XG59XG5cbi8vIFJldHVybnMgZGF5IG9mIHdlZWtcbmZ1bmN0aW9uIGdldERheShkYXRlKSB7XG4gIHJldHVybiBnZXQkMShkYXRlLCBcImRheVwiKTtcbn1cblxuZnVuY3Rpb24gZ2V0V2VlayhkYXRlKSB7XG4gIHJldHVybiBnZXQkMShkYXRlLCBcIndlZWtcIik7XG59XG5cbmZ1bmN0aW9uIGdldE1vbnRoKGRhdGUpIHtcbiAgcmV0dXJuIGdldCQxKGRhdGUsIFwibW9udGhcIik7XG59XG5cbmZ1bmN0aW9uIGdldFllYXIoZGF0ZSkge1xuICByZXR1cm4gZ2V0JDEoZGF0ZSwgXCJ5ZWFyXCIpO1xufVxuXG4vLyBSZXR1cm5zIGRheSBvZiBtb250aFxuZnVuY3Rpb24gZ2V0RGF0ZShkYXRlKSB7XG4gIHJldHVybiBnZXQkMShkYXRlLCBcImRhdGVcIik7XG59XG5cblxuXG5mdW5jdGlvbiBnZXREYXlPZldlZWtDb2RlKGRheSkge1xuICByZXR1cm4gZGF5T2ZXZWVrQ29kZXNbZGF5Lmlzb1dlZWtkYXkoKV07XG59XG5cbi8vICoqKiBTdGFydCBvZiAqKipcblxuZnVuY3Rpb24gZ2V0U3RhcnRPZkRheShkYXRlKSB7XG4gIHJldHVybiBnZXRTdGFydE9mKGRhdGUsIFwiZGF5XCIpO1xufVxuXG5mdW5jdGlvbiBnZXRTdGFydE9mV2VlayhkYXRlKSB7XG4gIHJldHVybiBnZXRTdGFydE9mKGRhdGUsIFwid2Vla1wiKTtcbn1cbmZ1bmN0aW9uIGdldFN0YXJ0T2ZNb250aChkYXRlKSB7XG4gIHJldHVybiBnZXRTdGFydE9mKGRhdGUsIFwibW9udGhcIik7XG59XG5cbmZ1bmN0aW9uIGdldFN0YXJ0T2ZEYXRlKGRhdGUpIHtcbiAgcmV0dXJuIGdldFN0YXJ0T2YoZGF0ZSwgXCJkYXRlXCIpO1xufVxuXG4vLyAqKiogRW5kIG9mICoqKlxuXG5cblxuXG5cbi8vICoqIERhdGUgTWF0aCAqKlxuXG4vLyAqKiogQWRkaXRpb24gKioqXG5cbmZ1bmN0aW9uIGFkZE1pbnV0ZXMoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBhZGQoZGF0ZSwgYW1vdW50LCBcIm1pbnV0ZXNcIik7XG59XG5cbmZ1bmN0aW9uIGFkZEhvdXJzKGRhdGUsIGFtb3VudCkge1xuICByZXR1cm4gYWRkKGRhdGUsIGFtb3VudCwgXCJob3Vyc1wiKTtcbn1cblxuZnVuY3Rpb24gYWRkRGF5cyhkYXRlLCBhbW91bnQpIHtcbiAgcmV0dXJuIGFkZChkYXRlLCBhbW91bnQsIFwiZGF5c1wiKTtcbn1cblxuZnVuY3Rpb24gYWRkV2Vla3MoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBhZGQoZGF0ZSwgYW1vdW50LCBcIndlZWtzXCIpO1xufVxuXG5mdW5jdGlvbiBhZGRNb250aHMoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBhZGQoZGF0ZSwgYW1vdW50LCBcIm1vbnRoc1wiKTtcbn1cblxuZnVuY3Rpb24gYWRkWWVhcnMoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBhZGQoZGF0ZSwgYW1vdW50LCBcInllYXJzXCIpO1xufVxuXG4vLyAqKiogU3VidHJhY3Rpb24gKioqXG5mdW5jdGlvbiBzdWJ0cmFjdERheXMoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBzdWJ0cmFjdChkYXRlLCBhbW91bnQsIFwiZGF5c1wiKTtcbn1cblxuZnVuY3Rpb24gc3VidHJhY3RXZWVrcyhkYXRlLCBhbW91bnQpIHtcbiAgcmV0dXJuIHN1YnRyYWN0KGRhdGUsIGFtb3VudCwgXCJ3ZWVrc1wiKTtcbn1cblxuZnVuY3Rpb24gc3VidHJhY3RNb250aHMoZGF0ZSwgYW1vdW50KSB7XG4gIHJldHVybiBzdWJ0cmFjdChkYXRlLCBhbW91bnQsIFwibW9udGhzXCIpO1xufVxuXG5mdW5jdGlvbiBzdWJ0cmFjdFllYXJzKGRhdGUsIGFtb3VudCkge1xuICByZXR1cm4gc3VidHJhY3QoZGF0ZSwgYW1vdW50LCBcInllYXJzXCIpO1xufVxuXG4vLyAqKiBEYXRlIENvbXBhcmlzb24gKipcblxuZnVuY3Rpb24gaXNCZWZvcmUoZGF0ZTEsIGRhdGUyKSB7XG4gIHJldHVybiBkYXRlMS5pc0JlZm9yZShkYXRlMik7XG59XG5cbmZ1bmN0aW9uIGlzQWZ0ZXIoZGF0ZTEsIGRhdGUyKSB7XG4gIHJldHVybiBkYXRlMS5pc0FmdGVyKGRhdGUyKTtcbn1cblxuZnVuY3Rpb24gZXF1YWxzKGRhdGUxLCBkYXRlMikge1xuICByZXR1cm4gZGF0ZTEuaXNTYW1lKGRhdGUyKTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lWWVhcihkYXRlMSwgZGF0ZTIpIHtcbiAgaWYgKGRhdGUxICYmIGRhdGUyKSB7XG4gICAgcmV0dXJuIGRhdGUxLmlzU2FtZShkYXRlMiwgXCJ5ZWFyXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAhZGF0ZTEgJiYgIWRhdGUyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU1vbnRoKGRhdGUxLCBkYXRlMikge1xuICBpZiAoZGF0ZTEgJiYgZGF0ZTIpIHtcbiAgICByZXR1cm4gZGF0ZTEuaXNTYW1lKGRhdGUyLCBcIm1vbnRoXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAhZGF0ZTEgJiYgIWRhdGUyO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZURheShtb21lbnQxLCBtb21lbnQyKSB7XG4gIGlmIChtb21lbnQxICYmIG1vbWVudDIpIHtcbiAgICByZXR1cm4gbW9tZW50MS5pc1NhbWUobW9tZW50MiwgXCJkYXlcIik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICFtb21lbnQxICYmICFtb21lbnQyO1xuICB9XG59XG5cblxuXG5mdW5jdGlvbiBpc0RheUluUmFuZ2UoZGF5LCBzdGFydERhdGUsIGVuZERhdGUpIHtcbiAgdmFyIGJlZm9yZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpLnN0YXJ0T2YoXCJkYXlcIikuc3VidHJhY3QoMSwgXCJzZWNvbmRzXCIpO1xuICB2YXIgYWZ0ZXIgPSBlbmREYXRlLmNsb25lKCkuc3RhcnRPZihcImRheVwiKS5hZGQoMSwgXCJzZWNvbmRzXCIpO1xuICByZXR1cm4gZGF5LmNsb25lKCkuc3RhcnRPZihcImRheVwiKS5pc0JldHdlZW4oYmVmb3JlLCBhZnRlcik7XG59XG5cbi8vICoqKiBEaWZmaW5nICoqKlxuXG5cblxuLy8gKiogRGF0ZSBMb2NhbGl6YXRpb24gKipcblxuZnVuY3Rpb24gbG9jYWxpemVEYXRlKGRhdGUsIGxvY2FsZSkge1xuICByZXR1cm4gZGF0ZS5jbG9uZSgpLmxvY2FsZShsb2NhbGUgfHwgbW9tZW50LmxvY2FsZSgpKTtcbn1cblxuXG5cblxuXG5cblxuZnVuY3Rpb24gZ2V0TG9jYWxlRGF0YShkYXRlKSB7XG4gIHJldHVybiBkYXRlLmxvY2FsZURhdGEoKTtcbn1cblxuZnVuY3Rpb24gZ2V0TG9jYWxlRGF0YUZvckxvY2FsZShsb2NhbGUpIHtcbiAgcmV0dXJuIG1vbWVudC5sb2NhbGVEYXRhKGxvY2FsZSk7XG59XG5cbmZ1bmN0aW9uIGdldEZvcm1hdHRlZFdlZWtkYXlJbkxvY2FsZShsb2NhbGUsIGRhdGUsIGZvcm1hdEZ1bmMpIHtcbiAgcmV0dXJuIGZvcm1hdEZ1bmMobG9jYWxlLndlZWtkYXlzKGRhdGUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0V2Vla2RheU1pbkluTG9jYWxlKGxvY2FsZSwgZGF0ZSkge1xuICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluKGRhdGUpO1xufVxuXG5mdW5jdGlvbiBnZXRXZWVrZGF5U2hvcnRJbkxvY2FsZShsb2NhbGUsIGRhdGUpIHtcbiAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0KGRhdGUpO1xufVxuXG4vLyBUT0RPIHdoYXQgaXMgdGhpcyBmb3JtYXQgZXhhY3RseT9cbmZ1bmN0aW9uIGdldE1vbnRoSW5Mb2NhbGUobG9jYWxlLCBkYXRlLCBmb3JtYXQpIHtcbiAgcmV0dXJuIGxvY2FsZS5tb250aHMoZGF0ZSwgZm9ybWF0KTtcbn1cblxuZnVuY3Rpb24gZ2V0TW9udGhTaG9ydEluTG9jYWxlKGxvY2FsZSwgZGF0ZSkge1xuICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0KGRhdGUpO1xufVxuXG4vLyAqKiBVdGlscyBmb3Igc29tZSBjb21wb25lbnRzICoqXG5cbmZ1bmN0aW9uIGlzRGF5RGlzYWJsZWQoZGF5KSB7XG4gIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICBtaW5EYXRlID0gX3JlZjQubWluRGF0ZSxcbiAgICAgIG1heERhdGUgPSBfcmVmNC5tYXhEYXRlLFxuICAgICAgZXhjbHVkZURhdGVzID0gX3JlZjQuZXhjbHVkZURhdGVzLFxuICAgICAgaW5jbHVkZURhdGVzID0gX3JlZjQuaW5jbHVkZURhdGVzLFxuICAgICAgZmlsdGVyRGF0ZSA9IF9yZWY0LmZpbHRlckRhdGU7XG5cbiAgcmV0dXJuIG1pbkRhdGUgJiYgZGF5LmlzQmVmb3JlKG1pbkRhdGUsIFwiZGF5XCIpIHx8IG1heERhdGUgJiYgZGF5LmlzQWZ0ZXIobWF4RGF0ZSwgXCJkYXlcIikgfHwgZXhjbHVkZURhdGVzICYmIGV4Y2x1ZGVEYXRlcy5zb21lKGZ1bmN0aW9uIChleGNsdWRlRGF0ZSkge1xuICAgIHJldHVybiBpc1NhbWVEYXkoZGF5LCBleGNsdWRlRGF0ZSk7XG4gIH0pIHx8IGluY2x1ZGVEYXRlcyAmJiAhaW5jbHVkZURhdGVzLnNvbWUoZnVuY3Rpb24gKGluY2x1ZGVEYXRlKSB7XG4gICAgcmV0dXJuIGlzU2FtZURheShkYXksIGluY2x1ZGVEYXRlKTtcbiAgfSkgfHwgZmlsdGVyRGF0ZSAmJiAhZmlsdGVyRGF0ZShkYXkuY2xvbmUoKSkgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzVGltZURpc2FibGVkKHRpbWUsIGRpc2FibGVkVGltZXMpIHtcbiAgdmFyIGwgPSBkaXNhYmxlZFRpbWVzLmxlbmd0aDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoZGlzYWJsZWRUaW1lc1tpXS5nZXQoXCJob3Vyc1wiKSA9PT0gdGltZS5nZXQoXCJob3Vyc1wiKSAmJiBkaXNhYmxlZFRpbWVzW2ldLmdldChcIm1pbnV0ZXNcIikgPT09IHRpbWUuZ2V0KFwibWludXRlc1wiKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1RpbWVJbkRpc2FibGVkUmFuZ2UodGltZSwgX3JlZjUpIHtcbiAgdmFyIG1pblRpbWUgPSBfcmVmNS5taW5UaW1lLFxuICAgICAgbWF4VGltZSA9IF9yZWY1Lm1heFRpbWU7XG5cbiAgaWYgKCFtaW5UaW1lIHx8ICFtYXhUaW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQm90aCBtaW5UaW1lIGFuZCBtYXhUaW1lIHByb3BzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgdmFyIGJhc2UgPSBtb21lbnQoKS5ob3VycygwKS5taW51dGVzKDApLnNlY29uZHMoMCk7XG4gIHZhciBiYXNlVGltZSA9IGJhc2UuY2xvbmUoKS5ob3Vycyh0aW1lLmdldChcImhvdXJzXCIpKS5taW51dGVzKHRpbWUuZ2V0KFwibWludXRlc1wiKSk7XG4gIHZhciBtaW4gPSBiYXNlLmNsb25lKCkuaG91cnMobWluVGltZS5nZXQoXCJob3Vyc1wiKSkubWludXRlcyhtaW5UaW1lLmdldChcIm1pbnV0ZXNcIikpO1xuICB2YXIgbWF4ID0gYmFzZS5jbG9uZSgpLmhvdXJzKG1heFRpbWUuZ2V0KFwiaG91cnNcIikpLm1pbnV0ZXMobWF4VGltZS5nZXQoXCJtaW51dGVzXCIpKTtcblxuICByZXR1cm4gIShiYXNlVGltZS5pc1NhbWVPckFmdGVyKG1pbikgJiYgYmFzZVRpbWUuaXNTYW1lT3JCZWZvcmUobWF4KSk7XG59XG5cbmZ1bmN0aW9uIGFsbERheXNEaXNhYmxlZEJlZm9yZShkYXksIHVuaXQpIHtcbiAgdmFyIF9yZWY2ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICAgIG1pbkRhdGUgPSBfcmVmNi5taW5EYXRlLFxuICAgICAgaW5jbHVkZURhdGVzID0gX3JlZjYuaW5jbHVkZURhdGVzO1xuXG4gIHZhciBkYXRlQmVmb3JlID0gZGF5LmNsb25lKCkuc3VidHJhY3QoMSwgdW5pdCk7XG4gIHJldHVybiBtaW5EYXRlICYmIGRhdGVCZWZvcmUuaXNCZWZvcmUobWluRGF0ZSwgdW5pdCkgfHwgaW5jbHVkZURhdGVzICYmIGluY2x1ZGVEYXRlcy5ldmVyeShmdW5jdGlvbiAoaW5jbHVkZURhdGUpIHtcbiAgICByZXR1cm4gZGF0ZUJlZm9yZS5pc0JlZm9yZShpbmNsdWRlRGF0ZSwgdW5pdCk7XG4gIH0pIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBhbGxEYXlzRGlzYWJsZWRBZnRlcihkYXksIHVuaXQpIHtcbiAgdmFyIF9yZWY3ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiB7fSxcbiAgICAgIG1heERhdGUgPSBfcmVmNy5tYXhEYXRlLFxuICAgICAgaW5jbHVkZURhdGVzID0gX3JlZjcuaW5jbHVkZURhdGVzO1xuXG4gIHZhciBkYXRlQWZ0ZXIgPSBkYXkuY2xvbmUoKS5hZGQoMSwgdW5pdCk7XG4gIHJldHVybiBtYXhEYXRlICYmIGRhdGVBZnRlci5pc0FmdGVyKG1heERhdGUsIHVuaXQpIHx8IGluY2x1ZGVEYXRlcyAmJiBpbmNsdWRlRGF0ZXMuZXZlcnkoZnVuY3Rpb24gKGluY2x1ZGVEYXRlKSB7XG4gICAgcmV0dXJuIGRhdGVBZnRlci5pc0FmdGVyKGluY2x1ZGVEYXRlLCB1bml0KTtcbiAgfSkgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEVmZmVjdGl2ZU1pbkRhdGUoX3JlZjgpIHtcbiAgdmFyIG1pbkRhdGUgPSBfcmVmOC5taW5EYXRlLFxuICAgICAgaW5jbHVkZURhdGVzID0gX3JlZjguaW5jbHVkZURhdGVzO1xuXG4gIGlmIChpbmNsdWRlRGF0ZXMgJiYgbWluRGF0ZSkge1xuICAgIHJldHVybiBtb21lbnQubWluKGluY2x1ZGVEYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGluY2x1ZGVEYXRlKSB7XG4gICAgICByZXR1cm4gbWluRGF0ZS5pc1NhbWVPckJlZm9yZShpbmNsdWRlRGF0ZSwgXCJkYXlcIik7XG4gICAgfSkpO1xuICB9IGVsc2UgaWYgKGluY2x1ZGVEYXRlcykge1xuICAgIHJldHVybiBtb21lbnQubWluKGluY2x1ZGVEYXRlcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG1pbkRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RWZmZWN0aXZlTWF4RGF0ZShfcmVmOSkge1xuICB2YXIgbWF4RGF0ZSA9IF9yZWY5Lm1heERhdGUsXG4gICAgICBpbmNsdWRlRGF0ZXMgPSBfcmVmOS5pbmNsdWRlRGF0ZXM7XG5cbiAgaWYgKGluY2x1ZGVEYXRlcyAmJiBtYXhEYXRlKSB7XG4gICAgcmV0dXJuIG1vbWVudC5tYXgoaW5jbHVkZURhdGVzLmZpbHRlcihmdW5jdGlvbiAoaW5jbHVkZURhdGUpIHtcbiAgICAgIHJldHVybiBtYXhEYXRlLmlzU2FtZU9yQWZ0ZXIoaW5jbHVkZURhdGUsIFwiZGF5XCIpO1xuICAgIH0pKTtcbiAgfSBlbHNlIGlmIChpbmNsdWRlRGF0ZXMpIHtcbiAgICByZXR1cm4gbW9tZW50Lm1heChpbmNsdWRlRGF0ZXMpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBtYXhEYXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2h0TGlnaHREYXlzTWFwKCkge1xuICB2YXIgaGlnaGxpZ2h0RGF0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICB2YXIgZGVmYXVsdENsYXNzTmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkXCI7XG5cbiAgdmFyIGRhdGVDbGFzc2VzID0gbmV3IE1hcCgpO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gaGlnaGxpZ2h0RGF0ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIgb2JqID0gaGlnaGxpZ2h0RGF0ZXNbaV07XG4gICAgaWYgKGlzTW9tZW50KG9iaikpIHtcbiAgICAgIHZhciBrZXkgPSBvYmouZm9ybWF0KFwiTU0uREQuWVlZWVwiKTtcbiAgICAgIHZhciBjbGFzc05hbWVzQXJyID0gZGF0ZUNsYXNzZXMuZ2V0KGtleSkgfHwgW107XG4gICAgICBpZiAoIWNsYXNzTmFtZXNBcnIuaW5jbHVkZXMoZGVmYXVsdENsYXNzTmFtZSkpIHtcbiAgICAgICAgY2xhc3NOYW1lc0Fyci5wdXNoKGRlZmF1bHRDbGFzc05hbWUpO1xuICAgICAgICBkYXRlQ2xhc3Nlcy5zZXQoa2V5LCBjbGFzc05hbWVzQXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yob2JqKSkgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgIHZhciBjbGFzc05hbWUgPSBrZXlzWzBdO1xuICAgICAgdmFyIGFyck9mTW9tZW50cyA9IG9ialtrZXlzWzBdXTtcbiAgICAgIGlmICh0eXBlb2YgY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGFyck9mTW9tZW50cy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcbiAgICAgICAgZm9yICh2YXIgayA9IDAsIF9sZW4gPSBhcnJPZk1vbWVudHMubGVuZ3RoOyBrIDwgX2xlbjsgaysrKSB7XG4gICAgICAgICAgdmFyIF9rZXkgPSBhcnJPZk1vbWVudHNba10uZm9ybWF0KFwiTU0uREQuWVlZWVwiKTtcbiAgICAgICAgICB2YXIgX2NsYXNzTmFtZXNBcnIgPSBkYXRlQ2xhc3Nlcy5nZXQoX2tleSkgfHwgW107XG4gICAgICAgICAgaWYgKCFfY2xhc3NOYW1lc0Fyci5pbmNsdWRlcyhjbGFzc05hbWUpKSB7XG4gICAgICAgICAgICBfY2xhc3NOYW1lc0Fyci5wdXNoKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICBkYXRlQ2xhc3Nlcy5zZXQoX2tleSwgX2NsYXNzTmFtZXNBcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRlQ2xhc3Nlcztcbn1cblxuZnVuY3Rpb24gdGltZXNUb0luamVjdEFmdGVyKHN0YXJ0T2ZEYXksIGN1cnJlbnRUaW1lLCBjdXJyZW50TXVsdGlwbGllciwgaW50ZXJ2YWxzLCBpbmplY3RlZFRpbWVzKSB7XG4gIHZhciBsID0gaW5qZWN0ZWRUaW1lcy5sZW5ndGg7XG4gIHZhciB0aW1lcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBpbmplY3RlZFRpbWUgPSBhZGRNaW51dGVzKGFkZEhvdXJzKGNsb25lRGF0ZShzdGFydE9mRGF5KSwgZ2V0SG91cihpbmplY3RlZFRpbWVzW2ldKSksIGdldE1pbnV0ZShpbmplY3RlZFRpbWVzW2ldKSk7XG4gICAgdmFyIG5leHRUaW1lID0gYWRkTWludXRlcyhjbG9uZURhdGUoc3RhcnRPZkRheSksIChjdXJyZW50TXVsdGlwbGllciArIDEpICogaW50ZXJ2YWxzKTtcblxuICAgIGlmIChpbmplY3RlZFRpbWUuaXNCZXR3ZWVuKGN1cnJlbnRUaW1lLCBuZXh0VGltZSkpIHtcbiAgICAgIHRpbWVzLnB1c2goaW5qZWN0ZWRUaW1lc1tpXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRpbWVzO1xufVxuXG52YXIgV3JhcHBlZFllYXJEcm9wZG93bk9wdGlvbnMgPSBvbkNsaWNrT3V0c2lkZShZZWFyRHJvcGRvd25PcHRpb25zKTtcblxudmFyIFllYXJEcm9wZG93biA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIGluaGVyaXRzKFllYXJEcm9wZG93biwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gWWVhckRyb3Bkb3duKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBZZWFyRHJvcGRvd24pO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBkcm9wZG93blZpc2libGU6IGZhbHNlXG4gICAgfSwgX3RoaXMucmVuZGVyU2VsZWN0T3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBtaW5ZZWFyID0gX3RoaXMucHJvcHMubWluRGF0ZSA/IGdldFllYXIoX3RoaXMucHJvcHMubWluRGF0ZSkgOiAxOTAwO1xuICAgICAgdmFyIG1heFllYXIgPSBfdGhpcy5wcm9wcy5tYXhEYXRlID8gZ2V0WWVhcihfdGhpcy5wcm9wcy5tYXhEYXRlKSA6IDIxMDA7XG5cbiAgICAgIHZhciBvcHRpb25zID0gW107XG4gICAgICBmb3IgKHZhciBpID0gbWluWWVhcjsgaSA8PSBtYXhZZWFyOyBpKyspIHtcbiAgICAgICAgb3B0aW9ucy5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJvcHRpb25cIixcbiAgICAgICAgICB7IGtleTogaSwgdmFsdWU6IGkgfSxcbiAgICAgICAgICBpXG4gICAgICAgICkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSwgX3RoaXMub25TZWxlY3RDaGFuZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgX3RoaXMub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xuICAgIH0sIF90aGlzLnJlbmRlclNlbGVjdE1vZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzZWxlY3RcIixcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiBfdGhpcy5wcm9wcy55ZWFyLFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXNlbGVjdFwiLFxuICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpcy5vblNlbGVjdENoYW5nZVxuICAgICAgICB9LFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3RPcHRpb25zKClcbiAgICAgICk7XG4gICAgfSwgX3RoaXMucmVuZGVyUmVhZFZpZXcgPSBmdW5jdGlvbiAodmlzaWJsZSkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IFwicmVhZFwiLFxuICAgICAgICAgIHN0eWxlOiB7IHZpc2liaWxpdHk6IHZpc2libGUgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCIgfSxcbiAgICAgICAgICBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXdcIixcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMudG9nZ2xlRHJvcGRvd24oZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3dcIiB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX195ZWFyLXJlYWQtdmlldy0tc2VsZWN0ZWQteWVhclwiIH0sXG4gICAgICAgICAgX3RoaXMucHJvcHMueWVhclxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIF90aGlzLnJlbmRlckRyb3Bkb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoV3JhcHBlZFllYXJEcm9wZG93bk9wdGlvbnMsIHtcbiAgICAgICAga2V5OiBcImRyb3Bkb3duXCIsXG4gICAgICAgIHJlZjogXCJvcHRpb25zXCIsXG4gICAgICAgIHllYXI6IF90aGlzLnByb3BzLnllYXIsXG4gICAgICAgIG9uQ2hhbmdlOiBfdGhpcy5vbkNoYW5nZSxcbiAgICAgICAgb25DYW5jZWw6IF90aGlzLnRvZ2dsZURyb3Bkb3duLFxuICAgICAgICBtaW5EYXRlOiBfdGhpcy5wcm9wcy5taW5EYXRlLFxuICAgICAgICBtYXhEYXRlOiBfdGhpcy5wcm9wcy5tYXhEYXRlLFxuICAgICAgICBzY3JvbGxhYmxlWWVhckRyb3Bkb3duOiBfdGhpcy5wcm9wcy5zY3JvbGxhYmxlWWVhckRyb3Bkb3duLFxuICAgICAgICB5ZWFyRHJvcGRvd25JdGVtTnVtYmVyOiBfdGhpcy5wcm9wcy55ZWFyRHJvcGRvd25JdGVtTnVtYmVyXG4gICAgICB9KTtcbiAgICB9LCBfdGhpcy5yZW5kZXJTY3JvbGxNb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGRyb3Bkb3duVmlzaWJsZSA9IF90aGlzLnN0YXRlLmRyb3Bkb3duVmlzaWJsZTtcblxuICAgICAgdmFyIHJlc3VsdCA9IFtfdGhpcy5yZW5kZXJSZWFkVmlldyghZHJvcGRvd25WaXNpYmxlKV07XG4gICAgICBpZiAoZHJvcGRvd25WaXNpYmxlKSB7XG4gICAgICAgIHJlc3VsdC51bnNoaWZ0KF90aGlzLnJlbmRlckRyb3Bkb3duKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBfdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uICh5ZWFyKSB7XG4gICAgICBfdGhpcy50b2dnbGVEcm9wZG93bigpO1xuICAgICAgaWYgKHllYXIgPT09IF90aGlzLnByb3BzLnllYXIpIHJldHVybjtcbiAgICAgIF90aGlzLnByb3BzLm9uQ2hhbmdlKHllYXIpO1xuICAgIH0sIF90aGlzLnRvZ2dsZURyb3Bkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyb3Bkb3duVmlzaWJsZTogIV90aGlzLnN0YXRlLmRyb3Bkb3duVmlzaWJsZVxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlKSB7XG4gICAgICAgICAgX3RoaXMuaGFuZGxlWWVhckNoYW5nZShfdGhpcy5wcm9wcy5kYXRlLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIF90aGlzLmhhbmRsZVllYXJDaGFuZ2UgPSBmdW5jdGlvbiAoZGF0ZSwgZXZlbnQpIHtcbiAgICAgIF90aGlzLm9uU2VsZWN0KGRhdGUsIGV2ZW50KTtcbiAgICAgIF90aGlzLnNldE9wZW4oKTtcbiAgICB9LCBfdGhpcy5vblNlbGVjdCA9IGZ1bmN0aW9uIChkYXRlLCBldmVudCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uU2VsZWN0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uU2VsZWN0KGRhdGUsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LCBfdGhpcy5zZXRPcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLnNldE9wZW4pIHtcbiAgICAgICAgX3RoaXMucHJvcHMuc2V0T3Blbih0cnVlKTtcbiAgICAgIH1cbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgWWVhckRyb3Bkb3duLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHJlbmRlcmVkRHJvcGRvd24gPSB2b2lkIDA7XG4gICAgc3dpdGNoICh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSkge1xuICAgICAgY2FzZSBcInNjcm9sbFwiOlxuICAgICAgICByZW5kZXJlZERyb3Bkb3duID0gdGhpcy5yZW5kZXJTY3JvbGxNb2RlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICByZW5kZXJlZERyb3Bkb3duID0gdGhpcy5yZW5kZXJTZWxlY3RNb2RlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tY29udGFpbmVyIHJlYWN0LWRhdGVwaWNrZXJfX3llYXItZHJvcGRvd24tY29udGFpbmVyLS1cIiArIHRoaXMucHJvcHMuZHJvcGRvd25Nb2RlXG4gICAgICB9LFxuICAgICAgcmVuZGVyZWREcm9wZG93blxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFllYXJEcm9wZG93bjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuWWVhckRyb3Bkb3duLnByb3BUeXBlcyA9IHtcbiAgYWRqdXN0RGF0ZU9uQ2hhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgZHJvcGRvd25Nb2RlOiBQcm9wVHlwZXMub25lT2YoW1wic2Nyb2xsXCIsIFwic2VsZWN0XCJdKS5pc1JlcXVpcmVkLFxuICBtYXhEYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtaW5EYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgc2Nyb2xsYWJsZVllYXJEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIHllYXI6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgeWVhckRyb3Bkb3duSXRlbU51bWJlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgZGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICBzZXRPcGVuOiBQcm9wVHlwZXMuZnVuY1xufTtcblxudmFyIE1vbnRoRHJvcGRvd25PcHRpb25zID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoTW9udGhEcm9wZG93bk9wdGlvbnMsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE1vbnRoRHJvcGRvd25PcHRpb25zKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBNb250aERyb3Bkb3duT3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5yZW5kZXJPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm1vbnRoTmFtZXMubWFwKGZ1bmN0aW9uIChtb250aCwgaSkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZTogX3RoaXMucHJvcHMubW9udGggPT09IGkgPyBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvbiAtLXNlbGVjdGVkX21vbnRoXCIgOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLW9wdGlvblwiLFxuICAgICAgICAgICAga2V5OiBtb250aCxcbiAgICAgICAgICAgIHJlZjogbW9udGgsXG4gICAgICAgICAgICBvbkNsaWNrOiBfdGhpcy5vbkNoYW5nZS5iaW5kKF90aGlzLCBpKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgX3RoaXMucHJvcHMubW9udGggPT09IGkgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJzcGFuXCIsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1vcHRpb24tLXNlbGVjdGVkXCIgfSxcbiAgICAgICAgICAgIFwiXFx1MjcxM1wiXG4gICAgICAgICAgKSA6IFwiXCIsXG4gICAgICAgICAgbW9udGhcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0sIF90aGlzLm9uQ2hhbmdlID0gZnVuY3Rpb24gKG1vbnRoKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMub25DaGFuZ2UobW9udGgpO1xuICAgIH0sIF90aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkNhbmNlbCgpO1xuICAgIH0sIF90ZW1wKSwgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBNb250aERyb3Bkb3duT3B0aW9ucy5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duXCIgfSxcbiAgICAgIHRoaXMucmVuZGVyT3B0aW9ucygpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gTW9udGhEcm9wZG93bk9wdGlvbnM7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbk1vbnRoRHJvcGRvd25PcHRpb25zLnByb3BUeXBlcyA9IHtcbiAgb25DYW5jZWw6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBtb250aDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBtb250aE5hbWVzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQpLmlzUmVxdWlyZWRcbn07XG5cbnZhciBXcmFwcGVkTW9udGhEcm9wZG93bk9wdGlvbnMgPSBvbkNsaWNrT3V0c2lkZShNb250aERyb3Bkb3duT3B0aW9ucyk7XG5cbnZhciBNb250aERyb3Bkb3duID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoTW9udGhEcm9wZG93biwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTW9udGhEcm9wZG93bigpIHtcbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgTW9udGhEcm9wZG93bik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyb3Bkb3duVmlzaWJsZTogZmFsc2VcbiAgICB9LCBfdGhpcy5yZW5kZXJTZWxlY3RPcHRpb25zID0gZnVuY3Rpb24gKG1vbnRoTmFtZXMpIHtcbiAgICAgIHJldHVybiBtb250aE5hbWVzLm1hcChmdW5jdGlvbiAoTSwgaSkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcIm9wdGlvblwiLFxuICAgICAgICAgIHsga2V5OiBpLCB2YWx1ZTogaSB9LFxuICAgICAgICAgIE1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0sIF90aGlzLnJlbmRlclNlbGVjdE1vZGUgPSBmdW5jdGlvbiAobW9udGhOYW1lcykge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogX3RoaXMucHJvcHMubW9udGgsXG4gICAgICAgICAgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXNlbGVjdFwiLFxuICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZShlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMub25DaGFuZ2UoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3RoaXMucmVuZGVyU2VsZWN0T3B0aW9ucyhtb250aE5hbWVzKVxuICAgICAgKTtcbiAgICB9LCBfdGhpcy5yZW5kZXJSZWFkVmlldyA9IGZ1bmN0aW9uICh2aXNpYmxlLCBtb250aE5hbWVzKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAge1xuICAgICAgICAgIGtleTogXCJyZWFkXCIsXG4gICAgICAgICAgc3R5bGU6IHsgdmlzaWJpbGl0eTogdmlzaWJsZSA/IFwidmlzaWJsZVwiIDogXCJoaWRkZW5cIiB9LFxuICAgICAgICAgIGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXdcIixcbiAgICAgICAgICBvbkNsaWNrOiBfdGhpcy50b2dnbGVEcm9wZG93blxuICAgICAgICB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLWRvd24tYXJyb3dcIiB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1yZWFkLXZpZXctLXNlbGVjdGVkLW1vbnRoXCIgfSxcbiAgICAgICAgICBtb250aE5hbWVzW190aGlzLnByb3BzLm1vbnRoXVxuICAgICAgICApXG4gICAgICApO1xuICAgIH0sIF90aGlzLnJlbmRlckRyb3Bkb3duID0gZnVuY3Rpb24gKG1vbnRoTmFtZXMpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFdyYXBwZWRNb250aERyb3Bkb3duT3B0aW9ucywge1xuICAgICAgICBrZXk6IFwiZHJvcGRvd25cIixcbiAgICAgICAgcmVmOiBcIm9wdGlvbnNcIixcbiAgICAgICAgbW9udGg6IF90aGlzLnByb3BzLm1vbnRoLFxuICAgICAgICBtb250aE5hbWVzOiBtb250aE5hbWVzLFxuICAgICAgICBvbkNoYW5nZTogX3RoaXMub25DaGFuZ2UsXG4gICAgICAgIG9uQ2FuY2VsOiBfdGhpcy50b2dnbGVEcm9wZG93blxuICAgICAgfSk7XG4gICAgfSwgX3RoaXMucmVuZGVyU2Nyb2xsTW9kZSA9IGZ1bmN0aW9uIChtb250aE5hbWVzKSB7XG4gICAgICB2YXIgZHJvcGRvd25WaXNpYmxlID0gX3RoaXMuc3RhdGUuZHJvcGRvd25WaXNpYmxlO1xuXG4gICAgICB2YXIgcmVzdWx0ID0gW190aGlzLnJlbmRlclJlYWRWaWV3KCFkcm9wZG93blZpc2libGUsIG1vbnRoTmFtZXMpXTtcbiAgICAgIGlmIChkcm9wZG93blZpc2libGUpIHtcbiAgICAgICAgcmVzdWx0LnVuc2hpZnQoX3RoaXMucmVuZGVyRHJvcGRvd24obW9udGhOYW1lcykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBfdGhpcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChtb250aCkge1xuICAgICAgX3RoaXMudG9nZ2xlRHJvcGRvd24oKTtcbiAgICAgIGlmIChtb250aCAhPT0gX3RoaXMucHJvcHMubW9udGgpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25DaGFuZ2UobW9udGgpO1xuICAgICAgfVxuICAgIH0sIF90aGlzLnRvZ2dsZURyb3Bkb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJvcGRvd25WaXNpYmxlOiAhX3RoaXMuc3RhdGUuZHJvcGRvd25WaXNpYmxlXG4gICAgICB9KTtcbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgTW9udGhEcm9wZG93bi5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGxvY2FsZURhdGEgPSBnZXRMb2NhbGVEYXRhRm9yTG9jYWxlKHRoaXMucHJvcHMubG9jYWxlKTtcbiAgICB2YXIgbW9udGhOYW1lcyA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTFdLm1hcCh0aGlzLnByb3BzLnVzZVNob3J0TW9udGhJbkRyb3Bkb3duID8gZnVuY3Rpb24gKE0pIHtcbiAgICAgIHJldHVybiBnZXRNb250aFNob3J0SW5Mb2NhbGUobG9jYWxlRGF0YSwgbmV3RGF0ZSh7IE06IE0gfSkpO1xuICAgIH0gOiBmdW5jdGlvbiAoTSkge1xuICAgICAgcmV0dXJuIGdldE1vbnRoSW5Mb2NhbGUobG9jYWxlRGF0YSwgbmV3RGF0ZSh7IE06IE0gfSksIF90aGlzMi5wcm9wcy5kYXRlRm9ybWF0KTtcbiAgICB9KTtcblxuICAgIHZhciByZW5kZXJlZERyb3Bkb3duID0gdm9pZCAwO1xuICAgIHN3aXRjaCAodGhpcy5wcm9wcy5kcm9wZG93bk1vZGUpIHtcbiAgICAgIGNhc2UgXCJzY3JvbGxcIjpcbiAgICAgICAgcmVuZGVyZWREcm9wZG93biA9IHRoaXMucmVuZGVyU2Nyb2xsTW9kZShtb250aE5hbWVzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgIHJlbmRlcmVkRHJvcGRvd24gPSB0aGlzLnJlbmRlclNlbGVjdE1vZGUobW9udGhOYW1lcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLWRyb3Bkb3duLWNvbnRhaW5lciByZWFjdC1kYXRlcGlja2VyX19tb250aC1kcm9wZG93bi1jb250YWluZXItLVwiICsgdGhpcy5wcm9wcy5kcm9wZG93bk1vZGVcbiAgICAgIH0sXG4gICAgICByZW5kZXJlZERyb3Bkb3duXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gTW9udGhEcm9wZG93bjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuTW9udGhEcm9wZG93bi5wcm9wVHlwZXMgPSB7XG4gIGRyb3Bkb3duTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcInNjcm9sbFwiLCBcInNlbGVjdFwiXSkuaXNSZXF1aXJlZCxcbiAgbG9jYWxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkYXRlRm9ybWF0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIG1vbnRoOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB1c2VTaG9ydE1vbnRoSW5Ecm9wZG93bjogUHJvcFR5cGVzLmJvb2xcbn07XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTW9udGhZZWFycyhtaW5EYXRlLCBtYXhEYXRlKSB7XG4gIHZhciBsaXN0ID0gW107XG5cbiAgdmFyIGN1cnJEYXRlID0gZ2V0U3RhcnRPZk1vbnRoKGNsb25lRGF0ZShtaW5EYXRlKSk7XG4gIHZhciBsYXN0RGF0ZSA9IGdldFN0YXJ0T2ZNb250aChjbG9uZURhdGUobWF4RGF0ZSkpO1xuXG4gIHdoaWxlICghaXNBZnRlcihjdXJyRGF0ZSwgbGFzdERhdGUpKSB7XG4gICAgbGlzdC5wdXNoKGNsb25lRGF0ZShjdXJyRGF0ZSkpO1xuXG4gICAgYWRkTW9udGhzKGN1cnJEYXRlLCAxKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuXG52YXIgTW9udGhZZWFyRHJvcGRvd25PcHRpb25zID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoTW9udGhZZWFyRHJvcGRvd25PcHRpb25zLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBNb250aFllYXJEcm9wZG93bk9wdGlvbnMocHJvcHMpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBNb250aFllYXJEcm9wZG93bk9wdGlvbnMpO1xuXG4gICAgdmFyIF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpKTtcblxuICAgIF90aGlzLnJlbmRlck9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMuc3RhdGUubW9udGhZZWFyc0xpc3QubWFwKGZ1bmN0aW9uIChtb250aFllYXIpIHtcbiAgICAgICAgdmFyIG1vbnRoWWVhclBvaW50ID0gbW9udGhZZWFyLnZhbHVlT2YoKTtcblxuICAgICAgICB2YXIgaXNTYW1lTW9udGhZZWFyID0gaXNTYW1lWWVhcihfdGhpcy5wcm9wcy5kYXRlLCBtb250aFllYXIpICYmIGlzU2FtZU1vbnRoKF90aGlzLnByb3BzLmRhdGUsIG1vbnRoWWVhcik7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGlzU2FtZU1vbnRoWWVhciA/IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24gLS1zZWxlY3RlZF9tb250aC15ZWFyXCIgOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItb3B0aW9uXCIsXG4gICAgICAgICAgICBrZXk6IG1vbnRoWWVhclBvaW50LFxuICAgICAgICAgICAgcmVmOiBtb250aFllYXJQb2ludCxcbiAgICAgICAgICAgIG9uQ2xpY2s6IF90aGlzLm9uQ2hhbmdlLmJpbmQoX3RoaXMsIG1vbnRoWWVhclBvaW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaXNTYW1lTW9udGhZZWFyID8gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwic3BhblwiLFxuICAgICAgICAgICAgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1vcHRpb24tLXNlbGVjdGVkXCIgfSxcbiAgICAgICAgICAgIFwiXFx1MjcxM1wiXG4gICAgICAgICAgKSA6IFwiXCIsXG4gICAgICAgICAgZm9ybWF0RGF0ZShtb250aFllYXIsIF90aGlzLnByb3BzLmRhdGVGb3JtYXQpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3RoaXMub25DaGFuZ2UgPSBmdW5jdGlvbiAobW9udGhZZWFyKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMub25DaGFuZ2UobW9udGhZZWFyKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMucHJvcHMub25DYW5jZWwoKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBtb250aFllYXJzTGlzdDogZ2VuZXJhdGVNb250aFllYXJzKF90aGlzLnByb3BzLm1pbkRhdGUsIF90aGlzLnByb3BzLm1heERhdGUpXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBNb250aFllYXJEcm9wZG93bk9wdGlvbnMucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgZHJvcGRvd25DbGFzcyA9IGNsYXNzbmFtZXMoe1xuICAgICAgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLWRyb3Bkb3duXCI6IHRydWUsXG4gICAgICBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tLXNjcm9sbGFibGVcIjogdGhpcy5wcm9wcy5zY3JvbGxhYmxlTW9udGhZZWFyRHJvcGRvd25cbiAgICB9KTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHsgY2xhc3NOYW1lOiBkcm9wZG93bkNsYXNzIH0sXG4gICAgICB0aGlzLnJlbmRlck9wdGlvbnMoKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIE1vbnRoWWVhckRyb3Bkb3duT3B0aW9ucztcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuTW9udGhZZWFyRHJvcGRvd25PcHRpb25zLnByb3BUeXBlcyA9IHtcbiAgbWluRGF0ZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBtYXhEYXRlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIG9uQ2FuY2VsOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgZGF0ZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBkYXRlRm9ybWF0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbn07XG5cbnZhciBXcmFwcGVkTW9udGhZZWFyRHJvcGRvd25PcHRpb25zID0gb25DbGlja091dHNpZGUoTW9udGhZZWFyRHJvcGRvd25PcHRpb25zKTtcblxudmFyIE1vbnRoWWVhckRyb3Bkb3duID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoTW9udGhZZWFyRHJvcGRvd24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIE1vbnRoWWVhckRyb3Bkb3duKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBNb250aFllYXJEcm9wZG93bik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGRyb3Bkb3duVmlzaWJsZTogZmFsc2VcbiAgICB9LCBfdGhpcy5yZW5kZXJTZWxlY3RPcHRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGN1cnJEYXRlID0gZ2V0U3RhcnRPZk1vbnRoKGxvY2FsaXplRGF0ZShfdGhpcy5wcm9wcy5taW5EYXRlLCBfdGhpcy5wcm9wcy5sb2NhbGUpKTtcbiAgICAgIHZhciBsYXN0RGF0ZSA9IGdldFN0YXJ0T2ZNb250aChsb2NhbGl6ZURhdGUoX3RoaXMucHJvcHMubWF4RGF0ZSwgX3RoaXMucHJvcHMubG9jYWxlKSk7XG5cbiAgICAgIHZhciBvcHRpb25zID0gW107XG5cbiAgICAgIHdoaWxlICghaXNBZnRlcihjdXJyRGF0ZSwgbGFzdERhdGUpKSB7XG4gICAgICAgIHZhciB0aW1lcG9pbnQgPSBjdXJyRGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgIG9wdGlvbnMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFwib3B0aW9uXCIsXG4gICAgICAgICAgeyBrZXk6IHRpbWVwb2ludCwgdmFsdWU6IHRpbWVwb2ludCB9LFxuICAgICAgICAgIGZvcm1hdERhdGUoY3VyckRhdGUsIF90aGlzLnByb3BzLmRhdGVGb3JtYXQpXG4gICAgICAgICkpO1xuXG4gICAgICAgIGFkZE1vbnRocyhjdXJyRGF0ZSwgMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0sIF90aGlzLm9uU2VsZWN0Q2hhbmdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIF90aGlzLm9uQ2hhbmdlKGUudGFyZ2V0LnZhbHVlKTtcbiAgICB9LCBfdGhpcy5yZW5kZXJTZWxlY3RNb2RlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic2VsZWN0XCIsXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogZ2V0U3RhcnRPZk1vbnRoKF90aGlzLnByb3BzLmRhdGUpLnZhbHVlT2YoKSxcbiAgICAgICAgICBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1zZWxlY3RcIixcbiAgICAgICAgICBvbkNoYW5nZTogX3RoaXMub25TZWxlY3RDaGFuZ2VcbiAgICAgICAgfSxcbiAgICAgICAgX3RoaXMucmVuZGVyU2VsZWN0T3B0aW9ucygpXG4gICAgICApO1xuICAgIH0sIF90aGlzLnJlbmRlclJlYWRWaWV3ID0gZnVuY3Rpb24gKHZpc2libGUpIHtcbiAgICAgIHZhciB5ZWFyTW9udGggPSBmb3JtYXREYXRlKGxvY2FsaXplRGF0ZShuZXdEYXRlKF90aGlzLnByb3BzLmRhdGUpLCBfdGhpcy5wcm9wcy5sb2NhbGUpLCBfdGhpcy5wcm9wcy5kYXRlRm9ybWF0KTtcblxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBrZXk6IFwicmVhZFwiLFxuICAgICAgICAgIHN0eWxlOiB7IHZpc2liaWxpdHk6IHZpc2libGUgPyBcInZpc2libGVcIiA6IFwiaGlkZGVuXCIgfSxcbiAgICAgICAgICBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXdcIixcbiAgICAgICAgICBvbkNsaWNrOiBmdW5jdGlvbiBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMudG9nZ2xlRHJvcGRvd24oZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgteWVhci1yZWFkLXZpZXctLWRvd24tYXJyb3dcIiB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcInNwYW5cIixcbiAgICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXJlYWQtdmlldy0tc2VsZWN0ZWQtbW9udGgteWVhclwiIH0sXG4gICAgICAgICAgeWVhck1vbnRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSwgX3RoaXMucmVuZGVyRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChXcmFwcGVkTW9udGhZZWFyRHJvcGRvd25PcHRpb25zLCB7XG4gICAgICAgIGtleTogXCJkcm9wZG93blwiLFxuICAgICAgICByZWY6IFwib3B0aW9uc1wiLFxuICAgICAgICBkYXRlOiBfdGhpcy5wcm9wcy5kYXRlLFxuICAgICAgICBkYXRlRm9ybWF0OiBfdGhpcy5wcm9wcy5kYXRlRm9ybWF0LFxuICAgICAgICBvbkNoYW5nZTogX3RoaXMub25DaGFuZ2UsXG4gICAgICAgIG9uQ2FuY2VsOiBfdGhpcy50b2dnbGVEcm9wZG93bixcbiAgICAgICAgbWluRGF0ZTogbG9jYWxpemVEYXRlKF90aGlzLnByb3BzLm1pbkRhdGUsIF90aGlzLnByb3BzLmxvY2FsZSksXG4gICAgICAgIG1heERhdGU6IGxvY2FsaXplRGF0ZShfdGhpcy5wcm9wcy5tYXhEYXRlLCBfdGhpcy5wcm9wcy5sb2NhbGUpLFxuICAgICAgICBzY3JvbGxhYmxlTW9udGhZZWFyRHJvcGRvd246IF90aGlzLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93blxuICAgICAgfSk7XG4gICAgfSwgX3RoaXMucmVuZGVyU2Nyb2xsTW9kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkcm9wZG93blZpc2libGUgPSBfdGhpcy5zdGF0ZS5kcm9wZG93blZpc2libGU7XG5cbiAgICAgIHZhciByZXN1bHQgPSBbX3RoaXMucmVuZGVyUmVhZFZpZXcoIWRyb3Bkb3duVmlzaWJsZSldO1xuICAgICAgaWYgKGRyb3Bkb3duVmlzaWJsZSkge1xuICAgICAgICByZXN1bHQudW5zaGlmdChfdGhpcy5yZW5kZXJEcm9wZG93bigpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwgX3RoaXMub25DaGFuZ2UgPSBmdW5jdGlvbiAobW9udGhZZWFyUG9pbnQpIHtcbiAgICAgIF90aGlzLnRvZ2dsZURyb3Bkb3duKCk7XG5cbiAgICAgIHZhciBjaGFuZ2VkRGF0ZSA9IG5ld0RhdGUocGFyc2VJbnQobW9udGhZZWFyUG9pbnQpKTtcblxuICAgICAgaWYgKGlzU2FtZVllYXIoX3RoaXMucHJvcHMuZGF0ZSwgY2hhbmdlZERhdGUpICYmIGlzU2FtZU1vbnRoKF90aGlzLnByb3BzLmRhdGUsIGNoYW5nZWREYXRlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnByb3BzLm9uQ2hhbmdlKGNoYW5nZWREYXRlKTtcbiAgICB9LCBfdGhpcy50b2dnbGVEcm9wZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRyb3Bkb3duVmlzaWJsZTogIV90aGlzLnN0YXRlLmRyb3Bkb3duVmlzaWJsZVxuICAgICAgfSk7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIE1vbnRoWWVhckRyb3Bkb3duLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHJlbmRlcmVkRHJvcGRvd24gPSB2b2lkIDA7XG4gICAgc3dpdGNoICh0aGlzLnByb3BzLmRyb3Bkb3duTW9kZSkge1xuICAgICAgY2FzZSBcInNjcm9sbFwiOlxuICAgICAgICByZW5kZXJlZERyb3Bkb3duID0gdGhpcy5yZW5kZXJTY3JvbGxNb2RlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICByZW5kZXJlZERyb3Bkb3duID0gdGhpcy5yZW5kZXJTZWxlY3RNb2RlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tY29udGFpbmVyIHJlYWN0LWRhdGVwaWNrZXJfX21vbnRoLXllYXItZHJvcGRvd24tY29udGFpbmVyLS1cIiArIHRoaXMucHJvcHMuZHJvcGRvd25Nb2RlXG4gICAgICB9LFxuICAgICAgcmVuZGVyZWREcm9wZG93blxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIE1vbnRoWWVhckRyb3Bkb3duO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Nb250aFllYXJEcm9wZG93bi5wcm9wVHlwZXMgPSB7XG4gIGRyb3Bkb3duTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcInNjcm9sbFwiLCBcInNlbGVjdFwiXSkuaXNSZXF1aXJlZCxcbiAgZGF0ZUZvcm1hdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1heERhdGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgbWluRGF0ZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBkYXRlOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBzY3JvbGxhYmxlTW9udGhZZWFyRHJvcGRvd246IFByb3BUeXBlcy5ib29sXG59O1xuXG52YXIgRGF5ID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoRGF5LCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBEYXkoKSB7XG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIERheSk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5oYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFfdGhpcy5pc0Rpc2FibGVkKCkgJiYgX3RoaXMucHJvcHMub25DbGljaykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LCBfdGhpcy5oYW5kbGVNb3VzZUVudGVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIV90aGlzLmlzRGlzYWJsZWQoKSAmJiBfdGhpcy5wcm9wcy5vbk1vdXNlRW50ZXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Nb3VzZUVudGVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9LCBfdGhpcy5pc1NhbWVEYXkgPSBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICAgIHJldHVybiBpc1NhbWVEYXkoX3RoaXMucHJvcHMuZGF5LCBvdGhlcik7XG4gICAgfSwgX3RoaXMuaXNLZXlib2FyZFNlbGVjdGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICFfdGhpcy5wcm9wcy5pbmxpbmUgJiYgIV90aGlzLmlzU2FtZURheShfdGhpcy5wcm9wcy5zZWxlY3RlZCkgJiYgX3RoaXMuaXNTYW1lRGF5KF90aGlzLnByb3BzLnByZVNlbGVjdGlvbik7XG4gICAgfSwgX3RoaXMuaXNEaXNhYmxlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpc0RheURpc2FibGVkKF90aGlzLnByb3BzLmRheSwgX3RoaXMucHJvcHMpO1xuICAgIH0sIF90aGlzLmdldEhpZ2hMaWdodGVkQ2xhc3MgPSBmdW5jdGlvbiAoZGVmYXVsdENsYXNzTmFtZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgZGF5ID0gX3RoaXMkcHJvcHMuZGF5LFxuICAgICAgICAgIGhpZ2hsaWdodERhdGVzID0gX3RoaXMkcHJvcHMuaGlnaGxpZ2h0RGF0ZXM7XG5cblxuICAgICAgaWYgKCFoaWdobGlnaHREYXRlcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIExvb2tpbmcgZm9yIGNsYXNzTmFtZSBpbiB0aGUgTWFwIG9mIHsnZGF5IHN0cmluZywgJ2NsYXNzTmFtZSd9XG4gICAgICB2YXIgZGF5U3RyID0gZGF5LmZvcm1hdChcIk1NLkRELllZWVlcIik7XG4gICAgICByZXR1cm4gaGlnaGxpZ2h0RGF0ZXMuZ2V0KGRheVN0cik7XG4gICAgfSwgX3RoaXMuaXNJblJhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGRheSA9IF90aGlzJHByb3BzMi5kYXksXG4gICAgICAgICAgc3RhcnREYXRlID0gX3RoaXMkcHJvcHMyLnN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlID0gX3RoaXMkcHJvcHMyLmVuZERhdGU7XG5cbiAgICAgIGlmICghc3RhcnREYXRlIHx8ICFlbmREYXRlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc0RheUluUmFuZ2UoZGF5LCBzdGFydERhdGUsIGVuZERhdGUpO1xuICAgIH0sIF90aGlzLmlzSW5TZWxlY3RpbmdSYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBkYXkgPSBfdGhpcyRwcm9wczMuZGF5LFxuICAgICAgICAgIHNlbGVjdHNTdGFydCA9IF90aGlzJHByb3BzMy5zZWxlY3RzU3RhcnQsXG4gICAgICAgICAgc2VsZWN0c0VuZCA9IF90aGlzJHByb3BzMy5zZWxlY3RzRW5kLFxuICAgICAgICAgIHNlbGVjdGluZ0RhdGUgPSBfdGhpcyRwcm9wczMuc2VsZWN0aW5nRGF0ZSxcbiAgICAgICAgICBzdGFydERhdGUgPSBfdGhpcyRwcm9wczMuc3RhcnREYXRlLFxuICAgICAgICAgIGVuZERhdGUgPSBfdGhpcyRwcm9wczMuZW5kRGF0ZTtcblxuXG4gICAgICBpZiAoIShzZWxlY3RzU3RhcnQgfHwgc2VsZWN0c0VuZCkgfHwgIXNlbGVjdGluZ0RhdGUgfHwgX3RoaXMuaXNEaXNhYmxlZCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdHNTdGFydCAmJiBlbmREYXRlICYmIHNlbGVjdGluZ0RhdGUuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGlzRGF5SW5SYW5nZShkYXksIHNlbGVjdGluZ0RhdGUsIGVuZERhdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0c0VuZCAmJiBzdGFydERhdGUgJiYgc2VsZWN0aW5nRGF0ZS5pc1NhbWVPckFmdGVyKHN0YXJ0RGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGlzRGF5SW5SYW5nZShkYXksIHN0YXJ0RGF0ZSwgc2VsZWN0aW5nRGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LCBfdGhpcy5pc1NlbGVjdGluZ1JhbmdlU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLmlzSW5TZWxlY3RpbmdSYW5nZSgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGRheSA9IF90aGlzJHByb3BzNC5kYXksXG4gICAgICAgICAgc2VsZWN0aW5nRGF0ZSA9IF90aGlzJHByb3BzNC5zZWxlY3RpbmdEYXRlLFxuICAgICAgICAgIHN0YXJ0RGF0ZSA9IF90aGlzJHByb3BzNC5zdGFydERhdGUsXG4gICAgICAgICAgc2VsZWN0c1N0YXJ0ID0gX3RoaXMkcHJvcHM0LnNlbGVjdHNTdGFydDtcblxuXG4gICAgICBpZiAoc2VsZWN0c1N0YXJ0KSB7XG4gICAgICAgIHJldHVybiBpc1NhbWVEYXkoZGF5LCBzZWxlY3RpbmdEYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc1NhbWVEYXkoZGF5LCBzdGFydERhdGUpO1xuICAgICAgfVxuICAgIH0sIF90aGlzLmlzU2VsZWN0aW5nUmFuZ2VFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIV90aGlzLmlzSW5TZWxlY3RpbmdSYW5nZSgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGRheSA9IF90aGlzJHByb3BzNS5kYXksXG4gICAgICAgICAgc2VsZWN0aW5nRGF0ZSA9IF90aGlzJHByb3BzNS5zZWxlY3RpbmdEYXRlLFxuICAgICAgICAgIGVuZERhdGUgPSBfdGhpcyRwcm9wczUuZW5kRGF0ZSxcbiAgICAgICAgICBzZWxlY3RzRW5kID0gX3RoaXMkcHJvcHM1LnNlbGVjdHNFbmQ7XG5cblxuICAgICAgaWYgKHNlbGVjdHNFbmQpIHtcbiAgICAgICAgcmV0dXJuIGlzU2FtZURheShkYXksIHNlbGVjdGluZ0RhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzU2FtZURheShkYXksIGVuZERhdGUpO1xuICAgICAgfVxuICAgIH0sIF90aGlzLmlzUmFuZ2VTdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBkYXkgPSBfdGhpcyRwcm9wczYuZGF5LFxuICAgICAgICAgIHN0YXJ0RGF0ZSA9IF90aGlzJHByb3BzNi5zdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZSA9IF90aGlzJHByb3BzNi5lbmREYXRlO1xuXG4gICAgICBpZiAoIXN0YXJ0RGF0ZSB8fCAhZW5kRGF0ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gaXNTYW1lRGF5KHN0YXJ0RGF0ZSwgZGF5KTtcbiAgICB9LCBfdGhpcy5pc1JhbmdlRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGRheSA9IF90aGlzJHByb3BzNy5kYXksXG4gICAgICAgICAgc3RhcnREYXRlID0gX3RoaXMkcHJvcHM3LnN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlID0gX3RoaXMkcHJvcHM3LmVuZERhdGU7XG5cbiAgICAgIGlmICghc3RhcnREYXRlIHx8ICFlbmREYXRlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1NhbWVEYXkoZW5kRGF0ZSwgZGF5KTtcbiAgICB9LCBfdGhpcy5pc1dlZWtlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgd2Vla2RheSA9IGdldERheShfdGhpcy5wcm9wcy5kYXkpO1xuICAgICAgcmV0dXJuIHdlZWtkYXkgPT09IDAgfHwgd2Vla2RheSA9PT0gNjtcbiAgICB9LCBfdGhpcy5pc091dHNpZGVNb250aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5tb250aCAhPT0gdW5kZWZpbmVkICYmIF90aGlzLnByb3BzLm1vbnRoICE9PSBnZXRNb250aChfdGhpcy5wcm9wcy5kYXkpO1xuICAgIH0sIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgdmFyIGRheUNsYXNzTmFtZSA9IF90aGlzLnByb3BzLmRheUNsYXNzTmFtZSA/IF90aGlzLnByb3BzLmRheUNsYXNzTmFtZShkYXRlKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiBjbGFzc25hbWVzKFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5XCIsIGRheUNsYXNzTmFtZSwgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLVwiICsgZ2V0RGF5T2ZXZWVrQ29kZShfdGhpcy5wcm9wcy5kYXkpLCB7XG4gICAgICAgIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1kaXNhYmxlZFwiOiBfdGhpcy5pc0Rpc2FibGVkKCksXG4gICAgICAgIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1zZWxlY3RlZFwiOiBfdGhpcy5pc1NhbWVEYXkoX3RoaXMucHJvcHMuc2VsZWN0ZWQpLFxuICAgICAgICBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0ta2V5Ym9hcmQtc2VsZWN0ZWRcIjogX3RoaXMuaXNLZXlib2FyZFNlbGVjdGVkKCksXG4gICAgICAgIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1yYW5nZS1zdGFydFwiOiBfdGhpcy5pc1JhbmdlU3RhcnQoKSxcbiAgICAgICAgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXJhbmdlLWVuZFwiOiBfdGhpcy5pc1JhbmdlRW5kKCksXG4gICAgICAgIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1pbi1yYW5nZVwiOiBfdGhpcy5pc0luUmFuZ2UoKSxcbiAgICAgICAgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWluLXNlbGVjdGluZy1yYW5nZVwiOiBfdGhpcy5pc0luU2VsZWN0aW5nUmFuZ2UoKSxcbiAgICAgICAgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGluZy1yYW5nZS1zdGFydFwiOiBfdGhpcy5pc1NlbGVjdGluZ1JhbmdlU3RhcnQoKSxcbiAgICAgICAgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXNlbGVjdGluZy1yYW5nZS1lbmRcIjogX3RoaXMuaXNTZWxlY3RpbmdSYW5nZUVuZCgpLFxuICAgICAgICBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS0tdG9kYXlcIjogX3RoaXMuaXNTYW1lRGF5KG5vdyhfdGhpcy5wcm9wcy51dGNPZmZzZXQpKSxcbiAgICAgICAgXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLXdlZWtlbmRcIjogX3RoaXMuaXNXZWVrZW5kKCksXG4gICAgICAgIFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LS1vdXRzaWRlLW1vbnRoXCI6IF90aGlzLmlzT3V0c2lkZU1vbnRoKClcbiAgICAgIH0sIF90aGlzLmdldEhpZ2hMaWdodGVkQ2xhc3MoXCJyZWFjdC1kYXRlcGlja2VyX19kYXktLWhpZ2hsaWdodGVkXCIpKTtcbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgRGF5LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6IHRoaXMuZ2V0Q2xhc3NOYW1lcyh0aGlzLnByb3BzLmRheSksXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssXG4gICAgICAgIG9uTW91c2VFbnRlcjogdGhpcy5oYW5kbGVNb3VzZUVudGVyLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogXCJkYXktXCIgKyBnZXREYXRlKHRoaXMucHJvcHMuZGF5KSxcbiAgICAgICAgcm9sZTogXCJvcHRpb25cIlxuICAgICAgfSxcbiAgICAgIGdldERhdGUodGhpcy5wcm9wcy5kYXkpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gRGF5O1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5EYXkucHJvcFR5cGVzID0ge1xuICBkYXk6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZGF5Q2xhc3NOYW1lOiBQcm9wVHlwZXMuZnVuYyxcbiAgZW5kRGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgaGlnaGxpZ2h0RGF0ZXM6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE1hcCksXG4gIGlubGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIG1vbnRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZUVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgcHJlU2VsZWN0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzZWxlY3RlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0aW5nRGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0c0VuZDogUHJvcFR5cGVzLmJvb2wsXG4gIHNlbGVjdHNTdGFydDogUHJvcFR5cGVzLmJvb2wsXG4gIHN0YXJ0RGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgdXRjT2Zmc2V0OiBQcm9wVHlwZXMubnVtYmVyXG59O1xuXG52YXIgV2Vla051bWJlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIGluaGVyaXRzKFdlZWtOdW1iZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFdlZWtOdW1iZXIoKSB7XG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIFdlZWtOdW1iZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH0sIF90ZW1wKSwgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBXZWVrTnVtYmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHdlZWtOdW1iZXJDbGFzc2VzID0ge1xuICAgICAgXCJyZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlclwiOiB0cnVlLFxuICAgICAgXCJyZWFjdC1kYXRlcGlja2VyX193ZWVrLW51bWJlci0tY2xpY2thYmxlXCI6ICEhdGhpcy5wcm9wcy5vbkNsaWNrXG4gICAgfTtcbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIFwiZGl2XCIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NuYW1lcyh3ZWVrTnVtYmVyQ2xhc3NlcyksXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBcIndlZWstXCIgKyB0aGlzLnByb3BzLndlZWtOdW1iZXIsXG4gICAgICAgIG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2tcbiAgICAgIH0sXG4gICAgICB0aGlzLnByb3BzLndlZWtOdW1iZXJcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBXZWVrTnVtYmVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5XZWVrTnVtYmVyLnByb3BUeXBlcyA9IHtcbiAgd2Vla051bWJlcjogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuY1xufTtcblxudmFyIFdlZWsgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBpbmhlcml0cyhXZWVrLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBXZWVrKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBXZWVrKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLmhhbmRsZURheUNsaWNrID0gZnVuY3Rpb24gKGRheSwgZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkRheUNsaWNrKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRGF5Q2xpY2soZGF5LCBldmVudCk7XG4gICAgICB9XG4gICAgfSwgX3RoaXMuaGFuZGxlRGF5TW91c2VFbnRlciA9IGZ1bmN0aW9uIChkYXkpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkRheU1vdXNlRW50ZXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25EYXlNb3VzZUVudGVyKGRheSk7XG4gICAgICB9XG4gICAgfSwgX3RoaXMuaGFuZGxlV2Vla0NsaWNrID0gZnVuY3Rpb24gKGRheSwgd2Vla051bWJlciwgZXZlbnQpIHtcbiAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMub25XZWVrU2VsZWN0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25XZWVrU2VsZWN0KGRheSwgd2Vla051bWJlciwgZXZlbnQpO1xuICAgICAgfVxuICAgIH0sIF90aGlzLmZvcm1hdFdlZWtOdW1iZXIgPSBmdW5jdGlvbiAoc3RhcnRPZldlZWspIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyKHN0YXJ0T2ZXZWVrKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRXZWVrKHN0YXJ0T2ZXZWVrKTtcbiAgICB9LCBfdGhpcy5yZW5kZXJEYXlzID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHN0YXJ0T2ZXZWVrID0gZ2V0U3RhcnRPZldlZWsoY2xvbmVEYXRlKF90aGlzLnByb3BzLmRheSkpO1xuICAgICAgdmFyIGRheXMgPSBbXTtcbiAgICAgIHZhciB3ZWVrTnVtYmVyID0gX3RoaXMuZm9ybWF0V2Vla051bWJlcihzdGFydE9mV2Vlayk7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuc2hvd1dlZWtOdW1iZXIpIHtcbiAgICAgICAgdmFyIG9uQ2xpY2tBY3Rpb24gPSBfdGhpcy5wcm9wcy5vbldlZWtTZWxlY3QgPyBfdGhpcy5oYW5kbGVXZWVrQ2xpY2suYmluZChfdGhpcywgc3RhcnRPZldlZWssIHdlZWtOdW1iZXIpIDogdW5kZWZpbmVkO1xuICAgICAgICBkYXlzLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChXZWVrTnVtYmVyLCB7IGtleTogXCJXXCIsIHdlZWtOdW1iZXI6IHdlZWtOdW1iZXIsIG9uQ2xpY2s6IG9uQ2xpY2tBY3Rpb24gfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRheXMuY29uY2F0KFswLCAxLCAyLCAzLCA0LCA1LCA2XS5tYXAoZnVuY3Rpb24gKG9mZnNldCkge1xuICAgICAgICB2YXIgZGF5ID0gYWRkRGF5cyhjbG9uZURhdGUoc3RhcnRPZldlZWspLCBvZmZzZXQpO1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChEYXksIHtcbiAgICAgICAgICBrZXk6IG9mZnNldCxcbiAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICBtb250aDogX3RoaXMucHJvcHMubW9udGgsXG4gICAgICAgICAgb25DbGljazogX3RoaXMuaGFuZGxlRGF5Q2xpY2suYmluZChfdGhpcywgZGF5KSxcbiAgICAgICAgICBvbk1vdXNlRW50ZXI6IF90aGlzLmhhbmRsZURheU1vdXNlRW50ZXIuYmluZChfdGhpcywgZGF5KSxcbiAgICAgICAgICBtaW5EYXRlOiBfdGhpcy5wcm9wcy5taW5EYXRlLFxuICAgICAgICAgIG1heERhdGU6IF90aGlzLnByb3BzLm1heERhdGUsXG4gICAgICAgICAgZXhjbHVkZURhdGVzOiBfdGhpcy5wcm9wcy5leGNsdWRlRGF0ZXMsXG4gICAgICAgICAgaW5jbHVkZURhdGVzOiBfdGhpcy5wcm9wcy5pbmNsdWRlRGF0ZXMsXG4gICAgICAgICAgaW5saW5lOiBfdGhpcy5wcm9wcy5pbmxpbmUsXG4gICAgICAgICAgaGlnaGxpZ2h0RGF0ZXM6IF90aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzLFxuICAgICAgICAgIHNlbGVjdGluZ0RhdGU6IF90aGlzLnByb3BzLnNlbGVjdGluZ0RhdGUsXG4gICAgICAgICAgZmlsdGVyRGF0ZTogX3RoaXMucHJvcHMuZmlsdGVyRGF0ZSxcbiAgICAgICAgICBwcmVTZWxlY3Rpb246IF90aGlzLnByb3BzLnByZVNlbGVjdGlvbixcbiAgICAgICAgICBzZWxlY3RlZDogX3RoaXMucHJvcHMuc2VsZWN0ZWQsXG4gICAgICAgICAgc2VsZWN0c1N0YXJ0OiBfdGhpcy5wcm9wcy5zZWxlY3RzU3RhcnQsXG4gICAgICAgICAgc2VsZWN0c0VuZDogX3RoaXMucHJvcHMuc2VsZWN0c0VuZCxcbiAgICAgICAgICBzdGFydERhdGU6IF90aGlzLnByb3BzLnN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiBfdGhpcy5wcm9wcy5lbmREYXRlLFxuICAgICAgICAgIGRheUNsYXNzTmFtZTogX3RoaXMucHJvcHMuZGF5Q2xhc3NOYW1lLFxuICAgICAgICAgIHV0Y09mZnNldDogX3RoaXMucHJvcHMudXRjT2Zmc2V0XG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgIH0sIF90ZW1wKSwgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBXZWVrLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fd2Vla1wiIH0sXG4gICAgICB0aGlzLnJlbmRlckRheXMoKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFdlZWs7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbldlZWsucHJvcFR5cGVzID0ge1xuICBkYXk6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgZGF5Q2xhc3NOYW1lOiBQcm9wVHlwZXMuZnVuYyxcbiAgZW5kRGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgZXhjbHVkZURhdGVzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGZpbHRlckRhdGU6IFByb3BUeXBlcy5mdW5jLFxuICBmb3JtYXRXZWVrTnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgaGlnaGxpZ2h0RGF0ZXM6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE1hcCksXG4gIGluY2x1ZGVEYXRlczogUHJvcFR5cGVzLmFycmF5LFxuICBpbmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICBtYXhEYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtaW5EYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtb250aDogUHJvcFR5cGVzLm51bWJlcixcbiAgb25EYXlDbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRGF5TW91c2VFbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uV2Vla1NlbGVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gIHByZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdGluZ0RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdHNFbmQ6IFByb3BUeXBlcy5ib29sLFxuICBzZWxlY3RzU3RhcnQ6IFByb3BUeXBlcy5ib29sLFxuICBzaG93V2Vla051bWJlcjogUHJvcFR5cGVzLmJvb2wsXG4gIHN0YXJ0RGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgdXRjT2Zmc2V0OiBQcm9wVHlwZXMubnVtYmVyXG59O1xuXG52YXIgRklYRURfSEVJR0hUX1NUQU5EQVJEX1dFRUtfQ09VTlQgPSA2O1xuXG52YXIgTW9udGggPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBpbmhlcml0cyhNb250aCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTW9udGgoKSB7XG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIE1vbnRoKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLmhhbmRsZURheUNsaWNrID0gZnVuY3Rpb24gKGRheSwgZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkRheUNsaWNrKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRGF5Q2xpY2soZGF5LCBldmVudCk7XG4gICAgICB9XG4gICAgfSwgX3RoaXMuaGFuZGxlRGF5TW91c2VFbnRlciA9IGZ1bmN0aW9uIChkYXkpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkRheU1vdXNlRW50ZXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25EYXlNb3VzZUVudGVyKGRheSk7XG4gICAgICB9XG4gICAgfSwgX3RoaXMuaGFuZGxlTW91c2VMZWF2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vdXNlTGVhdmUpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Nb3VzZUxlYXZlKCk7XG4gICAgICB9XG4gICAgfSwgX3RoaXMuaXNXZWVrSW5Nb250aCA9IGZ1bmN0aW9uIChzdGFydE9mV2Vlaykge1xuICAgICAgdmFyIGRheSA9IF90aGlzLnByb3BzLmRheTtcbiAgICAgIHZhciBlbmRPZldlZWsgPSBhZGREYXlzKGNsb25lRGF0ZShzdGFydE9mV2VlayksIDYpO1xuICAgICAgcmV0dXJuIGlzU2FtZU1vbnRoKHN0YXJ0T2ZXZWVrLCBkYXkpIHx8IGlzU2FtZU1vbnRoKGVuZE9mV2VlaywgZGF5KTtcbiAgICB9LCBfdGhpcy5yZW5kZXJXZWVrcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB3ZWVrcyA9IFtdO1xuICAgICAgdmFyIGlzRml4ZWRIZWlnaHQgPSBfdGhpcy5wcm9wcy5maXhlZEhlaWdodDtcbiAgICAgIHZhciBjdXJyZW50V2Vla1N0YXJ0ID0gZ2V0U3RhcnRPZldlZWsoZ2V0U3RhcnRPZk1vbnRoKGNsb25lRGF0ZShfdGhpcy5wcm9wcy5kYXkpKSk7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgYnJlYWtBZnRlck5leHRQdXNoID0gZmFsc2U7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHdlZWtzLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChXZWVrLCB7XG4gICAgICAgICAga2V5OiBpLFxuICAgICAgICAgIGRheTogY3VycmVudFdlZWtTdGFydCxcbiAgICAgICAgICBtb250aDogZ2V0TW9udGgoX3RoaXMucHJvcHMuZGF5KSxcbiAgICAgICAgICBvbkRheUNsaWNrOiBfdGhpcy5oYW5kbGVEYXlDbGljayxcbiAgICAgICAgICBvbkRheU1vdXNlRW50ZXI6IF90aGlzLmhhbmRsZURheU1vdXNlRW50ZXIsXG4gICAgICAgICAgb25XZWVrU2VsZWN0OiBfdGhpcy5wcm9wcy5vbldlZWtTZWxlY3QsXG4gICAgICAgICAgZm9ybWF0V2Vla051bWJlcjogX3RoaXMucHJvcHMuZm9ybWF0V2Vla051bWJlcixcbiAgICAgICAgICBtaW5EYXRlOiBfdGhpcy5wcm9wcy5taW5EYXRlLFxuICAgICAgICAgIG1heERhdGU6IF90aGlzLnByb3BzLm1heERhdGUsXG4gICAgICAgICAgZXhjbHVkZURhdGVzOiBfdGhpcy5wcm9wcy5leGNsdWRlRGF0ZXMsXG4gICAgICAgICAgaW5jbHVkZURhdGVzOiBfdGhpcy5wcm9wcy5pbmNsdWRlRGF0ZXMsXG4gICAgICAgICAgaW5saW5lOiBfdGhpcy5wcm9wcy5pbmxpbmUsXG4gICAgICAgICAgaGlnaGxpZ2h0RGF0ZXM6IF90aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzLFxuICAgICAgICAgIHNlbGVjdGluZ0RhdGU6IF90aGlzLnByb3BzLnNlbGVjdGluZ0RhdGUsXG4gICAgICAgICAgZmlsdGVyRGF0ZTogX3RoaXMucHJvcHMuZmlsdGVyRGF0ZSxcbiAgICAgICAgICBwcmVTZWxlY3Rpb246IF90aGlzLnByb3BzLnByZVNlbGVjdGlvbixcbiAgICAgICAgICBzZWxlY3RlZDogX3RoaXMucHJvcHMuc2VsZWN0ZWQsXG4gICAgICAgICAgc2VsZWN0c1N0YXJ0OiBfdGhpcy5wcm9wcy5zZWxlY3RzU3RhcnQsXG4gICAgICAgICAgc2VsZWN0c0VuZDogX3RoaXMucHJvcHMuc2VsZWN0c0VuZCxcbiAgICAgICAgICBzaG93V2Vla051bWJlcjogX3RoaXMucHJvcHMuc2hvd1dlZWtOdW1iZXJzLFxuICAgICAgICAgIHN0YXJ0RGF0ZTogX3RoaXMucHJvcHMuc3RhcnREYXRlLFxuICAgICAgICAgIGVuZERhdGU6IF90aGlzLnByb3BzLmVuZERhdGUsXG4gICAgICAgICAgZGF5Q2xhc3NOYW1lOiBfdGhpcy5wcm9wcy5kYXlDbGFzc05hbWUsXG4gICAgICAgICAgdXRjT2Zmc2V0OiBfdGhpcy5wcm9wcy51dGNPZmZzZXRcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChicmVha0FmdGVyTmV4dFB1c2gpIGJyZWFrO1xuXG4gICAgICAgIGkrKztcbiAgICAgICAgY3VycmVudFdlZWtTdGFydCA9IGFkZFdlZWtzKGNsb25lRGF0ZShjdXJyZW50V2Vla1N0YXJ0KSwgMSk7XG5cbiAgICAgICAgLy8gSWYgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZSwgd2Ugd2lsbCBlaXRoZXIgYnJlYWsgb24gdGhpcyB3ZWVrXG4gICAgICAgIC8vIG9yIGJyZWFrIG9uIHRoZSBuZXh0IHdlZWtcbiAgICAgICAgdmFyIGlzRml4ZWRBbmRGaW5hbFdlZWsgPSBpc0ZpeGVkSGVpZ2h0ICYmIGkgPj0gRklYRURfSEVJR0hUX1NUQU5EQVJEX1dFRUtfQ09VTlQ7XG4gICAgICAgIHZhciBpc05vbkZpeGVkQW5kT3V0T2ZNb250aCA9ICFpc0ZpeGVkSGVpZ2h0ICYmICFfdGhpcy5pc1dlZWtJbk1vbnRoKGN1cnJlbnRXZWVrU3RhcnQpO1xuXG4gICAgICAgIGlmIChpc0ZpeGVkQW5kRmluYWxXZWVrIHx8IGlzTm9uRml4ZWRBbmRPdXRPZk1vbnRoKSB7XG4gICAgICAgICAgaWYgKF90aGlzLnByb3BzLnBlZWtOZXh0TW9udGgpIHtcbiAgICAgICAgICAgIGJyZWFrQWZ0ZXJOZXh0UHVzaCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gd2Vla3M7XG4gICAgfSwgX3RoaXMuZ2V0Q2xhc3NOYW1lcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHNlbGVjdGluZ0RhdGUgPSBfdGhpcyRwcm9wcy5zZWxlY3RpbmdEYXRlLFxuICAgICAgICAgIHNlbGVjdHNTdGFydCA9IF90aGlzJHByb3BzLnNlbGVjdHNTdGFydCxcbiAgICAgICAgICBzZWxlY3RzRW5kID0gX3RoaXMkcHJvcHMuc2VsZWN0c0VuZDtcblxuICAgICAgcmV0dXJuIGNsYXNzbmFtZXMoXCJyZWFjdC1kYXRlcGlja2VyX19tb250aFwiLCB7XG4gICAgICAgIFwicmVhY3QtZGF0ZXBpY2tlcl9fbW9udGgtLXNlbGVjdGluZy1yYW5nZVwiOiBzZWxlY3RpbmdEYXRlICYmIChzZWxlY3RzU3RhcnQgfHwgc2VsZWN0c0VuZClcbiAgICAgIH0pO1xuICAgIH0sIF90ZW1wKSwgcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBNb250aC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiB0aGlzLmdldENsYXNzTmFtZXMoKSxcbiAgICAgICAgb25Nb3VzZUxlYXZlOiB0aGlzLmhhbmRsZU1vdXNlTGVhdmUsXG4gICAgICAgIHJvbGU6IFwibGlzdGJveFwiXG4gICAgICB9LFxuICAgICAgdGhpcy5yZW5kZXJXZWVrcygpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gTW9udGg7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbk1vbnRoLnByb3BUeXBlcyA9IHtcbiAgZGF5OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGRheUNsYXNzTmFtZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGVuZERhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGV4Y2x1ZGVEYXRlczogUHJvcFR5cGVzLmFycmF5LFxuICBmaWx0ZXJEYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgZml4ZWRIZWlnaHQ6IFByb3BUeXBlcy5ib29sLFxuICBmb3JtYXRXZWVrTnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgaGlnaGxpZ2h0RGF0ZXM6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE1hcCksXG4gIGluY2x1ZGVEYXRlczogUHJvcFR5cGVzLmFycmF5LFxuICBpbmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICBtYXhEYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtaW5EYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBvbkRheUNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25EYXlNb3VzZUVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25XZWVrU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgcGVla05leHRNb250aDogUHJvcFR5cGVzLmJvb2wsXG4gIHByZVNlbGVjdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdGluZ0RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdHNFbmQ6IFByb3BUeXBlcy5ib29sLFxuICBzZWxlY3RzU3RhcnQ6IFByb3BUeXBlcy5ib29sLFxuICBzaG93V2Vla051bWJlcnM6IFByb3BUeXBlcy5ib29sLFxuICBzdGFydERhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHV0Y09mZnNldDogUHJvcFR5cGVzLm51bWJlclxufTtcblxudmFyIFRpbWUgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBpbmhlcml0cyhUaW1lLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUaW1lKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBUaW1lKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLmhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKHRpbWUpIHtcbiAgICAgIGlmICgoX3RoaXMucHJvcHMubWluVGltZSB8fCBfdGhpcy5wcm9wcy5tYXhUaW1lKSAmJiBpc1RpbWVJbkRpc2FibGVkUmFuZ2UodGltZSwgX3RoaXMucHJvcHMpIHx8IF90aGlzLnByb3BzLmV4Y2x1ZGVUaW1lcyAmJiBpc1RpbWVEaXNhYmxlZCh0aW1lLCBfdGhpcy5wcm9wcy5leGNsdWRlVGltZXMpIHx8IF90aGlzLnByb3BzLmluY2x1ZGVUaW1lcyAmJiAhaXNUaW1lRGlzYWJsZWQodGltZSwgX3RoaXMucHJvcHMuaW5jbHVkZVRpbWVzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnByb3BzLm9uQ2hhbmdlKHRpbWUpO1xuICAgIH0sIF90aGlzLmxpQ2xhc3NlcyA9IGZ1bmN0aW9uICh0aW1lLCBjdXJySCwgY3Vyck0pIHtcbiAgICAgIHZhciBjbGFzc2VzID0gW1wicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW1cIl07XG5cbiAgICAgIGlmIChjdXJySCA9PT0gZ2V0SG91cih0aW1lKSAmJiBjdXJyTSA9PT0gZ2V0TWludXRlKHRpbWUpKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtbGlzdC1pdGVtLS1zZWxlY3RlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmICgoX3RoaXMucHJvcHMubWluVGltZSB8fCBfdGhpcy5wcm9wcy5tYXhUaW1lKSAmJiBpc1RpbWVJbkRpc2FibGVkUmFuZ2UodGltZSwgX3RoaXMucHJvcHMpIHx8IF90aGlzLnByb3BzLmV4Y2x1ZGVUaW1lcyAmJiBpc1RpbWVEaXNhYmxlZCh0aW1lLCBfdGhpcy5wcm9wcy5leGNsdWRlVGltZXMpIHx8IF90aGlzLnByb3BzLmluY2x1ZGVUaW1lcyAmJiAhaXNUaW1lRGlzYWJsZWQodGltZSwgX3RoaXMucHJvcHMuaW5jbHVkZVRpbWVzKSkge1xuICAgICAgICBjbGFzc2VzLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX190aW1lLWxpc3QtaXRlbS0tZGlzYWJsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaW5qZWN0VGltZXMgJiYgKGdldEhvdXIodGltZSkgKiA2MCArIGdldE1pbnV0ZSh0aW1lKSkgJSBfdGhpcy5wcm9wcy5pbnRlcnZhbHMgIT09IDApIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0LWl0ZW0tLWluamVjdGVkXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICB9LCBfdGhpcy5yZW5kZXJUaW1lcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aW1lcyA9IFtdO1xuICAgICAgdmFyIGZvcm1hdCA9IF90aGlzLnByb3BzLmZvcm1hdCA/IF90aGlzLnByb3BzLmZvcm1hdCA6IFwiaGg6bW0gQVwiO1xuICAgICAgdmFyIGludGVydmFscyA9IF90aGlzLnByb3BzLmludGVydmFscztcbiAgICAgIHZhciBhY3RpdmVUaW1lID0gX3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBfdGhpcy5wcm9wcy5zZWxlY3RlZCA6IG5ld0RhdGUoKTtcbiAgICAgIHZhciBjdXJySCA9IGdldEhvdXIoYWN0aXZlVGltZSk7XG4gICAgICB2YXIgY3Vyck0gPSBnZXRNaW51dGUoYWN0aXZlVGltZSk7XG4gICAgICB2YXIgYmFzZSA9IGdldFN0YXJ0T2ZEYXkobmV3RGF0ZSgpKTtcbiAgICAgIHZhciBtdWx0aXBsaWVyID0gMTQ0MCAvIGludGVydmFscztcbiAgICAgIHZhciBzb3J0ZWRJbmplY3RUaW1lcyA9IF90aGlzLnByb3BzLmluamVjdFRpbWVzICYmIF90aGlzLnByb3BzLmluamVjdFRpbWVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEgLSBiO1xuICAgICAgfSk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11bHRpcGxpZXI7IGkrKykge1xuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBhZGRNaW51dGVzKGNsb25lRGF0ZShiYXNlKSwgaSAqIGludGVydmFscyk7XG4gICAgICAgIHRpbWVzLnB1c2goY3VycmVudFRpbWUpO1xuXG4gICAgICAgIGlmIChzb3J0ZWRJbmplY3RUaW1lcykge1xuICAgICAgICAgIHZhciB0aW1lc1RvSW5qZWN0ID0gdGltZXNUb0luamVjdEFmdGVyKGJhc2UsIGN1cnJlbnRUaW1lLCBpLCBpbnRlcnZhbHMsIHNvcnRlZEluamVjdFRpbWVzKTtcbiAgICAgICAgICB0aW1lcyA9IHRpbWVzLmNvbmNhdCh0aW1lc1RvSW5qZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGltZXMubWFwKGZ1bmN0aW9uICh0aW1lLCBpKSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IGksXG4gICAgICAgICAgICBvbkNsaWNrOiBfdGhpcy5oYW5kbGVDbGljay5iaW5kKF90aGlzLCB0aW1lKSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogX3RoaXMubGlDbGFzc2VzKHRpbWUsIGN1cnJILCBjdXJyTSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIGZvcm1hdERhdGUodGltZSwgZm9ybWF0KVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIFRpbWUucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgLy8gY29kZSB0byBlbnN1cmUgc2VsZWN0ZWQgdGltZSB3aWxsIGFsd2F5cyBiZSBpbiBmb2N1cyB3aXRoaW4gdGltZSB3aW5kb3cgd2hlbiBpdCBmaXJzdCBhcHBlYXJzXG4gICAgdmFyIG11bHRpcGxpZXIgPSA2MCAvIHRoaXMucHJvcHMuaW50ZXJ2YWxzO1xuICAgIHZhciBjdXJySCA9IHRoaXMucHJvcHMuc2VsZWN0ZWQgPyBnZXRIb3VyKHRoaXMucHJvcHMuc2VsZWN0ZWQpIDogZ2V0SG91cihuZXdEYXRlKCkpO1xuICAgIHRoaXMubGlzdC5zY3JvbGxUb3AgPSAzMCAqIChtdWx0aXBsaWVyICogY3VyckgpO1xuICB9O1xuXG4gIFRpbWUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBoZWlnaHQgPSBudWxsO1xuICAgIGlmICh0aGlzLnByb3BzLm1vbnRoUmVmKSB7XG4gICAgICBoZWlnaHQgPSB0aGlzLnByb3BzLm1vbnRoUmVmLmNsaWVudEhlaWdodCAtIDM5O1xuICAgIH1cblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgXCJkaXZcIixcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyIFwiICsgKHRoaXMucHJvcHMudG9kYXlCdXR0b24gPyBcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtY29udGFpbmVyLS13aXRoLXRvZGF5LWJ1dHRvblwiIDogXCJcIilcbiAgICAgIH0sXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19oZWFkZXIgcmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyLS10aW1lXCIgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXItdGltZV9faGVhZGVyXCIgfSxcbiAgICAgICAgICB0aGlzLnByb3BzLnRpbWVDYXB0aW9uXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX190aW1lXCIgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3RpbWUtYm94XCIgfSxcbiAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgXCJ1bFwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fdGltZS1saXN0XCIsXG4gICAgICAgICAgICAgIHJlZjogZnVuY3Rpb24gcmVmKGxpc3QpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIubGlzdCA9IGxpc3Q7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHN0eWxlOiBoZWlnaHQgPyB7IGhlaWdodDogaGVpZ2h0IH0gOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRoaXMucmVuZGVyVGltZXMuYmluZCh0aGlzKSgpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfTtcblxuICBjcmVhdGVDbGFzcyhUaW1lLCBudWxsLCBbe1xuICAgIGtleTogXCJkZWZhdWx0UHJvcHNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGludGVydmFsczogMzAsXG4gICAgICAgIG9uVGltZUNoYW5nZTogZnVuY3Rpb24gb25UaW1lQ2hhbmdlKCkge30sXG4gICAgICAgIHRvZGF5QnV0dG9uOiBudWxsLFxuICAgICAgICB0aW1lQ2FwdGlvbjogXCJUaW1lXCJcbiAgICAgIH07XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBUaW1lO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UaW1lLnByb3BUeXBlcyA9IHtcbiAgZm9ybWF0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbmNsdWRlVGltZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgaW50ZXJ2YWxzOiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZWxlY3RlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICB0b2RheUJ1dHRvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgbWluVGltZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgbWF4VGltZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgZXhjbHVkZVRpbWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gIG1vbnRoUmVmOiBQcm9wVHlwZXMub2JqZWN0LFxuICB0aW1lQ2FwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaW5qZWN0VGltZXM6IFByb3BUeXBlcy5hcnJheVxufTtcblxuZnVuY3Rpb24gQ2FsZW5kYXJDb250YWluZXIoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG5cbiAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgXCJkaXZcIixcbiAgICB7IGNsYXNzTmFtZTogY2xhc3NOYW1lIH0sXG4gICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX190cmlhbmdsZVwiIH0pLFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG5cbkNhbGVuZGFyQ29udGFpbmVyLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cbnZhciBEUk9QRE9XTl9GT0NVU19DTEFTU05BTUVTID0gW1wicmVhY3QtZGF0ZXBpY2tlcl9feWVhci1zZWxlY3RcIiwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1zZWxlY3RcIiwgXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC15ZWFyLXNlbGVjdFwiXTtcblxudmFyIGlzRHJvcGRvd25TZWxlY3QgPSBmdW5jdGlvbiBpc0Ryb3Bkb3duU2VsZWN0KCkge1xuICB2YXIgZWxlbWVudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgdmFyIGNsYXNzTmFtZXMgPSAoZWxlbWVudC5jbGFzc05hbWUgfHwgXCJcIikuc3BsaXQoL1xccysvKTtcbiAgcmV0dXJuIERST1BET1dOX0ZPQ1VTX0NMQVNTTkFNRVMuc29tZShmdW5jdGlvbiAodGVzdENsYXNzbmFtZSkge1xuICAgIHJldHVybiBjbGFzc05hbWVzLmluZGV4T2YodGVzdENsYXNzbmFtZSkgPj0gMDtcbiAgfSk7XG59O1xuXG52YXIgQ2FsZW5kYXIgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBpbmhlcml0cyhDYWxlbmRhciwgX1JlYWN0JENvbXBvbmVudCk7XG4gIGNyZWF0ZUNsYXNzKENhbGVuZGFyLCBudWxsLCBbe1xuICAgIGtleTogXCJkZWZhdWx0UHJvcHNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgIHZhciBfcmVmO1xuXG4gICAgICByZXR1cm4gX3JlZiA9IHtcbiAgICAgICAgb25Ecm9wZG93bkZvY3VzOiBmdW5jdGlvbiBvbkRyb3Bkb3duRm9jdXMoKSB7fSxcbiAgICAgICAgbW9udGhzU2hvd246IDEsXG4gICAgICAgIGZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbjogZmFsc2UsXG4gICAgICAgIHRpbWVDYXB0aW9uOiBcIlRpbWVcIixcbiAgICAgICAgcHJldmlvdXNNb250aEJ1dHRvbkxhYmVsOiBcIlByZXZpb3VzIE1vbnRoXCJcbiAgICAgIH0sIF9yZWZbXCJwcmV2aW91c01vbnRoQnV0dG9uTGFiZWxcIl0gPSBcIk5leHQgTW9udGhcIiwgX3JlZjtcbiAgICB9XG4gIH1dKTtcblxuICBmdW5jdGlvbiBDYWxlbmRhcihwcm9wcykge1xuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIENhbGVuZGFyKTtcblxuICAgIHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5oYW5kbGVDbGlja091dHNpZGUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIF90aGlzLnByb3BzLm9uQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRHJvcGRvd25Gb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGlzRHJvcGRvd25TZWxlY3QoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkRyb3Bkb3duRm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuZ2V0RGF0ZUluVmlldyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIHByZVNlbGVjdGlvbiA9IF90aGlzJHByb3BzLnByZVNlbGVjdGlvbixcbiAgICAgICAgICBzZWxlY3RlZCA9IF90aGlzJHByb3BzLnNlbGVjdGVkLFxuICAgICAgICAgIG9wZW5Ub0RhdGUgPSBfdGhpcyRwcm9wcy5vcGVuVG9EYXRlLFxuICAgICAgICAgIHV0Y09mZnNldCA9IF90aGlzJHByb3BzLnV0Y09mZnNldDtcblxuICAgICAgdmFyIG1pbkRhdGUgPSBnZXRFZmZlY3RpdmVNaW5EYXRlKF90aGlzLnByb3BzKTtcbiAgICAgIHZhciBtYXhEYXRlID0gZ2V0RWZmZWN0aXZlTWF4RGF0ZShfdGhpcy5wcm9wcyk7XG4gICAgICB2YXIgY3VycmVudCA9IG5vdyh1dGNPZmZzZXQpO1xuICAgICAgdmFyIGluaXRpYWxEYXRlID0gb3BlblRvRGF0ZSB8fCBzZWxlY3RlZCB8fCBwcmVTZWxlY3Rpb247XG4gICAgICBpZiAoaW5pdGlhbERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGluaXRpYWxEYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbkRhdGUgJiYgaXNCZWZvcmUoY3VycmVudCwgbWluRGF0ZSkpIHtcbiAgICAgICAgICByZXR1cm4gbWluRGF0ZTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXhEYXRlICYmIGlzQWZ0ZXIoY3VycmVudCwgbWF4RGF0ZSkpIHtcbiAgICAgICAgICByZXR1cm4gbWF4RGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfTtcblxuICAgIF90aGlzLmxvY2FsaXplRGF0ZSA9IGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgICByZXR1cm4gbG9jYWxpemVEYXRlKGRhdGUsIF90aGlzLnByb3BzLmxvY2FsZSk7XG4gICAgfTtcblxuICAgIF90aGlzLmluY3JlYXNlTW9udGggPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGU6IGFkZE1vbnRocyhjbG9uZURhdGUoX3RoaXMuc3RhdGUuZGF0ZSksIDEpXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVNb250aENoYW5nZShfdGhpcy5zdGF0ZS5kYXRlKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfdGhpcy5kZWNyZWFzZU1vbnRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkYXRlOiBzdWJ0cmFjdE1vbnRocyhjbG9uZURhdGUoX3RoaXMuc3RhdGUuZGF0ZSksIDEpXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVNb250aENoYW5nZShfdGhpcy5zdGF0ZS5kYXRlKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVEYXlDbGljayA9IGZ1bmN0aW9uIChkYXksIGV2ZW50KSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMub25TZWxlY3QoZGF5LCBldmVudCk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZURheU1vdXNlRW50ZXIgPSBmdW5jdGlvbiAoZGF5KSB7XG4gICAgICByZXR1cm4gX3RoaXMuc2V0U3RhdGUoeyBzZWxlY3RpbmdEYXRlOiBkYXkgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZU1vbnRoTW91c2VMZWF2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGluZ0RhdGU6IG51bGwgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZVllYXJDaGFuZ2UgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLm9uWWVhckNoYW5nZSkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vblllYXJDaGFuZ2UoZGF0ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZU1vbnRoQ2hhbmdlID0gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbk1vbnRoQ2hhbmdlKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uTW9udGhDaGFuZ2UoZGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoX3RoaXMucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlKSB7XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5vblNlbGVjdCkge1xuICAgICAgICAgIF90aGlzLnByb3BzLm9uU2VsZWN0KGRhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfdGhpcy5wcm9wcy5zZXRPcGVuKSB7XG4gICAgICAgICAgX3RoaXMucHJvcHMuc2V0T3Blbih0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVNb250aFllYXJDaGFuZ2UgPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgX3RoaXMuaGFuZGxlWWVhckNoYW5nZShkYXRlKTtcbiAgICAgIF90aGlzLmhhbmRsZU1vbnRoQ2hhbmdlKGRhdGUpO1xuICAgIH07XG5cbiAgICBfdGhpcy5jaGFuZ2VZZWFyID0gZnVuY3Rpb24gKHllYXIpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0ZTogc2V0WWVhcihjbG9uZURhdGUoX3RoaXMuc3RhdGUuZGF0ZSksIHllYXIpXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVZZWFyQ2hhbmdlKF90aGlzLnN0YXRlLmRhdGUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLmNoYW5nZU1vbnRoID0gZnVuY3Rpb24gKG1vbnRoKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGU6IHNldE1vbnRoKGNsb25lRGF0ZShfdGhpcy5zdGF0ZS5kYXRlKSwgbW9udGgpXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVNb250aENoYW5nZShfdGhpcy5zdGF0ZS5kYXRlKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfdGhpcy5jaGFuZ2VNb250aFllYXIgPSBmdW5jdGlvbiAobW9udGhZZWFyKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGRhdGU6IHNldFllYXIoc2V0TW9udGgoY2xvbmVEYXRlKF90aGlzLnN0YXRlLmRhdGUpLCBnZXRNb250aChtb250aFllYXIpKSwgZ2V0WWVhcihtb250aFllYXIpKVxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTW9udGhZZWFyQ2hhbmdlKF90aGlzLnN0YXRlLmRhdGUpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLmhlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBkYXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBfdGhpcy5zdGF0ZS5kYXRlO1xuXG4gICAgICB2YXIgc3RhcnRPZldlZWsgPSBnZXRTdGFydE9mV2VlayhjbG9uZURhdGUoZGF0ZSkpO1xuICAgICAgdmFyIGRheU5hbWVzID0gW107XG4gICAgICBpZiAoX3RoaXMucHJvcHMuc2hvd1dlZWtOdW1iZXJzKSB7XG4gICAgICAgIGRheU5hbWVzLnB1c2goUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsga2V5OiBcIldcIiwgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lXCIgfSxcbiAgICAgICAgICBfdGhpcy5wcm9wcy53ZWVrTGFiZWwgfHwgXCIjXCJcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF5TmFtZXMuY29uY2F0KFswLCAxLCAyLCAzLCA0LCA1LCA2XS5tYXAoZnVuY3Rpb24gKG9mZnNldCkge1xuICAgICAgICB2YXIgZGF5ID0gYWRkRGF5cyhjbG9uZURhdGUoc3RhcnRPZldlZWspLCBvZmZzZXQpO1xuICAgICAgICB2YXIgbG9jYWxlRGF0YSA9IGdldExvY2FsZURhdGEoZGF5KTtcbiAgICAgICAgdmFyIHdlZWtEYXlOYW1lID0gX3RoaXMuZm9ybWF0V2Vla2RheShsb2NhbGVEYXRhLCBkYXkpO1xuXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBrZXk6IG9mZnNldCwgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX2RheS1uYW1lXCIgfSxcbiAgICAgICAgICB3ZWVrRGF5TmFtZVxuICAgICAgICApO1xuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfdGhpcy5mb3JtYXRXZWVrZGF5ID0gZnVuY3Rpb24gKGxvY2FsZURhdGEsIGRheSkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLmZvcm1hdFdlZWtEYXkpIHtcbiAgICAgICAgcmV0dXJuIGdldEZvcm1hdHRlZFdlZWtkYXlJbkxvY2FsZShsb2NhbGVEYXRhLCBkYXksIF90aGlzLnByb3BzLmZvcm1hdFdlZWtEYXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLnVzZVdlZWtkYXlzU2hvcnQgPyBnZXRXZWVrZGF5U2hvcnRJbkxvY2FsZShsb2NhbGVEYXRhLCBkYXkpIDogZ2V0V2Vla2RheU1pbkluTG9jYWxlKGxvY2FsZURhdGEsIGRheSk7XG4gICAgfTtcblxuICAgIF90aGlzLnJlbmRlclByZXZpb3VzTW9udGhCdXR0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYWxsUHJldkRheXNEaXNhYmxlZCA9IGFsbERheXNEaXNhYmxlZEJlZm9yZShfdGhpcy5zdGF0ZS5kYXRlLCBcIm1vbnRoXCIsIF90aGlzLnByb3BzKTtcblxuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5mb3JjZVNob3dNb250aE5hdmlnYXRpb24gJiYgIV90aGlzLnByb3BzLnNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbiAmJiBhbGxQcmV2RGF5c0Rpc2FibGVkIHx8IF90aGlzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGFzc2VzID0gW1wicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvblwiLCBcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzXCJdO1xuXG4gICAgICB2YXIgY2xpY2tIYW5kbGVyID0gX3RoaXMuZGVjcmVhc2VNb250aDtcblxuICAgICAgaWYgKGFsbFByZXZEYXlzRGlzYWJsZWQgJiYgX3RoaXMucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uKSB7XG4gICAgICAgIGNsYXNzZXMucHVzaChcInJlYWN0LWRhdGVwaWNrZXJfX25hdmlnYXRpb24tLXByZXZpb3VzLS1kaXNhYmxlZFwiKTtcbiAgICAgICAgY2xpY2tIYW5kbGVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiYnV0dG9uXCIsXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImJ1dHRvblwiLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5qb2luKFwiIFwiKSxcbiAgICAgICAgICBvbkNsaWNrOiBjbGlja0hhbmRsZXJcbiAgICAgICAgfSxcbiAgICAgICAgX3RoaXMucHJvcHMucHJldmlvdXNNb250aEJ1dHRvbkxhYmVsXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfdGhpcy5yZW5kZXJOZXh0TW9udGhCdXR0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYWxsTmV4dERheXNEaXNhYmxlZCA9IGFsbERheXNEaXNhYmxlZEFmdGVyKF90aGlzLnN0YXRlLmRhdGUsIFwibW9udGhcIiwgX3RoaXMucHJvcHMpO1xuXG4gICAgICBpZiAoIV90aGlzLnByb3BzLmZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbiAmJiAhX3RoaXMucHJvcHMuc2hvd0Rpc2FibGVkTW9udGhOYXZpZ2F0aW9uICYmIGFsbE5leHREYXlzRGlzYWJsZWQgfHwgX3RoaXMucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNsYXNzZXMgPSBbXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uXCIsIFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dFwiXTtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG93VGltZVNlbGVjdCkge1xuICAgICAgICBjbGFzc2VzLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX19uYXZpZ2F0aW9uLS1uZXh0LS13aXRoLXRpbWVcIik7XG4gICAgICB9XG4gICAgICBpZiAoX3RoaXMucHJvcHMudG9kYXlCdXR0b24pIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0td2l0aC10b2RheS1idXR0b25cIik7XG4gICAgICB9XG5cbiAgICAgIHZhciBjbGlja0hhbmRsZXIgPSBfdGhpcy5pbmNyZWFzZU1vbnRoO1xuXG4gICAgICBpZiAoYWxsTmV4dERheXNEaXNhYmxlZCAmJiBfdGhpcy5wcm9wcy5zaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb24pIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fbmF2aWdhdGlvbi0tbmV4dC0tZGlzYWJsZWRcIik7XG4gICAgICAgIGNsaWNrSGFuZGxlciA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICBjbGFzc05hbWU6IGNsYXNzZXMuam9pbihcIiBcIiksXG4gICAgICAgICAgb25DbGljazogY2xpY2tIYW5kbGVyXG4gICAgICAgIH0sXG4gICAgICAgIF90aGlzLnByb3BzLm5leHRNb250aEJ1dHRvbkxhYmVsXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfdGhpcy5yZW5kZXJDdXJyZW50TW9udGggPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogX3RoaXMuc3RhdGUuZGF0ZTtcblxuICAgICAgdmFyIGNsYXNzZXMgPSBbXCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoXCJdO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMuc2hvd1llYXJEcm9wZG93bikge1xuICAgICAgICBjbGFzc2VzLnB1c2goXCJyZWFjdC1kYXRlcGlja2VyX19jdXJyZW50LW1vbnRoLS1oYXNZZWFyRHJvcGRvd25cIik7XG4gICAgICB9XG4gICAgICBpZiAoX3RoaXMucHJvcHMuc2hvd01vbnRoRHJvcGRvd24pIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aC0taGFzTW9udGhEcm9wZG93blwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5zaG93TW9udGhZZWFyRHJvcGRvd24pIHtcbiAgICAgICAgY2xhc3Nlcy5wdXNoKFwicmVhY3QtZGF0ZXBpY2tlcl9fY3VycmVudC1tb250aC0taGFzTW9udGhZZWFyRHJvcGRvd25cIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBjbGFzc05hbWU6IGNsYXNzZXMuam9pbihcIiBcIikgfSxcbiAgICAgICAgZm9ybWF0RGF0ZShkYXRlLCBfdGhpcy5wcm9wcy5kYXRlRm9ybWF0KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX3RoaXMucmVuZGVyWWVhckRyb3Bkb3duID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIG92ZXJyaWRlSGlkZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIGlmICghX3RoaXMucHJvcHMuc2hvd1llYXJEcm9wZG93biB8fCBvdmVycmlkZUhpZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoWWVhckRyb3Bkb3duLCB7XG4gICAgICAgIGFkanVzdERhdGVPbkNoYW5nZTogX3RoaXMucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlLFxuICAgICAgICBkYXRlOiBfdGhpcy5zdGF0ZS5kYXRlLFxuICAgICAgICBvblNlbGVjdDogX3RoaXMucHJvcHMub25TZWxlY3QsXG4gICAgICAgIHNldE9wZW46IF90aGlzLnByb3BzLnNldE9wZW4sXG4gICAgICAgIGRyb3Bkb3duTW9kZTogX3RoaXMucHJvcHMuZHJvcGRvd25Nb2RlLFxuICAgICAgICBvbkNoYW5nZTogX3RoaXMuY2hhbmdlWWVhcixcbiAgICAgICAgbWluRGF0ZTogX3RoaXMucHJvcHMubWluRGF0ZSxcbiAgICAgICAgbWF4RGF0ZTogX3RoaXMucHJvcHMubWF4RGF0ZSxcbiAgICAgICAgeWVhcjogZ2V0WWVhcihfdGhpcy5zdGF0ZS5kYXRlKSxcbiAgICAgICAgc2Nyb2xsYWJsZVllYXJEcm9wZG93bjogX3RoaXMucHJvcHMuc2Nyb2xsYWJsZVllYXJEcm9wZG93bixcbiAgICAgICAgeWVhckRyb3Bkb3duSXRlbU51bWJlcjogX3RoaXMucHJvcHMueWVhckRyb3Bkb3duSXRlbU51bWJlclxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLnJlbmRlck1vbnRoRHJvcGRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgb3ZlcnJpZGVIaWRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgaWYgKCFfdGhpcy5wcm9wcy5zaG93TW9udGhEcm9wZG93biB8fCBvdmVycmlkZUhpZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW9udGhEcm9wZG93biwge1xuICAgICAgICBkcm9wZG93bk1vZGU6IF90aGlzLnByb3BzLmRyb3Bkb3duTW9kZSxcbiAgICAgICAgbG9jYWxlOiBfdGhpcy5wcm9wcy5sb2NhbGUsXG4gICAgICAgIGRhdGVGb3JtYXQ6IF90aGlzLnByb3BzLmRhdGVGb3JtYXQsXG4gICAgICAgIG9uQ2hhbmdlOiBfdGhpcy5jaGFuZ2VNb250aCxcbiAgICAgICAgbW9udGg6IGdldE1vbnRoKF90aGlzLnN0YXRlLmRhdGUpLFxuICAgICAgICB1c2VTaG9ydE1vbnRoSW5Ecm9wZG93bjogX3RoaXMucHJvcHMudXNlU2hvcnRNb250aEluRHJvcGRvd25cbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfdGhpcy5yZW5kZXJNb250aFllYXJEcm9wZG93biA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvdmVycmlkZUhpZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuXG4gICAgICBpZiAoIV90aGlzLnByb3BzLnNob3dNb250aFllYXJEcm9wZG93biB8fCBvdmVycmlkZUhpZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW9udGhZZWFyRHJvcGRvd24sIHtcbiAgICAgICAgZHJvcGRvd25Nb2RlOiBfdGhpcy5wcm9wcy5kcm9wZG93bk1vZGUsXG4gICAgICAgIGxvY2FsZTogX3RoaXMucHJvcHMubG9jYWxlLFxuICAgICAgICBkYXRlRm9ybWF0OiBfdGhpcy5wcm9wcy5kYXRlRm9ybWF0LFxuICAgICAgICBvbkNoYW5nZTogX3RoaXMuY2hhbmdlTW9udGhZZWFyLFxuICAgICAgICBtaW5EYXRlOiBfdGhpcy5wcm9wcy5taW5EYXRlLFxuICAgICAgICBtYXhEYXRlOiBfdGhpcy5wcm9wcy5tYXhEYXRlLFxuICAgICAgICBkYXRlOiBfdGhpcy5zdGF0ZS5kYXRlLFxuICAgICAgICBzY3JvbGxhYmxlTW9udGhZZWFyRHJvcGRvd246IF90aGlzLnByb3BzLnNjcm9sbGFibGVNb250aFllYXJEcm9wZG93blxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLnJlbmRlclRvZGF5QnV0dG9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy5wcm9wcy50b2RheUJ1dHRvbiB8fCBfdGhpcy5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fdG9kYXktYnV0dG9uXCIsXG4gICAgICAgICAgb25DbGljazogZnVuY3Rpb24gb25DbGljayhlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25TZWxlY3QoZ2V0U3RhcnRPZkRhdGUobm93KF90aGlzLnByb3BzLnV0Y09mZnNldCkpLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIF90aGlzLnByb3BzLnRvZGF5QnV0dG9uXG4gICAgICApO1xuICAgIH07XG5cbiAgICBfdGhpcy5yZW5kZXJNb250aHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuc2hvd1RpbWVTZWxlY3RPbmx5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIG1vbnRoTGlzdCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfdGhpcy5wcm9wcy5tb250aHNTaG93bjsgKytpKSB7XG4gICAgICAgIHZhciBtb250aERhdGUgPSBhZGRNb250aHMoY2xvbmVEYXRlKF90aGlzLnN0YXRlLmRhdGUpLCBpKTtcbiAgICAgICAgdmFyIG1vbnRoS2V5ID0gXCJtb250aC1cIiArIGk7XG4gICAgICAgIG1vbnRoTGlzdC5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IG1vbnRoS2V5LFxuICAgICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoZGl2KSB7XG4gICAgICAgICAgICAgIF90aGlzLm1vbnRoQ29udGFpbmVyID0gZGl2O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19tb250aC1jb250YWluZXJcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19oZWFkZXJcIiB9LFxuICAgICAgICAgICAgX3RoaXMucmVuZGVyQ3VycmVudE1vbnRoKG1vbnRoRGF0ZSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX2hlYWRlcl9fZHJvcGRvd24gcmVhY3QtZGF0ZXBpY2tlcl9faGVhZGVyX19kcm9wZG93bi0tXCIgKyBfdGhpcy5wcm9wcy5kcm9wZG93bk1vZGUsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogX3RoaXMuaGFuZGxlRHJvcGRvd25Gb2N1c1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBfdGhpcy5yZW5kZXJNb250aERyb3Bkb3duKGkgIT09IDApLFxuICAgICAgICAgICAgICBfdGhpcy5yZW5kZXJNb250aFllYXJEcm9wZG93bihpICE9PSAwKSxcbiAgICAgICAgICAgICAgX3RoaXMucmVuZGVyWWVhckRyb3Bkb3duKGkgIT09IDApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fZGF5LW5hbWVzXCIgfSxcbiAgICAgICAgICAgICAgX3RoaXMuaGVhZGVyKG1vbnRoRGF0ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTW9udGgsIHtcbiAgICAgICAgICAgIGRheTogbW9udGhEYXRlLFxuICAgICAgICAgICAgZGF5Q2xhc3NOYW1lOiBfdGhpcy5wcm9wcy5kYXlDbGFzc05hbWUsXG4gICAgICAgICAgICBvbkRheUNsaWNrOiBfdGhpcy5oYW5kbGVEYXlDbGljayxcbiAgICAgICAgICAgIG9uRGF5TW91c2VFbnRlcjogX3RoaXMuaGFuZGxlRGF5TW91c2VFbnRlcixcbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZTogX3RoaXMuaGFuZGxlTW9udGhNb3VzZUxlYXZlLFxuICAgICAgICAgICAgb25XZWVrU2VsZWN0OiBfdGhpcy5wcm9wcy5vbldlZWtTZWxlY3QsXG4gICAgICAgICAgICBmb3JtYXRXZWVrTnVtYmVyOiBfdGhpcy5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyLFxuICAgICAgICAgICAgbWluRGF0ZTogX3RoaXMucHJvcHMubWluRGF0ZSxcbiAgICAgICAgICAgIG1heERhdGU6IF90aGlzLnByb3BzLm1heERhdGUsXG4gICAgICAgICAgICBleGNsdWRlRGF0ZXM6IF90aGlzLnByb3BzLmV4Y2x1ZGVEYXRlcyxcbiAgICAgICAgICAgIGhpZ2hsaWdodERhdGVzOiBfdGhpcy5wcm9wcy5oaWdobGlnaHREYXRlcyxcbiAgICAgICAgICAgIHNlbGVjdGluZ0RhdGU6IF90aGlzLnN0YXRlLnNlbGVjdGluZ0RhdGUsXG4gICAgICAgICAgICBpbmNsdWRlRGF0ZXM6IF90aGlzLnByb3BzLmluY2x1ZGVEYXRlcyxcbiAgICAgICAgICAgIGlubGluZTogX3RoaXMucHJvcHMuaW5saW5lLFxuICAgICAgICAgICAgZml4ZWRIZWlnaHQ6IF90aGlzLnByb3BzLmZpeGVkSGVpZ2h0LFxuICAgICAgICAgICAgZmlsdGVyRGF0ZTogX3RoaXMucHJvcHMuZmlsdGVyRGF0ZSxcbiAgICAgICAgICAgIHByZVNlbGVjdGlvbjogX3RoaXMucHJvcHMucHJlU2VsZWN0aW9uLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IF90aGlzLnByb3BzLnNlbGVjdGVkLFxuICAgICAgICAgICAgc2VsZWN0c1N0YXJ0OiBfdGhpcy5wcm9wcy5zZWxlY3RzU3RhcnQsXG4gICAgICAgICAgICBzZWxlY3RzRW5kOiBfdGhpcy5wcm9wcy5zZWxlY3RzRW5kLFxuICAgICAgICAgICAgc2hvd1dlZWtOdW1iZXJzOiBfdGhpcy5wcm9wcy5zaG93V2Vla051bWJlcnMsXG4gICAgICAgICAgICBzdGFydERhdGU6IF90aGlzLnByb3BzLnN0YXJ0RGF0ZSxcbiAgICAgICAgICAgIGVuZERhdGU6IF90aGlzLnByb3BzLmVuZERhdGUsXG4gICAgICAgICAgICBwZWVrTmV4dE1vbnRoOiBfdGhpcy5wcm9wcy5wZWVrTmV4dE1vbnRoLFxuICAgICAgICAgICAgdXRjT2Zmc2V0OiBfdGhpcy5wcm9wcy51dGNPZmZzZXRcbiAgICAgICAgICB9KVxuICAgICAgICApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtb250aExpc3Q7XG4gICAgfTtcblxuICAgIF90aGlzLnJlbmRlclRpbWVTZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKF90aGlzLnByb3BzLnNob3dUaW1lU2VsZWN0KSB7XG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRpbWUsIHtcbiAgICAgICAgICBzZWxlY3RlZDogX3RoaXMucHJvcHMuc2VsZWN0ZWQsXG4gICAgICAgICAgb25DaGFuZ2U6IF90aGlzLnByb3BzLm9uVGltZUNoYW5nZSxcbiAgICAgICAgICBmb3JtYXQ6IF90aGlzLnByb3BzLnRpbWVGb3JtYXQsXG4gICAgICAgICAgaW5jbHVkZVRpbWVzOiBfdGhpcy5wcm9wcy5pbmNsdWRlVGltZXMsXG4gICAgICAgICAgaW50ZXJ2YWxzOiBfdGhpcy5wcm9wcy50aW1lSW50ZXJ2YWxzLFxuICAgICAgICAgIG1pblRpbWU6IF90aGlzLnByb3BzLm1pblRpbWUsXG4gICAgICAgICAgbWF4VGltZTogX3RoaXMucHJvcHMubWF4VGltZSxcbiAgICAgICAgICBleGNsdWRlVGltZXM6IF90aGlzLnByb3BzLmV4Y2x1ZGVUaW1lcyxcbiAgICAgICAgICB0aW1lQ2FwdGlvbjogX3RoaXMucHJvcHMudGltZUNhcHRpb24sXG4gICAgICAgICAgdG9kYXlCdXR0b246IF90aGlzLnByb3BzLnRvZGF5QnV0dG9uLFxuICAgICAgICAgIHNob3dNb250aERyb3Bkb3duOiBfdGhpcy5wcm9wcy5zaG93TW9udGhEcm9wZG93bixcbiAgICAgICAgICBzaG93TW9udGhZZWFyRHJvcGRvd246IF90aGlzLnByb3BzLnNob3dNb250aFllYXJEcm9wZG93bixcbiAgICAgICAgICBzaG93WWVhckRyb3Bkb3duOiBfdGhpcy5wcm9wcy5zaG93WWVhckRyb3Bkb3duLFxuICAgICAgICAgIHdpdGhQb3J0YWw6IF90aGlzLnByb3BzLndpdGhQb3J0YWwsXG4gICAgICAgICAgbW9udGhSZWY6IF90aGlzLnN0YXRlLm1vbnRoQ29udGFpbmVyLFxuICAgICAgICAgIGluamVjdFRpbWVzOiBfdGhpcy5wcm9wcy5pbmplY3RUaW1lc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBkYXRlOiBfdGhpcy5sb2NhbGl6ZURhdGUoX3RoaXMuZ2V0RGF0ZUluVmlldygpKSxcbiAgICAgIHNlbGVjdGluZ0RhdGU6IG51bGwsXG4gICAgICBtb250aENvbnRhaW5lcjogX3RoaXMubW9udGhDb250YWluZXJcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIENhbGVuZGFyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgLy8gbW9udGhDb250YWluZXIgaGVpZ2h0IGlzIG5lZWRlZCBpbiB0aW1lIGNvbXBvbmVudFxuICAgIC8vIHRvIGRldGVybWluZSB0aGUgaGVpZ2h0IGZvciB0aGUgdWwgaW4gdGhlIHRpbWUgY29tcG9uZW50XG4gICAgLy8gc2V0U3RhdGUgaGVyZSBzbyBoZWlnaHQgaXMgZ2l2ZW4gYWZ0ZXIgZmluYWwgY29tcG9uZW50XG4gICAgLy8gbGF5b3V0IGlzIHJlbmRlcmVkXG4gICAgaWYgKHRoaXMucHJvcHMuc2hvd1RpbWVTZWxlY3QpIHtcbiAgICAgIHRoaXMuYXNzaWduTW9udGhDb250YWluZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zZXRTdGF0ZSh7IG1vbnRoQ29udGFpbmVyOiBfdGhpczIubW9udGhDb250YWluZXIgfSk7XG4gICAgICB9KCk7XG4gICAgfVxuICB9O1xuXG4gIENhbGVuZGFyLnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJlU2VsZWN0aW9uICYmICFpc1NhbWVEYXkodGhpcy5wcm9wcy5wcmVTZWxlY3Rpb24sIHByZXZQcm9wcy5wcmVTZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0ZTogdGhpcy5sb2NhbGl6ZURhdGUodGhpcy5wcm9wcy5wcmVTZWxlY3Rpb24pXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMub3BlblRvRGF0ZSAmJiAhaXNTYW1lRGF5KHRoaXMucHJvcHMub3BlblRvRGF0ZSwgcHJldlByb3BzLm9wZW5Ub0RhdGUpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZGF0ZTogdGhpcy5sb2NhbGl6ZURhdGUodGhpcy5wcm9wcy5vcGVuVG9EYXRlKVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIENhbGVuZGFyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIENvbnRhaW5lciA9IHRoaXMucHJvcHMuY29udGFpbmVyIHx8IENhbGVuZGFyQ29udGFpbmVyO1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICBDb250YWluZXIsXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NuYW1lcyhcInJlYWN0LWRhdGVwaWNrZXJcIiwgdGhpcy5wcm9wcy5jbGFzc05hbWUsIHtcbiAgICAgICAgICBcInJlYWN0LWRhdGVwaWNrZXItLXRpbWUtb25seVwiOiB0aGlzLnByb3BzLnNob3dUaW1lU2VsZWN0T25seVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHRoaXMucmVuZGVyUHJldmlvdXNNb250aEJ1dHRvbigpLFxuICAgICAgdGhpcy5yZW5kZXJOZXh0TW9udGhCdXR0b24oKSxcbiAgICAgIHRoaXMucmVuZGVyTW9udGhzKCksXG4gICAgICB0aGlzLnJlbmRlclRvZGF5QnV0dG9uKCksXG4gICAgICB0aGlzLnJlbmRlclRpbWVTZWN0aW9uKCksXG4gICAgICB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gQ2FsZW5kYXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkNhbGVuZGFyLnByb3BUeXBlcyA9IHtcbiAgYWRqdXN0RGF0ZU9uQ2hhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIGNvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGRhdGVGb3JtYXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5hcnJheV0pLmlzUmVxdWlyZWQsXG4gIGRheUNsYXNzTmFtZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGRyb3Bkb3duTW9kZTogUHJvcFR5cGVzLm9uZU9mKFtcInNjcm9sbFwiLCBcInNlbGVjdFwiXSksXG4gIGVuZERhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGV4Y2x1ZGVEYXRlczogUHJvcFR5cGVzLmFycmF5LFxuICBmaWx0ZXJEYXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgZml4ZWRIZWlnaHQ6IFByb3BUeXBlcy5ib29sLFxuICBmb3JtYXRXZWVrTnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgaGlnaGxpZ2h0RGF0ZXM6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE1hcCksXG4gIGluY2x1ZGVEYXRlczogUHJvcFR5cGVzLmFycmF5LFxuICBpbmNsdWRlVGltZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgaW5qZWN0VGltZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgaW5saW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgbG9jYWxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBtYXhEYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtaW5EYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtb250aHNTaG93bjogUHJvcFR5cGVzLm51bWJlcixcbiAgb25DbGlja091dHNpZGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uTW9udGhDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvblllYXJDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBmb3JjZVNob3dNb250aE5hdmlnYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBvbkRyb3Bkb3duRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25XZWVrU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd1RpbWVTZWxlY3Q6IFByb3BUeXBlcy5ib29sLFxuICBzaG93VGltZVNlbGVjdE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICB0aW1lRm9ybWF0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0aW1lSW50ZXJ2YWxzOiBQcm9wVHlwZXMubnVtYmVyLFxuICBvblRpbWVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBtaW5UaW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtYXhUaW1lOiBQcm9wVHlwZXMub2JqZWN0LFxuICBleGNsdWRlVGltZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgdGltZUNhcHRpb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9wZW5Ub0RhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHBlZWtOZXh0TW9udGg6IFByb3BUeXBlcy5ib29sLFxuICBzY3JvbGxhYmxlWWVhckRyb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgcHJlU2VsZWN0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICBzZWxlY3RlZDogUHJvcFR5cGVzLm9iamVjdCxcbiAgc2VsZWN0c0VuZDogUHJvcFR5cGVzLmJvb2wsXG4gIHNlbGVjdHNTdGFydDogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dNb250aERyb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd01vbnRoWWVhckRyb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd1dlZWtOdW1iZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd1llYXJEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIHN0YXJ0RGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgdG9kYXlCdXR0b246IFByb3BUeXBlcy5zdHJpbmcsXG4gIHVzZVdlZWtkYXlzU2hvcnQ6IFByb3BUeXBlcy5ib29sLFxuICBmb3JtYXRXZWVrRGF5OiBQcm9wVHlwZXMuZnVuYyxcbiAgd2l0aFBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG4gIHV0Y09mZnNldDogUHJvcFR5cGVzLm51bWJlcixcbiAgd2Vla0xhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB5ZWFyRHJvcGRvd25JdGVtTnVtYmVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICBzZXRPcGVuOiBQcm9wVHlwZXMuZnVuYyxcbiAgdXNlU2hvcnRNb250aEluRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuICBzaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBwcmV2aW91c01vbnRoQnV0dG9uTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG5leHRNb250aEJ1dHRvbkxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG52YXIgcG9wcGVyUGxhY2VtZW50UG9zaXRpb25zID0gW1wiYXV0b1wiLCBcImF1dG8tbGVmdFwiLCBcImF1dG8tcmlnaHRcIiwgXCJib3R0b21cIiwgXCJib3R0b20tZW5kXCIsIFwiYm90dG9tLXN0YXJ0XCIsIFwibGVmdFwiLCBcImxlZnQtZW5kXCIsIFwibGVmdC1zdGFydFwiLCBcInJpZ2h0XCIsIFwicmlnaHQtZW5kXCIsIFwicmlnaHQtc3RhcnRcIiwgXCJ0b3BcIiwgXCJ0b3AtZW5kXCIsIFwidG9wLXN0YXJ0XCJdO1xuXG52YXIgUG9wcGVyQ29tcG9uZW50ID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoUG9wcGVyQ29tcG9uZW50LCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBQb3BwZXJDb21wb25lbnQoKSB7XG4gICAgY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9wcGVyQ29tcG9uZW50KTtcbiAgICByZXR1cm4gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgUG9wcGVyQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNsYXNzTmFtZSA9IF9wcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIGhpZGVQb3BwZXIgPSBfcHJvcHMuaGlkZVBvcHBlcixcbiAgICAgICAgcG9wcGVyQ29tcG9uZW50ID0gX3Byb3BzLnBvcHBlckNvbXBvbmVudCxcbiAgICAgICAgcG9wcGVyTW9kaWZpZXJzID0gX3Byb3BzLnBvcHBlck1vZGlmaWVycyxcbiAgICAgICAgcG9wcGVyUGxhY2VtZW50ID0gX3Byb3BzLnBvcHBlclBsYWNlbWVudCxcbiAgICAgICAgdGFyZ2V0Q29tcG9uZW50ID0gX3Byb3BzLnRhcmdldENvbXBvbmVudDtcblxuXG4gICAgdmFyIHBvcHBlciA9IHZvaWQgMDtcblxuICAgIGlmICghaGlkZVBvcHBlcikge1xuICAgICAgdmFyIGNsYXNzZXMgPSBjbGFzc25hbWVzKFwicmVhY3QtZGF0ZXBpY2tlci1wb3BwZXJcIiwgY2xhc3NOYW1lKTtcbiAgICAgIHBvcHBlciA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFBvcHBlcixcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NlcyxcbiAgICAgICAgICBtb2RpZmllcnM6IHBvcHBlck1vZGlmaWVycyxcbiAgICAgICAgICBwbGFjZW1lbnQ6IHBvcHBlclBsYWNlbWVudFxuICAgICAgICB9LFxuICAgICAgICBwb3BwZXJDb21wb25lbnRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMucG9wcGVyQ29udGFpbmVyKSB7XG4gICAgICBwb3BwZXIgPSBSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMucHJvcHMucG9wcGVyQ29udGFpbmVyLCB7fSwgcG9wcGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgIE1hbmFnZXIsXG4gICAgICBudWxsLFxuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgVGFyZ2V0LFxuICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyLXdyYXBwZXJcIiB9LFxuICAgICAgICB0YXJnZXRDb21wb25lbnRcbiAgICAgICksXG4gICAgICBwb3BwZXJcbiAgICApO1xuICB9O1xuXG4gIGNyZWF0ZUNsYXNzKFBvcHBlckNvbXBvbmVudCwgbnVsbCwgW3tcbiAgICBrZXk6IFwiZGVmYXVsdFByb3BzXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQkJDEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoaWRlUG9wcGVyOiB0cnVlLFxuICAgICAgICBwb3BwZXJNb2RpZmllcnM6IHtcbiAgICAgICAgICBwcmV2ZW50T3ZlcmZsb3c6IHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBlc2NhcGVXaXRoUmVmZXJlbmNlOiB0cnVlLFxuICAgICAgICAgICAgYm91bmRhcmllc0VsZW1lbnQ6IFwidmlld3BvcnRcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcG9wcGVyUGxhY2VtZW50OiBcImJvdHRvbS1zdGFydFwiXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gUG9wcGVyQ29tcG9uZW50O1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Qb3BwZXJDb21wb25lbnQucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhpZGVQb3BwZXI6IFByb3BUeXBlcy5ib29sLFxuICBwb3BwZXJDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50LFxuICBwb3BwZXJNb2RpZmllcnM6IFByb3BUeXBlcy5vYmplY3QsIC8vIDxkYXRlcGlja2VyLz4gcHJvcHNcbiAgcG9wcGVyUGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YocG9wcGVyUGxhY2VtZW50UG9zaXRpb25zKSwgLy8gPGRhdGVwaWNrZXIvPiBwcm9wc1xuICBwb3BwZXJDb250YWluZXI6IFByb3BUeXBlcy5mdW5jLFxuICB0YXJnZXRDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50XG59O1xuXG52YXIgb3V0c2lkZUNsaWNrSWdub3JlQ2xhc3MgPSBcInJlYWN0LWRhdGVwaWNrZXItaWdub3JlLW9uY2xpY2tvdXRzaWRlXCI7XG52YXIgV3JhcHBlZENhbGVuZGFyID0gb25DbGlja091dHNpZGUoQ2FsZW5kYXIpO1xuXG4vLyBDb21wYXJlcyBkYXRlcyB5ZWFyK21vbnRoIGNvbWJpbmF0aW9uc1xuZnVuY3Rpb24gaGFzUHJlU2VsZWN0aW9uQ2hhbmdlZChkYXRlMSwgZGF0ZTIpIHtcbiAgaWYgKGRhdGUxICYmIGRhdGUyKSB7XG4gICAgcmV0dXJuIGdldE1vbnRoKGRhdGUxKSAhPT0gZ2V0TW9udGgoZGF0ZTIpIHx8IGdldFllYXIoZGF0ZTEpICE9PSBnZXRZZWFyKGRhdGUyKTtcbiAgfVxuXG4gIHJldHVybiBkYXRlMSAhPT0gZGF0ZTI7XG59XG5cbmZ1bmN0aW9uIGhhc1NlbGVjdGlvbkNoYW5nZWQoZGF0ZTEsIGRhdGUyKSB7XG4gIGlmIChkYXRlMSAmJiBkYXRlMikge1xuICAgIHJldHVybiAhZXF1YWxzKGRhdGUxLCBkYXRlMik7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogR2VuZXJhbCBkYXRlcGlja2VyIGNvbXBvbmVudC5cbiAqL1xuXG52YXIgRGF0ZVBpY2tlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIGluaGVyaXRzKERhdGVQaWNrZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuICBjcmVhdGVDbGFzcyhEYXRlUGlja2VyLCBudWxsLCBbe1xuICAgIGtleTogXCJkZWZhdWx0UHJvcHNcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCQkMSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFsbG93U2FtZURheTogZmFsc2UsXG4gICAgICAgIGRhdGVGb3JtYXQ6IFwiTFwiLFxuICAgICAgICBkYXRlRm9ybWF0Q2FsZW5kYXI6IFwiTU1NTSBZWVlZXCIsXG4gICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiBvbkNoYW5nZSgpIHt9LFxuXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICBkcm9wZG93bk1vZGU6IFwic2Nyb2xsXCIsXG4gICAgICAgIG9uRm9jdXM6IGZ1bmN0aW9uIG9uRm9jdXMoKSB7fSxcbiAgICAgICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoKSB7fSxcbiAgICAgICAgb25LZXlEb3duOiBmdW5jdGlvbiBvbktleURvd24oKSB7fSxcbiAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIG9uU2VsZWN0KCkge30sXG4gICAgICAgIG9uQ2xpY2tPdXRzaWRlOiBmdW5jdGlvbiBvbkNsaWNrT3V0c2lkZSQkMSgpIHt9LFxuICAgICAgICBvbk1vbnRoQ2hhbmdlOiBmdW5jdGlvbiBvbk1vbnRoQ2hhbmdlKCkge30sXG5cbiAgICAgICAgcHJldmVudE9wZW5PbkZvY3VzOiBmYWxzZSxcbiAgICAgICAgb25ZZWFyQ2hhbmdlOiBmdW5jdGlvbiBvblllYXJDaGFuZ2UoKSB7fSxcblxuICAgICAgICBtb250aHNTaG93bjogMSxcbiAgICAgICAgcmVhZE9ubHk6IGZhbHNlLFxuICAgICAgICB3aXRoUG9ydGFsOiBmYWxzZSxcbiAgICAgICAgc2hvdWxkQ2xvc2VPblNlbGVjdDogdHJ1ZSxcbiAgICAgICAgc2hvd1RpbWVTZWxlY3Q6IGZhbHNlLFxuICAgICAgICB0aW1lSW50ZXJ2YWxzOiAzMCxcbiAgICAgICAgdGltZUNhcHRpb246IFwiVGltZVwiLFxuICAgICAgICBwcmV2aW91c01vbnRoQnV0dG9uTGFiZWw6IFwiUHJldmlvdXMgTW9udGhcIixcbiAgICAgICAgbmV4dE1vbnRoQnV0dG9uTGFiZWw6IFwiTmV4dCBtb250aFwiXG4gICAgICB9O1xuICAgIH1cbiAgfV0pO1xuXG4gIGZ1bmN0aW9uIERhdGVQaWNrZXIocHJvcHMpIHtcbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBEYXRlUGlja2VyKTtcblxuICAgIHZhciBfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSk7XG5cbiAgICBfdGhpcy5nZXRQcmVTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMub3BlblRvRGF0ZSA/IG5ld0RhdGUoX3RoaXMucHJvcHMub3BlblRvRGF0ZSkgOiBfdGhpcy5wcm9wcy5zZWxlY3RzRW5kICYmIF90aGlzLnByb3BzLnN0YXJ0RGF0ZSA/IG5ld0RhdGUoX3RoaXMucHJvcHMuc3RhcnREYXRlKSA6IF90aGlzLnByb3BzLnNlbGVjdHNTdGFydCAmJiBfdGhpcy5wcm9wcy5lbmREYXRlID8gbmV3RGF0ZShfdGhpcy5wcm9wcy5lbmREYXRlKSA6IG5vdyhfdGhpcy5wcm9wcy51dGNPZmZzZXQpO1xuICAgIH07XG5cbiAgICBfdGhpcy5jYWxjSW5pdGlhbFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGRlZmF1bHRQcmVTZWxlY3Rpb24gPSBfdGhpcy5nZXRQcmVTZWxlY3Rpb24oKTtcbiAgICAgIHZhciBtaW5EYXRlID0gZ2V0RWZmZWN0aXZlTWluRGF0ZShfdGhpcy5wcm9wcyk7XG4gICAgICB2YXIgbWF4RGF0ZSA9IGdldEVmZmVjdGl2ZU1heERhdGUoX3RoaXMucHJvcHMpO1xuICAgICAgdmFyIGJvdW5kZWRQcmVTZWxlY3Rpb24gPSBtaW5EYXRlICYmIGlzQmVmb3JlKGRlZmF1bHRQcmVTZWxlY3Rpb24sIG1pbkRhdGUpID8gbWluRGF0ZSA6IG1heERhdGUgJiYgaXNBZnRlcihkZWZhdWx0UHJlU2VsZWN0aW9uLCBtYXhEYXRlKSA/IG1heERhdGUgOiBkZWZhdWx0UHJlU2VsZWN0aW9uO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3BlbjogX3RoaXMucHJvcHMuc3RhcnRPcGVuIHx8IGZhbHNlLFxuICAgICAgICBwcmV2ZW50Rm9jdXM6IGZhbHNlLFxuICAgICAgICBwcmVTZWxlY3Rpb246IF90aGlzLnByb3BzLnNlbGVjdGVkID8gbmV3RGF0ZShfdGhpcy5wcm9wcy5zZWxlY3RlZCkgOiBib3VuZGVkUHJlU2VsZWN0aW9uLFxuICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgaGlnaGxpZ2h0ZWQgZGF5cyAocGVyaGFwcyBuZXN0ZWQgYXJyYXkpXG4gICAgICAgIC8vIHRvIGZsYXQgTWFwIGZvciBmYXN0ZXIgYWNjZXNzIGluIGRheS5qc3hcbiAgICAgICAgaGlnaGxpZ2h0RGF0ZXM6IGdldEhpZ2h0TGlnaHREYXlzTWFwKF90aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzKSxcbiAgICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICAgIH07XG4gICAgfTtcblxuICAgIF90aGlzLmNsZWFyUHJldmVudEZvY3VzVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChfdGhpcy5wcmV2ZW50Rm9jdXNUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChfdGhpcy5wcmV2ZW50Rm9jdXNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuc2V0Rm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMuaW5wdXQgJiYgX3RoaXMuaW5wdXQuZm9jdXMpIHtcbiAgICAgICAgX3RoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuc2V0T3BlbiA9IGZ1bmN0aW9uIChvcGVuKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIG9wZW46IG9wZW4sXG4gICAgICAgIHByZVNlbGVjdGlvbjogb3BlbiAmJiBfdGhpcy5zdGF0ZS5vcGVuID8gX3RoaXMuc3RhdGUucHJlU2VsZWN0aW9uIDogX3RoaXMuY2FsY0luaXRpYWxTdGF0ZSgpLnByZVNlbGVjdGlvbixcbiAgICAgICAgbGFzdFByZVNlbGVjdENoYW5nZTogUFJFU0VMRUNUX0NIQU5HRV9WSUFfTkFWSUdBVEVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5wcmV2ZW50Rm9jdXMpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25Gb2N1cyhldmVudCk7XG4gICAgICAgIGlmICghX3RoaXMucHJvcHMucHJldmVudE9wZW5PbkZvY3VzICYmICFfdGhpcy5wcm9wcy5yZWFkT25seSkge1xuICAgICAgICAgIF90aGlzLnNldE9wZW4odHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKHsgZm9jdXNlZDogdHJ1ZSB9KTtcbiAgICB9O1xuXG4gICAgX3RoaXMuY2FuY2VsRm9jdXNJbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNsZWFyVGltZW91dChfdGhpcy5pbnB1dEZvY3VzVGltZW91dCk7XG4gICAgICBfdGhpcy5pbnB1dEZvY3VzVGltZW91dCA9IG51bGw7XG4gICAgfTtcblxuICAgIF90aGlzLmRlZmVyRm9jdXNJbnB1dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLmNhbmNlbEZvY3VzSW5wdXQoKTtcbiAgICAgIF90aGlzLmlucHV0Rm9jdXNUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5zZXRGb2N1cygpO1xuICAgICAgfSwgMSk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZURyb3Bkb3duRm9jdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpcy5jYW5jZWxGb2N1c0lucHV0KCk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUJsdXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5zdGF0ZS5vcGVuICYmICFfdGhpcy5wcm9wcy53aXRoUG9ydGFsKSB7XG4gICAgICAgIF90aGlzLmRlZmVyRm9jdXNJbnB1dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25CbHVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIF90aGlzLnNldFN0YXRlKHsgZm9jdXNlZDogZmFsc2UgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUNhbGVuZGFyQ2xpY2tPdXRzaWRlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIV90aGlzLnByb3BzLmlubGluZSkge1xuICAgICAgICBfdGhpcy5zZXRPcGVuKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIF90aGlzLnByb3BzLm9uQ2xpY2tPdXRzaWRlKGV2ZW50KTtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy53aXRoUG9ydGFsKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhbGxBcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgIGFsbEFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHZhciBldmVudCA9IGFsbEFyZ3NbMF07XG4gICAgICBpZiAoX3RoaXMucHJvcHMub25DaGFuZ2VSYXcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25DaGFuZ2VSYXcuYXBwbHkoX3RoaXMsIGFsbEFyZ3MpO1xuICAgICAgICBpZiAodHlwZW9mIGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCAhPT0gXCJmdW5jdGlvblwiIHx8IGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlucHV0VmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgbGFzdFByZVNlbGVjdENoYW5nZTogUFJFU0VMRUNUX0NIQU5HRV9WSUFfSU5QVVRcbiAgICAgIH0pO1xuICAgICAgdmFyIGRhdGUgPSBwYXJzZURhdGUoZXZlbnQudGFyZ2V0LnZhbHVlLCBfdGhpcy5wcm9wcyk7XG4gICAgICBpZiAoZGF0ZSB8fCAhZXZlbnQudGFyZ2V0LnZhbHVlKSB7XG4gICAgICAgIF90aGlzLnNldFNlbGVjdGVkKGRhdGUsIGV2ZW50LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlU2VsZWN0ID0gZnVuY3Rpb24gKGRhdGUsIGV2ZW50KSB7XG4gICAgICAvLyBQcmV2ZW50aW5nIG9uRm9jdXMgZXZlbnQgdG8gZml4IGlzc3VlXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vSGFja2VyMHgwMS9yZWFjdC1kYXRlcGlja2VyL2lzc3Vlcy82MjhcbiAgICAgIF90aGlzLnNldFN0YXRlKHsgcHJldmVudEZvY3VzOiB0cnVlIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMucHJldmVudEZvY3VzVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5zZXRTdGF0ZSh7IHByZXZlbnRGb2N1czogZmFsc2UgfSk7XG4gICAgICAgIH0sIDUwKTtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByZXZlbnRGb2N1c1RpbWVvdXQ7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLnNldFNlbGVjdGVkKGRhdGUsIGV2ZW50KTtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuc2hvdWxkQ2xvc2VPblNlbGVjdCB8fCBfdGhpcy5wcm9wcy5zaG93VGltZVNlbGVjdCkge1xuICAgICAgICBfdGhpcy5zZXRQcmVTZWxlY3Rpb24oZGF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKCFfdGhpcy5wcm9wcy5pbmxpbmUpIHtcbiAgICAgICAgX3RoaXMuc2V0T3BlbihmYWxzZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnNldFNlbGVjdGVkID0gZnVuY3Rpb24gKGRhdGUsIGV2ZW50LCBrZWVwSW5wdXQpIHtcbiAgICAgIHZhciBjaGFuZ2VkRGF0ZSA9IGRhdGU7XG5cbiAgICAgIGlmIChjaGFuZ2VkRGF0ZSAhPT0gbnVsbCAmJiBpc0RheURpc2FibGVkKGNoYW5nZWREYXRlLCBfdGhpcy5wcm9wcykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzU2FtZURheShfdGhpcy5wcm9wcy5zZWxlY3RlZCwgY2hhbmdlZERhdGUpIHx8IF90aGlzLnByb3BzLmFsbG93U2FtZURheSkge1xuICAgICAgICBpZiAoY2hhbmdlZERhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoX3RoaXMucHJvcHMuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IF90aGlzLnByb3BzLnNlbGVjdGVkO1xuICAgICAgICAgICAgaWYgKGtlZXBJbnB1dCkgc2VsZWN0ZWQgPSBuZXdEYXRlKGNoYW5nZWREYXRlKTtcbiAgICAgICAgICAgIGNoYW5nZWREYXRlID0gc2V0VGltZShuZXdEYXRlKGNoYW5nZWREYXRlKSwge1xuICAgICAgICAgICAgICBob3VyOiBnZXRIb3VyKHNlbGVjdGVkKSxcbiAgICAgICAgICAgICAgbWludXRlOiBnZXRNaW51dGUoc2VsZWN0ZWQpLFxuICAgICAgICAgICAgICBzZWNvbmQ6IGdldFNlY29uZChzZWxlY3RlZClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIV90aGlzLnByb3BzLmlubGluZSkge1xuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgICBwcmVTZWxlY3Rpb246IGNoYW5nZWREYXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMucHJvcHMub25DaGFuZ2UoY2hhbmdlZERhdGUsIGV2ZW50KTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMucHJvcHMub25TZWxlY3QoY2hhbmdlZERhdGUsIGV2ZW50KTtcblxuICAgICAgaWYgKCFrZWVwSW5wdXQpIHtcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBpbnB1dFZhbHVlOiBudWxsIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5zZXRQcmVTZWxlY3Rpb24gPSBmdW5jdGlvbiAoZGF0ZSkge1xuICAgICAgdmFyIGlzRGF0ZVJhbmdlUHJlc2VudCA9IHR5cGVvZiBfdGhpcy5wcm9wcy5taW5EYXRlICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBfdGhpcy5wcm9wcy5tYXhEYXRlICE9PSBcInVuZGVmaW5lZFwiO1xuICAgICAgdmFyIGlzVmFsaWREYXRlU2VsZWN0aW9uID0gaXNEYXRlUmFuZ2VQcmVzZW50ICYmIGRhdGUgPyBpc0RheUluUmFuZ2UoZGF0ZSwgX3RoaXMucHJvcHMubWluRGF0ZSwgX3RoaXMucHJvcHMubWF4RGF0ZSkgOiB0cnVlO1xuICAgICAgaWYgKGlzVmFsaWREYXRlU2VsZWN0aW9uKSB7XG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBwcmVTZWxlY3Rpb246IGRhdGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZVRpbWVDaGFuZ2UgPSBmdW5jdGlvbiAodGltZSkge1xuICAgICAgdmFyIHNlbGVjdGVkID0gX3RoaXMucHJvcHMuc2VsZWN0ZWQgPyBfdGhpcy5wcm9wcy5zZWxlY3RlZCA6IF90aGlzLmdldFByZVNlbGVjdGlvbigpO1xuICAgICAgdmFyIGNoYW5nZWREYXRlID0gc2V0VGltZShjbG9uZURhdGUoc2VsZWN0ZWQpLCB7XG4gICAgICAgIGhvdXI6IGdldEhvdXIodGltZSksXG4gICAgICAgIG1pbnV0ZTogZ2V0TWludXRlKHRpbWUpXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBwcmVTZWxlY3Rpb246IGNoYW5nZWREYXRlXG4gICAgICB9KTtcblxuICAgICAgX3RoaXMucHJvcHMub25DaGFuZ2UoY2hhbmdlZERhdGUpO1xuICAgICAgX3RoaXMuc2V0T3BlbihmYWxzZSk7XG4gICAgICBfdGhpcy5zZXRTdGF0ZSh7IGlucHV0VmFsdWU6IG51bGwgfSk7XG4gICAgfTtcblxuICAgIF90aGlzLm9uSW5wdXRDbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuZGlzYWJsZWQgJiYgIV90aGlzLnByb3BzLnJlYWRPbmx5KSB7XG4gICAgICAgIF90aGlzLnNldE9wZW4odHJ1ZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uSW5wdXRLZXlEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBfdGhpcy5wcm9wcy5vbktleURvd24oZXZlbnQpO1xuICAgICAgdmFyIGV2ZW50S2V5ID0gZXZlbnQua2V5O1xuICAgICAgaWYgKCFfdGhpcy5zdGF0ZS5vcGVuICYmICFfdGhpcy5wcm9wcy5pbmxpbmUgJiYgIV90aGlzLnByb3BzLnByZXZlbnRPcGVuT25Gb2N1cykge1xuICAgICAgICBpZiAoZXZlbnRLZXkgPT09IFwiQXJyb3dEb3duXCIgfHwgZXZlbnRLZXkgPT09IFwiQXJyb3dVcFwiKSB7XG4gICAgICAgICAgX3RoaXMub25JbnB1dENsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGNvcHkgPSBuZXdEYXRlKF90aGlzLnN0YXRlLnByZVNlbGVjdGlvbik7XG4gICAgICBpZiAoZXZlbnRLZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoKGlzTW9tZW50KF90aGlzLnN0YXRlLnByZVNlbGVjdGlvbikgfHwgaXNEYXRlKF90aGlzLnN0YXRlLnByZVNlbGVjdGlvbikpICYmIF90aGlzLnN0YXRlLmxhc3RQcmVTZWxlY3RDaGFuZ2UgPT09IFBSRVNFTEVDVF9DSEFOR0VfVklBX05BVklHQVRFKSB7XG4gICAgICAgICAgX3RoaXMuaGFuZGxlU2VsZWN0KGNvcHksIGV2ZW50KTtcbiAgICAgICAgICAhX3RoaXMucHJvcHMuc2hvdWxkQ2xvc2VPblNlbGVjdCAmJiBfdGhpcy5zZXRQcmVTZWxlY3Rpb24oY29weSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3RoaXMuc2V0T3BlbihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXZlbnRLZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgX3RoaXMuc2V0T3BlbihmYWxzZSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50S2V5ID09PSBcIlRhYlwiKSB7XG4gICAgICAgIF90aGlzLnNldE9wZW4oZmFsc2UpO1xuICAgICAgfSBlbHNlIGlmICghX3RoaXMucHJvcHMuZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgICAgdmFyIG5ld1NlbGVjdGlvbiA9IHZvaWQgMDtcbiAgICAgICAgc3dpdGNoIChldmVudEtleSkge1xuICAgICAgICAgIGNhc2UgXCJBcnJvd0xlZnRcIjpcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IHN1YnRyYWN0RGF5cyhjb3B5LCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJBcnJvd1JpZ2h0XCI6XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBhZGREYXlzKGNvcHksIDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IHN1YnRyYWN0V2Vla3MoY29weSwgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiQXJyb3dEb3duXCI6XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBhZGRXZWVrcyhjb3B5LCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJQYWdlVXBcIjpcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IHN1YnRyYWN0TW9udGhzKGNvcHksIDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcIlBhZ2VEb3duXCI6XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSBhZGRNb250aHMoY29weSwgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwiSG9tZVwiOlxuICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gc3VidHJhY3RZZWFycyhjb3B5LCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJFbmRcIjpcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IGFkZFllYXJzKGNvcHksIDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFuZXdTZWxlY3Rpb24pIHJldHVybjsgLy8gTGV0IHRoZSBpbnB1dCBjb21wb25lbnQgaGFuZGxlIHRoaXMga2V5ZG93blxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGxhc3RQcmVTZWxlY3RDaGFuZ2U6IFBSRVNFTEVDVF9DSEFOR0VfVklBX05BVklHQVRFIH0pO1xuICAgICAgICBpZiAoX3RoaXMucHJvcHMuYWRqdXN0RGF0ZU9uQ2hhbmdlKSB7XG4gICAgICAgICAgX3RoaXMuc2V0U2VsZWN0ZWQobmV3U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5zZXRQcmVTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25DbGVhckNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX3RoaXMucHJvcHMub25DaGFuZ2UobnVsbCwgZXZlbnQpO1xuICAgICAgX3RoaXMuc2V0U3RhdGUoeyBpbnB1dFZhbHVlOiBudWxsIH0pO1xuICAgIH07XG5cbiAgICBfdGhpcy5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzLm9uQ2xlYXJDbGljaygpO1xuICAgIH07XG5cbiAgICBfdGhpcy5yZW5kZXJDYWxlbmRhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghX3RoaXMucHJvcHMuaW5saW5lICYmICghX3RoaXMuc3RhdGUub3BlbiB8fCBfdGhpcy5wcm9wcy5kaXNhYmxlZCB8fCBfdGhpcy5wcm9wcy5yZWFkT25seSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgV3JhcHBlZENhbGVuZGFyLFxuICAgICAgICB7XG4gICAgICAgICAgcmVmOiBmdW5jdGlvbiByZWYoZWxlbSkge1xuICAgICAgICAgICAgX3RoaXMuY2FsZW5kYXIgPSBlbGVtO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbG9jYWxlOiBfdGhpcy5wcm9wcy5sb2NhbGUsXG4gICAgICAgICAgYWRqdXN0RGF0ZU9uQ2hhbmdlOiBfdGhpcy5wcm9wcy5hZGp1c3REYXRlT25DaGFuZ2UsXG4gICAgICAgICAgc2V0T3BlbjogX3RoaXMuc2V0T3BlbixcbiAgICAgICAgICBkYXRlRm9ybWF0OiBfdGhpcy5wcm9wcy5kYXRlRm9ybWF0Q2FsZW5kYXIsXG4gICAgICAgICAgdXNlV2Vla2RheXNTaG9ydDogX3RoaXMucHJvcHMudXNlV2Vla2RheXNTaG9ydCxcbiAgICAgICAgICBmb3JtYXRXZWVrRGF5OiBfdGhpcy5wcm9wcy5mb3JtYXRXZWVrRGF5LFxuICAgICAgICAgIGRyb3Bkb3duTW9kZTogX3RoaXMucHJvcHMuZHJvcGRvd25Nb2RlLFxuICAgICAgICAgIHNlbGVjdGVkOiBfdGhpcy5wcm9wcy5zZWxlY3RlZCxcbiAgICAgICAgICBwcmVTZWxlY3Rpb246IF90aGlzLnN0YXRlLnByZVNlbGVjdGlvbixcbiAgICAgICAgICBvblNlbGVjdDogX3RoaXMuaGFuZGxlU2VsZWN0LFxuICAgICAgICAgIG9uV2Vla1NlbGVjdDogX3RoaXMucHJvcHMub25XZWVrU2VsZWN0LFxuICAgICAgICAgIG9wZW5Ub0RhdGU6IF90aGlzLnByb3BzLm9wZW5Ub0RhdGUsXG4gICAgICAgICAgbWluRGF0ZTogX3RoaXMucHJvcHMubWluRGF0ZSxcbiAgICAgICAgICBtYXhEYXRlOiBfdGhpcy5wcm9wcy5tYXhEYXRlLFxuICAgICAgICAgIHNlbGVjdHNTdGFydDogX3RoaXMucHJvcHMuc2VsZWN0c1N0YXJ0LFxuICAgICAgICAgIHNlbGVjdHNFbmQ6IF90aGlzLnByb3BzLnNlbGVjdHNFbmQsXG4gICAgICAgICAgc3RhcnREYXRlOiBfdGhpcy5wcm9wcy5zdGFydERhdGUsXG4gICAgICAgICAgZW5kRGF0ZTogX3RoaXMucHJvcHMuZW5kRGF0ZSxcbiAgICAgICAgICBleGNsdWRlRGF0ZXM6IF90aGlzLnByb3BzLmV4Y2x1ZGVEYXRlcyxcbiAgICAgICAgICBmaWx0ZXJEYXRlOiBfdGhpcy5wcm9wcy5maWx0ZXJEYXRlLFxuICAgICAgICAgIG9uQ2xpY2tPdXRzaWRlOiBfdGhpcy5oYW5kbGVDYWxlbmRhckNsaWNrT3V0c2lkZSxcbiAgICAgICAgICBmb3JtYXRXZWVrTnVtYmVyOiBfdGhpcy5wcm9wcy5mb3JtYXRXZWVrTnVtYmVyLFxuICAgICAgICAgIGhpZ2hsaWdodERhdGVzOiBfdGhpcy5zdGF0ZS5oaWdobGlnaHREYXRlcyxcbiAgICAgICAgICBpbmNsdWRlRGF0ZXM6IF90aGlzLnByb3BzLmluY2x1ZGVEYXRlcyxcbiAgICAgICAgICBpbmNsdWRlVGltZXM6IF90aGlzLnByb3BzLmluY2x1ZGVUaW1lcyxcbiAgICAgICAgICBpbmplY3RUaW1lczogX3RoaXMucHJvcHMuaW5qZWN0VGltZXMsXG4gICAgICAgICAgaW5saW5lOiBfdGhpcy5wcm9wcy5pbmxpbmUsXG4gICAgICAgICAgcGVla05leHRNb250aDogX3RoaXMucHJvcHMucGVla05leHRNb250aCxcbiAgICAgICAgICBzaG93TW9udGhEcm9wZG93bjogX3RoaXMucHJvcHMuc2hvd01vbnRoRHJvcGRvd24sXG4gICAgICAgICAgdXNlU2hvcnRNb250aEluRHJvcGRvd246IF90aGlzLnByb3BzLnVzZVNob3J0TW9udGhJbkRyb3Bkb3duLFxuICAgICAgICAgIHNob3dNb250aFllYXJEcm9wZG93bjogX3RoaXMucHJvcHMuc2hvd01vbnRoWWVhckRyb3Bkb3duLFxuICAgICAgICAgIHNob3dXZWVrTnVtYmVyczogX3RoaXMucHJvcHMuc2hvd1dlZWtOdW1iZXJzLFxuICAgICAgICAgIHNob3dZZWFyRHJvcGRvd246IF90aGlzLnByb3BzLnNob3dZZWFyRHJvcGRvd24sXG4gICAgICAgICAgd2l0aFBvcnRhbDogX3RoaXMucHJvcHMud2l0aFBvcnRhbCxcbiAgICAgICAgICBmb3JjZVNob3dNb250aE5hdmlnYXRpb246IF90aGlzLnByb3BzLmZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbixcbiAgICAgICAgICBzaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb246IF90aGlzLnByb3BzLnNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbixcbiAgICAgICAgICBzY3JvbGxhYmxlWWVhckRyb3Bkb3duOiBfdGhpcy5wcm9wcy5zY3JvbGxhYmxlWWVhckRyb3Bkb3duLFxuICAgICAgICAgIHNjcm9sbGFibGVNb250aFllYXJEcm9wZG93bjogX3RoaXMucHJvcHMuc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duLFxuICAgICAgICAgIHRvZGF5QnV0dG9uOiBfdGhpcy5wcm9wcy50b2RheUJ1dHRvbixcbiAgICAgICAgICB3ZWVrTGFiZWw6IF90aGlzLnByb3BzLndlZWtMYWJlbCxcbiAgICAgICAgICB1dGNPZmZzZXQ6IF90aGlzLnByb3BzLnV0Y09mZnNldCxcbiAgICAgICAgICBvdXRzaWRlQ2xpY2tJZ25vcmVDbGFzczogb3V0c2lkZUNsaWNrSWdub3JlQ2xhc3MsXG4gICAgICAgICAgZml4ZWRIZWlnaHQ6IF90aGlzLnByb3BzLmZpeGVkSGVpZ2h0LFxuICAgICAgICAgIG1vbnRoc1Nob3duOiBfdGhpcy5wcm9wcy5tb250aHNTaG93bixcbiAgICAgICAgICBvbkRyb3Bkb3duRm9jdXM6IF90aGlzLmhhbmRsZURyb3Bkb3duRm9jdXMsXG4gICAgICAgICAgb25Nb250aENoYW5nZTogX3RoaXMucHJvcHMub25Nb250aENoYW5nZSxcbiAgICAgICAgICBvblllYXJDaGFuZ2U6IF90aGlzLnByb3BzLm9uWWVhckNoYW5nZSxcbiAgICAgICAgICBkYXlDbGFzc05hbWU6IF90aGlzLnByb3BzLmRheUNsYXNzTmFtZSxcbiAgICAgICAgICBzaG93VGltZVNlbGVjdDogX3RoaXMucHJvcHMuc2hvd1RpbWVTZWxlY3QsXG4gICAgICAgICAgc2hvd1RpbWVTZWxlY3RPbmx5OiBfdGhpcy5wcm9wcy5zaG93VGltZVNlbGVjdE9ubHksXG4gICAgICAgICAgb25UaW1lQ2hhbmdlOiBfdGhpcy5oYW5kbGVUaW1lQ2hhbmdlLFxuICAgICAgICAgIHRpbWVGb3JtYXQ6IF90aGlzLnByb3BzLnRpbWVGb3JtYXQsXG4gICAgICAgICAgdGltZUludGVydmFsczogX3RoaXMucHJvcHMudGltZUludGVydmFscyxcbiAgICAgICAgICBtaW5UaW1lOiBfdGhpcy5wcm9wcy5taW5UaW1lLFxuICAgICAgICAgIG1heFRpbWU6IF90aGlzLnByb3BzLm1heFRpbWUsXG4gICAgICAgICAgZXhjbHVkZVRpbWVzOiBfdGhpcy5wcm9wcy5leGNsdWRlVGltZXMsXG4gICAgICAgICAgdGltZUNhcHRpb246IF90aGlzLnByb3BzLnRpbWVDYXB0aW9uLFxuICAgICAgICAgIGNsYXNzTmFtZTogX3RoaXMucHJvcHMuY2FsZW5kYXJDbGFzc05hbWUsXG4gICAgICAgICAgY29udGFpbmVyOiBfdGhpcy5wcm9wcy5jYWxlbmRhckNvbnRhaW5lcixcbiAgICAgICAgICB5ZWFyRHJvcGRvd25JdGVtTnVtYmVyOiBfdGhpcy5wcm9wcy55ZWFyRHJvcGRvd25JdGVtTnVtYmVyLFxuICAgICAgICAgIHByZXZpb3VzTW9udGhCdXR0b25MYWJlbDogX3RoaXMucHJvcHMucHJldmlvdXNNb250aEJ1dHRvbkxhYmVsLFxuICAgICAgICAgIG5leHRNb250aEJ1dHRvbkxhYmVsOiBfdGhpcy5wcm9wcy5uZXh0TW9udGhCdXR0b25MYWJlbFxuICAgICAgICB9LFxuICAgICAgICBfdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgX3RoaXMucmVuZGVyRGF0ZUlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIF9jbGFzc25hbWVzLCBfUmVhY3QkY2xvbmVFbGVtZW50O1xuXG4gICAgICB2YXIgY2xhc3NOYW1lID0gY2xhc3NuYW1lcyhfdGhpcy5wcm9wcy5jbGFzc05hbWUsIChfY2xhc3NuYW1lcyA9IHt9LCBfY2xhc3NuYW1lc1tvdXRzaWRlQ2xpY2tJZ25vcmVDbGFzc10gPSBfdGhpcy5zdGF0ZS5vcGVuLCBfY2xhc3NuYW1lcykpO1xuXG4gICAgICB2YXIgY3VzdG9tSW5wdXQgPSBfdGhpcy5wcm9wcy5jdXN0b21JbnB1dCB8fCBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiB9KTtcbiAgICAgIHZhciBjdXN0b21JbnB1dFJlZiA9IF90aGlzLnByb3BzLmN1c3RvbUlucHV0UmVmIHx8IFwicmVmXCI7XG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IHR5cGVvZiBfdGhpcy5wcm9wcy52YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IF90aGlzLnByb3BzLnZhbHVlIDogdHlwZW9mIF90aGlzLnN0YXRlLmlucHV0VmFsdWUgPT09IFwic3RyaW5nXCIgPyBfdGhpcy5zdGF0ZS5pbnB1dFZhbHVlIDogc2FmZURhdGVGb3JtYXQoX3RoaXMucHJvcHMuc2VsZWN0ZWQsIF90aGlzLnByb3BzKTtcblxuICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjdXN0b21JbnB1dCwgKF9SZWFjdCRjbG9uZUVsZW1lbnQgPSB7fSwgX1JlYWN0JGNsb25lRWxlbWVudFtjdXN0b21JbnB1dFJlZl0gPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgX3RoaXMuaW5wdXQgPSBpbnB1dDtcbiAgICAgIH0sIF9SZWFjdCRjbG9uZUVsZW1lbnQudmFsdWUgPSBpbnB1dFZhbHVlLCBfUmVhY3QkY2xvbmVFbGVtZW50Lm9uQmx1ciA9IF90aGlzLmhhbmRsZUJsdXIsIF9SZWFjdCRjbG9uZUVsZW1lbnQub25DaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UsIF9SZWFjdCRjbG9uZUVsZW1lbnQub25DbGljayA9IF90aGlzLm9uSW5wdXRDbGljaywgX1JlYWN0JGNsb25lRWxlbWVudC5vbkZvY3VzID0gX3RoaXMuaGFuZGxlRm9jdXMsIF9SZWFjdCRjbG9uZUVsZW1lbnQub25LZXlEb3duID0gX3RoaXMub25JbnB1dEtleURvd24sIF9SZWFjdCRjbG9uZUVsZW1lbnQuaWQgPSBfdGhpcy5wcm9wcy5pZCwgX1JlYWN0JGNsb25lRWxlbWVudC5uYW1lID0gX3RoaXMucHJvcHMubmFtZSwgX1JlYWN0JGNsb25lRWxlbWVudC5hdXRvRm9jdXMgPSBfdGhpcy5wcm9wcy5hdXRvRm9jdXMsIF9SZWFjdCRjbG9uZUVsZW1lbnQucGxhY2Vob2xkZXIgPSBfdGhpcy5wcm9wcy5wbGFjZWhvbGRlclRleHQsIF9SZWFjdCRjbG9uZUVsZW1lbnQuZGlzYWJsZWQgPSBfdGhpcy5wcm9wcy5kaXNhYmxlZCwgX1JlYWN0JGNsb25lRWxlbWVudC5hdXRvQ29tcGxldGUgPSBfdGhpcy5wcm9wcy5hdXRvQ29tcGxldGUsIF9SZWFjdCRjbG9uZUVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lLCBfUmVhY3QkY2xvbmVFbGVtZW50LnRpdGxlID0gX3RoaXMucHJvcHMudGl0bGUsIF9SZWFjdCRjbG9uZUVsZW1lbnQucmVhZE9ubHkgPSBfdGhpcy5wcm9wcy5yZWFkT25seSwgX1JlYWN0JGNsb25lRWxlbWVudC5yZXF1aXJlZCA9IF90aGlzLnByb3BzLnJlcXVpcmVkLCBfUmVhY3QkY2xvbmVFbGVtZW50LnRhYkluZGV4ID0gX3RoaXMucHJvcHMudGFiSW5kZXgsIF9SZWFjdCRjbG9uZUVsZW1lbnQpKTtcbiAgICB9O1xuXG4gICAgX3RoaXMucmVuZGVyQ2xlYXJCdXR0b24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoX3RoaXMucHJvcHMuaXNDbGVhcmFibGUgJiYgX3RoaXMucHJvcHMuc2VsZWN0ZWQgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgICAgICAgdHlwZTogXCJidXR0b25cIixcbiAgICAgICAgICBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9fY2xvc2UtaWNvblwiLFxuICAgICAgICAgIG9uQ2xpY2s6IF90aGlzLm9uQ2xlYXJDbGljayxcbiAgICAgICAgICB0aXRsZTogX3RoaXMucHJvcHMuY2xlYXJCdXR0b25UaXRsZSxcbiAgICAgICAgICB0YWJJbmRleDogLTFcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMuc3RhdGUgPSBfdGhpcy5jYWxjSW5pdGlhbFN0YXRlKCk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgRGF0ZVBpY2tlci5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgaWYgKHByZXZQcm9wcy5pbmxpbmUgJiYgaGFzUHJlU2VsZWN0aW9uQ2hhbmdlZChwcmV2UHJvcHMuc2VsZWN0ZWQsIHRoaXMucHJvcHMuc2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLnNldFByZVNlbGVjdGlvbih0aGlzLnByb3BzLnNlbGVjdGVkKTtcbiAgICB9XG4gICAgaWYgKHByZXZQcm9wcy5oaWdobGlnaHREYXRlcyAhPT0gdGhpcy5wcm9wcy5oaWdobGlnaHREYXRlcykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhpZ2hsaWdodERhdGVzOiBnZXRIaWdodExpZ2h0RGF5c01hcCh0aGlzLnByb3BzLmhpZ2hsaWdodERhdGVzKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghcHJldlN0YXRlLmZvY3VzZWQgJiYgaGFzU2VsZWN0aW9uQ2hhbmdlZChwcmV2UHJvcHMuc2VsZWN0ZWQsIHRoaXMucHJvcHMuc2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgaW5wdXRWYWx1ZTogbnVsbCB9KTtcbiAgICB9XG4gIH07XG5cbiAgRGF0ZVBpY2tlci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNsZWFyUHJldmVudEZvY3VzVGltZW91dCgpO1xuICB9O1xuXG4gIERhdGVQaWNrZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgY2FsZW5kYXIgPSB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5pbmxpbmUgJiYgIXRoaXMucHJvcHMud2l0aFBvcnRhbCkge1xuICAgICAgcmV0dXJuIGNhbGVuZGFyO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLndpdGhQb3J0YWwpIHtcbiAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICBudWxsLFxuICAgICAgICAhdGhpcy5wcm9wcy5pbmxpbmUgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgeyBjbGFzc05hbWU6IFwicmVhY3QtZGF0ZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICB0aGlzLnJlbmRlckRhdGVJbnB1dCgpLFxuICAgICAgICAgIHRoaXMucmVuZGVyQ2xlYXJCdXR0b24oKVxuICAgICAgICApIDogbnVsbCxcbiAgICAgICAgdGhpcy5zdGF0ZS5vcGVuIHx8IHRoaXMucHJvcHMuaW5saW5lID8gUmVhY3QuY3JlYXRlRWxlbWVudChcbiAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgIHsgY2xhc3NOYW1lOiBcInJlYWN0LWRhdGVwaWNrZXJfX3BvcnRhbFwiIH0sXG4gICAgICAgICAgY2FsZW5kYXJcbiAgICAgICAgKSA6IG51bGxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUG9wcGVyQ29tcG9uZW50LCB7XG4gICAgICBjbGFzc05hbWU6IHRoaXMucHJvcHMucG9wcGVyQ2xhc3NOYW1lLFxuICAgICAgaGlkZVBvcHBlcjogIXRoaXMuc3RhdGUub3BlbiB8fCB0aGlzLnByb3BzLmRpc2FibGVkIHx8IHRoaXMucHJvcHMucmVhZE9ubHksXG4gICAgICBwb3BwZXJNb2RpZmllcnM6IHRoaXMucHJvcHMucG9wcGVyTW9kaWZpZXJzLFxuICAgICAgdGFyZ2V0Q29tcG9uZW50OiBSZWFjdC5jcmVhdGVFbGVtZW50KFxuICAgICAgICBcImRpdlwiLFxuICAgICAgICB7IGNsYXNzTmFtZTogXCJyZWFjdC1kYXRlcGlja2VyX19pbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICB0aGlzLnJlbmRlckRhdGVJbnB1dCgpLFxuICAgICAgICB0aGlzLnJlbmRlckNsZWFyQnV0dG9uKClcbiAgICAgICksXG4gICAgICBwb3BwZXJDb250YWluZXI6IHRoaXMucHJvcHMucG9wcGVyQ29udGFpbmVyLFxuICAgICAgcG9wcGVyQ29tcG9uZW50OiBjYWxlbmRhcixcbiAgICAgIHBvcHBlclBsYWNlbWVudDogdGhpcy5wcm9wcy5wb3BwZXJQbGFjZW1lbnRcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gRGF0ZVBpY2tlcjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuRGF0ZVBpY2tlci5wcm9wVHlwZXMgPSB7XG4gIGFkanVzdERhdGVPbkNoYW5nZTogUHJvcFR5cGVzLmJvb2wsXG4gIGFsbG93U2FtZURheTogUHJvcFR5cGVzLmJvb2wsXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2FsZW5kYXJDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNhbGVuZGFyQ29udGFpbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGN1c3RvbUlucHV0OiBQcm9wVHlwZXMuZWxlbWVudCxcbiAgY3VzdG9tSW5wdXRSZWY6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby11bnVzZWQtcHJvcC10eXBlc1xuICBkYXRlRm9ybWF0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYXJyYXldKSxcbiAgZGF0ZUZvcm1hdENhbGVuZGFyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkYXlDbGFzc05hbWU6IFByb3BUeXBlcy5mdW5jLFxuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGRpc2FibGVkS2V5Ym9hcmROYXZpZ2F0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgZHJvcGRvd25Nb2RlOiBQcm9wVHlwZXMub25lT2YoW1wic2Nyb2xsXCIsIFwic2VsZWN0XCJdKS5pc1JlcXVpcmVkLFxuICBlbmREYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBleGNsdWRlRGF0ZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgZmlsdGVyRGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGZpeGVkSGVpZ2h0OiBQcm9wVHlwZXMuYm9vbCxcbiAgZm9ybWF0V2Vla051bWJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhpZ2hsaWdodERhdGVzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpbmNsdWRlRGF0ZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgaW5jbHVkZVRpbWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGluamVjdFRpbWVzOiBQcm9wVHlwZXMuYXJyYXksXG4gIGlubGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIGlzQ2xlYXJhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgbG9jYWxlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBtYXhEYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtaW5EYXRlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBtb250aHNTaG93bjogUHJvcFR5cGVzLm51bWJlcixcbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25XZWVrU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGlja091dHNpZGU6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNoYW5nZVJhdzogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uRm9jdXM6IFByb3BUeXBlcy5mdW5jLFxuICBvbktleURvd246IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vbnRoQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25ZZWFyQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb3BlblRvRGF0ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgcGVla05leHRNb250aDogUHJvcFR5cGVzLmJvb2wsXG4gIHBsYWNlaG9sZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcG9wcGVyQ29udGFpbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgcG9wcGVyQ2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLCAvLyA8UG9wcGVyQ29tcG9uZW50Lz4gcHJvcHNcbiAgcG9wcGVyTW9kaWZpZXJzOiBQcm9wVHlwZXMub2JqZWN0LCAvLyA8UG9wcGVyQ29tcG9uZW50Lz4gcHJvcHNcbiAgcG9wcGVyUGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YocG9wcGVyUGxhY2VtZW50UG9zaXRpb25zKSwgLy8gPFBvcHBlckNvbXBvbmVudC8+IHByb3BzXG4gIHByZXZlbnRPcGVuT25Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIHJlYWRPbmx5OiBQcm9wVHlwZXMuYm9vbCxcbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICBzY3JvbGxhYmxlWWVhckRyb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2Nyb2xsYWJsZU1vbnRoWWVhckRyb3Bkb3duOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gIHNlbGVjdHNFbmQ6IFByb3BUeXBlcy5ib29sLFxuICBzZWxlY3RzU3RhcnQ6IFByb3BUeXBlcy5ib29sLFxuICBzaG93TW9udGhEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dNb250aFllYXJEcm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dXZWVrTnVtYmVyczogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dZZWFyRHJvcGRvd246IFByb3BUeXBlcy5ib29sLFxuICBmb3JjZVNob3dNb250aE5hdmlnYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBzaG93RGlzYWJsZWRNb250aE5hdmlnYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBzdGFydERhdGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0YXJ0T3BlbjogUHJvcFR5cGVzLmJvb2wsXG4gIHRhYkluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICB0aW1lQ2FwdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRvZGF5QnV0dG9uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB1c2VXZWVrZGF5c1Nob3J0OiBQcm9wVHlwZXMuYm9vbCxcbiAgZm9ybWF0V2Vla0RheTogUHJvcFR5cGVzLmZ1bmMsXG4gIHV0Y09mZnNldDogUHJvcFR5cGVzLm51bWJlcixcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHdlZWtMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgd2l0aFBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG4gIHllYXJEcm9wZG93bkl0ZW1OdW1iZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gIHNob3VsZENsb3NlT25TZWxlY3Q6IFByb3BUeXBlcy5ib29sLFxuICBzaG93VGltZVNlbGVjdDogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dUaW1lU2VsZWN0T25seTogUHJvcFR5cGVzLmJvb2wsXG4gIHRpbWVGb3JtYXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHRpbWVJbnRlcnZhbHM6IFByb3BUeXBlcy5udW1iZXIsXG4gIG1pblRpbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIG1heFRpbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIGV4Y2x1ZGVUaW1lczogUHJvcFR5cGVzLmFycmF5LFxuICB1c2VTaG9ydE1vbnRoSW5Ecm9wZG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIGNsZWFyQnV0dG9uVGl0bGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXZpb3VzTW9udGhCdXR0b25MYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgbmV4dE1vbnRoQnV0dG9uTGFiZWw6IFByb3BUeXBlcy5zdHJpbmdcbn07XG52YXIgUFJFU0VMRUNUX0NIQU5HRV9WSUFfSU5QVVQgPSBcImlucHV0XCI7XG52YXIgUFJFU0VMRUNUX0NIQU5HRV9WSUFfTkFWSUdBVEUgPSBcIm5hdmlnYXRlXCI7XG5cbmV4cG9ydCB7IENhbGVuZGFyQ29udGFpbmVyIH07XG5leHBvcnQgZGVmYXVsdCBEYXRlUGlja2VyO1xuIiwiLyohXG4gIENvcHlyaWdodCAoYykgMjAxNiBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xuXHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRGbiBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi8uLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzXCI7XG4gICAgICBpbXBvcnQgc3R5bGVUYWdUcmFuc2Zvcm1GbiBmcm9tIFwiIS4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9yZWFjdC1kYXRlcGlja2VyLmNzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9yZWFjdC1kYXRlcGlja2VyLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiXSwibmFtZXMiOlsiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJwdXNoIiwibW9kdWxlIiwiaWQiLCJleHBvcnRzIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJ0b1N0cmluZyIsInRoaXMiLCJtYXAiLCJpdGVtIiwiY29udGVudCIsIm5lZWRMYXllciIsImNvbmNhdCIsImxlbmd0aCIsImpvaW4iLCJpIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsInVuZGVmaW5lZCIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwic291cmNlVVJMcyIsInNvdXJjZXMiLCJzb3VyY2UiLCJzb3VyY2VSb290IiwiUmVhY3RQcm9wVHlwZXNTZWNyZXQiLCJlbXB0eUZ1bmN0aW9uIiwic2hpbSIsInByb3BzIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsIm5hbWUiLCJnZXRTaGltIiwiaXNSZXF1aXJlZCIsIlJlYWN0UHJvcFR5cGVzIiwiYXJyYXkiLCJib29sIiwiZnVuYyIsIm51bWJlciIsIm9iamVjdCIsInN0cmluZyIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJlbGVtZW50IiwiaW5zdGFuY2VPZiIsIm5vZGUiLCJvYmplY3RPZiIsIm9uZU9mIiwib25lT2ZUeXBlIiwic2hhcGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNOb2RlRm91bmQiLCJjdXJyZW50IiwiY29tcG9uZW50Tm9kZSIsImlnbm9yZUNsYXNzIiwiY29ycmVzcG9uZGluZ0VsZW1lbnQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInBhc3NpdmVFdmVudFN1cHBvcnQiLCJ1aWQiLCJhdXRvSW5jIiwic2VlZCIsImhhbmRsZXJzTWFwIiwiZW5hYmxlZEluc3RhbmNlcyIsInRvdWNoRXZlbnRzIiwiZ2V0RXZlbnRIYW5kbGVyT3B0aW9ucyIsImluc3RhbmNlIiwiZXZlbnROYW1lIiwiaGFuZGxlck9wdGlvbnMiLCJpbmRleE9mIiwicGFzc2l2ZSIsInByZXZlbnREZWZhdWx0Iiwib25DbGlja091dHNpZGVIT0MiLCJXcmFwcGVkQ29tcG9uZW50IiwiY29uZmlnIiwiX2NsYXNzIiwiX3RlbXAiLCJfQ29tcG9uZW50Iiwib25DbGlja091dHNpZGUiLCJfdGhpcyIsImNhbGwiLCJfX291dHNpZGVDbGlja0hhbmRsZXIiLCJldmVudCIsIl9fY2xpY2tPdXRzaWRlSGFuZGxlclByb3AiLCJnZXRJbnN0YW5jZSIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImVuYWJsZU9uQ2xpY2tPdXRzaWRlIiwiZG9jdW1lbnQiLCJfdWlkIiwidGVzdFBhc3NpdmVFdmVudFN1cHBvcnQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwib3B0aW9ucyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0Iiwibm9vcCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJldmVudHMiLCJldmVudFR5cGVzIiwiZm9yRWFjaCIsImRpc2FibGVPbkNsaWNrT3V0c2lkZSIsInN0b3BQcm9wYWdhdGlvbiIsImV4Y2x1ZGVTY3JvbGxiYXIiLCJjbGlja2VkU2Nyb2xsYmFyIiwiZXZ0IiwiZG9jdW1lbnRFbGVtZW50IiwiY2xpZW50V2lkdGgiLCJjbGllbnRYIiwiY2xpZW50SGVpZ2h0IiwiY2xpZW50WSIsImZpbmRIaWdoZXN0IiwicGFyZW50Tm9kZSIsInRhcmdldCIsIm91dHNpZGVDbGlja0lnbm9yZUNsYXNzIiwiZm4iLCJnZXRSZWYiLCJyZWYiLCJpbnN0YW5jZVJlZiIsIl9pbmhlcml0c0xvb3NlIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwicHJvdG90eXBlIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJfX3Byb3RvX18iLCJfcHJvdG8iLCJpc1JlYWN0Q29tcG9uZW50IiwiY29tcG9uZW50RGlkTW91bnQiLCJjcmVhdGVFbGVtZW50IiwiZmluZERPTU5vZGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbmRlciIsIl9wcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImV4Y2x1ZGVkIiwia2V5Iiwic291cmNlS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzb3VyY2VTeW1ib2xLZXlzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ3cmFwcGVkUmVmIiwiQ29tcG9uZW50IiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0UHJvcHMiLCJnZXRDbGFzcyIsIl9jcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJkZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIk1hbmFnZXIiLCJfcmVmIiwiX2NsYXNzQ2FsbENoZWNrIiwiVHlwZUVycm9yIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJnZXRQcm90b3R5cGVPZiIsImFwcGx5IiwiX3NldFRhcmdldE5vZGUiLCJfdGFyZ2V0Tm9kZSIsIl9nZXRUYXJnZXROb2RlIiwiX2luaGVyaXRzIiwidmFsdWUiLCJzZXRQcm90b3R5cGVPZiIsImdldENoaWxkQ29udGV4dCIsInBvcHBlck1hbmFnZXIiLCJzZXRUYXJnZXROb2RlIiwiZ2V0VGFyZ2V0Tm9kZSIsInRhZyIsImNoaWxkcmVuIiwicmVzdFByb3BzIiwib2JqIiwiaGFzT3duUHJvcGVydHkiLCJjaGlsZENvbnRleHRUeXBlcyIsInByb3BUeXBlcyIsIl9leHRlbmRzIiwiYXNzaWduIiwiVGFyZ2V0IiwiY29udGV4dCIsIl9wcm9wcyRjb21wb25lbnQiLCJjb21wb25lbnQiLCJpbm5lclJlZiIsInRhcmdldFJlZiIsInRhcmdldFByb3BzIiwiY29tcG9uZW50UHJvcHMiLCJjb250ZXh0VHlwZXMiLCJpc0Jyb3dzZXIiLCJsb25nZXJUaW1lb3V0QnJvd3NlcnMiLCJ0aW1lb3V0RHVyYXRpb24iLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJkZWJvdW5jZSIsIlByb21pc2UiLCJtaWNyb3Rhc2tEZWJvdW5jZSIsImNhbGxlZCIsInJlc29sdmUiLCJ0aGVuIiwidGFza0RlYm91bmNlIiwic2NoZWR1bGVkIiwic2V0VGltZW91dCIsImlzRnVuY3Rpb24iLCJmdW5jdGlvblRvQ2hlY2siLCJnZXRTdHlsZUNvbXB1dGVkUHJvcGVydHkiLCJwcm9wZXJ0eSIsIm5vZGVUeXBlIiwiY3NzIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImdldFBhcmVudE5vZGUiLCJub2RlTmFtZSIsImhvc3QiLCJnZXRTY3JvbGxQYXJlbnQiLCJib2R5Iiwib3duZXJEb2N1bWVudCIsIl9nZXRTdHlsZUNvbXB1dGVkUHJvcCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwidGVzdCIsImlzSUUxMSIsIk1TSW5wdXRNZXRob2RDb250ZXh0IiwiZG9jdW1lbnRNb2RlIiwiaXNJRTEwIiwiaXNJRSIsInZlcnNpb24iLCJnZXRPZmZzZXRQYXJlbnQiLCJub09mZnNldFBhcmVudCIsIm9mZnNldFBhcmVudCIsIm5leHRFbGVtZW50U2libGluZyIsImdldFJvb3QiLCJmaW5kQ29tbW9uT2Zmc2V0UGFyZW50IiwiZWxlbWVudDEiLCJlbGVtZW50MiIsIm9yZGVyIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJOb2RlIiwiRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HIiwic3RhcnQiLCJlbmQiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwic2V0U3RhcnQiLCJzZXRFbmQiLCJjb21tb25BbmNlc3RvckNvbnRhaW5lciIsImlzT2Zmc2V0Q29udGFpbmVyIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJlbGVtZW50MXJvb3QiLCJnZXRTY3JvbGwiLCJ1cHBlclNpZGUiLCJodG1sIiwic2Nyb2xsaW5nRWxlbWVudCIsImdldEJvcmRlcnNTaXplIiwic3R5bGVzIiwiYXhpcyIsInNpZGVBIiwic2lkZUIiLCJwYXJzZUZsb2F0IiwiZ2V0U2l6ZSIsImNvbXB1dGVkU3R5bGUiLCJNYXRoIiwibWF4IiwiZ2V0V2luZG93U2l6ZXMiLCJoZWlnaHQiLCJ3aWR0aCIsImNyZWF0ZUNsYXNzIiwiZ2V0Q2xpZW50UmVjdCIsIm9mZnNldHMiLCJyaWdodCIsImxlZnQiLCJib3R0b20iLCJ0b3AiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyZWN0Iiwic2Nyb2xsVG9wIiwic2Nyb2xsTGVmdCIsImUiLCJyZXN1bHQiLCJzaXplcyIsImhvcml6U2Nyb2xsYmFyIiwib2Zmc2V0V2lkdGgiLCJ2ZXJ0U2Nyb2xsYmFyIiwib2Zmc2V0SGVpZ2h0IiwiZ2V0T2Zmc2V0UmVjdFJlbGF0aXZlVG9BcmJpdHJhcnlOb2RlIiwicGFyZW50IiwiZml4ZWRQb3NpdGlvbiIsImlzSFRNTCIsImNoaWxkcmVuUmVjdCIsInBhcmVudFJlY3QiLCJzY3JvbGxQYXJlbnQiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsIm1hcmdpblRvcCIsIm1hcmdpbkxlZnQiLCJpbmNsdWRlU2Nyb2xsIiwic3VidHJhY3QiLCJtb2RpZmllciIsImlzRml4ZWQiLCJnZXRGaXhlZFBvc2l0aW9uT2Zmc2V0UGFyZW50IiwicGFyZW50RWxlbWVudCIsImVsIiwiZ2V0Qm91bmRhcmllcyIsInBvcHBlciIsInJlZmVyZW5jZSIsInBhZGRpbmciLCJib3VuZGFyaWVzRWxlbWVudCIsImJvdW5kYXJpZXMiLCJnZXRWaWV3cG9ydE9mZnNldFJlY3RSZWxhdGl2ZVRvQXJ0Yml0cmFyeU5vZGUiLCJleGNsdWRlU2Nyb2xsIiwicmVsYXRpdmVPZmZzZXQiLCJpbm5lcldpZHRoIiwiaW5uZXJIZWlnaHQiLCJib3VuZGFyaWVzTm9kZSIsIl9nZXRXaW5kb3dTaXplcyIsImNvbXB1dGVBdXRvUGxhY2VtZW50IiwicGxhY2VtZW50IiwicmVmUmVjdCIsInJlY3RzIiwic29ydGVkQXJlYXMiLCJhcmVhIiwic29ydCIsImEiLCJiIiwiZmlsdGVyZWRBcmVhcyIsImZpbHRlciIsIl9yZWYyIiwiY29tcHV0ZWRQbGFjZW1lbnQiLCJ2YXJpYXRpb24iLCJzcGxpdCIsImdldFJlZmVyZW5jZU9mZnNldHMiLCJzdGF0ZSIsImdldE91dGVyU2l6ZXMiLCJ4IiwibWFyZ2luQm90dG9tIiwieSIsIm1hcmdpblJpZ2h0IiwiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCJoYXNoIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJnZXRQb3BwZXJPZmZzZXRzIiwicmVmZXJlbmNlT2Zmc2V0cyIsInBvcHBlclJlY3QiLCJwb3BwZXJPZmZzZXRzIiwiaXNIb3JpeiIsIm1haW5TaWRlIiwic2Vjb25kYXJ5U2lkZSIsIm1lYXN1cmVtZW50Iiwic2Vjb25kYXJ5TWVhc3VyZW1lbnQiLCJmaW5kIiwiYXJyIiwiY2hlY2siLCJydW5Nb2RpZmllcnMiLCJtb2RpZmllcnMiLCJlbmRzIiwic2xpY2UiLCJmaW5kSW5kZXgiLCJwcm9wIiwiY3VyIiwibWF0Y2giLCJjb25zb2xlIiwid2FybiIsImVuYWJsZWQiLCJ1cGRhdGUiLCJpc0Rlc3Ryb3llZCIsImFycm93U3R5bGVzIiwiYXR0cmlidXRlcyIsImZsaXBwZWQiLCJwb3NpdGlvbkZpeGVkIiwiZmxpcCIsIm9yaWdpbmFsUGxhY2VtZW50IiwicG9zaXRpb24iLCJpc0NyZWF0ZWQiLCJvblVwZGF0ZSIsIm9uQ3JlYXRlIiwiaXNNb2RpZmllckVuYWJsZWQiLCJtb2RpZmllck5hbWUiLCJzb21lIiwiZ2V0U3VwcG9ydGVkUHJvcGVydHlOYW1lIiwicHJlZml4ZXMiLCJ1cHBlclByb3AiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInByZWZpeCIsInRvQ2hlY2siLCJzdHlsZSIsImRlc3Ryb3kiLCJyZW1vdmVBdHRyaWJ1dGUiLCJ3aWxsQ2hhbmdlIiwiZGlzYWJsZUV2ZW50TGlzdGVuZXJzIiwicmVtb3ZlT25EZXN0cm95IiwicmVtb3ZlQ2hpbGQiLCJnZXRXaW5kb3ciLCJkZWZhdWx0VmlldyIsImF0dGFjaFRvU2Nyb2xsUGFyZW50cyIsImNhbGxiYWNrIiwic2Nyb2xsUGFyZW50cyIsImlzQm9keSIsInNldHVwRXZlbnRMaXN0ZW5lcnMiLCJ1cGRhdGVCb3VuZCIsInNjcm9sbEVsZW1lbnQiLCJldmVudHNFbmFibGVkIiwiZW5hYmxlRXZlbnRMaXN0ZW5lcnMiLCJzY2hlZHVsZVVwZGF0ZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwicmVtb3ZlRXZlbnRMaXN0ZW5lcnMiLCJpc051bWVyaWMiLCJuIiwiaXNOYU4iLCJpc0Zpbml0ZSIsInNldFN0eWxlcyIsInVuaXQiLCJpc01vZGlmaWVyUmVxdWlyZWQiLCJyZXF1ZXN0aW5nTmFtZSIsInJlcXVlc3RlZE5hbWUiLCJyZXF1ZXN0aW5nIiwiX3JlcXVlc3RpbmciLCJyZXF1ZXN0ZWQiLCJwbGFjZW1lbnRzIiwidmFsaWRQbGFjZW1lbnRzIiwiY2xvY2t3aXNlIiwiY291bnRlciIsImluZGV4IiwicmV2ZXJzZSIsIkJFSEFWSU9SUyIsInBhcnNlT2Zmc2V0Iiwib2Zmc2V0IiwiYmFzZVBsYWNlbWVudCIsInVzZUhlaWdodCIsImZyYWdtZW50cyIsImZyYWciLCJ0cmltIiwiZGl2aWRlciIsInNlYXJjaCIsInNwbGl0UmVnZXgiLCJvcHMiLCJvcCIsIm1lcmdlV2l0aFByZXZpb3VzIiwicmVkdWNlIiwic3RyIiwidG9WYWx1ZSIsImluZGV4MiIsInNoaWZ0Iiwic2hpZnR2YXJpYXRpb24iLCJfZGF0YSRvZmZzZXRzIiwiaXNWZXJ0aWNhbCIsInNpZGUiLCJzaGlmdE9mZnNldHMiLCJwcmV2ZW50T3ZlcmZsb3ciLCJ0cmFuc2Zvcm1Qcm9wIiwicG9wcGVyU3R5bGVzIiwidHJhbnNmb3JtIiwicHJpb3JpdHkiLCJwcmltYXJ5IiwiZXNjYXBlV2l0aFJlZmVyZW5jZSIsInNlY29uZGFyeSIsIm1pbiIsImtlZXBUb2dldGhlciIsImZsb29yIiwib3BTaWRlIiwiYXJyb3ciLCJfZGF0YSRvZmZzZXRzJGFycm93IiwiYXJyb3dFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsImxlbiIsInNpZGVDYXBpdGFsaXplZCIsInRvTG93ZXJDYXNlIiwiYWx0U2lkZSIsImFycm93RWxlbWVudFNpemUiLCJjZW50ZXIiLCJwb3BwZXJNYXJnaW5TaWRlIiwicG9wcGVyQm9yZGVyU2lkZSIsInNpZGVWYWx1ZSIsInJvdW5kIiwicGxhY2VtZW50T3Bwb3NpdGUiLCJmbGlwT3JkZXIiLCJiZWhhdmlvciIsInN0ZXAiLCJyZWZPZmZzZXRzIiwib3ZlcmxhcHNSZWYiLCJvdmVyZmxvd3NMZWZ0Iiwib3ZlcmZsb3dzUmlnaHQiLCJvdmVyZmxvd3NUb3AiLCJvdmVyZmxvd3NCb3R0b20iLCJvdmVyZmxvd3NCb3VuZGFyaWVzIiwiZmxpcHBlZFZhcmlhdGlvbiIsImZsaXBWYXJpYXRpb25zIiwiZ2V0T3Bwb3NpdGVWYXJpYXRpb24iLCJpbm5lciIsInN1YnRyYWN0TGVuZ3RoIiwiaGlkZSIsImJvdW5kIiwiY29tcHV0ZVN0eWxlIiwibGVnYWN5R3B1QWNjZWxlcmF0aW9uT3B0aW9uIiwiZ3B1QWNjZWxlcmF0aW9uIiwib2Zmc2V0UGFyZW50UmVjdCIsInByZWZpeGVkUHJvcGVydHkiLCJpbnZlcnRUb3AiLCJpbnZlcnRMZWZ0IiwiYXBwbHlTdHlsZSIsInNldEF0dHJpYnV0ZXMiLCJzZXRBdHRyaWJ1dGUiLCJvbkxvYWQiLCJhcHBseVN0eWxlT25Mb2FkIiwibW9kaWZpZXJPcHRpb25zIiwiRGVmYXVsdHMiLCJQb3BwZXIiLCJjbGFzc0NhbGxDaGVjayIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImJpbmQiLCJqcXVlcnkiLCJ1cGRhdGUkJDEiLCJkZXN0cm95JCQxIiwiZW5hYmxlRXZlbnRMaXN0ZW5lcnMkJDEiLCJkaXNhYmxlRXZlbnRMaXN0ZW5lcnMkJDEiLCJVdGlscyIsImciLCJQb3BwZXJVdGlscyIsIl9zZXRBcnJvd05vZGUiLCJfYXJyb3dOb2RlIiwiX2dldE9mZnNldHMiLCJfaXNEYXRhRGlydHkiLCJfdXBkYXRlU3RhdGVNb2RpZmllciIsInNldFN0YXRlIiwiX2dldFBvcHBlclN0eWxlIiwiX3BvcHBlciIsInBvaW50ZXJFdmVudHMiLCJvcGFjaXR5IiwiX2dldFBvcHBlclBsYWNlbWVudCIsIl9nZXRQb3BwZXJIaWRlIiwiX2dldEFycm93U3R5bGUiLCJfdGhpcyRzdGF0ZSRkYXRhJG9mZnMiLCJfaGFuZGxlUG9wcGVyUmVmIiwiX3BvcHBlck5vZGUiLCJfY3JlYXRlUG9wcGVyIiwiX2Rlc3Ryb3lQb3BwZXIiLCJfc2NoZWR1bGVVcGRhdGUiLCJzZXRBcnJvd05vZGUiLCJnZXRBcnJvd1N0eWxlIiwibGFzdFByb3BzIiwiX3RoaXMyIiwidXBkYXRlU3RhdGUiLCJfcHJvcHMyIiwicG9wcGVyU3R5bGUiLCJwb3BwZXJQbGFjZW1lbnQiLCJwb3BwZXJIaWRlIiwicG9wcGVyUHJvcHMiLCJFbGVtZW50IiwiQXJyb3ciLCJhcnJvd1JlZiIsImFycm93U3R5bGUiLCJhcnJvd1Byb3BzIiwiX3R5cGVvZiIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaW5oZXJpdHMiLCJwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiZ2VuZXJhdGVZZWFycyIsInllYXIiLCJub09mWWVhciIsIm1pbkRhdGUiLCJtYXhEYXRlIiwibmV3WWVhciIsImlzSW5SYW5nZSIsIlllYXJEcm9wZG93bk9wdGlvbnMiLCJfUmVhY3QkQ29tcG9uZW50IiwicmVuZGVyT3B0aW9ucyIsInNlbGVjdGVkWWVhciIsInllYXJzTGlzdCIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJvbkNoYW5nZSIsIm1pblllYXIiLCJtYXhZZWFyIiwidW5zaGlmdCIsImluY3JlbWVudFllYXJzIiwiZGVjcmVtZW50WWVhcnMiLCJvbkNhbmNlbCIsInNoaWZ0WWVhcnMiLCJhbW91bnQiLCJ5ZWFycyIsInllYXJEcm9wZG93bkl0ZW1OdW1iZXIiLCJzY3JvbGxhYmxlWWVhckRyb3Bkb3duIiwiZHJvcGRvd25DbGFzcyIsImRheU9mV2Vla0NvZGVzIiwic2V0JDEiLCJkYXRlIiwidG8iLCJzZXQiLCJhZGQiLCJnZXQkMSIsImdldFN0YXJ0T2YiLCJzdGFydE9mIiwibmV3RGF0ZSIsInBvaW50Iiwibm93IiwibWF5YmVGaXhlZFV0Y09mZnNldCIsIm5ld0RhdGVXaXRoT2Zmc2V0IiwidXRjT2Zmc2V0IiwidXRjIiwiY2xvbmVEYXRlIiwiY2xvbmUiLCJpc01vbWVudCIsImZvcm1hdERhdGUiLCJmb3JtYXQiLCJzZXRUaW1lIiwiX3JlZjMiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwic2V0TW9udGgiLCJtb250aCIsInNldFllYXIiLCJnZXRTZWNvbmQiLCJnZXRNaW51dGUiLCJnZXRIb3VyIiwiZ2V0TW9udGgiLCJnZXRZZWFyIiwiZ2V0RGF0ZSIsImdldFN0YXJ0T2ZXZWVrIiwiZ2V0U3RhcnRPZk1vbnRoIiwiYWRkTWludXRlcyIsImFkZERheXMiLCJhZGRXZWVrcyIsImFkZE1vbnRocyIsInN1YnRyYWN0TW9udGhzIiwiaXNCZWZvcmUiLCJkYXRlMSIsImRhdGUyIiwiaXNBZnRlciIsImlzU2FtZVllYXIiLCJpc1NhbWUiLCJpc1NhbWVNb250aCIsImlzU2FtZURheSIsIm1vbWVudDEiLCJtb21lbnQyIiwiaXNEYXlJblJhbmdlIiwiZGF5Iiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsImJlZm9yZSIsImFmdGVyIiwiaXNCZXR3ZWVuIiwibG9jYWxpemVEYXRlIiwibG9jYWxlIiwiaXNEYXlEaXNhYmxlZCIsIl9yZWY0IiwiZXhjbHVkZURhdGVzIiwiaW5jbHVkZURhdGVzIiwiZmlsdGVyRGF0ZSIsImV4Y2x1ZGVEYXRlIiwiaW5jbHVkZURhdGUiLCJpc1RpbWVEaXNhYmxlZCIsInRpbWUiLCJkaXNhYmxlZFRpbWVzIiwibCIsImlzVGltZUluRGlzYWJsZWRSYW5nZSIsIl9yZWY1IiwibWluVGltZSIsIm1heFRpbWUiLCJiYXNlIiwiaG91cnMiLCJtaW51dGVzIiwic2Vjb25kcyIsImJhc2VUaW1lIiwiaXNTYW1lT3JBZnRlciIsImlzU2FtZU9yQmVmb3JlIiwiZ2V0RWZmZWN0aXZlTWluRGF0ZSIsIl9yZWY4IiwiZ2V0RWZmZWN0aXZlTWF4RGF0ZSIsIl9yZWY5IiwiZ2V0SGlnaHRMaWdodERheXNNYXAiLCJoaWdobGlnaHREYXRlcyIsImRlZmF1bHRDbGFzc05hbWUiLCJkYXRlQ2xhc3NlcyIsIk1hcCIsImNsYXNzTmFtZXNBcnIiLCJpbmNsdWRlcyIsImFyck9mTW9tZW50cyIsIl9jbGFzc05hbWVzQXJyIiwidGltZXNUb0luamVjdEFmdGVyIiwic3RhcnRPZkRheSIsImN1cnJlbnRUaW1lIiwiY3VycmVudE11bHRpcGxpZXIiLCJpbnRlcnZhbHMiLCJpbmplY3RlZFRpbWVzIiwidGltZXMiLCJpbmplY3RlZFRpbWUiLCJuZXh0VGltZSIsIldyYXBwZWRZZWFyRHJvcGRvd25PcHRpb25zIiwiWWVhckRyb3Bkb3duIiwiZHJvcGRvd25WaXNpYmxlIiwicmVuZGVyU2VsZWN0T3B0aW9ucyIsIm9uU2VsZWN0Q2hhbmdlIiwicmVuZGVyU2VsZWN0TW9kZSIsInJlbmRlclJlYWRWaWV3IiwidmlzaWJsZSIsInZpc2liaWxpdHkiLCJ0b2dnbGVEcm9wZG93biIsInJlbmRlckRyb3Bkb3duIiwicmVuZGVyU2Nyb2xsTW9kZSIsImFkanVzdERhdGVPbkNoYW5nZSIsImhhbmRsZVllYXJDaGFuZ2UiLCJvblNlbGVjdCIsInNldE9wZW4iLCJyZW5kZXJlZERyb3Bkb3duIiwiZHJvcGRvd25Nb2RlIiwiTW9udGhEcm9wZG93bk9wdGlvbnMiLCJtb250aE5hbWVzIiwiV3JhcHBlZE1vbnRoRHJvcGRvd25PcHRpb25zIiwiTW9udGhEcm9wZG93biIsIk0iLCJsb2NhbGVEYXRhIiwiZ2V0TG9jYWxlRGF0YUZvckxvY2FsZSIsInVzZVNob3J0TW9udGhJbkRyb3Bkb3duIiwiZ2V0TW9udGhTaG9ydEluTG9jYWxlIiwibW9udGhzU2hvcnQiLCJnZXRNb250aEluTG9jYWxlIiwibW9udGhzIiwiZGF0ZUZvcm1hdCIsImdlbmVyYXRlTW9udGhZZWFycyIsImN1cnJEYXRlIiwibGFzdERhdGUiLCJNb250aFllYXJEcm9wZG93bk9wdGlvbnMiLCJtb250aFllYXJzTGlzdCIsIm1vbnRoWWVhciIsIm1vbnRoWWVhclBvaW50IiwidmFsdWVPZiIsImlzU2FtZU1vbnRoWWVhciIsInNjcm9sbGFibGVNb250aFllYXJEcm9wZG93biIsIldyYXBwZWRNb250aFllYXJEcm9wZG93bk9wdGlvbnMiLCJNb250aFllYXJEcm9wZG93biIsInRpbWVwb2ludCIsInllYXJNb250aCIsImNoYW5nZWREYXRlIiwicGFyc2VJbnQiLCJEYXkiLCJoYW5kbGVDbGljayIsImlzRGlzYWJsZWQiLCJoYW5kbGVNb3VzZUVudGVyIiwib25Nb3VzZUVudGVyIiwib3RoZXIiLCJpc0tleWJvYXJkU2VsZWN0ZWQiLCJpbmxpbmUiLCJzZWxlY3RlZCIsInByZVNlbGVjdGlvbiIsImdldEhpZ2hMaWdodGVkQ2xhc3MiLCJfdGhpcyRwcm9wcyIsImRheVN0ciIsIl90aGlzJHByb3BzMiIsImlzSW5TZWxlY3RpbmdSYW5nZSIsIl90aGlzJHByb3BzMyIsInNlbGVjdHNTdGFydCIsInNlbGVjdHNFbmQiLCJzZWxlY3RpbmdEYXRlIiwiaXNTZWxlY3RpbmdSYW5nZVN0YXJ0IiwiX3RoaXMkcHJvcHM0IiwiaXNTZWxlY3RpbmdSYW5nZUVuZCIsIl90aGlzJHByb3BzNSIsImlzUmFuZ2VTdGFydCIsIl90aGlzJHByb3BzNiIsImlzUmFuZ2VFbmQiLCJfdGhpcyRwcm9wczciLCJpc1dlZWtlbmQiLCJ3ZWVrZGF5IiwiZ2V0RGF5IiwiaXNPdXRzaWRlTW9udGgiLCJnZXRDbGFzc05hbWVzIiwiZGF5Q2xhc3NOYW1lIiwiZ2V0RGF5T2ZXZWVrQ29kZSIsImlzb1dlZWtkYXkiLCJyb2xlIiwiV2Vla051bWJlciIsIndlZWtOdW1iZXJDbGFzc2VzIiwid2Vla051bWJlciIsIldlZWsiLCJoYW5kbGVEYXlDbGljayIsIm9uRGF5Q2xpY2siLCJoYW5kbGVEYXlNb3VzZUVudGVyIiwib25EYXlNb3VzZUVudGVyIiwiaGFuZGxlV2Vla0NsaWNrIiwib25XZWVrU2VsZWN0IiwiZm9ybWF0V2Vla051bWJlciIsInN0YXJ0T2ZXZWVrIiwiZ2V0V2VlayIsInJlbmRlckRheXMiLCJkYXlzIiwic2hvd1dlZWtOdW1iZXIiLCJvbkNsaWNrQWN0aW9uIiwiTW9udGgiLCJoYW5kbGVNb3VzZUxlYXZlIiwib25Nb3VzZUxlYXZlIiwiaXNXZWVrSW5Nb250aCIsImVuZE9mV2VlayIsInJlbmRlcldlZWtzIiwid2Vla3MiLCJpc0ZpeGVkSGVpZ2h0IiwiZml4ZWRIZWlnaHQiLCJjdXJyZW50V2Vla1N0YXJ0IiwiYnJlYWtBZnRlck5leHRQdXNoIiwic2hvd1dlZWtOdW1iZXJzIiwiaXNGaXhlZEFuZEZpbmFsV2VlayIsImlzTm9uRml4ZWRBbmRPdXRPZk1vbnRoIiwicGVla05leHRNb250aCIsIlRpbWUiLCJleGNsdWRlVGltZXMiLCJpbmNsdWRlVGltZXMiLCJsaUNsYXNzZXMiLCJjdXJySCIsImN1cnJNIiwiY2xhc3NlcyIsImluamVjdFRpbWVzIiwicmVuZGVyVGltZXMiLCJhY3RpdmVUaW1lIiwiZ2V0U3RhcnRPZkRheSIsIm11bHRpcGxpZXIiLCJzb3J0ZWRJbmplY3RUaW1lcyIsInRpbWVzVG9JbmplY3QiLCJtb250aFJlZiIsInRvZGF5QnV0dG9uIiwidGltZUNhcHRpb24iLCJnZXQkJDEiLCJvblRpbWVDaGFuZ2UiLCJDYWxlbmRhckNvbnRhaW5lciIsIkRST1BET1dOX0ZPQ1VTX0NMQVNTTkFNRVMiLCJDYWxlbmRhciIsImhhbmRsZURyb3Bkb3duRm9jdXMiLCJpc0Ryb3Bkb3duU2VsZWN0IiwiY2xhc3NOYW1lcyIsInRlc3RDbGFzc25hbWUiLCJvbkRyb3Bkb3duRm9jdXMiLCJnZXREYXRlSW5WaWV3Iiwib3BlblRvRGF0ZSIsImluaXRpYWxEYXRlIiwiaW5jcmVhc2VNb250aCIsImhhbmRsZU1vbnRoQ2hhbmdlIiwiZGVjcmVhc2VNb250aCIsImhhbmRsZU1vbnRoTW91c2VMZWF2ZSIsIm9uWWVhckNoYW5nZSIsIm9uTW9udGhDaGFuZ2UiLCJoYW5kbGVNb250aFllYXJDaGFuZ2UiLCJjaGFuZ2VZZWFyIiwiY2hhbmdlTW9udGgiLCJjaGFuZ2VNb250aFllYXIiLCJoZWFkZXIiLCJkYXlOYW1lcyIsIndlZWtMYWJlbCIsImdldExvY2FsZURhdGEiLCJ3ZWVrRGF5TmFtZSIsImZvcm1hdFdlZWtkYXkiLCJmb3JtYXRXZWVrRGF5IiwiZ2V0Rm9ybWF0dGVkV2Vla2RheUluTG9jYWxlIiwiZm9ybWF0RnVuYyIsIndlZWtkYXlzIiwidXNlV2Vla2RheXNTaG9ydCIsImdldFdlZWtkYXlTaG9ydEluTG9jYWxlIiwid2Vla2RheXNTaG9ydCIsImdldFdlZWtkYXlNaW5JbkxvY2FsZSIsIndlZWtkYXlzTWluIiwicmVuZGVyUHJldmlvdXNNb250aEJ1dHRvbiIsImFsbFByZXZEYXlzRGlzYWJsZWQiLCJhbGxEYXlzRGlzYWJsZWRCZWZvcmUiLCJfcmVmNiIsImRhdGVCZWZvcmUiLCJldmVyeSIsImZvcmNlU2hvd01vbnRoTmF2aWdhdGlvbiIsInNob3dEaXNhYmxlZE1vbnRoTmF2aWdhdGlvbiIsInNob3dUaW1lU2VsZWN0T25seSIsImNsaWNrSGFuZGxlciIsInR5cGUiLCJwcmV2aW91c01vbnRoQnV0dG9uTGFiZWwiLCJyZW5kZXJOZXh0TW9udGhCdXR0b24iLCJhbGxOZXh0RGF5c0Rpc2FibGVkIiwiYWxsRGF5c0Rpc2FibGVkQWZ0ZXIiLCJfcmVmNyIsImRhdGVBZnRlciIsInNob3dUaW1lU2VsZWN0IiwibmV4dE1vbnRoQnV0dG9uTGFiZWwiLCJyZW5kZXJDdXJyZW50TW9udGgiLCJzaG93WWVhckRyb3Bkb3duIiwic2hvd01vbnRoRHJvcGRvd24iLCJzaG93TW9udGhZZWFyRHJvcGRvd24iLCJyZW5kZXJZZWFyRHJvcGRvd24iLCJvdmVycmlkZUhpZGUiLCJyZW5kZXJNb250aERyb3Bkb3duIiwicmVuZGVyTW9udGhZZWFyRHJvcGRvd24iLCJyZW5kZXJUb2RheUJ1dHRvbiIsImdldFN0YXJ0T2ZEYXRlIiwicmVuZGVyTW9udGhzIiwibW9udGhMaXN0IiwibW9udGhzU2hvd24iLCJtb250aERhdGUiLCJtb250aEtleSIsImRpdiIsIm1vbnRoQ29udGFpbmVyIiwib25Gb2N1cyIsInJlbmRlclRpbWVTZWN0aW9uIiwidGltZUZvcm1hdCIsInRpbWVJbnRlcnZhbHMiLCJ3aXRoUG9ydGFsIiwiYXNzaWduTW9udGhDb250YWluZXIiLCJwcmV2UHJvcHMiLCJDb250YWluZXIiLCJjb250YWluZXIiLCJwb3BwZXJQbGFjZW1lbnRQb3NpdGlvbnMiLCJQb3BwZXJDb21wb25lbnQiLCJoaWRlUG9wcGVyIiwicG9wcGVyQ29tcG9uZW50IiwicG9wcGVyTW9kaWZpZXJzIiwidGFyZ2V0Q29tcG9uZW50IiwicG9wcGVyQ29udGFpbmVyIiwiV3JhcHBlZENhbGVuZGFyIiwiRGF0ZVBpY2tlciIsImdldFByZVNlbGVjdGlvbiIsImNhbGNJbml0aWFsU3RhdGUiLCJkZWZhdWx0UHJlU2VsZWN0aW9uIiwiYm91bmRlZFByZVNlbGVjdGlvbiIsIm9wZW4iLCJzdGFydE9wZW4iLCJwcmV2ZW50Rm9jdXMiLCJmb2N1c2VkIiwiY2xlYXJQcmV2ZW50Rm9jdXNUaW1lb3V0IiwicHJldmVudEZvY3VzVGltZW91dCIsImNsZWFyVGltZW91dCIsInNldEZvY3VzIiwiaW5wdXQiLCJmb2N1cyIsImxhc3RQcmVTZWxlY3RDaGFuZ2UiLCJQUkVTRUxFQ1RfQ0hBTkdFX1ZJQV9OQVZJR0FURSIsImhhbmRsZUZvY3VzIiwicHJldmVudE9wZW5PbkZvY3VzIiwicmVhZE9ubHkiLCJjYW5jZWxGb2N1c0lucHV0IiwiaW5wdXRGb2N1c1RpbWVvdXQiLCJkZWZlckZvY3VzSW5wdXQiLCJoYW5kbGVCbHVyIiwib25CbHVyIiwiaGFuZGxlQ2FsZW5kYXJDbGlja091dHNpZGUiLCJoYW5kbGVDaGFuZ2UiLCJhbGxBcmdzIiwib25DaGFuZ2VSYXciLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJpbnB1dFZhbHVlIiwiUFJFU0VMRUNUX0NIQU5HRV9WSUFfSU5QVVQiLCJwYXJzZURhdGUiLCJtIiwiaXNWYWxpZCIsInNldFNlbGVjdGVkIiwiaGFuZGxlU2VsZWN0Iiwic2hvdWxkQ2xvc2VPblNlbGVjdCIsInNldFByZVNlbGVjdGlvbiIsImtlZXBJbnB1dCIsImFsbG93U2FtZURheSIsImhhbmRsZVRpbWVDaGFuZ2UiLCJvbklucHV0Q2xpY2siLCJkaXNhYmxlZCIsIm9uSW5wdXRLZXlEb3duIiwib25LZXlEb3duIiwiZXZlbnRLZXkiLCJjb3B5IiwiaXNEYXRlIiwiZGlzYWJsZWRLZXlib2FyZE5hdmlnYXRpb24iLCJuZXdTZWxlY3Rpb24iLCJzdWJ0cmFjdERheXMiLCJzdWJ0cmFjdFdlZWtzIiwic3VidHJhY3RZZWFycyIsImFkZFllYXJzIiwib25DbGVhckNsaWNrIiwiY2xlYXIiLCJyZW5kZXJDYWxlbmRhciIsImVsZW0iLCJjYWxlbmRhciIsImRhdGVGb3JtYXRDYWxlbmRhciIsImNhbGVuZGFyQ2xhc3NOYW1lIiwiY2FsZW5kYXJDb250YWluZXIiLCJyZW5kZXJEYXRlSW5wdXQiLCJfY2xhc3NuYW1lcyIsIl9SZWFjdCRjbG9uZUVsZW1lbnQiLCJjdXN0b21JbnB1dCIsImN1c3RvbUlucHV0UmVmIiwic2FmZURhdGVGb3JtYXQiLCJpc0FycmF5IiwiYXV0b0ZvY3VzIiwicGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlclRleHQiLCJhdXRvQ29tcGxldGUiLCJ0aXRsZSIsInJlcXVpcmVkIiwidGFiSW5kZXgiLCJyZW5kZXJDbGVhckJ1dHRvbiIsImlzQ2xlYXJhYmxlIiwiY2xlYXJCdXR0b25UaXRsZSIsIm9uQ2xpY2tPdXRzaWRlJCQxIiwicHJldlN0YXRlIiwiaGFzUHJlU2VsZWN0aW9uQ2hhbmdlZCIsImhhc1NlbGVjdGlvbkNoYW5nZWQiLCJlcXVhbHMiLCJwb3BwZXJDbGFzc05hbWUiLCJoYXNPd24iLCJhcmciLCJhcmdUeXBlIiwic3R5bGVUYWdUcmFuc2Zvcm0iLCJpbnNlcnQiLCJkb21BUEkiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJsb2NhbHMiLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsIm1vZHVsZXNUb0RvbSIsImlkQ291bnRNYXAiLCJpZGVudGlmaWVycyIsImNvdW50IiwiaW5kZXhCeUlkZW50aWZpZXIiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZEVsZW1lbnRTdHlsZSIsImJ5SW5kZXgiLCJzcGxpY2UiLCJhcGkiLCJuZXdPYmoiLCJyZW1vdmUiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2kiLCJfaW5kZXgiLCJtZW1vIiwiaW5zZXJ0QnlTZWxlY3RvciIsImdldFRhcmdldCIsInN0eWxlVGFyZ2V0IiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJoZWFkIiwiYXBwZW5kQ2hpbGQiLCJzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInJlbW92ZVN0eWxlRWxlbWVudCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiZmlyc3RDaGlsZCIsImNyZWF0ZVRleHROb2RlIl0sInNvdXJjZVJvb3QiOiIifQ==